208c
<< <> >>
Theo: EVALUATE macht sich zunächst an den String, verwendet dabei den Stack, und im Moment des Fehlers stand da unverkennbar 0 0.
Nun kommt was zum Nachdenken:
BS 5 ' CHAR CATCH 8 .S
Leo: CATCH führt CHAR aus, das den ASCII-Code von 8 aufsucht, und hängt noch eine Null dran.
[rtn] ( 5 56 0 ) ok
Theo: Richtig. Für das folgende Beispiel musst du wissen, dass CATCH vor Erledigung seiner Aufgabe den momentanen Input-Strom aufbewahrt. Wenn etwas schief geht, stellt es den Stack (die Stacks) und den Input-Strom wieder her. Warum? Denk doch mal kurz darüber nach, was passieren würde, wenn man nach einem Fehler beim Laden einer Datei den Input-Strom auf sich beruhen lassen würde.
BS 6 ' ' CATCH 666 .S [rtn] ( 6 -13 666 ) ok
CATCH führt den Tick auf 666 aus. Das gelingt natürlich nicht. Es legt die Fehlernummer -13 auf den Stack und stellt den Input-Strom wieder her. Von dem wird auf die Stelle unmittelbar nach CATCH verwiesen. 666 wird erneut gelesen und ausgeführt, und schließlich ist .S an der Reihe.

Es tut mir Leid, aber ich muss jetzt weiter. Ich gebe dir einen kleinen Puzzle-Ausschnitt, den du mit den Kenntnissen, die du jetzt hast, lösen können müsstest.
 BS 7  ' S" CATCH Vijgeblaadje" .S
 BS 8  ' ' CATCH vijg .S
 BS 9  ' TO CATCH BL .S
 BS 10 ' DUP ' CATCH EXECUTE .S
 BS 11 ' DUP ' CATCH CATCH .S
 BS 12 ' DUP ' CATCH ' CATCH CATCH .S
 BS ( 13 ) ' DROP CATCH .S
 BS 14 ' THROW CATCH .S
Tschüss! 
Leo: Tschüss!
[wird fortgesetzt]
einde
 >>