Tips & Tricks

Schreiben Sie Ihre eigenen Fehlermeldungen

Wer die öden Meldungen des Betriebssystems wie »READY« oder »SYNTAX ERROR« satt hat, kann mit dem »ErrorChanger« alle Fehlerausgaben ändern und auf Diskette speichern.

Denken Sie einmal an klassisches Basic-Programmieren: Drei Zeilen eintippen, Probelauf, Fehlermeldung, Korrektur, Probelauf… und so weiter. Und bei jedem Fehler erscheinen die sattsam bekannten, äußerst langweiligen Einheitsfehlermeldungen.

Mit dem hier vorgestellten Programm »Error-Changer« ist es endlich möglich, den Wortlaut der Fehlermeldungen frei zu wählen (Bild 1 und 2). Nun, das ist immer noch nichts so Besonderes. Besonderes ist, daß der neue Text jeder Fehlermeldung bis zu 80 (achtzig) Zeichen lang sein kann.

Bild 1. So könnten zum Beispiel geänderte Fehlermeldungen aussehen
Bild 2. Im Vergleich zu Bild 1: So sehen die Originalmeldungen aus

Ob Sie den »UNDEFD STATEMENT ERROR« mit »QUO VA-DIS« oder mit »WOHIN, MEIN FREUND??« übersetzen, bleibt Ihrer Phantasie überlassen. Es schaut auch besser aus, wenn statt dem faden »READY«, zum Beispiel das warmstartsichere »ANDYS SOFTWARE IST IMMER EIN GEWINN« erscheint. Individualität ist Trumpf, Einheits-ROM ist out.

Das Programm ist kinderleicht zu bedienen: Error-Changer (siehe Listing) laden und starten.

Es erscheint der Text der alten, englischen Fehlermeldung. Sollte sie nicht geändert werden, so wird sie normal mit der RETURN-Taste übernommen. Ansonsten wird der neue Text eingetippt. Die Länge des neuen Textes kann frei gewählt werden und ist nur durch die 80 Zeichen des INPUT-Befehls begrenzt. Sollte der neue Text kürzer sein als der alte, so ist der Rest mit Leerzeichen zu überschreiben. Es kann auch die Abbruchmeldung BREAK und die READY-Meldung geändert werden. Jedoch erscheint, bedingt durch das Betriebssystem, nicht immer der geänderte Text.

Nach Beendigung schaltet das Programm automatisch auf die neuen Fehlermeldungen um. Diese können auf Kassette oder auf Disk gespeichert werden, um die kreativen Ergüsse für die Nachwelt zu erhalten.

Die neuen Fehlermeldungen werden mit
LOAD ”FEHLER.OBJ”,8,1 (für Datasette ,1,1)
geladen, mit SYS 49152 ein- und mit SYS 49226 ausgeschaltet. Nach dem Laden sollten Sie unbedingt NEW eingeben.

Nun zum Programmtechnischen.

Es wird der »Vektor auf Fehlermeldungen« $0300-$0301 (dezimal 768-769) auf das neue Programm »umgebogen«. Tritt ein Fehler auf (Fehlernummer größer 0), so stellt das Programm normale Ein- und Ausgabeverhältnisse her (Bildschirm, Tastatur). Die Fehlernummer bildet einen Vektor auf die Adresse des ersten Buchstabens der entsprechenden Fehlermeldung. Die Tdxte der Fehlermeldungen werden hintereinander gespeichert. Als Trennzeichen fungiert das siebte Bit des letzten Buchstabens. Ist es gesetzt, so weiß das Betriebssystem, daß dieser Buchstabe der letzte ist. Somit ist der erste Buchstabe (Zeiger im Steuerprogramm) und der letzte definiert (siebtes Bit gesetzt). Jetzt muß die Meldung nur noch geschrieben werden. (Das Ganze kann mit dem K-Befehl des SMON angeschaut werden. Nicht vergessen: Auf Kleinschriftmodus umschalten!)

Um Speicherplatz zu sparen, wurden im Programm die Fehlermeldungen ohne das Wort »ERROR« gespeichert, da dieses bei allen Meldungen gleich ist. Bei den neuen Meldungen muß der ganze Wortlaut angegeben werden, da bei manchen Scherzfehlermeldungen das Wort »ERROR« oder »FEHLER« stören würde.

