Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Aufruf der Initialisierungsroutine zu einer benutzerdefinierten Anweisung

&pagelevel(3)&pagelevel

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

(R1)
(R13)
(R14)
(R15)

A (PARAMETERLISTE)
A (SAVEAREA)
A (RETURN)
V (ENTRY)

Erläuterung Registerinhalte siehe Abschnitt „Aufruf des EDT“.

Die Initialisierungsroutine wird vom EDT mit folgender Parameterliste aufgerufen::

Parameterliste   :     A (EDTGLCB)

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
Initialisierungsroutine versorgt

können von der Initialisierungsroutine
versorgt werden und werden vom EDT nach
der Rückkehr ausgewertet

EDTGLCB: 

EGLUNIT
EGLVERS
EGLUSR1
EGLUSR2

EDTGLCB: 

EGLRETC
EGLUSR2
EGLCCSN
EGLINDB

Returncodes bei Initialisierungsroutinen

Die Returncodes müssen von der Initialisierungsroutine gesetzt werden und werden vom EDT ausgewertet.

EGLMRET

EGLSR1

Bedeutung

EUPRETOK00Kein Fehler
EUPVEERR00Version wird von der Initialisierungsroutine nicht unterstützt;
die benutzerdefinierte Anweisung wird mit der Meldung
EDT5470 abgewiesen.

EUPRTERR

00

Sonstige Fehler. Die benutzerdefinierte Anweisung wird mit
der Meldung EDT5471 abgewiesen.

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.