Beim Erstellen und Ausführen von EDT-Prozeduren sind nachfolgende Regeln zu beachten.
Lesen von Anweisungen und Datenzeilen
Der EDT liest beim Ausführen einer EDT-Prozedur Anweisungen und Datenzeilen im L-Modus. Wird die EDT-Prozedur im F-Modus angestartet, wechselt der EDT in den L-Modus, führt die Prozedur aus und wechselt anschließend wieder in den F-Modus.
Für die Unterscheidung zwischen Anweisungen und Datenzeilen gelten daher die gleichen Regeln wie für die Eingaben im L-Modus (siehe Abschnitt „L-Modus“). Insbesondere werden Zeilen mit zwei aufeinander folgenden (nur evtl. durch Leerzeichen getrennten) EDT-Anweisungssymbolen bzw. Benutzeranweisungssymbolen als Datenzeilen interpretiert. Dies erlaubt, innerhalb von Prozeduren dynamisch andere Prozeduren aufzubauen und diese gleich auszuführen (siehe Beispiele weiter unten).
Erlaubte Anweisungen
Mit Ausnahme der Anweisungen @DIALOG, @DROP und @INPUT sind innerhalb von EDT-Prozeduren alle Anweisungen erlaubt, die auch im L-Modus erlaubt sind (siehe Abschnitt „L-Modus“).
In @DO-Prozeduren sind zusätzlich die Anweisungen @GOTO, @DO (Format 2) und @PARAMS erlaubt. In @INPUT-Prozeduren wird die Anweisung @IF ... GOTO stillschweigend ignoriert, wenn die Bedingung nicht erfüllt ist, und wird mit der Fehlermeldung EDT4942
abgewiesen, wenn die Bedingung erfüllt ist.
Aktuelle und aktive Arbeitsdatei, spezielle Arbeitsdateien
Die aktuelle Arbeitsdatei wird im L-Modus mit der @PROC- oder der @SETF-Anweisung, im F-Modus mit der @SETF-Anweisung oder durch Eingabe in der Anweisungszeile des entsprechenden Arbeitsfensters festgelegt. Beim Ausführen von EDT-Prozeduren wirken die gelesenen Anweisungen und Datensätze stets auf die aktuelle Arbeitsdatei. In einer @DO-Anweisung darf daher die aktuelle Arbeitsdatei nicht spezifiziert werden.
Der Versuch wird mit der Meldung EDT4906
abgewiesen.
Als aktive Arbeitsdateien werden diejenigen Arbeitsdateien bezeichnet, die eine @DO-Prozedur enthalten, die gerade ausgeführt wird. Wenn @DO-Prozeduren geschachtelt werden, können mehrere (bis zu 22) Arbeitsdateien aktiv sein, nämlich diejenigen, die mit @DO aktiviert und noch nicht mit @RETURN wieder verlassen wurden.
Bei der Schachtelung von @DO-Prozeduren darf auch eine aktive Arbeitsdatei in @DO-Anweisungen angegeben werden.
Rekursive Aufrufe sind also möglich, jedoch ebenfalls nur bis zu einer maximalen Schachtelungstiefe von 23. Eine aktive Arbeitsdatei darf nicht zur aktuellen Arbeitsdatei gemacht werden. Eine @PROC- oder @SETF-Anweisung für eine aktive Arbeitsdatei wird daher mit der Meldung EDT4959
zurückgewiesen.
Grundsätzlich können @DO-Prozeduren in jeder Arbeitsdatei, mit Ausnahme von Arbeitsdatei 0, also in den Arbeitsdateien 1 bis 22, abgelegt und zum Ablauf gebracht werden. Ein @DO 0 wird mit der Meldung EDT3209
abgewiesen.
Da etliche EDT-Anweisungen Ausgaben standardmäßig in die Arbeitsdatei 9 schreiben, empfiehlt es sich, diese Arbeitsdatei nicht für @DO-Prozeduren zu verwenden.
EDT-Prozeduren und Zeichensätze
Beim Ausführen einer EDT-Prozedur werden Anweisungen und Datensätze in dem Zeichensatz der jeweiligen EDT-Prozedur gelesen.
Das ist bei @INPUT-Prozeduren der Zeichensatz der katalogisierten Datei bzw. des Bibliothekselements, bei @DO-Prozeduren der Zeichensatz derjenigen aktiven Arbeitsdatei, aus der gerade gelesen wird. Die gelesenen Datensätze und die in den Anweisungen enthaltenen Literale oder textartigen Ausdrücke müssen evtl. noch umcodiert werden, falls sie sich auf Objekte (z.B. die aktuelle Arbeitsdatei oder eine Zeichenfolgevariable) beziehen, denen ein anderer Zeichensatz zugeordnet ist. Die genauen Regeln dafür siehe Abschnitt „Zeichensätze“.
Beispiel: Erstellen und Aufruf einer @DO-Prozedur im F-Modus
Es wird in die Arbeitsdatei 22 gewechselt. In ihr wird die Prozedur erstellt.
Die Anweisungen werden in der Arbeitsdatei 22
erstellt. Anschließend wird wieder in die Arbeitsdatei 0
zurückgekehrt.
Aus der Arbeitsdatei 0
wird die Prozedur in Arbeitsdatei 22
mit @DO aufgerufen.
Das Ergebnis des Prozedurlaufes ist in Arbeitsdatei 0
zu sehen.
Beispiel: Aufruf einer Prozedur im L-Modus als @DO-Prozedur
1. @PROC 1 -------------------------------------------------------- (01) 1. @ @CREATE 1: 'DIES IST EIN BEISPIEL' 2. @ @CREATE 2: 'FUER EINE PROZEDUR IM L-MODUS' 3. @ @COPY 1 TO 3-------------------------------------------------- (02) 4. @ @DELETE 1:1-9 5. @ @PRINT 6. @END ----------------------------------------------------------- (03) 1. @DO 1 ---------------------------------------------------------- (04) 1.0000 EIN BEISPIEL 2.0000 FUER EINE PROZEDUR IM L-MODUS 3.0000 DIES IST EIN BEISPIEL 4.
(01) | Es wird in die Arbeitsdatei |
(02) | EDT-Anweisungen werden in die Arbeitsdatei |
(03) | Es wird in die Arbeitsdatei |
(04) | Aufruf der @DO-Prozedur. Die Anweisungen in der Arbeitsdatei werden ausgeführt. |