Soll der EDT die Anweisungsroutine einer benutzerdefinierten Anweisung mit dem V17-Format der Schnittstelle aufrufen, muss der Ersteller der Anweisungsroutine zusätzlich eine Initialisierungsroutine bereitstellen.
Der Name des Einsprungpunktes der Initialisierungsroutine ergibt sich aus dem Namen der Anweisungsroutine, indem die Zeichenfolge @I
angehängt wird.
Beispiel
Einsprungpunkt der Anweisungsroutine: SELECT
Einsprungpunkt der zugehörigen Initialisierungsroutine: SELECT@I
Die Initialisierungsroutine muss im gleichen Modul liegen wie die Anweisungsroutine, d.h. beim Laden der Anweisungsroutine muss die Initialisierungsroutine mitgeladen werden.
In der Initialisierungsroutine kann der Anwender den Zeichensatz festlegen, in dem der Puffer beim Aufruf der Anweisungsroutine codiert sein soll (im Feld EGLCCSN
im Kontrollblock EDTGLCB
). Lässt der Anwender das Feld EGLCCSN
leer (Leerzeichen oder binär Null), nimmt der EDT den Zeichensatz UTFE
an.
Darüber hinaus kann die Initialisierungsroutine spezifische Initialisierungen für die Anweisungsroutine vornehmen. Die Initialisierungsroutine kann die Funktionen der IEDTGLE-
Schnittstelle benutzen. Dabei gelten die gleichen Einschränkungen wie bei Anweisungsroutinen.
Für jede Anweisungsroutine wird die Initialisierungsroutine immer dann aufgerufen, wenn die Anweisungsroutine geladen bzw. ihre Adresse lokalisiert wurde. Dabei wird jeder Einsprungpunkt als eigene Anweisungsroutine betrachtet (auch wenn mehrere Einsprungpunkte die gleiche Codestelle bezeichnen).
Ist bei der Anweisung @USE kein fester Einsprungpunkt angegeben (als Einsprungpunkt ist
*
angegeben), ergibt sich der Name des Einsprungpunktes erst bei der Eingabe der benutzerdefinierten Anweisung. Die Initialisierungsroutine wird dann bei jedem Aufruf einer Benutzeranweisung mit diesem Einsprungpunkt gerufen. Folglich muss eine Initialisierungsroutine für derartige Anweisungen so geschrieben sein, dass sie mit mehrfachen Aufrufen umgehen kann.Ist bei der Anweisung @USE ein fester Einsprungpunkt angegeben, wird die Anweisungsroutine bei der @USE-Anweisung geladen und die Initialisierungsroutine unmittelbar nach dem Laden gerufen. Dies geschieht in der Regel nur einmal. Wird das Benutzersymbol zwischenzeitlich jedoch einer anderen Anweisungsroutine zugeordnet, wird die Initialisierungsroutine beim erneuten Zuweisen der ersten Anweisungsroutine auch erneut aufgerufen, unabhängig davon, ob die erste Anweisungsroutine neu geladen werden musste oder nicht.
Hat der Ersteller keine Initialisierungsroutine definiert, wird die Anweisungsroutine mit der Version 1 des Kontrollblocks EDTGLCB
gerufen (V16-Format). Der Puffer COMMAND
wird dann immer im Zeichensatz UTFE
codiert.
Beim Sprung in die Initialisierungsroutine sind die Register wie folgt geladen:
Register | Datenbereich |
|
|
Erläuterung Registerinhalte siehe Abschnitt „Aufruf des EDT“.
Die Initialisierungsroutine wird vom EDT mit folgender Parameterliste aufgerufen::
Parameterliste |
Der Kontrollblock EDTGLCB
, wird vom EDT bereitgestellt und ist bereits initialisiert. Der Kontrollblock darf nach Verlassen der Initialisierungsroutine nicht mehr verwendet werden. Die Initialisierungsroutine wird mit der Version 2 des Kontrollblocks gerufen.
Aufrufparameter | Rückkehrparameter | ||
werden vom EDT vor Aufruf der | können von der Initialisierungsroutine | ||
| EGLUNIT EGLVERS EGLUSR1 EGLUSR2 |
| EGLRETC EGLUSR2 EGLCCSN EGLINDB |
Returncodes bei Initialisierungsroutinen
Die Returncodes müssen von der Initialisierungsroutine gesetzt werden und werden vom EDT ausgewertet.
EGLMRET | EGLSR1 | Bedeutung |
EUPRETOK | 00 | Kein Fehler |
EUPVEERR | 00 | Version wird von der Initialisierungsroutine nicht unterstützt; die benutzerdefinierte Anweisung wird mit der Meldung EDT5470 abgewiesen. |
|
| Sonstige Fehler. Die benutzerdefinierte Anweisung wird mit |
Nach der Rückkehr aus der Initialisierungsroutine wertet der EDT das Feld EGLCCSN
aus. Bei allen Aufrufen der zugehörigen Anweisungsroutine wird der Puffer COMMAND
in diesem Zeichensatz codiert. Dabei legt der in der Initialisierungsroutine vereinbarte Zeichensatz nur fest, in welchem Zeichensatz der Puffer an die Anweisungsroutine übergeben wird. Beim Aufruf von EDT-Schnittstellen durch die Anweisungsroutine kann der Aufrufer selbstverständlich durch Überschreiben des Feldes EGLCCSN
einen anderen Zeichensatz festlegen. Dieses Überschreiben hat allerdings keine Auswirkungen auf nachfolgende Aufrufe der Anweisungsroutine sondern gilt nur lokal für die aufgerufene IEDTGLE
-Schnittstelle.
Die Aufrufe der Anweisungsroutine erfolgen mit der Version 2 des Kontrollblocks EDTGLCB
.
Das Flag EGLCOMP
im Indikator-Byte EGLINDB
wird nach Rückkehr aus der Initialisierungsroutine ebenfalls ausgewertet. Wenn die Initialisierungsroutine dieses Feld gesetzt hat, erhält ein Anweisungsfilter (siehe Abschnitt „Spezialanwendung als Anweisungsfilter“) die zu filternde Anweisung grundsätzlich in Großbuchstaben, wurde es nicht gesetzt, wird je nach Einstellung bei @PAR LOW die Anweisung in Großbuchstaben oder in Groß-/Kleinschreibung übergeben.
Läuft die Version EDT V16.6B oder EDT V17.0A im Kompatibilitätsmodus, wird die Initialisierungsroutine nicht gerufen. Der Aufruf der Anweisungsroutine erfolgt mit der Version 1 des Kontrollblocks EDTGLCB
.
Eine Anweisungsroutine, die sowohl im Unicode-Modus als auch im Kompatibilitäts-Modus bzw. mit EDT V16.6B laufen soll, muss die Version (EGLVERS
) des vom EDT übergebenen Kontrollblocks abfragen und entsprechend darauf reagieren.