DO (TSB)
DO (TSB) | |
Syntax: | DO .. DONE |
Parameter | |
keine | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Strukturkontrolle |
Aufgabe: | umschließt mehrzeilige Bedingungszweige |
Abkürzung: | keine |
Token: | $64 $22 (100 34) |
Verwandte Befehle | |
ELSE - DO NULL - RCOMP - IF - THEN |
Dieser Artikel beschreibt das TSB-Schlüsselwort DO (TSB).
Es gibt kein entsprechendes Simons'-Basic-Schlüsselwort.
Typ: Anweisung Syntax: DO .. DONE
Mit DO und DONE hat der Programmierer die Möglichkeit, die beiden Bedingungszweige eines IF über mehrere BASIC-Zeilen auszuweiten, und so sein Programm erheblich übersichtlicher und kompakter zu gestalten. Ein einzeln stehendes ELSE trennt hier die Wahr- und Nicht-Wahr-Zweige voneinander (siehe Beispiel), ist kein Nicht-Wahr-Zweig vorgesehen, kann ELSE weggelassen werden.
Beachten
- DO verwaltet (noch) keinen Stack, daher kann diese Konstruktion nicht verschachtelt werden, auch nicht indirekt (durch Aufruf einer Prozedur innerhalb DO..DONE, in der dort eine weitere DO..DONE-Konstruktion vorkommt). Versucht man es dennoch, erhält man aber bereits jetzt schon einen ?STACK OVERFLOW ERROR.
- Der (bisher nur teil-implementierte) Stack der DO-DONE-Konstruktion wird nicht überwacht. Verlässt man eine solche Konstruktion vorzeitig, wird der Stack nicht bereinigt und läuft bei wiederholter Ausführung über. Um das zu verhindern, kann man die Speicherstelle $CBE4 (den DO-Stackpointer) bei einem vorzeitigen Ausstieg manipulieren. Siehe dazu den Abschnitt "Eine Struktur vorzeitig verlassen" in TSB Tricks.
- In Prozedurnamen darf die Zeichenfolge DO nicht vorkommen (wie z.B. im Wort "shadow").
Beispiel
10 PRINT "test "; 20 FETCH "jn",1,x$ 30 IF x$ = "j" THEN DO 40 : PRINT "ja" 50 ELSE 60 : PRINT "nein" 70 DONE
Je nachdem, ob der Benutzer "j" oder "n" drückt, erscheint eine andere Antwortausgabe.
Ein komplettes Anwendungsbeispiel findet sich beim Simons-Basic-Befehl MOB SET Beispiel 2.
$$ | %% | AT | CALL | CENTRE | CHECK | COLD | COLOUR | COPY | CLS | CSET | D! | D!PEEK | DIR | DISK | DISPLAY | DIV | DO | DO NULL | DRAW TO | DUMP | DUP | ELSE | ERROR | EXEC | FETCH | GRAPHICS | INSERT | INST | JOY | KEY | KEYGET | LIN | MEMCONT | MEMDEF | MEMLEN | MEMLOAD | MEMOR | MEMPEEK | MEMPOS | MEMREAD | MEMRESTORE | MEMSAVE | MERGE | MOB ON/OFF | MOD | MOVE | MULTI | NRM | ON ERROR | ON KEY | OUT | PAGE | PAINT | PAUSE | PLACE | RENUMBER | RESUME | RETRACE | SCRLD | SCRSV | SOUND | TEXT | TRACE | USE | WAVE