perform  label      avanti

                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 eine #u-Variable schreiben oder aber schlicht in die iV schreiben - 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.

 

Unterprogramme kann man auch in getrennten Dateien unterbringen, die man mit  include  in jeden FLEX einbindet, wo sie gebraucht werden.

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