Beschreibung der wichtigsten Variablen:

T$(I) =Text der alten und nach dem Überschreiben der neuen Fehlermeldung.
LV = Lesevektor. Liest alte Meldung aus dem ROM.
SA = Schreibvektor. Schreibt neuen Text in das RAM.
VA = Schreibvektor auf Lo/Hi-Adressen des ersten Buchstabens der neuen Meldung.
SA und EA = Start- und Endadresse als Parameter für den SAVE-Befehl
FZ = Fehlerzähler (identisch mit der betriebssysteminternen Fehlernummer!)

(Andreas Knipp/tr)
110 rem *****************************
130 rem *                           *
140 rem * e r r o r - c h a n g e r *
150 rem *                           *
151 rem *          c 64             *
152 rem *                           *
160 rem *     by andreas knipp      *
170 rem *                           *
180 rem *****************************
190 rem
200 poke53280,4:poke53281,6:goto 250
250 print"{clr}{wht}waehlbare fehlermeldungen by a.knipp kps":dimt$(40):fz=1
260 t$(30)="break error"
270 t$(31)="ready.":hi=256
280 fori=49152to49232
300 readx:pokei,x:next
310 poke768,139:poke769,227:rem fehlermeldungen auf rom  stellen.
320 lv=41372:sv=49293:va=49233
330 forlv=41373to41767:rem einlesen der alten fehlermeldungen
340 t$(fz)=t$(fz)+chr$(peek(lv)and127):ifpeek(lv)<127then370
350 t$(fz)=t$(fz)+" error":printt$(fz)
360 fz=fz+1
370 nextlv:fz=fz+1:rem platz fuer readymeldung
380 fori=1tofz:rem moeglichkeit der aenderung
390 print"{rght}{rght}"t$(i)chr$(13)"{up}";:inputt$(i)
400 iflen(t$(i))<2then390
410 nexti
420 input"alles richtig j/n";ar$:ifar$<>"j"then380
430 forj=1tofz-1:rem neue fm in den speicher schreiben
440 fori=1tolen(t$(j))-1
450 pokesv+i-1,asc(mid$(t$(j),i,1))
460 nexti
470 pokesv+i-1,asc(mid$(t$(j),i,1))+128
480 a=sv:gosub690:pokeva+1,ah%:pokeva,al%
490 va=va+2:sv=sv+i:nextj
500 pokesv,13
510 forj=1tolen(t$(31)):pokesv+j,asc(mid$(t$(31),j,1)):next:rem ready
520 pokesv+j,13:a=sv:gosub690:poke49220,al%:poke49222,ah%:pokesv+j+1,0
530 sys 49152
540 input"speicherung j/n";s$:ifs$="n"thenend
550 ifs$<>"j"then540
560 sa=49152:ae=sv+j+2
570 print"geraetenummer";
580 print"   floppy = z.b.  8                        datasette =    1";
590 input dn
600 a$="@:fehler.obj":a%=len(a$)
610 a=681:gosub690:poke183,a%:poke187,al%:poke188,ah%
620 fori=1toa%:poke680+i,asc(mid$(a$,i)):next:rem filename
630 a=sa:gosub690:poke251,al%:poke252,ah%:rem startadresse
640 a=ae:gosub690:poke781,al%:poke782,ah%:rem endadresse
650 poke186,dn:poke780,251:sys65496:rem save:dn = devicenummer
660 print"{wht}speicherung erfolgte unter "chr$(34)"fehler.obj"chr$(34)
670 print"absolut laden und mit sys 49152 starten"
680 end
690 ah%=a/hi:al%=a-ah%*hi
700 return
710 data169,11,160,192,141,0,3,140,1,3,96,138
720 data16,3,76,67,192,10,170,189,79,192,133,34
730 data189,80,192,133,35,32,204,255,169,0,133,19
740 data32,215,170,32,69,171,160,0,177,34,72,41
750 data127,32,71,171,200,104,16,244,32,122,166,164
760 data58,200,240,3,32,194,189,169,187,160,194,76
770 data 120,164
780 data169,139,160,227,76,4,192
Listing »Error Changer«. Beachten Sie die Eingabehinweise auf Seite 6.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →