Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

@USE - Definieren externer Anweisungsroutinen

&pagelevel(3)&pagelevel

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]' [
{ ,ENTRY={entry | *} [,MODLIB=modlib]
  ( {name | *} [,modlib] ) } ]

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.
Ebenso wird der UNIT-Name, mit dessen Hilfe die Ladeeinheit wieder entladen werden kann (siehe unten), erst zu diesem Zeitpunkt gebildet.

modlib

Name der Bibliothek, in der der Modul abgelegt ist, der den Einsprungpunkt
enthält. Die Bibliothek muss existieren, sonst wird die Anweisung mit der
Fehlermeldung EDT5372 abgewiesen.

Wird der Modul in der angegebenen Bibliothek nicht gefunden, wird zuerst
in den alternativen Bibliotheken BLSLIBnn gesucht, dann in der privaten
Tasklib bzw. in der System-Tasklib $TASKLIB.

Ist keine Bibliothek angegeben, wird zunächst in der privaten Tasklib und
dann in der System-Tasklib $TASKLIB gesucht.

Bei Misserfolg wird die Fehlermeldung EDT5372 ausgegeben.

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.