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.