Mit der Anweisung @USE kann man Benutzeranweisungen definieren, indem man ein Benutzeranweisungssymbol und die zugehörige Anweisungsroutine definiert (siehe Handbuch Unterprogramm-Schnittstellen [1]).
Operation | Operanden | F-Modus, L-Modus |
@USE | COMMAND='[spec]' [ |
spec | Sonderzeichen, das als Benutzeranweisungssymbol für eine externe Anweisungsroutine dient. Das Benutzeranweisungssymbol muss verschieden vom aktuellen EDT-Anweisungssymbol sein. Für die spezielle Verwendung der externen Anweisungsroutine als Anweisungsfilter muss statt eines Benutzeranweisungssymbols die leere Zeichenfolge angegeben werden. Dies ist allerdings nur beim Aufruf des EDT als Unterprogramm zulässig (siehe Abschnitt „Spezialanwendung als Anweisungsfilter“ in [1]). |
entry | Einsprungpunkt der externen Anweisungsroutine. Der Modul, der den Einsprungpunkt enthält, wird sofort geladen. |
name | Einsprungpunkt der externen Anweisungsroutine. Die Operandensyntax mit Angabe von Klammern wird nur noch aus Kompatibilitätsgründen unterstützt. |
* | Der Name des Einsprungpunktes der Anweisungsroutine wird bei der Eingabe der benutzerdefinierten Anweisung als Anweisungsname angegeben. Der Modul, der den Einsprungpunkt enthält, wird erst bei der erstmaligen Ausführung der benutzerdefinierten Anweisung geladen. |
modlib | Name der Bibliothek, in der der Modul abgelegt ist, der den Einsprungpunkt Wird der Modul in der angegebenen Bibliothek nicht gefunden, wird zuerst Ist keine Bibliothek angegeben, wird zunächst in der privaten Tasklib und Bei Misserfolg wird die Fehlermeldung |
Es können maximal 5 verschiedene Benutzeranweisungssymbole vereinbart werden. Der Versuch, ein sechstes Benutzeranweisungssymbol zu vereinbaren, wird mit der Meldung EDT5373
abgewiesen.
Sind außer dem Benutzeranweisungssymbol keine weiteren Operanden angegeben, wird die mit dem angegebenen Benutzeranweisungssymbol zuvor definierte Anweisungsroutine deaktiviert.
Führt die Bearbeitung der @USE-Anweisung zu einem eigenen Ladevorgang, wird dem Binder-Lader-System ein zu dem bei entry
bzw. name
angegebenen Einsprungpunkt gleich lautender UNIT
-Name bekannt gemacht.
Dieser UNIT
-Name kann bei der @UNLOAD-Anweisung angegeben werden, um alle zusammen mit dem Einsprungpunkt geladenen Ladeeinheiten zu entladen. Wird der Einsprungpunkt bereits innerhalb einer anderen Ladeeinheit gefunden, führt @USE also nicht zu einem eigenen Ladevorgang, kann der Einsprungpunkt nur zusammen mit dieser Ladeeinheit entladen werden.
Wenn anstelle von entry
oder name
der Wert *
angegeben wird, findet dieser Mechanismus erst bei Eingabe der benutzerdefinierten Anweisungen Anwendung. Das heißt, dem Binder-Lader-System werden als UNIT
-Namen die Namen aller Einsprungpunkte bekannt gemacht, die zu einem eigenen Ladevorgang geführt haben.
Der EDT lädt einen Einsprungpunkt nur dann nach, wenn dieser nicht schon in einer vorher geladenen Ladeeinheit gefunden wurde. Dies gilt auch, wenn der EDT selbst als Unterprogramm eines Benutzerprogramms geladen wurde, für Einsprungpunkte in diesem Benutzerprogramm.
Es ist also nicht möglich, Einsprungpunkte gleichen Namens in unterschiedlichen Ladeeinheiten parallel zu benutzen. Trotzdem kann es vorkommen, dass beim Laden einer Anweisungsroutine vom Binder-Lader-System doppelte Namen entdeckt werden. In diesem Fall wird die @USE-Anweisung bzw. die Benutzeranweisung, die zum Nachladen geführt hat, mit der Meldung EDT4208
abgewiesen. Wenn der EDT sich nicht im F-Modus befindet, wird zusätzlich noch die Fehlermeldung des Binder-Lader-Systems ausgegeben, die es erlaubt, den Namen des doppelt vergebenen Symbols zu identifizieren.
Man kann diese Situation vermeiden, wenn man die mit einer früheren @USE-Anweisung geladene Ladeeinheit vor dem Absetzen einer weiteren @USE-Anweisung zuerst mit der Anweisung @UNLOAD entlädt. Das zugehörige Benutzeranweisungssymbol wird dann ebenfalls zurückgenommen.
Wird das Benutzeranweisungssymbol lediglich mittels @USE COMMAND='spec' zurückgenommen, oder wird ein Benutzeranweisungssymbol zum zweiten Mal zugewiesen, findet demgegenüber kein implizites Entladen der ursprünglich zugewiesenen Ladeeinheit statt.
Werden in der @USE-Anweisung EDT-eigene Einsprungpunkte oder Modulnamen angegeben, so wird die @USE-Anweisung mit der Meldung EDT4933
abgewiesen.
Bei Angabe des Operanden ENTRY=*
bzw. (*,modlib
) wird bei der Bildung des Namens des Einsprungpunktes aus dem ersten Teil der Benutzeranweisung grundsätzlich eine Umwandlung in Großbuchstaben vorgenommen, der Rest der Benutzeranweisung wird in Abhängigkeit der Einstellung bei @PAR LOW in Großbuchstaben umgewandelt oder nicht. Bei Angabe von (*,modlib
) werden zur Bildung des Namens des Einsprungpunktes aus Kompatibilitätsgründen nur bis zu 8 Zeichen berücksichtigt, sonst bis zu 32 Zeichen.
Einzelheiten zur Implementierung externer Anweisungsroutinen oder Anweisungsfilter und zur Parameterübergabe an diese sind im Abschnitt „Aufruf einer benutzerdefinierten Anweisung“ in [1] beschrieben.
Die Anweisung @USE gehört zu den sicherheitsrelevanten Anweisungen des EDT (siehe hierzu auch den Abschnitt „Zugriffsschutz“). In bestimmten privilegierten Kennungen wird die Anweisung @USE abgewiesen. Dies trifft auch für nichtunterbrechbare Systemprozeduren im Dialogbetrieb bzw. bei der Eingabe von einer Datei (Lesen mit RDATA
von SYSDTA
, Abarbeiten einer EDT-Startprozedur) zu, es sei denn, die Anweisung @USE wird von der geschützten Prozedur selbst gegeben (SYSDTA=SYSCMD
).
Hinweis
Bei Angabe von entry
sind bis zu 32 Zeichen lange Namen erlaubt, Groß- und Kleinschreibung wird unterschieden. Für name
sind nur 8 Zeichen erlaubt, eingegebene Kleinbuchstaben werden in Großbuchstaben umgewandelt.
Beispiel 1
Der Modul, der den Einsprungpunkt JOBVAR
in der Bibliothek PRIVLIB
enthält, kann mit den Parametern CATJV <name>
, ERAJV <name>
, GETJV <name>
,<ln>
bzw. SETJV <name>
,<ln>
aufgerufen werden. Der Name des Einsprungpunkts JOBVAR
wird direkt in der @USE-Anweisung angegeben.
@USE COMMAND = '*',ENTRY=JOBVAR,MODLIB=PRIVLIB ---------------------------(1) *CATJV JV.TEST ---------------------------------------------------------- (2) *SETJV JV.TEST,3 -------------------------------------------------------- (3)
(1) Das Benutzeranweisungssymbol *
wird vereinbart und der Modul JOBVAR
wird geladen.
(2) Der Modul JOBVAR
wird mit dem Parameter 'CATJV JV.TEST'
aufgerufen.
(3) Der Modul JOBVAR
wird mit dem Parameter 'SETJV JV.TEST,3'
aufgerufen.
Beispiel 2
In der Bibliothek PRIVLIB
befinden sich die beiden Module SORT
und HELP
. Der Name des Einsprungpunkts ist nich definiert, bis die benutzerdefinierte Anweisung tatsächlich aufgerufen wird..
@USE COMMAND = '*',ENTRY=*,MODLIB=MODLIB -------------------------------- (1) *SORT 20-100 ------------------------------------------------------------ (2) *HELP EDT5100 ----------------------------------------------------------- (3)
(1) Das Benutzeranweisungssymbol *
wird vereinbart. Es wird aber noch kein Modul geladen.
(2) Der Modul SORT
wird geladen und mit dem Parameter '20-100'
aufgerufen.
(3) Der Modul HELP
wird geladen und mit dem Parameter 'EDT5100'
aufgerufen.