Register
perform label acon
Unterprogramm-Aufruf
Es wird, wie bei jump , zu der Sprungmarke :label gesprungen.
Sobald danach aber ein Befehl return erreicht wird, wird zurückgesprungen, d.h. es geht mit der nächsten Zeile weiter, die auf perform folgt.
Wenn label fehlt, wird der Inhalt der iV genommen. Dies macht die dynamische Setzung einer UP-Adresse möglich.
Wenn die Sprungmarke :label nicht gefunden wird, bricht der FLEX mit einer Fehlermeldung Label ... not found ab.
Das Unterprogramm muß keine zusammenhängende Zeilenfolge sein. Es kann an jeder Stelle des FLEXes beginnen, d.h. das label kann weiter oben oder weiter unten stehen. Es kann auch mehrere return geben: das erste, das erreicht wird, beendet das Unterprogramm.
Achtung:
Verschachtelung ist nicht möglich: aus einem UP heraus kann kein weiteres UP aufgerufen werden.
Sehr wohl kann aus einem UP heraus mit exec ein anderer FLEX gestartet werden; dann wird aber nicht zur Aufrufstelle zurückgekehrt.
Hinweise zur Übergabe von Daten an ein Unterprogramm
Wenn etwas an das Unterprogramm zu übergeben ist, kann man es entweder vorher in #u-Variablen oder $-Variablen schreiben oder aber schlicht in die iV, mit einem var-Befehl direkt vor dem Aufruf. Dieser Inhalt ist dann am Beginn des UP sofort verwendbar. Auch die Inhalte aller #u und $-Variablen sind verfügbar sowie die Felder des aktuellen Satzes, d.h. eine ausdrückliche Datenübergabe ist i.d.R. gar nicht nötig, es gibt nur globale Variablen.
Unterprogramme kann man auch in getrennten Dateien unterbringen, die man mit include in jeden FLEX einbindet, wo sie gebraucht werden.
Beispiel 1: Die Berechnung des Osterdatums. Dafür kann man gauss.flx einbinden:
var "1945"
perf gauss
// jetzt steht das Osterdatum als JJJJMMTT in der Variablen #u!d
var #u!d
mes
end
include gauss.flx
Beispiel 2: Die Datei iban.flx ist ein UP, das man auch selbständig aufrufen kann:
X iban
Es errechnet die IBAN aus Kontonummer und Bankleitzahl. Will man es als UP verwenden, hängt man es unten an den eigenen FLEX an mit dem Befehl
include iban.flx
und schreibt im eigenen FLEX an beliebiger Stelle:
.. Belegung der Variablen #ukO und #ubL mit Kto.Nr.und BLZ
perform iban
und schon steht die IBAN in der iV und kann verwendet werden. Der iban.flx ist ausführlich kommeniert und kann als Beispiel dienen für eigene Routinen ähnlicher Art.
Beispiel 3: Die Datei ftr.inc führt eine Volltextsuche in der gesamten Datenbank durch. Eingebunden ist es in ftr.flx, aber verwendbar auch in eigenen FLEXen.