coord-transf.2d elements3d elementsnon geo scriptsfunctionscontrol statem.attributesvariousaddons
flow controlloopsext. connection
IF…THEN GOTO GOSUB…RETURN END/EXIT BREAKPOINT
Name
GOSUB_RETURN
Syntax
GOSUBlabel
[...]
END

label_marker:
[...]
RETURN
Aufklappen Range
label>0 numerischer Ausdruck, Typ Integer
label_marker>0 Zahlenwert, Typ Integer, gefolgt von einem Doppelpunkt

oder (since ArchiCAD® 10):
label Ausdruck oder Variable, Typ Text
label_marker Klartext zwischen Anführungszeichen, gefolgt von einem Doppelpunkt
Aufklappen Description
GOSUB ruft ein Unterprogramm auf, dessen Befehle innerhalb des aktuellen Skriptes nach der label_marker 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 label muss eine vorhandene label_marker ergeben, sonst erfolgt eine Fehlermeldung. Die label_markern 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.
Aufklappen Example
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
Aufklappen Specialities
Das label 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 labele 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:
Aufklappen Tips and Tricks
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.
Aufklappen References
GDL-Handbuch 4.5 (DE) p. 107
GDL-Handbuch 5.0 (DE) p. 154
GDL-Handbuch 6.0 (DE) p. 188
GDL-Handbuch 6.5 (DE) p. 188
GDL-Handbuch 7.0 (DE) p. 188
GDL-Handbuch 8.0 (DE) p. 126
GDL-Handbuch 8.1 (DE) p. 128
GDL-Handbuch 9.0 (DE) p. 215
GDL-Handbuch 10.0 (DE) p. 215
GDL-Handbuch 11.0 (DE) p. 221
GDL Reference Guide 9.0 (INT) p. 207
GDL Reference Guide 10.0 (INT) p. 213
GDL Reference Guide 11.0 (INT) p. 213