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.


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!)
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