Eigene Prozeduren oder Funktionen sind in Basic kein Problem; aber, daß man auch völlig neue Strukturen einbauen kann, ist nicht vorgesehen. Das folgende Beispiel zeigt, daß es trotzdem geht.
Pascal bietet die Struktur CASE OF. Das ärgerte natürlich die fortschrittlichen Basic-Programmierer schon lange. Das Resultat: es geht doch. Das Prinzip ist relativ einfach. Zuerst erfolgt ein Befehl Case (Variable). Dahinter verbirgt sich nichts anderes als eine Prozedur namens Case. Der Ausdruck in Klammern ist der Übergabeparameter. Dieser wird innerhalb des Unterprogrammes einer bestimmten Variablen zugeordnet, die später noch Verwendung findet. Dann folgt die Anweisung ’Of(Wert)’, welche prüft, ob die Variable hinter ’Case’, mit diesem Wert übereinstimmt. Ist dies der Fall, wird die folgende Programmzeile ausgduhrt. Ist dies nicht der Fall, so wird sie übersprungen und in der übernächste Zeile fortgefahren. Auch ’Of’ ist eine Prozedur. Ihre Aufgabe besteht in nichts anderem, als den Parameter hinter OF mit dem hinter Case zu vergleichen. Dementsprechend wird ein Flag gesetzt oder gelöscht.
Der Witz der Sache kommt mit der Anweisung ’Do’. ’Do’ ist nämlich keine Prozedur, sie darf es auch nicht geben. So löst der Interpreter beim Bearbeiten dieser Anweisung eine Fehlermeldung aus, und zwar Fehler Nummer 8. Das ist nun die Lösung. In der Fehlerroutine, initialisiert mit ON ERROR GOTO, wird die Fehlernummer identifiziert und, je nachdem ob das gerade erwähnte Flag gesetzt oder gelöscht ist, das Programm bei der nächsten oder übernächsten Zeile fortgesetzt.
Dadurch entsteht leider zwangsweise eine Einschränkung: Nach einem DO darf nur eine Zeile folgen; plagt einen aber trotzdem das Verlangen nach mehreren, so gibt man einfach in der folgenden Zeile ein weitere DO ein und darunter die zweite Befehlszeile, usw.
Die neue Struktur wurde also durch Einschleusung eines absichtlichen Fehlers geschaffen. Dies mag zwar seltsam klingen, doch geschieht das gerade beim ST sehr häufig. Man denke nur an die LINE A Traps, wobei der Prozessor auch durch ungültige Befehle in eine Fehlerroutine gelangt, wo er den Fehler analysiert und dementsprechend ein Unterprogramm ausführt. Die Idee ist also gar nicht so neu, aber wirkungsvoll ist sie dennoch.
Case (Variable)
Of (Wert1):Do
Anweisungszeile 1
Of (Wert2):Do
Anweisungszeile2
Do
Anweisungszeile2a
Of (Wert3):Do
Anweisungszeile3
'End Case
' Belsplelprogramm
True=-1:False=0 ON ERROR GOTO Fehler INPUT "Schwierigkeitsgrad (leicht,mittel,schwer) : ";Schwierigkeitsgrad$ Case( UPPER$( LEFT$(Schwierigkeitsgrad$,1))) Of("L"):Do PRINT "Nun, einfach fängt man an!" Of("M"):Do PRINT "Wer's weiters wagt, gewinnt auch mehr!" Of("S"):Do PRINT "Den feuerspein'den Drachen fürcht' der Recke nicht!"
' Ende der Case-Struktur. Der Rest bis END ist nicht notwendig. PRINT : PRINT "Suche Ihr drückendes Gefängnis und befreie die” PRINT " Prinzessin aus der unverdienten Gefangenschaft 1” WAIT 3 REPEAT PRINT PRINT "Du bist in einer feuchten, dunklen Höhle." IF RND(3)=1 THEN PRINT "Wasser tropft von der Decke und sammelt sich in kleinen Lachen auf dem Boden.” PRINT "Richtungen: N,S,O,W" INPUT "Was willst du tun: ”;Kommando$ UNTIL Player_Is_Mad END
DEF PROC Case(V$) Case Vergleich$=V$ RETURN
DEF PROC Of(V$) IF Case_Verglelch$=V$ THEN Case_Flag=True ELSE CaseFlag=False RETURN
-Fehler IF ERR=8 THEN ' Fehler 8="Undefined Statement". Prozedur "Do" Ist Undefiniert IF Case Flag THEN RESUME NEXT ELSE RESUME ERL +2 ENDIF ELSE STOP ENDIF
</div>
**Case Of Struktur mit Beispiel**