Basic-Erweiterungen

ON ERROR GOTO

Routinen, die bei einem auftretenden Programmfehler zu einer bestimmten Zeile verzweigen, sind inzwischen Standardausrüstung jeder guten Basic-Erweiterung. Das vorliegende Maschinenprogramm ist nur 88 Byte lang.

Um einen Fehler während des Programmlaufs abzufangen, kennen viele Computer den Befehl ON ERROR GOTO. Mit diesem kurzen Maschinenprogramm kann auch Ihr C 64 auf Fehler im Programm reagieren.

Nachdem das Programm (Listing 1) im Speicher steht, kann es mit SYS 50000, ZL aktiviert werden. Dabei bedeutet ZL die Zeilennummer, zu der bei einem Fehler verzweigt werden soll. Die Fehlernummer wird dann in Speicherstelle 2 gespeichert und kann mit PEEK(2) abgefragt werden. Tabelle 1 zeigt, welche Nummer welcher Fehlermeldung entspricht. Die Zeile, in der der Fehler auftrat, wird in Speicherstelle 249 und 250 gespeichert. Damit Sie zu der fehlerhaften Zeile zurückspringen können, wurde noch die Routine »GOTO X« eingebaut. Damit läßt sich zu einer berechneten Zeile springen. Aufgerufen wird diese Routine mit SYS 50076, ZL. Schauen wir uns einmal das Beispiel ab Zeile 200 im Basic-Lader an. In Zeile 210 wird mit SYS 50000, 1000 die Fehlerbehandlungsroutine auf Zeile 1000 gelegt. In Zeile 220 wird der Benutzer aufgefordert, eine Zahl einzugeben. Solange diese Zahl positiv ist, wird in Zeile 230 die Wurzel aus dieser Zahl errechnet und ausgegeben. Bei einer negativen Zahl wird zur Zeile 1000 verzweigt. Hier wird die Fehlernummer ausgegeben. In diesem Falle 14. In Zeile 1010 wird nun die Zeile errechnet, in der der Fehler auftrat und ausgegeben. Zeile 1020 schließlich ruft die »GOTO X«-Routine auf und springt in die Zeile ZL —10.

Listing 2 zeigt den dokumentierten Assemblerteil der Routine.

(Kunz/tr)
Fehlernummer Fehlermeldung
1 TOO MANY FILES
2 FILE OPEN
3 FILE NOT OPEN
4 FILE NOT FOUND
5 DEVICE NOT PRESENT
6 NOT INPUT FILE
7 NOT OUTPUT FILE
8 MISSING FILENAME
9 ILLEGAL DEVICE NUMBER
10 NEXT WITHOUT FOR
11 SYNTAX
12 RETURN WITHOUT GOSUB
13 OUT OF DATA
14 ILLEGAL QUANTITY
15 OVERFLOW
16 OUT OF MEMORY
17 UNDEF'D STATEMENT
18 BAD SUBSCRIPT
19 REDIM'D ARRAY
20 DIVISION BY ZERO
22 TYPE MISMATCH
23 STRING TOO LONG
24 FILE DATA
25 FORMULA TOO COMPLEX
27 UNDEF'D FUNCTION
28 VERIFY
29 LOAD
Tabelle 1. Die Fehlermeldungen des Betriebssystems, jeweils mit dem Zusatz »ERROR«.
100 rem *** on error und goto x ***
101 data32,253,174,32,107,169,165,20
102 data164,21,133,247,132,248,169,116
103 data160,195,141,0,3,140,1,3,96,169
104 data139,160,227,141,0,3,140,1,3
105 data96,138,48,30,165,58,201,255
106 data240,27,134,2,165,57,164,58,133
107 data249,132,250,165,247,164,248
108 data133,20,132,21,32,163,168,76
109 data174,167,76,116,164,138,76,58
110 data164,32,253,174,32,138,173,32
111 data247,183,76,143,195
112 s=0:fori= 50000 to 50087 :readd
113 poke i,d:s=s+d:next
114 print"die datazeilen sind"
115 ifs<>10886thenprint"fehlerhaft":stop
116 print"in ordnung":end
120 :
130 :
200 rem beispiel fuer on error und goto x
210 sys50000,1000
220 input"eine zahl ";a
230 wu=sqr(a):print"die wurzel aus"a"="wu
240 end
1000 print"fehler nummer"peek(2)
1010 zl=peek(249)+peek(250)*256-10
1020 sys50076,zl
Listing 1. Der Basic-Lader zu »On-Error«. Bitte verwenden Sie zur Eingabe den neuen Checksummer (Seite 6.)
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →