Das Geheimnis des GEMDOS Teil II
In dieser Folge geht es um die Fehlermeldungen, die die TOS-Systemfunktionen liefern, sowie um die Möglichkeiten des TOS, diese anzuzeigen. Dabei machen wir sogar Abstecher in das BIOS und das AES.
Ich hoffe, daĂ Sie nach LektĂŒre dieses Artikels ein wenig mehr mit den Fehlercodes anfangen können, die Ihnen GEMDOS beim Programmieren bisher immer fleiĂig geliefert hat.
BIOS-Fehlermeldungen
Viele BIOS-Funktionen geben Fehlermeldungen zurĂŒck, die AufschluĂ ĂŒber die Art des aufgetretenen Fehlers geben sollen. In den Atari-Doku menta-tionen haben sie symbolische Namen bekommen, die man sich besser merken kann als die nackten Zahlenwerte, weswegen ich diese Bezeichnungen auch in dieser Serie benutzen werde (Tab.l). Man kann sich diese Konstanten z.B. in eine Include-Datei schreiben und zur Fehlerbehandlung in eigenen Programmen verwenden. Atari hat die Werte -1 bis -31 fĂŒr BIOS-Fehlercodes reserviert.
Da es sich dabei hauptsĂ€chlich um Fehler beim Disketten-Zu-griff handelt, machen wir einen kleinen Ausflug in den Disk-Treiber des BIOS. Das Wissen um die Bedeutung und Anwendung der erwĂ€hnten BIOS-Funktionen wird vorausgesetzt und findet sich in diversen BĂŒchern. Die Disketten-Funktionen des BIOS gliedern sich in zwei Ebenen. Zur unteren Ebene gehören die Spur-/ Sektor-orientierten Funktionen âFloprdâ, âFlopwrâ, âFlopfmf und âFlopverâ des XBIOS. Von diesen Funktionen ist bei der ErklĂ€rung der Fehlermeldungen die Rede, wenn von Lesen, Schreiben, Formatieren und Verifizieren gesprochen wird.
Auf der oberen Ebene befinden sich die BIOS-Funktionen âR-wabsâ, âMediachâ und âGetbpbâ, die nicht nur fĂŒr Diskettenlaufwerke vorgesehen sind, sondern auch fĂŒr Harddisks und RAM-Disks zustĂ€ndig sind. Bei âGetbpbâ ist zu beachten, daĂ alle auftretenden Fehler nur durch OL gemeldet werden, also keine weitere Differenzierung der Fehlerursache mehr erfolgt.
Fehler können nun auf beiden Ebenen auftreten, wobei i.a. jede Ebene ihre eigenen Fehlermeldungen hat. Einige Fehlercodes der unteren Ebene resultieren direkt aus den Fehlermeldungen des FDC (Floppy Disk Controller), deren ErlĂ€uterung sich im âFloppy-Kursâ (ST-Computer 11/87) findet.
In einigen FĂ€llen wurde die eindeutige Benutzung der Fehlercodes nicht ganz durchgehalten, d.h., gleiche Fehler erzeugen unterschiedliche Meldungen.
ERROR
Zum einen zeigt diese Meldung einen DMA-Fehler beim Lesen oder Formatieren (nicht beim Verifizieren) an. Achtung: Beim Schreiben wird ein DMA-Fehler ĂŒberhaupt nicht erkannt!
AuĂerdem gibt er einen Timeout beim Schreiben oder Formatieren (nicht beim Lesen oder Verifizieren) an, d.h. wenn ein Kommando des Floppy Disk Controllers (FDC) nicht innerhalb einer gewissen Zeitspanne ausgefĂŒhrt werden konnte.
EDRVNR
Hiermit wird ein Timeout beim Lesen angezeigt. Bei einem âRwabsâ ohne angeschlossene Floppy tritt dieser Fehler ebenfalls auf. Aber ganz ohne Floppy arbeitet es sich ja sowieso recht schlecht.
E-CRC
Hierdurch wird auf einen PrĂŒf-summen-Fehler aufmerksam gemacht, was auf einen Lesefehler hindeutet. Die Meldung korrespondiert mit dem CRC-Bit des FDC-Statusregisters.
Dies gilt jedoch nur fĂŒr das Blit-ter-TOS. Beim alten TOS wird der CRC-Fehler zwar korrekt erkannt, aber stattdessen eine andere Fehlermeldung zurĂŒckgegeben (EREADF bzw. EWRITF bei Lese/Verifizier bzw. Schreib/Formatier-Operationen).
E-SEEK
Wenn das BIOS eine Spur auch nach mehreren Versuchen nicht ansteuern kann, bricht es die Disketten-Operation hiermit ab. Vermutlich ist die Diskette auf dieser Spur nicht formatiert oder defekt.
ESECNF
Wenn der FDC einen gesuchten Sektor auf der Diskette nicht finden kann, wird diese Meldung erzeugt. Der Fehler entspricht dem Record-Not-Found-Bit des FDC-Statusregisters. Entweder ist die Diskette nicht ausreichend formatiert, oder sie ist beschÀdigt.
EPAPER
Das soll anzeigen, daĂ der Drucker nicht betriebsbereit ist, weil kein Papier eingelegt ist. Da der Atari hardwaremĂ€Ăig das entsprechende Signal auf dem Centronics-Port gar nicht abfragen kann, ist diese Fehlermeldung wohl - wenn ĂŒberhaupt - eher zukĂŒnftigen STs Vorbehalten.
EWRITF
Dieser "allgemeine Schreibfehler" tritt beim Schreiben oder Formatieren auf, wenn der FDC einen "Lost Data-Fehlerâ meldet. Auch dies funktioniert so nur beim Blitter-TOS; beim alten TOS wird stattdessen ein E-CRC gemeldet.
EREADF
Der "allgemeine Lesefehlerâ entspricht EWRITF beim Lesen oder Verifizieren (auch Vertauschung mit E-CRC beim alten TOS).
Beim alten TOS wird ein "Lost Dataâ beim Lesen jedoch (nicht beim Verifizieren) ignoriert, was einem Kopierschutz, der darauf baut, beim neuen TOS Schwierigkeiten macht.
Desweiteren bekommt man diesen Fehler auch bei einem DMA Fehler oder Timeout beim Verifizieren.
WPRPRO
Hiermit wird auf einen versuchten Schreibzugriff bei aktiviertem Schreibschutz aufmerksam gemacht.
E-CHNG
âRwabsâ zeigt mit dieser Meldung an, das ein definitiver Wechsel des Speichermediums (z.B. Disketten) stattgefunden hat.
Die untere Ebene der Disket-ten-Funktionen kĂŒmmert sich nicht um Disketten-Wechsel, da die Routinen zur Diskettenwechsel-Erkennung und -Behandlung zur oberen Ebene gehören.
EUNDEV
Das angesprochene Laufwerk ist unbekannt. Dieser Fehler tritt nur bei âRwabsâ und âMe-diachâ auf, bei âGetbpbâ wird hierbei OL zurĂŒckgegeben. Ein Laufwerk ist unbekannt, wenn sich kein Treiber dafĂŒr in diese Disk-Routinen eingehĂ€ngt hat. Die Floppy-Laufwerke A: und B: sind immer bekannt (s. auch EDRVNR). Der Zustand der Systemvariablen âdrvbitsâ hat hiermit nichts zu tun.
EBADSF
Die bisher beschriebenen Fehlermeldungen beim Verifizieren erhĂ€lt man nur, wenn man das Verifizieren direkt ĂŒber die XBIOS-Funktion aufruft. Die Verifizier-Routine wird jedoch auch von âRwabsâ und der For matier-Funktion âFlopfmf benutzt. Dabei wird bei einem Fehler jedoch einfach ein pauschales EBADSF zurĂŒckgegeben.
EOTHER
Hierbei handelt es sich nicht um eine Fehlermeldung, sondern um eine Anfrage. Das BIOS arbeitet bei nur einem Disketten-Laufwerk ja bekanntlich mit zwei logischen Laufwerken A: und B:. Wird das jeweils andere logische Laufwerk angesprochen, fordert das BIOS hiermit zum Diskettenwechsel auf. Normalerweise wird dies vom Critical Error HĂ€ndler behandelt, so daĂ diese Fehlermeldung nicht an den Aufrufer der BIOS-Funk-tion zurĂŒckgegeben wird.
In Tab.1 findet der aufmerksame Leser noch die Fehlercodes EUNCMD, EBADRQ und EMEDIA; auĂerdem fehlt die -12. Diese Meldungen werden - soweit mir bekannt - vom BIOS aber garnicht verwendet.
Tab. 1 - BIOS-Fehlercodes
GEMDOS-Fehlermeldungen
Die meisten GEMDOS-Funktionen geben einen Wert zurĂŒck, der anzeigt, ob sie ordnungsgemÀà ausgefĂŒhrt werden konnten, oder ob ein Fehler auftrat, Ă€hnlich wie beim BIOS. FĂŒr die Fehlermeldungen des GEMDOS sind dabei 32-Bit Integers im Bereich von-32 bis-127 vorgesehen (einige Funktionen liefern nur 16-Bit-Werte zurĂŒck!). Funktionen, die Datei-Zugriffe machen, können auĂerdem die nun schon bekannten BIOS-Fehlermeldun-gen zurĂŒckgeben. Eine Auflistung mit den symbolischen Bezeichnungen und einer âKurzbeschreibungâ findet sich in Tab.2. In einigen Dokumentationen ist ENMFIL fĂ€lschlicherweise als -47 angegeben.
Eigentlich sollte jeder Fehlermeldung eine bestimmte, eindeutige Bedeutung zukommen. Was fĂŒr das BIOS noch einigermaĂen zutrifft, gilt fĂŒr GEMDOS jedoch noch lange nicht. Man darf auf Grund dieser Tabelle nĂ€mlich nicht davon ausgehen, daĂ nun das Thema "GEMDOS-Fehlerâ schon erledigt ist. Die Programmierer des GEMDOS haben die Fehlercodes nĂ€mlich manchmal recht wahllos verwendet.
Oft wird eine Fehlerursache, die bei mehreren Funktionen auftreten kann, dem aufrufenden Programm durch unterschiedliche Fehlercodes mitgeteilt, in einigen FĂ€llen kann sogar ein Fehler bei ein und derselben Funktion zu verschiedenen Fehlermeldungen fĂŒhren.
Ein gutes Beispiel hierfĂŒr ist der Mangel an freiem "internen Speicherâ (s. Speicherverwaltung), der bei vielen Funktionen auftreten kann, aber nur in den seltensten FĂ€llen zur Fehlermeldung ENSMEM fĂŒhrt, sondern meistens in einem ERROR, EPTHNF, EFILNF, ENMFIL, EDRIVE oder sogar in Bömbchen resultiert.
Andererseits kann ein Fehlercode die unterschiedlichsten Ursachen haben. Ein gutes Beispiel hierfĂŒr ist EACCDN, das anscheinend fĂŒr fast alles herhalten muĂ, was nicht durch andere Fehlermeldungen abgedeckt ist.
Dies erschwert natĂŒrlich die einheitliche Behandlung von GEMDOS-Fehlern durch eine globale Fehlerbehandlungs-Routine, da die Bedeutung der Fehler von der aufgerufenen Funktion abhĂ€ngt. Dies steht im Gegensatz zur offiziellen GEMDOS-Dokumentation, wo der Eindruck erweckt wird, als ob die meisten allgemeinen Fehler gleich behandelt werden könnten.
Das soeben beschriebene Fehler-Chaos kommt ĂŒbrigens dadurch zustande, daĂ die von den GEMDOS-Routinen der unteren Ebenen gelieferten Fehlercodes von den ĂŒbergeordneten Funktionen "verfĂ€lschtâ weitergegeben werden.
Desweiteren werden einige Fehler ĂŒberhaupt nicht bemerkt oder nur sehr unvollstĂ€ndig abgefangen.
Der Zusammenhang zwischen den Fehlern und den zurĂŒckgegebenen Fehlermeldungen ist in Tab. 3 dargestellt. Damit die Tabelle nicht zu unĂŒbersichtlich wird, fehlen die GEMDOS-Funktionen fĂŒr zeichenorientierte Ein-/Ausgabe (C...) sowie Uhrzeit/Datum (T...), da sie gar keine bzw. die dokumentierten Fehlercodes zurĂŒckgeben.
Bei âFrenameâ bezieht sich die Zeile âQâ auf den Pfad der umzubenennenden Datei, âZâ auf den neuen Pfad. Die Funktionen âFsetdtaâ und âFdatimeâ liefern keinen definierten Wert zurĂŒck (âvoid'-Funktionen).
Tab. 2 - GEMDOS -Fehlercodes
Erschrecken Sie bei dieser Tabelle nicht zu sehr, in der Praxis sieht die Sache einfacher aus, da einige Fehler normalerweise nicht auftreten. Trotzdem sollte fĂŒr sie irgendeine Fehlerbehandlung vorgesehen sein, damit Ihr Programm wenigstens nicht abstĂŒrzt.
FĂŒr VollstĂ€ndigkeit kann bei dieser Aufstellung nicht garantiert werden, da man leicht irgendeine Wechselwirkung ĂŒbersieht. Vielleicht ergeben sich noch im Laufe dieser Serie Ănderungen; auch wĂŒrden mich hier Ihre Erfahrungen interessieren.
In den Spalten sind die bei den intern tatsĂ€chlich auftretenden Fehlern gelieferten Fehlercodes eingetragen. Fehlercodes, die wirklich nur unter ganz eindeutigen UmstĂ€nden eintreten können, sind in der letzten Spalte gesondert aufgefĂŒhrt.
AuĂer den symbolischen Bezeichnungen finden sich in der Tabelle manchmal folgende EintrĂ€ge:
"Bombenâ
Ein Fehler kann zwar auftreten, wird aber von GEMDOS nicht erkannt. Da GEMDOS mit falschen Werten weiterarbeitet (mit Vorliebe Null-Zeiger), gibt es sofort Bomben. Immerhin weiĂ man dann, daĂ etwas schiefgegangen ist.
Dies heiĂt jedoch keineswegs, daĂ hiermit alle FĂ€lle abgedeckt sind, bei denen es bombt, da in der Tabelle nur die unmittelbar auftretenden Fehler aufgefĂŒhrt sind. Durch geschickte Kombinationen von GEMDOS-Aufrufen und Fehlern im GEMDOS lassen sich ebenfalls Bomben erzeugen.
âunbem.â
Ăhnlich wie "Bombenâ, nur daĂ das Nicht-Bemerken des Fehlers nicht unmittelbar zu unangenehmen Konsequenzen fuhrt. Meistens passiert nicht viel, aber man sollte sich nicht ĂŒber SpĂ€tfolgen in Form merkwĂŒrdiger Nebeneffekte wundern.
âk. Fehlerâ
Der Fehler wird zwar bemerkt und richtig behandelt, aber es erfolgt keine Fehlermeldung ĂŒber die ĂŒblichen Fehlercodes. Der Fehler kann vom Anwenderprogramm höchstens indirekt erkannt werden.
â0Lâ
âMallocâ liefert im Gegensatz zu den anderen Funktionen Null als Fehler, dies entspricht aber der Dokumentation.
Doch nun zur Beschreibung der Fehlerursachen (Spalten der Tab.3 von links nach rechts):
âKein freier Benutzer-Speicher mehrâ
Der gröĂte, zusammenhĂ€n gende freie Speicherbereich reicht nicht mehr fĂŒr das gewĂŒnschte âMallocâ oder fĂŒr das Laden bzw. Starten eines Tochterprozesses aus.
âKein freier interner Speicher mehrâ
Der von GEMDOS fĂŒr die Verwaltung von Laufwerken, Di rectories und Dateien benötigte interne Speicher reicht nicht mehr aus. Dieser Fehler wird zwar fast ĂŒberall abgefangen, aber da er zu den unterschiedlichsten Fehlermeldungen fĂŒhrt, und der Desktop ihn nicht erkennt bzw. erkennen kann, sollte man dafĂŒr sorgen, stets ausreichend internen Speicher zur VerfĂŒgung zu haben (vor allem wichtig bei Harddisk-Besitzern). Genauere ErlĂ€uterungen zum internen Speicher s. "Speicherverwaltungâ.
"Laufwerk unbekanntâ
Das angesprochene Laufwerk ist GEMDOS unbekannt und nicht vorhanden. Ein Laufwerk ist bekannt, sobald es zum ersten Mal angesprochen wurde und vorhanden war. Es bleibt bekannt, auch wenn es vielleicht spĂ€ter nicht mehr vorhanden sein sollte. In diesem Fall wird dies nicht vor AusfĂŒhrung der GEMDOS-Funktion erkannt, sondern bestenfalls beim eigentlichen Zugriff ĂŒber das BIOS.
GEMDOS geht halt davon aus, daĂ Laufwerke im System bleiben, wenn sie erst einmal installiert sind, was normalerweise ja auch zutrifft. Diese ZusammenhĂ€nge werden noch in der spĂ€teren Folge âDisk-Verwaltung" erklĂ€rt.
"Illegaler Funktions-Modusâ
Der der GEMDOS-Funktion ĂŒbergebene Modus-Parameter (abhĂ€ngig von der Funktion) liegt nicht im vorgesehenen Werte-Bereich (z.B. darf âmo-deâbeiâFseek' nur die Werte 0,1 oder 2 haben). Dies wird bei vielen Funktionen nicht bemerkt, hat aber (meistens) keine schlimmen Nachwirkungen.
"Kein Standard-Handleâ
Die GEMDOS-Funktion erwartet ein Standard-Handle (0...5). Es werden hier tatsÀchlich alle illegalen Handles abgefangen.
âIllegales Datei-Handleâ
Das ĂŒbergebene Handle ist kein Datei-Handle (6... 74) bzw. das Device- oder Standard-Handle eines auf eine Datei umgeleiteten Devices.
Achtung: Es wird nur ĂŒberprĂŒft, ob zu dem Datei-Handle eine geöffnete Datei existiert. Wenn das Handle nicht in dem fĂŒr Handles allgemein zulĂ€ssigen Wertebereich von -3 bis + 74 liegt, können vollkommen unvorhersehbare Effekte auf-treten, da GEMDOS auf falsche Speicherbereiche zugreift (Ar-ray-Index-Ăberlauf)!
Daher ist es besonders wichtig, eine Fehlerbehandlung bei âFo-penâ/âFcreateâ durchzufĂŒhren, da ansonsten der Fehlercode (i.a. kleiner als -32!) als Datei-Flandle weiterverwendet wird.
Tab. 3 - Fehlermeldungen der GEMDOS-Funktionen
"Keine Datei-Handles mehrâ
Es ist kein Datei-Handle mehr frei. Bei 69 möglichen Datei-Handies sollte dies eigentlich nie der Fall sein, doch gibt es Situationen, bei denen GEM-DOS fehlerhafterweise Datei-Handies verbraucht, so daà man nicht sicher kann, daà GEMDOS nicht doch irgendwann einmal - auf Grund eines noch nicht entdeckten Fehlers vielleicht - alle Handles aufbraucht.
"Keine Pfad-Handles mehrâ
Es sind keine Pfad-Handles mehr frei. GEMDOS braucht zur Verwaltung der Standard-Pfade von Laufwerken interne Datenstrukturen, die ĂŒber (nur intern bekannte) Handles angesprochen werden. NĂ€heres hierzu spĂ€ter in der Folge ĂŒber "Directory-Verwaltungâ. Die Maximalzahl von 39 Pfaden wird in der Praxis wohl kaum erreicht werden, so daĂ dieser Fehler nicht zu befĂŒrchten ist.
"Datei nicht gefundenâ
Ein der GEMDOS-Funktion ĂŒbergebener Dateiname wurde im angesprochenen Directory nicht gefunden.
"Pfad nicht gefundenâ
Ein Pfad fĂŒr eine Datei wurde nicht gefunden.
â'.' oder '..' als Dateinameâ
Der Pseudo-Directory-Name oder wurde als Dateiname verwendet, wo es nicht zulÀssig ist.
âNur-Lese-Dateiâ
Es wurde ein Schreibzugriff auf eine Datei versucht, die mit dem Nur-Lesen-Attribut versehen ist. Dazu zĂ€hlt auch das versuchte Löschen der Datei, nicht jedoch das Ăndern von Directoryinformationen (Name, Attribut, Datum/Zeit).
âPexecâ sollte selbstverstĂ€ndlich immer funktionieren, aber beim Aufruf von âFopenâ innerhalb der âPexecâ-Funktion wurde die Ăbergabe des Modus-Wortes vergessen. Befindet sich auf dem Stack zufĂ€llig ein Modus-Wort ungleich Null, so daĂ versucht wird, die Datei (auch) zum Schreiben zu öffnen, klappt dies natĂŒrlich nicht bei gesetztem âNur-Lesenâ-Attribut. Beim Start vom Desktop aus trifft dies anscheinend nicht zu, aber bei Shell-Programmen kann man sich da ja nicht sicher sein. AuĂerdem werden nicht zulĂ€ssige Modi beim âFopenâ auch nicht abgefangen, allerdings ohne Schaden anzurichten. Mit anderen Worten: DaĂ Ihr ST ĂŒberhaupt Programme lĂ€dt, ist purer Zufall
"Datei/Speicher gehört (auch) noch zu anderem ProzeĂâ
Ein unzulĂ€ssiger Zugriff auf eine Datei, die von mehr als einem ProzeĂ geöffnet wurde, wurde versucht. Zur Multi-Tas-king-FĂ€higkeit der Dateiverwaltung s. Folge "Dateiverwaltungâ. Doch schon vorweg: Hier funktioniert so manches nicht, daher ist diese Fehlermeldung mit Vorsicht zu genieĂen.
Achtung: Es ist ohne weiteres möglich, mit Datei-Handles fremder Prozesse auf deren Dateien zuzugreifen.
"Diskette vollâ
Dies wird gĂŒnstigstenfalls bei Directory-Operationen gemeldet. Beim Datei-Zugriff (âFwriteâ) muĂ anhand der zurĂŒckgelieferten Anzahl der tatsĂ€chlich geschriebenen Zeichen selbst festgestellt werden, ob die Datei korrekt beschrieben wurde.
âRoot-Directory vollâ
Das Root-Directory (Haupt-Directory, oberste Ebene) ist voll. Beim Standard-Disketten-Format sind 112 EintrĂ€ge möglich, so daĂ es hier keine Probleme geben sollte. Die GröĂe von Subdirectories (Ordnern) ist nur durch die Disketten-KapazitĂ€t begrenzt.
"Illegaler Subdirectory-Zugriff"
Es wurde versucht, ein nichtleeres Subdirectory zu löschen (âDdeleteâ), eine mit einem Subdirectory namensgleiche Datei zu erzeugen (âFcreateâ), ein schon vorhandenes Subdirectory erneut zu erzeugen (âDcreateâ) oder ein Subdirectory mit nur fĂŒr Dateien vorgesehenen Funktionen zu bearbeiten.
"Interner Fehlerâ
Dieser Fehler erfolgt, wenn GEMDOS-eigene Datenstrukturen in sich widersprĂŒchlich sind. Dieser Fehler kann also nur auftreten, wenn zuvor schon Fehler im GEMDOS ihr Unwesen getrieben haben.
Solche Abfragen auf interne Fehler werden leider nur bei âFcloseâ und âDdeleteâ gemacht, obwohl sie sicherlich auch an anderen Stellen wĂŒnschenswert wĂ€ren, um Schlimmeres zu verhindern. Denn GEMDOS ist - wie auch das GEM - sehr empfindlich gegenĂŒber falschen Parametern usw., da kaum Kontrollen gemacht werden. Kleinste Programmfehler in Anwenderprogrammen können so GEMDOS ziemlich verwirren. Hinzu kommen noch die Fehler im GEMDOS selbst, die manchmal sehr versteckt sind, aber ganz unerwartet in Erscheinung treten.
âBIOS-Fehlerâ
In dieser Spalte sind alle GEM-DOS-Funktionen markiert, bei denen Disk-Zugriffe auftreten können. Dabei verwendet GEMDOS ausschlieĂlich die BIOS-Routinen âRwabsâ, âMediachâ und âGetbpb'. Von den so gekennzeichneten Funktionen können also neben den GEMDOS-Fehlermeldungen auch BIOS-Fehlermeldungen zurĂŒckgegeben werden.
Zur Diskettenfehler-Behandlung habe ich ja schon in der letzten Folge einiges gesagt, aber eines bleibt noch nachzutragen. Da die GEMDOS-Funktion dann einfach abgebrochen wird, kann es sein, daà interne Datenstrukturen sich noch in einem Undefinierten Zustand befinden, weil Disk-Zugriffe manchmal wÀhrend cer Manipulation dieser stattfinden. Normalerweise wirkt sich dies - wie die Erfahrung zeigt - nicht negativ aus, aber die Folgen daraus sind schwer abzusehen, so daà ich nur dazu raten kann, fehlerfreie Disketten zu verwenden. Noch gefÀhrlicher ist der Diskettenwechsel wÀhrend einer Disk-Operation, da dann das GEMDOS-Kommando einfach wiederholt wird, was noch undurchschaubarere Folgen hat.
Zum Schluà kommen wir zu den Fehlermeldungen, die nur bei ganz bestimmten GEMDOS-Funktionen auftreten können und eine eindeutige Bedeutung haben.
ENSAME
Die Funktion âFrenameâ kann Dateien nur innerhalb eines Laufwerks umbenennen. Bei einem anderen Laufwerk mit anderer Kennung mĂŒĂte die Datei ja kopiert werden. Da GEMDOS ĂŒber keine Kopierfunktion verfĂŒgt, wird mit dieser Fehlermeldung abgebrochen.
ERANGE
Mit âFseekâ wurde versucht, den Datei-Positions-Zeiger auf einen illegalen Wert zu setzen. Negative Werte und Werte gröĂer als die Datei-LĂ€nge sind nicht zugelassen. Dies gilt auch bei einer zum Schreiben geöffneten Datei, bei der der Zeiger nur max. auf das Dateiende gesetzt werden darf.
EIMBA
Die an âMfreeâ und âMshrinkâ ĂŒbergebene Adresse ist nicht die eines mit âMallocâ reservierten Speicherbereichs. Es wird nicht kontrolliert, ob der Speicherbereich ĂŒberhaupt von dem eigenen ProzeĂ reserviert wurde, d.h. man kann auch fremde Bereiche freigeben bzw. verkleinern (sehr gefĂ€hrlich!).
EGSBF
Es wurde versucht, mit âMshrinkâ einen Speicherbereich zu vergröĂern. Die Speicherverwaltung des GEMDOS ist dazu jedoch nicht in der Lage, die neue LĂ€nge des Bereichs muĂ kleiner gleich der alten sein.
EPLFMT
âPexecâ hat versucht, eine Datei zu laden, deren Format nicht dem einer Programm-Datei entspricht. Das Format wird als illegal betrachtet, wenn das erste Wort des Programm-Headers nicht $601A ist, oder wenn die Relozier-Offsets aus dem zulĂ€ssigen Bereich (TEXT-und DATA-Segment) herausfĂŒhren.
In der nÀchsten Ausgabe werden wir uns dann dem Critical-Error-Handler und der Form-error-Routine widmen.