Verzweigungen
Unter Verzweigungen versteht man die Unterbrechnung des linearen Programflusses und das Fortsetzen der Programausführung an einer anderen Stelle. Es gibt die unbedingten Verzweigungen GOTO
und GOSUB
, und die bedingte Verzweigung IF
.
SPRUNGMARKE (LABEL)
Sprungmarken werden entweder als Zahl oder als "String" gefolgt von einem Doppelpunkt angegeben.
1964:
...
"Hell":
...
GOTO 1964
...
GOTO "Hell"
GOTO
GOTO "label"
Springt zum angegeben Sprungziel "label"
, d.h. die Programmausführung wird nach der Sprungmarke fortgesetzt, wobei diese Sprungziel auch als Variable oder Berechnungsausdruck angegeben werden kann, dadurch ist es möglich das Sprungziel zu berechnen:
choice = 3
GOTO 100+choice
END
101:
PRINT "ZIEL 101"
END
102:
PRINT "ZIEL 102"
END
103:
PRINT "ZIEL 103"
END
ACHTUNG! Das Sprungziel wird nur einmalig berechnet und dieses Ergebnis bis zum Ende des Skripts gespeichert, d.h. ein innerhalb des Skripts veränderliches Sprungziel ist derzeit nicht möglich (gilt auch für GOSUB
).
FOR i = 1 TO 4
GOSUB i * 100 ! wird nur beim 1. Aufruf berechnet (Ergebnis=100) und bis zum Ende des Skripts gespeichert
NEXT i
END
100: ! wird 4x aufgerufen
TEXT2 0 , 1 , "i=1"
RETURN
200: ! wird nie aufgerufen
TEXT2 0 , 2 , "i=2"
RETURN
300: ! wird nie aufgerufen
TEXT2 0 , 3 , "i=3"
RETURN
400: ! wird nie aufgerufen
TEXT2 0 , 4 , "i=4"
RETURN
Dieser Codeabschnitt ruft nicht wie erwartet, die Subroutinen 100
, 200
, 300
und 400
auf, sondern, da das Sprungziel nur einmal berechnet wird, 4x die Subroutine 100
.
GOSUB
GOSUB "label"
Springt zum angegebene Sprungziel "label"
, legt aber den Absprungpunkt auf den Returnstack. Mit RETURN
kann man an die aufrufende Stelle zurückspringen. Durch die Verwendung eines Stacks können GOSUB
-Befehle verschachtelt werden. Wie bei GOTO
ist es auch bei GOSUB
möglich das Sprungziel als Variable oder Berechnungsausdruck anzugeben.
profil = "I100"
GOSUB profil
END
"I100":
PRINT "PROFIL I100"
RETURN
"I110":
PRINT "PROFIL I110"
RETURN
"I120":
PRINT "PROFIL I120"
RETURN
RETURN
Nimmt die oberste Rücksprungadresse vom Returnstack und sprint an den Aufrufpunkt zurück. Ab hier ist der Absprungpunkt des vorangegangenen GOSUB-Befehls die oberste Adresse auf dem Returnstack.
GOSUB "Setup"
GOSUB "Main"
GOSUB "CleanUp"
END
"Setup":
...
RETURN
"Main":
...
GOSUB "SubRoutine"
...
RETURN
"CleanUp":
...
RETURN
"SubRoutine":
...
RETURN
IF ... THEN ... ELSE ... ENDIF
Die Programausführung ist abhängig von condition
, ist condition
wahr wird der THEN
-Block aufgeführt, sonst der ELSE
-Block.
IF condition THEN
...
ELSE
...
ENDIF
Für das bedingte Verzweigen im Programmablauf gibt es 2 Spezialfälle:
IF condition GOTO target
IF condition GOSUB target
Vergleichsoperatoren
siehe Vergleichsoperatoren