home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / EASE_35C.LZH / EASE_35 / EASE.35 / CHK_OFLS.AN_ / CHK_OFLS
Text File  |  1994-02-10  |  10KB  |  202 lines

  1. CHK_OFLS: Ein Datenschutz für GEMDOS-umgehende Programme 
  2. ========================================================
  3.  
  4. Version 1.03 
  5.                                           von Hans-Jürgen Richstein
  6.                                           (c) 1991/92 KAKTUS GbR
  7.  
  8.  
  9. Für Programme, die unter Umgehung des Atari-Dateisystems GEMDOS auf 
  10. Massenspeicher zugreifen (Diskmonitore, Schnellkopierer etc.) entsteht ein 
  11. grundsätzliches Problem: Wenn auf dem angesprochenen Laufwerk zuvor 
  12. Dateien vom GEMDOS geöffnet waren oder sich die beiden Parteien während des 
  13. Betriebes in die Quere kommen, kommt es fast unweigerlich zu 
  14. Datenverlusten. Beide sind darauf angewiesen, das Dateisystem zur gleichen 
  15. Zeit für sich alleine zu nutzen. Leider gab es bislang keinen legalen Weg, 
  16. beide zu friedlicher Koexistenz zu bewegen.
  17.  
  18. Das Programm 'CHK_OFLS.PRG' (CHecK Open FiLeS) soll hier in Zukunft Abhilfe 
  19. schaffen. Es entstand im Rahmen der Weiterentwicklung des KOBOLD-
  20. Hochleistungsdateikopierers und wird einfach in den AUTO-Ordner kopiert. 
  21. Fortan wird z.B. der KOBOLD (ab Version 1.07) nur noch auf solchen 
  22. Laufwerken seinen Dienst verrichten, auf denen zu diesem Zeitpunkt keine 
  23. Dateien geöffnet sind und verloren gehen könnten. (Sie können ihn dann nach 
  24. wie vor auf diesem Laufwerk im GEMDOS-Modus benutzen!), und umgekehrt lä₧t 
  25. das GEMDOS seine 'Finger' von solchen Partitionen, auf denen z.B. der 
  26. KOBOLD gerade unter Umgehung des GEMDOS pfeilschnell kopiert.
  27.  
  28. Weiterhin wird ab dieser Version (V 1.02) das neue sog. XHDI-Protokoll 
  29. genutzt, um Wechselplatten zu verriegeln, solange Dateien auf mindestens 
  30. einer Partition des eingelegten Mediums geöffnet sind. Dies verhindert 
  31. Datenverluste nach ungewolltem Auswurf der Wechselplatte und macht den 
  32. Einsatz von CHK_OFLS auch dann sinnvoll, wenn man ansonsten kein 
  33. ausdrücklich damit zusammenarbeitendes Programm nutzt.
  34.  
  35. Damit diese Funktion wirksam wird, benötigen Sie einen XHDI-fähigen 
  36. Festplattentreiber, z.B. entsprechend neue Versionen des HUSHI, Diskus, 
  37. CBHD usw.
  38.  
  39. Wenn Sie MultiTos oder MiNT ab der Version 0.94 einsetzen, hat die 
  40. Nutzung von CHK_OFLS keinen Sinn, da hier die Vergabe von Dateizeigern 
  41. anders funktioniert. Damit es nicht zu überflüssigen Blockierungen von 
  42. Laufwerken kommt, sollten Sie es hier nicht einsetzen. Es wird auch nicht 
  43. benötigt, da unter diesen Betriebssystemen Funktionen zum Verriegeln von 
  44. Laufwerken bereits vorhanden sind.
  45.  
  46. Die Version 1.03 enthält nun ein 'Workaraound' um eine Eigenheit der 
  47. Flexdisk, weswegen diese nicht zusammen mit der V 1.02 funktionierte.
  48.  
  49. Dieses Programm kann in dem Ordner CHK_OFLS mit den darin enthaltenen und 
  50. unveränderten Dateien...
  51.  
  52.    CHK_OFLS.PRG
  53.    CHK_OFLS.ANL
  54.    OFLSSHOW.ACC
  55.    OPN_FILE.ACC
  56.  
  57. ...beliebig weitergegeben werden und insbesondere auch kostenlos in 
  58. dieser Form beliebigen kommerziellen Produkten beigelegt werden. Weiter 
  59. unten erfolgt eine genaue Beschreibung der von einem GEMDOS-umgehenden 
  60. Programm zu unternehmenden Schritte, um mit CHK_OFLS zu kooperieren. Wenn 
  61. Sie also selbst ein Tool schreiben, da₧ über das BIOS (oder auf noch 
  62. niedrigerer Ebene) auf einen Massenspeicher zugreift, dann bauen Sie 
  63. einfach die unten beschriebene Unterstützung ein und legen Sie diesen 
  64. Ordner dazu.
  65.  
  66.  
  67. ************************************************************************
  68.  
  69.  
  70. CHK_OFLS: Hinweise für Programmierer 
  71. ====================================
  72.  
  73. CHK_OFLS hängt sich bei der Installation in den GEMDOS- und den BIOS-
  74. Trap. Es zählt die geöffneten Dateien und protokolliert, wann sie über 
  75. Fclose() freiwillig oder per Pterm(), Pterm0(), Ptermres() oder nach einem 
  76. echten oder erzwungenen Medienwechsel zwangsweise wieder geschlossen 
  77. werden. Über einen 'Cookie' namens 'OFLS' kann Ihr Programm die Existenz 
  78. von CHK_OFLS ermitteln und erhält als Cookie-Value eine Zeiger auf folgende 
  79. Struktur (hier in C):
  80.  
  81.    struct ofls_cookie
  82.    {
  83.       long  product;             /* 'OFLS' (0x4F464C53)    */
  84.       unsigned short version;    /* z.B. 0x0103 für V 1.03 */
  85.       signed short drives[32];   /* Infos für 32 Laufwerke */
  86.       signed short reserved[32]; /* Für evt. Erweiterungen */
  87.    };
  88.  
  89. Nach den vier Buchstaben 'OFLS' folgt also eine Versionsnummer und dann die 
  90. entscheidenden 32 Bytepaare, in denen für jedes Laufwerk (drives[0] = A: 
  91. etc...) die Anzahl der zu diesem Zeitpunkt darauf geöffneten Dateien 
  92. ausgelesen werden kann. Solange hier also eine 0 steht, können Sie 
  93. bedenkenlos über das BIOS an dieses Laufwerk herangehen.
  94.  
  95. Um nun während Ihrer Zugriffe zu verhindern, da₧ das GEMDOS auf dieses 
  96. Laufwerk zugreift, schreiben Sie einfach in das entsprechende Wort den Wert 
  97. -1 (0xFFFF, Wortlänge) hinein (Andere Werte werden ignoriert und bei der 
  98. nächsten Gelegenheit wieder auf 0 gesetzt). Fortan werden folgende GEMDOS-
  99. Zugriffe darauf mit einem EACCDN-Fehler (ACCESS DENIED, -36) quittiert:
  100.  
  101.     Dcreate(), Ddelete(), Fcreate(), Fopen(), Fdelete(), Fattrib(),
  102.     Fsfirst(), Frename()
  103.  
  104. Dies passiert solange, bis Sie wieder eine 0 in den entsprechenden Eintrag 
  105. schreiben, was Sie deshalb natürlich nicht vergessen dürfen! Wenn Sie 
  106. selbst dort bereits einen negativen Wert vorfinden, so dürfen Sie ebenfalls 
  107. nicht auf dem entsprechenden Laufwerk operieren (au₧er eventuell für 
  108. Lesezugriffe), da ein anderes Programm offensichtlich ebenfalls gerade die 
  109. Daten modifiziert und Ihnen zuvor gekommen ist, die Zugriffsrechte zu 
  110. ergattern.
  111.  
  112. Beachten Sie, da₧ Sie den Test auf Zugriffsmöglichkeit via BIOS noch _vor_ 
  113. einem Getbpb()-Aufruf durchführen müssen. Danach haben Sie dem GEMDOS schon 
  114. eine eventuell aufgelaufene Medienwechsel-Meldung vor der Nase 
  115. weggeschnappt und kommen um ein 'Force-Media-Change' nicht mehr herum.
  116.  
  117.  
  118. Hilfsprogramme 
  119. ==============
  120.  
  121. Während der Programmentwicklung mögen Ihnen die Tool OFLSSHOW.ACC und 
  122. OPN_FILE.ACC (oder auch jeweils auch als *.PRG nutzbar, dann aber weniger 
  123. nützlich...) hilfreich sein.
  124.  
  125.  
  126. OFLSSHOW.ACC:
  127. -------------
  128. ...liest den Cookie aus und zeigt Ihnen für die Laufwerke A: bis Z: an, 
  129. wieviele Dateien in diesem Moment darauf geöffnet sind (es zeigt nichts - 
  130. also nicht etwa '0' - an, wenn keine geöffnet sind, weil mir dies 
  131. übersichtlicher erschien!). Weiterhin ist das gerade aktuelle Laufwerk 
  132. (Default-Drive des aktuellen Prozesses) invertiert und es wird die Produkt-
  133. Kennung und Versionsnummer aus der OFLS-Struktur angezeigt. Bei Änderungen 
  134. wird das Anzeigefeld automatisch bis zu zweimal pro Sekunde erneuert, so 
  135. da₧ Sie Veränderungen auch beobachten können, wenn OFLSSHOW selbst gerade 
  136. nicht das oberste Fenster ist.
  137.  
  138. Wenn Ihr Programm (oder ein anderes CHK_OFLS-modifiziertes Tool) das 
  139. GEMDOS auf einer Partition sperrt, so wird dies durch eine unterbrochene 
  140. Linie ('-X-') angezeigt. Auf diesem Laufwerk sind nun keine der o.g. GEMDOS-
  141. Zugriffe möglich. Steht ein negativer Wert kleiner -1 in einem Eintrag, 
  142. wird dies durch '???' gekennzeichnet.
  143.  
  144.  
  145. OPN_FILE.ACC
  146. ------------
  147. ...dient lediglich dazu, offene Dateien zu produzieren. Dies ist nützlich, 
  148. um beim eigenen Programm das Zusammenspiel mit CHK_OFLS zu testen, da es 
  149. ansonsten in der Regel schwierig ist, ein Programm mit offenen Dateien auf 
  150. dem gewünschten Laufwerk zum richtigen Zeitpunkt ausfindig zu machen.
  151.  
  152. Man wählt zunächst das gewünschte Laufwerk an und kann durch Klick auf 
  153. 'Datei öffnen' eine oder durch wiederholtes Klicken mehrere Dateien öffnen. 
  154. Dabei lä₧t sich der Modus vorwählen, in dem die Datei geöffnet wird. 
  155. Zunächst wird sie immer per 'Fcreate' angelegt, bei 'Read' oder 'Write' 
  156. jedoch gleich wieder geschlossen und im entsprechenden Modus erneut 
  157. geöffnet.
  158.  
  159. Die Anzahl der offenen Dateien wird unterhalb des Laufwerksbuchstaben 
  160. mitprotokolliert. Die angelegten Dateien hei₧en 'TEST.XXX', wobei XXX die 
  161. laufende Nummer der dort geöffneten Files ist. 'Schlie₧en und löschen' 
  162. macht eben dieses in umgekehrter Reihenfolge auf dem gerade angewählten 
  163. Laufwerk.
  164.  
  165. Wenn man aus einem Programm heraus Dateien öffnet, diese nicht schlie₧t 
  166. aber das Programm verlä₧t, so werden die Dateien zwangsweise vom 
  167. Betriebssystem geschlossen. Während CHK_OFLS dies durchaus richtig 
  168. mitprotokolliert, ist für OPN_FILE die Arbeit zuende, daher stehen die 
  169. angelegten 'TEST.XXX'-Dateien noch auf dem entsprechenden Laufwerk. Diese 
  170. müssen dann noch von Hand wieder gelöscht werden.
  171.  
  172. Wenn man durch einen forcierten Medienwechsel (z.B. 'ESC' im Desktop bei 
  173. Anzeige des Laufwerks mit den just offenen Dateien) die Dateien zwangsweise 
  174. schlie₧t, so bemerkt dies OPN_FILE nicht (im ggs. zu CHK_OFLS). Per 
  175. 'Schlie₧en und löschen' wird die als offen angezeigte Anzahl von Dateien 
  176. aber dennoch wieder entfernt, lediglich die Freigabe der Dateihandle 
  177. mi₧lingt, wovon Sie aber nichts bemerken.
  178.  
  179.  
  180.  
  181. 'Technische' Daten:
  182. ===================
  183.  
  184. Trap#1 (GEMDOS) XBRA: 'OFLS'
  185. TRAP#13 (BIOS) XBRA: 'OFLS'
  186. Cookie-Kennung: 'OFLS'
  187.  
  188. XBRA für Cookie-Reset-Routine bei TOS <= 1.04: 'OFLS'
  189.  
  190. CHK_OFLS legt - falls erforderlich (TOS <= 1.04 ohne bereits inst. 
  191. Cookies) - einen neuen Cookie-Jar inkl. Reset-Routine an bzw. vergrö₧ert 
  192. ihn nötigenfalls um 20 neue Cookies.
  193.  
  194. CHK_OFLS ist ab Version 1.02 vollständig reentrant, so da₧ auch dem Einsatz 
  195. unter MiNT nichts im Wege steht. Für MultiTos ist der Einsatz nicht 
  196. sinnvoll, da die Dateihandles nicht mehr global, sondern prozessweise 
  197. vergeben werden. In MultiTos und ab MiNT 0.94 hat man aber ohnehin die 
  198. Möglichkeit, die Betriebssystemroutine 'Dlock()' zum verriegeln eines 
  199. Laufwerkes zu benutzen.
  200.  
  201.  
  202.