|
Name
GOSUB_RETURN |
Syntax GOSUBlabel
[...]
END
label_marker:
[...]
RETURN |

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
|

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. |

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 |

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: |

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. |

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
|
|
|