home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Vectronix 2
/
VECTRONIX2.iso
/
FILES_07
/
EASE4.LZH
/
CHK_OFLS.AN_
/
CHK_OFLS
Wrap
Text File
|
1994-02-10
|
10KB
|
202 lines
CHK_OFLS: Ein Datenschutz für GEMDOS-umgehende Programme
========================================================
Version 1.03
von Hans-Jürgen Richstein
(c) 1991/92 KAKTUS GbR
Für Programme, die unter Umgehung des Atari-Dateisystems GEMDOS auf
Massenspeicher zugreifen (Diskmonitore, Schnellkopierer etc.) entsteht ein
grundsätzliches Problem: Wenn auf dem angesprochenen Laufwerk zuvor
Dateien vom GEMDOS geöffnet waren oder sich die beiden Parteien während des
Betriebes in die Quere kommen, kommt es fast unweigerlich zu
Datenverlusten. Beide sind darauf angewiesen, das Dateisystem zur gleichen
Zeit für sich alleine zu nutzen. Leider gab es bislang keinen legalen Weg,
beide zu friedlicher Koexistenz zu bewegen.
Das Programm 'CHK_OFLS.PRG' (CHecK Open FiLeS) soll hier in Zukunft Abhilfe
schaffen. Es entstand im Rahmen der Weiterentwicklung des KOBOLD-
Hochleistungsdateikopierers und wird einfach in den AUTO-Ordner kopiert.
Fortan wird z.B. der KOBOLD (ab Version 1.07) nur noch auf solchen
Laufwerken seinen Dienst verrichten, auf denen zu diesem Zeitpunkt keine
Dateien geöffnet sind und verloren gehen könnten. (Sie können ihn dann nach
wie vor auf diesem Laufwerk im GEMDOS-Modus benutzen!), und umgekehrt lä₧t
das GEMDOS seine 'Finger' von solchen Partitionen, auf denen z.B. der
KOBOLD gerade unter Umgehung des GEMDOS pfeilschnell kopiert.
Weiterhin wird ab dieser Version (V 1.02) das neue sog. XHDI-Protokoll
genutzt, um Wechselplatten zu verriegeln, solange Dateien auf mindestens
einer Partition des eingelegten Mediums geöffnet sind. Dies verhindert
Datenverluste nach ungewolltem Auswurf der Wechselplatte und macht den
Einsatz von CHK_OFLS auch dann sinnvoll, wenn man ansonsten kein
ausdrücklich damit zusammenarbeitendes Programm nutzt.
Damit diese Funktion wirksam wird, benötigen Sie einen XHDI-fähigen
Festplattentreiber, z.B. entsprechend neue Versionen des HUSHI, Diskus,
CBHD usw.
Wenn Sie MultiTos oder MiNT ab der Version 0.94 einsetzen, hat die
Nutzung von CHK_OFLS keinen Sinn, da hier die Vergabe von Dateizeigern
anders funktioniert. Damit es nicht zu überflüssigen Blockierungen von
Laufwerken kommt, sollten Sie es hier nicht einsetzen. Es wird auch nicht
benötigt, da unter diesen Betriebssystemen Funktionen zum Verriegeln von
Laufwerken bereits vorhanden sind.
Die Version 1.03 enthält nun ein 'Workaraound' um eine Eigenheit der
Flexdisk, weswegen diese nicht zusammen mit der V 1.02 funktionierte.
Dieses Programm kann in dem Ordner CHK_OFLS mit den darin enthaltenen und
unveränderten Dateien...
CHK_OFLS.PRG
CHK_OFLS.ANL
OFLSSHOW.ACC
OPN_FILE.ACC
...beliebig weitergegeben werden und insbesondere auch kostenlos in
dieser Form beliebigen kommerziellen Produkten beigelegt werden. Weiter
unten erfolgt eine genaue Beschreibung der von einem GEMDOS-umgehenden
Programm zu unternehmenden Schritte, um mit CHK_OFLS zu kooperieren. Wenn
Sie also selbst ein Tool schreiben, da₧ über das BIOS (oder auf noch
niedrigerer Ebene) auf einen Massenspeicher zugreift, dann bauen Sie
einfach die unten beschriebene Unterstützung ein und legen Sie diesen
Ordner dazu.
************************************************************************
CHK_OFLS: Hinweise für Programmierer
====================================
CHK_OFLS hängt sich bei der Installation in den GEMDOS- und den BIOS-
Trap. Es zählt die geöffneten Dateien und protokolliert, wann sie über
Fclose() freiwillig oder per Pterm(), Pterm0(), Ptermres() oder nach einem
echten oder erzwungenen Medienwechsel zwangsweise wieder geschlossen
werden. Über einen 'Cookie' namens 'OFLS' kann Ihr Programm die Existenz
von CHK_OFLS ermitteln und erhält als Cookie-Value eine Zeiger auf folgende
Struktur (hier in C):
struct ofls_cookie
{
long product; /* 'OFLS' (0x4F464C53) */
unsigned short version; /* z.B. 0x0103 für V 1.03 */
signed short drives[32]; /* Infos für 32 Laufwerke */
signed short reserved[32]; /* Für evt. Erweiterungen */
};
Nach den vier Buchstaben 'OFLS' folgt also eine Versionsnummer und dann die
entscheidenden 32 Bytepaare, in denen für jedes Laufwerk (drives[0] = A:
etc...) die Anzahl der zu diesem Zeitpunkt darauf geöffneten Dateien
ausgelesen werden kann. Solange hier also eine 0 steht, können Sie
bedenkenlos über das BIOS an dieses Laufwerk herangehen.
Um nun während Ihrer Zugriffe zu verhindern, da₧ das GEMDOS auf dieses
Laufwerk zugreift, schreiben Sie einfach in das entsprechende Wort den Wert
-1 (0xFFFF, Wortlänge) hinein (Andere Werte werden ignoriert und bei der
nächsten Gelegenheit wieder auf 0 gesetzt). Fortan werden folgende GEMDOS-
Zugriffe darauf mit einem EACCDN-Fehler (ACCESS DENIED, -36) quittiert:
Dcreate(), Ddelete(), Fcreate(), Fopen(), Fdelete(), Fattrib(),
Fsfirst(), Frename()
Dies passiert solange, bis Sie wieder eine 0 in den entsprechenden Eintrag
schreiben, was Sie deshalb natürlich nicht vergessen dürfen! Wenn Sie
selbst dort bereits einen negativen Wert vorfinden, so dürfen Sie ebenfalls
nicht auf dem entsprechenden Laufwerk operieren (au₧er eventuell für
Lesezugriffe), da ein anderes Programm offensichtlich ebenfalls gerade die
Daten modifiziert und Ihnen zuvor gekommen ist, die Zugriffsrechte zu
ergattern.
Beachten Sie, da₧ Sie den Test auf Zugriffsmöglichkeit via BIOS noch _vor_
einem Getbpb()-Aufruf durchführen müssen. Danach haben Sie dem GEMDOS schon
eine eventuell aufgelaufene Medienwechsel-Meldung vor der Nase
weggeschnappt und kommen um ein 'Force-Media-Change' nicht mehr herum.
Hilfsprogramme
==============
Während der Programmentwicklung mögen Ihnen die Tool OFLSSHOW.ACC und
OPN_FILE.ACC (oder auch jeweils auch als *.PRG nutzbar, dann aber weniger
nützlich...) hilfreich sein.
OFLSSHOW.ACC:
-------------
...liest den Cookie aus und zeigt Ihnen für die Laufwerke A: bis Z: an,
wieviele Dateien in diesem Moment darauf geöffnet sind (es zeigt nichts -
also nicht etwa '0' - an, wenn keine geöffnet sind, weil mir dies
übersichtlicher erschien!). Weiterhin ist das gerade aktuelle Laufwerk
(Default-Drive des aktuellen Prozesses) invertiert und es wird die Produkt-
Kennung und Versionsnummer aus der OFLS-Struktur angezeigt. Bei Änderungen
wird das Anzeigefeld automatisch bis zu zweimal pro Sekunde erneuert, so
da₧ Sie Veränderungen auch beobachten können, wenn OFLSSHOW selbst gerade
nicht das oberste Fenster ist.
Wenn Ihr Programm (oder ein anderes CHK_OFLS-modifiziertes Tool) das
GEMDOS auf einer Partition sperrt, so wird dies durch eine unterbrochene
Linie ('-X-') angezeigt. Auf diesem Laufwerk sind nun keine der o.g. GEMDOS-
Zugriffe möglich. Steht ein negativer Wert kleiner -1 in einem Eintrag,
wird dies durch '???' gekennzeichnet.
OPN_FILE.ACC
------------
...dient lediglich dazu, offene Dateien zu produzieren. Dies ist nützlich,
um beim eigenen Programm das Zusammenspiel mit CHK_OFLS zu testen, da es
ansonsten in der Regel schwierig ist, ein Programm mit offenen Dateien auf
dem gewünschten Laufwerk zum richtigen Zeitpunkt ausfindig zu machen.
Man wählt zunächst das gewünschte Laufwerk an und kann durch Klick auf
'Datei öffnen' eine oder durch wiederholtes Klicken mehrere Dateien öffnen.
Dabei lä₧t sich der Modus vorwählen, in dem die Datei geöffnet wird.
Zunächst wird sie immer per 'Fcreate' angelegt, bei 'Read' oder 'Write'
jedoch gleich wieder geschlossen und im entsprechenden Modus erneut
geöffnet.
Die Anzahl der offenen Dateien wird unterhalb des Laufwerksbuchstaben
mitprotokolliert. Die angelegten Dateien hei₧en 'TEST.XXX', wobei XXX die
laufende Nummer der dort geöffneten Files ist. 'Schlie₧en und löschen'
macht eben dieses in umgekehrter Reihenfolge auf dem gerade angewählten
Laufwerk.
Wenn man aus einem Programm heraus Dateien öffnet, diese nicht schlie₧t
aber das Programm verlä₧t, so werden die Dateien zwangsweise vom
Betriebssystem geschlossen. Während CHK_OFLS dies durchaus richtig
mitprotokolliert, ist für OPN_FILE die Arbeit zuende, daher stehen die
angelegten 'TEST.XXX'-Dateien noch auf dem entsprechenden Laufwerk. Diese
müssen dann noch von Hand wieder gelöscht werden.
Wenn man durch einen forcierten Medienwechsel (z.B. 'ESC' im Desktop bei
Anzeige des Laufwerks mit den just offenen Dateien) die Dateien zwangsweise
schlie₧t, so bemerkt dies OPN_FILE nicht (im ggs. zu CHK_OFLS). Per
'Schlie₧en und löschen' wird die als offen angezeigte Anzahl von Dateien
aber dennoch wieder entfernt, lediglich die Freigabe der Dateihandle
mi₧lingt, wovon Sie aber nichts bemerken.
'Technische' Daten:
===================
Trap#1 (GEMDOS) XBRA: 'OFLS'
TRAP#13 (BIOS) XBRA: 'OFLS'
Cookie-Kennung: 'OFLS'
XBRA für Cookie-Reset-Routine bei TOS <= 1.04: 'OFLS'
CHK_OFLS legt - falls erforderlich (TOS <= 1.04 ohne bereits inst.
Cookies) - einen neuen Cookie-Jar inkl. Reset-Routine an bzw. vergrö₧ert
ihn nötigenfalls um 20 neue Cookies.
CHK_OFLS ist ab Version 1.02 vollständig reentrant, so da₧ auch dem Einsatz
unter MiNT nichts im Wege steht. Für MultiTos ist der Einsatz nicht
sinnvoll, da die Dateihandles nicht mehr global, sondern prozessweise
vergeben werden. In MultiTos und ab MiNT 0.94 hat man aber ohnehin die
Möglichkeit, die Betriebssystemroutine 'Dlock()' zum verriegeln eines
Laufwerkes zu benutzen.