Name
GOSUB
Syntax
GOSUB sprungziel
[...]
END
sprungmarke:
[...]
RETURN
[...]
END
sprungmarke:
[...]
RETURN
sprungziel>0 numerischer Ausdruck, Typ Integer
sprungmarke>0 Zahlenwert, Typ Integer, gefolgt von einem Doppelpunkt
oder (ab ArchiCAD® 10):
sprungziel Ausdruck oder Variable, Typ Text
sprungmarke Klartext zwischen Anführungszeichen, gefolgt von einem Doppelpunkt
sprungmarke>0 Zahlenwert, Typ Integer, gefolgt von einem Doppelpunkt
oder (ab ArchiCAD® 10):
sprungziel Ausdruck oder Variable, Typ Text
sprungmarke Klartext zwischen Anführungszeichen, gefolgt von einem Doppelpunkt
GOSUB ruft ein Unterprogramm auf, dessen Befehle innerhalb des aktuellen Skriptes nach der sprungmarke stehen und dessen Ende mit dem Befehl RETURN erreicht wird. Nach RETURN setzt die Ausführung des Skriptes unmittelbar nach dem GOSUB-Befehl und der Sprungzielangabe fort.
So können Programmteile mehrfach und von unterschiedlichen Stellen im Skript aus aufgerufen werden.
Das Ergebnis des Ausdrucks sprungziel muss eine vorhandene sprungmarke ergeben, sonst erfolgt eine Fehlermeldung. Die sprungmarken müssen im kompletten Skriptdurchlauf eindeutig sein. Dabei werden die Marken im Masterskript mit berücksichtigt. Reihenfolge und Intervalle sind beliebig. Siehe auch Themenüberschrift "Programmablauf".
Unterprogramme stehen sinnvollerweise am Skriptende.
Die Ausführung des Befehles RETURN ohne, dass ein Unterprogramm aufgerufen wurde führt zu einer Fehlermeldung. Daher muss vor den Unterprogrammen die Ausführung mit END beendet werden.
So können Programmteile mehrfach und von unterschiedlichen Stellen im Skript aus aufgerufen werden.
Das Ergebnis des Ausdrucks sprungziel muss eine vorhandene sprungmarke ergeben, sonst erfolgt eine Fehlermeldung. Die sprungmarken müssen im kompletten Skriptdurchlauf eindeutig sein. Dabei werden die Marken im Masterskript mit berücksichtigt. Reihenfolge und Intervalle sind beliebig. Siehe auch Themenüberschrift "Programmablauf".
Unterprogramme stehen sinnvollerweise am Skriptende.
Die Ausführung des Befehles RETURN ohne, dass ein Unterprogramm aufgerufen wurde führt zu einer Fehlermeldung. Daher muss vor den Unterprogrammen die Ausführung mit END beendet werden.
GOSUB 300
ADD2 0.95,0.00 : GOSUB 300 : DEL 1
ADD2 0.95,0.95 : GOSUB 300 : DEL 1
ADD2 0.00,0.95 : GOSUB 300 : DEL 1
END
300: ! ### Unterprogramm
RECT2 0,0,0.05,0.05
RETURN
ADD2 0.95,0.00 : GOSUB 300 : DEL 1
ADD2 0.95,0.95 : GOSUB 300 : DEL 1
ADD2 0.00,0.95 : GOSUB 300 : DEL 1
END
300: ! ### Unterprogramm
RECT2 0,0,0.05,0.05
RETURN
Das sprungziel kann auch als Ausdruck oder Variable angegeben werden. ArchiCAD kann dieses aber erst zur Laufzeit des Skriptes ermitteln. Daher können die betreffenen Befehl nicht vorcompiliert werden, was Performanceeinbußen des Objektes bewirkt. Es sollten also möglichst absolute, eindeutige sprungziele verwendet werden.
Ist im Masterskript ein Unterprogramm nötig müssen diese mit GOTO übersprungen werden, denn die Ausführung kann im Master-Skript nicht mit END unterbrochen werden:
! ### Master Skript
typ=2
GOSUB 100+typ
GOTO 200
! Unterprogramme
100:
breite=5.6
return
101:
breite=0.25
return
102:
breite=3.2
return
200:
Ist im Masterskript ein Unterprogramm nötig müssen diese mit GOTO übersprungen werden, denn die Ausführung kann im Master-Skript nicht mit END unterbrochen werden:
! ### Master Skript
typ=2
GOSUB 100+typ
GOTO 200
! Unterprogramme
100:
breite=5.6
return
101:
breite=0.25
return
102:
breite=3.2
return
200:
Bedingte Unterprogrammaufrufe können auch mit dem IF...GOSUB-Befehl erfolgen.
Unterprogramme außerhalb des aktuellen Skriptes in separatren Dateien nennt man Makros und werden mit CALL aufgerufen.
Unterprogramme außerhalb des aktuellen Skriptes in separatren Dateien nennt man Makros und werden mit CALL aufgerufen.