Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

CMD - Kommando aufrufen

&pagelevel(3)&pagelevel

Allgemeines

Anwendungsgebiet:

Kommando aufrufen; siehe "Makroaufrufe an den Kommandosprachübersetzer",
Kommunikation; siehe "Kommunikation (Programm, Anwender, System)"

Makrotyp:

S-Typ, MF-Format 1: Standardform/L-/D-/C-/E-Form; siehe "S-Typ-Makroaufrufe"

Makrobeschreibung

Der Makro CMD ermöglicht den Aufruf eines Kommandos bzw. einer Liste von Kommandos im Programmodus. Der Makro CMD ruft den MCLP (Macro Command Language Processor) auf und übergibt an diesen den Kommandonamen und die angegebenen Kommandooperanden bzw. eine Liste von Kommandonamen und die zugehörigen Kommandooperanden. Nach Ausführung des (letzten) Kommandos wird das Programm fortgesetzt.
Der Anwender kann das Protokoll der Kommandobearbeitung (z.B. Systemmeldungen) auf SYSOUT und/oder in einen Bereich seines Programms oder in eine S-Variable übertragen lassen. Der Kommando-Returncode kann ebenfalls in einen Bereich des Programms übertragen werden.

In Tabelle 12 sind die Kommandos aufgeführt, die über den Makro CMD nicht aufgerufen werden können.

Makroaufrufformat und Operandenbeschreibung

CMD

'kommandoname' [{
                                       ,'oplist1'[, {adr / (r)}] |
                  , , {adr / (r)}
                }]

[,OPART2='oplist2'] [,OPART3='oplist3'] [,OPART4='oplist4']

[,OPART5='oplist5'] [,OPART6='oplist6'] [,OPART7='oplist7']

,LIST=NO / YES

[,CMDRC=adr]

,DIALOG=NO / YES

,SYSOUT=YES / NO

,SUBST=NO / JV / ALL

,ORIGIN=CMD / CURRENT

[,DTAVAR@=adr]

[,DTAVARL=länge]

,DTAEXT=NO / YES

[,MSGVAR@=adr]

[,MSGVARL=länge]

,MSGEXT=NO / YES

,VER=1 / 2 / 3 / 4

,BUFMOD=SHORT / LONG

[,PARMOD=24 / 31]

[,MF=L / (E,..) / D / C]

,PREFIX=M / p

Nach der Beschreibung der Stellungsoperanden werden die Schlüsselwortoperanden in alphabetischer Reihenfolge aufgeführt.

'kommandoname'
kommandoname = Name des Kommandos, das über CMD aufgerufen werden soll.
Wird der Operand LIST=YES angegeben, kann die Zeichenkette 'kommandoname' eine Liste mehrerer Kommandos enthalten, die durch Semikolon voneinander getrennt werden. Die Kommandos werden durch ein Leerzeichen von ihrer Kommandooperandenliste getrennt. Tritt bei der Abarbeitung eines Kommandos dieser Liste ein Fehler auf, wird der CMD an dieser Stelle abgebrochen.
Besteht der Operand 'kommandoname' aus einer Liste von Kommandos, entfällt die Angabe der Operanden 'oplist1' und OPARTx.

'oplist1'
oplist1 = op1,op2,op3,..... = Liste der Kommandooperanden.
Länge der Liste <= 248 Zeichen. Die Liste kann an beliebiger Stelle bei den Operanden OPART2, ...., OPART7 fortgesetzt werden. Die nächstfolgende Liste wird immer als Fortsetzung der vorhergehenden betrachtet (ohne Beachtung der Ziffern 2...7).
Der Operand darf nicht zusammen mit LIST=YES angegeben werden.

adr
Adresse des Empfangsfeldes für das SYSOUT-Protokoll. Wenn adr nicht angegeben ist, geht die Ausgabe nur nach SYSOUT. Das ist auch der Fall, wenn die Länge des Empfangsfeldes Null ist. Das Empfangsfeld muss auf Wortgrenze ausgerichtet sein. Aufbau und maximale Länge des Empfangsfeldes hängen vom Wert des Operanden BUFMOD ab.
Jeder Satz des SYSOUT-Protokolls, der in das Empfangsfeld übertragen wird, enthält in den ersten vier Byte sein Satzlängenfeld (Byte 0-1 enthält die Satzlänge, Byte 2-3 sind der reservierte Teil). Der eigentliche Ausgabetext beginnt ab Byte 4 jedes Satzes. Die Ausgabesätze werden fortlaufend in den Bereich geschrieben, bis die Bereichsgrenze erreicht ist. Weitere Ausgabesätze, die in dem Bereich nicht mehr Platz haben, werden nur noch nach SYSOUT ausgegeben (wenn SYSOUT=YES angegeben ist). Bei Überschreiten der Bereichsgrenze kann ein Satz abgeschnitten werden (Returncode X'0C').

Hinweis

Das SYSOUT-Ausgabeformat für ein Kommando im Dialogbetrieb kann verschieden sein von dem im Batch-Betrieb. Das muss bei der Definition des Empfangsfeldes beachtet werden.

(r)
r = Register, das die Adresse des Empfangsfeldes enthält.

BUFMOD=
legt den Aufbau und die maximale Größe des Empfangsfeldes für das SYSOUT-Protokoll fest.

SHORT
Das Empfangsfeld kann bis zu 32 KB lang sein und hat folgenden Aufbau:


Byte 0-1:

Länge l (sedezimal) des Empfangsfeldes in Byte (l <= 215-1), die vom Anwender anzugeben ist.

Byte 2-3:

reserviert, kein Eintrag

Byte 4-n:

SYSOUT-Protokoll


LONG
darf nur angegeben werden, wenn die 31-Bit-Schnittstelle des Makros generiert wird (PARMOD=31). Dieser Wert darf nur in Verbindung mit VER=2/3/4 angegeben werden. Das Empfangsfeld kann bis zu 2 GB lang sein und hat folgenden Aufbau:


Byte 0-3:

Länge l (sedezimal) des Empfangsfeldes in Byte (l <= 231 - 1), die vom Anwender anzugeben ist. Folgende Werte für l sind zu beachten:

l=0:Das Empfangsfeld wird ignoriert
1 <= l <= 16:Die Makroausführung wird mit dem Returncode X'08' abgebrochen

Byte 4-7:

Länge (sedezimal) der Nutzinformation im Empfangsfeld in Byte (einschließlich des 16 Byte langen Vorspanns) wird bei der Makroausführung vom System eingetragen. Voreinstellung: Länge=16

Byte 8-11:

reserviert; sie müssen jedoch beim Aufruf des CMD-Makros gelöscht sein (binär Null oder -1), sonst Abbruch mit Fehlercode X'08'

Byte 12-15:

reserviert; wird vom System verwendet

Byte 16-n:

SYSOUT-Protokoll


Hinweise

Ist das Empfangsfeld nicht vollständig zugewiesen, bricht die Makrobearbeitung mit dem Returncode X'08' ab.
Wird die angegebene Länge l überschritten, wird die Ausgabe wie bei BUFMOD= SHORT abgeschnitten. CMD liefert den Returncode X'0C' zurück.

CMDRC=
gibt die symbolische Adresse eines 9 Byte langen Feldes mit folgendem Aufbau an, in das der Kommando-Returncode des vom CMD-Makro bearbeiteten Kommandos geschrieben wird.

Byte 0:

Subcode2 im Assembler-Format X'nn'

Byte 1:

Subcode1 im Assembler-Format X'nn'

Byte 2-8:

Maincode im Assembler-Format CL7

Wird im Operanden 'kommandoname' eine Liste mehrerer Kommandos übergeben (ist nur zusammen mit LIST=YES möglich), steht im angegeben Feld der Returncode des zuletzt an den MCLP übergebenen Kommandos.
Der Operand darf nur in Verbindung mit VER=3/4 angegeben werden.

adr
symbolische Adresse des Feldes, in das der Returncode geschrieben werden soll. Voreinstellung: 0, es wird kein Returncode übergeben.

DIALOG=
beschreibt, ob ein Fehler- oder Hilfedialog beim Erkennen von Syntaxfehlern geführt werden soll.

NO
Es wird kein Fehlerdialog geführt.

YES
Es soll ein Fehlerdialog geführt werden, wenn der Typ der Datensichtstation dies ermöglicht.

DTAEXT=
bestimmt, ob die bei DTAVAR@ angegebene S-Variable um den Inhalt der von OPS generierten Variablen erweitert werden soll oder nicht.
Die Angabe dieses Operanden ist nur in Verbindung mit VER=4 und den Angaben für DTAVAR@ und DTAVARL erlaubt.

NO
Die S-Variable soll nicht erweitert werden.
Der (alte) Inhalt der S-Variablen wird durch den Inhalt der OPS-Variablen ersetzt.

YES
Die S-Variable wird erweitert, indem der Inhalt der OPS-Variablen angehängt wird. Kann die S-Variable nicht erweitert werden, wird der (alte) Inhalt vor dem Abspeichern gelöscht.

DTAVAR@=
gibt die symbolische Adresse eines Bereiches an, in dem der Name einer zusammengesetzten S-Variable steht. In diese S-Variable sollen die Inhalte aller von OPS generierten Variablen gespeichert werden.
Wurde die S-Variable vor dem Makroaufruf nicht deklariert (siehe Kommando DECLARE-VARIABLE im Handbuch SDF-P [21]), wird die Abarbeitung mit dem Returncode X'10' abgebrochen.
Der Operand darf nur in Verbindung mit VER=4 angegeben werden.

adr
symbolische Adresse des Bereichs mit dem Namen der S-Variablen. Sie kann mit der beim Operanden MSGVAR@ angegebenen Adresse identisch sein, um alle von MIP oder OPS generierten Variablen in einem einzigen Bereich zu sichern.

DTAVARL=
gibt die Länge des bei DTAVAR@ adressierten Bereiches an.
Der Operand darf nur in Verbindung mit VER=4 angegeben werden.

länge
anzugebende Länge des Feldes in Byte

LIST=
ermöglicht für den Operanden 'kommandoname' die Eingabe einer Liste mehrerer Kommandos und ihrer Operanden.

NO
Der Operand 'kommandoname' besteht aus einem einzigen Kommando.

YES
Der Operand 'kommandoname' enthält eine Liste mehrerer Kommandos, die mit Semikolon voneinander getrennt werden.
Dieser Wert darf nur in Verbindung mit VER=3/4 angegeben werden.

MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. für einen Präfix) siehe Abschnitt „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.
Bei MF=C oder MF=D kann ein Präfix PREFIX (p = 1 Buchstabe), wie im Aufrufformat dargestellt, angegeben werden.

MSGEXT=
bestimmt, ob die bei MSGVAR@ angegebene S-Variable um den Inhalt der von MIP generierten Variablen erweitert werden soll oder nicht.
Die Angabe dieses Operanden ist nur in Verbindung mit VER=4 und den Angaben für MSGVAR@ und MSGVARL erlaubt.

NO
Die S-Variable soll nicht erweitert werden.
Der (alte) Inhalt der S-Variablen wird durch den Inhalt der MIP-Variablen ersetzt.

YES
Die S-Variable wird erweitert, indem der Inhalt der MIP-Variablen angehängt wird. Kann die S-Variable nicht erweitert werden, wird der (alte) Inhalt vor dem Abspeichern gelöscht.

MSGVAR@=
gibt die symbolische Adresse eines Bereiches an, in dem der Name einer zusammengesetzten S-Variable steht. In diese S-Variable sollen die Inhalte aller von MIP generierten Variablen gespeichert werden.
Wurde die S-Variable vor dem Makroaufruf nicht deklariert (siehe Kommando DECLARE-VARIABLE im Handbuch SDF-P [21]), wird die Abarbeitung mit dem Returncode X'10' abgebrochen.
Der Operand darf nur in Verbindung mit VER=4 angegeben werden.

adr
symbolische Adresse des Bereichs mit dem Namen der S-Variablen. Sie kann mit der beim Operanden DTAVAR@ angegebenen Adresse identisch sein, um alle von MIP oder OPS generierten Variablen in einem einzigen Bereich zu sichern.

MSGVARL=
gibt die Länge des bei MSGVAR@ adressierten Bereiches an. Der Operand darf nur in Verbindung mit VER=4 angegeben werden.

länge
anzugebende Länge des Feldes in Byte.

OPARTx=
ermöglicht die Fortsetzung der Operandenliste.
x = Element aus der Menge (2, 3, .., 7).

'oplistx'
oplistx = op,op,opkj,.... = (Fortsetzungs-)Liste der Kommandooperanden; x = Element aus der Menge (2,3,...,7).
Länge: oplistx = 1..248 Zeichen.
Der Operand darf nicht zusammen mit LIST=YES angegeben werden.

ORIGIN=
gibt den Ursprung des Kommandos an, der benutzt werden muss, wenn überprüft wird, ob das Kommando erlaubt ist.
Der Operand darf nur in Verbindung mit VER=4 und MF=D oder MF=C angegeben werden.

CMD
Die Kommandoeingabe muss mit dem CMD-ALLOWED-Attribut aus der Syntax-Datei überprüft werden.

CURRENT
Zusätzlich zum CMD-ALLOWED-Attribut, überprüft SDF auch, ob das Kommando im aktuellen Modus erlaubt ist. Das ist der Modus, in dem das Programm gestartet wurde. Der Modus kann sein: Dialog, Dialog-Prozedur, Batch oder Batch-Prozedur.

PARMOD=
steuert die Makroauflösung. Es wird entweder die 24-Bit- oder die 31-Bit-Schnittstelle generiert.
Wenn PARMOD nicht spezifiziert wird, erfolgt die Makroauflösung entsprechend der Angabe für den Makro GPARMOD oder der Voreinstellung für den Assembler (= 24-Bit-Schnittstelle).

24
Die 24-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 24-Bit-Adressen (Adressraum <= 16 MB).
Dieser Wert darf nur in Verbindung mit VER=1 angegeben werden.

31
Die 31-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 31-Bit-Adressen (Adressraum <= 2 GB). Datenlisten beginnen mit dem Standardheader.

SUBST=
bestimmt, welche Substitutionen in der Kommandoeingabe erfolgen sollen.

NO
In der Kommandoeingabe wird keine Substitution durchgeführt.

JV
Alle Jobvariablen in der Kommandoeingabe werden durch ihre Inhalte ersetzt.

Dieser Wert darf nur in Verbindung mit VER=4 angegeben werden.

ALL
Die Kommandoeingabe wird, abhängig von der Programmumgebung, vollständig ersetzt, d.h. alle S-Variablen, Jobvariablen und SYSFILE-Prozedurparameter in der Kommandoeingabe werden in der angegebenen Reihenfolge ersetzt. Die Ersetzung von SYSFILE-Prozedurparametern ist nur in Nicht-S-Prozeduren sinnvoll.
S-Variablen werden nur dann ersetzt, wenn sie in der aktuellen Programmumgebung sichtbar (bekannt) sind.
Dieser Wert darf nur in Verbindung mit VER=4 angegeben werden.

SYSOUT=
beschreibt, ob das Protokoll auch nach SYSOUT ausgegeben werden soll.

YES
Die Ausgabe erfolgt auch auf SYSOUT.

NO
Es erfolgt keine Ausgabe nach SYSOUT. In diesem Fall muss das Empfangsfeld adr spezifiziert sein.

VER=1 / 2 / 3 / 4
hat nur Bedeutung für MF ungleich E und wird andernfalls ignoriert. Der Operand legt fest, welche Version des Datenbereichs erzeugt werden soll.
Zur Verträglichkeit mit anderen Operanden siehe folgende Tabelle.




VER=1

VER=2

VER=3

VER=4

PARMOD

= 24

x




=31

x

x

x

x

BUFMOD

= SHORT

x

x

x

x

= LONG


x

x

x

LIST

= NO

x

x

x

x

= YES



x

x

CMDRC




x

x

SUBST

= NO

x

x

x

x

= JV




x

=ALL




x

ORIGIN





x

DTA...





x

MSG...





x

andere
Operanden


x

x

x

x


Tabelle 11: Verträglichkeit des Operanden VER mit anderen Operanden (CMD)

x bedeutet, dass die betreffenden Operanden zusammen angegeben werden können.

Hinweise zum Makroaufruf

  • Die Angabe DIALOG=YES wird im Expertenmodus (MODIFY-SDF-OPTIONS GUIDANCE=*EXPERT, siehe Handbuch „Kommandos“ [19]) ignoriert. Es wird der Returncode X'10' (statt X'14') zurückgegeben.

  • Wird DIALOG=NO angegeben, liefert SDF die folgenden Returncodes zurück, wenn die Hilfe-Anforderung im CMD-Input benutzt wird:

    "?"

    Es wird der Returncode X'10' zurückgegeben.

    "<operation?>"

    (? als Teil von <operation>) Es wird der Returncode X'14' zurückgegeben.

    "<operation> ?"

    Ist <operation> gültig, dann wird der Returncode X'10' zurückgegeben.
    Ist <operation> ungültig, dann wird der Returncode X'14' zurückgegeben.

    In beiden Modi (Dialog oder Batch) wird ein unklares Kommando für alle Werte des Operanden DIALOG mit dem Returncode X'14' zurückgewiesen.

  • Die Abarbeitung der Kommandoliste (bei LIST=YES) wird beendet, wenn eines der gegebenen Kommandos einen Fehler verursacht (Syntaxfehler, Speicherfehler,..). Ein solcher Fehler führt nicht zum SPIN-OFF.

  • Der mit MF=C/D generierte Datenbereich muss dem mit MF=L genutzten Datenbereich entsprechen.

  • Wenn der CMD-Datenbereich mit der Standard- oder MF=L-Form initialisiert wurde, können im Feld <PREFIX>CLPLNTH folgende Informationen gelesen werden:

    • die Länge des gesamten, vorgegebenen Datenbereichs des CMD-Aufrufs im ersten Halbwort (d.h. ab Byte 0 in der Länge von 2 Byte).

    • die Länge der abgearbeiteten Kommandoeingabe im zweiten Halbwort (d.h. ab Byte 2 in der Länge von 2 Byte). Wurde die Abarbeitung des CMD-Makros wegen eines Fehlers vorzeitig beendet, zeigt dieses Halbwort die Abbruchstelle an.

  • Strukturierte Ausgaben des CMD-Makros können nicht (wie beim Kommando EXECUTE-CMD) auf den S-Variablenstrom SYSINF gelenkt werden.

  • Wenn über die Operanden DTAVAR@ oder MSGVAR@ die Ausgabe von OPS-Variablen angefordert wird, dann

    • kann das Kommando START-EXECUTABLE-PROGRAM nicht vom CMD-Makro abgesetzt werden

    • und ist die Verkettung mehrerer Kommandos in einem Eingabesatz
      (Operanden 'kommandoname' und LIST=YES) nicht möglich.

  • Einige BS2000-Kommandos können nicht über den Makro CMD aufgerufen werden, siehe folgende Tabelle:

    Kommando

    Funktion

    Handbuch

    ADD-CJC-ACTION

    CJC-Kommandofolge einleiten (Jobvariablen)

    [19]

    BEGIN-BLOCK

    leitet einen Kommandoblock ein

    [21]

    BEGIN-PARAMETER-DECLARATION

    leitet die Deklaration der Prozedurparameter im Prozedurkopf ein

    [19],[21]

    BEGIN-PROCEDURE

    Prozedurdateimerkmale festlegen

    [19]

    BREAK

    Kommando-Modus anfordern

    [33]

    CANCEL-PROCEDURE

    Prozedur(ablauf) abbrechen

    [19]

    CANCEL-PROGRAM

    Programmlauf abbrechen

    [19]

    CHANGE-ACCOUNTING-FILE

    Systemabrechnungsdatei wechseln

    [19]

    COPY-SYSTEM-FILE

    kopiert Systemdateien

    [19]

    CYCLE

    bricht einen Schleifendurchlauf ab

    [21]

    DELON

    ON-Kommando löschen

    [33]

    ENDON

    beendet eine ON-Anweisungsfolge

    [33]

    ELSE

    leitet den ELSE-Zweig im IF-Block ein

    [19],[21]

    ELSE-IF

    leitet im IF-Block einen Alternativzweig ein

    [21]

    END-BLOCK

    schließt einen Kommandoblock ab

    [21]

    END-CJC-ACTION

    CJC-Kommandofolge abschließen (Jobvariablen)

    [19]

    END-FOR

    schließt einen FOR-Block ab

    [21]

    END-IF

    schließt einen IF-Block ab

    [19],[21]

    END-PARAMETER-DECLARATION

    schließt eine Prozedurparameterdeklaration ab

    [19],[21]

    END-PROCEDURE

    beendet eine Prozedurdatei

    [19]

    END-WHILE

    schließt einen WHILE-Block ab

    [21]

    ENDP

    Prozedurdatei beenden

    [33]

    EOF

    Dateiende für SYSDTA kennzeichnen

    [19]

    ESCAPE

    Prozedurablauf unterbrechen

    [33]

    EXIT-BLOCK

    bricht die Verarbeitung eines Kommandoblockes ab

    [21]

    FOR

    leitet einen FOR-Block ein

    [21]

    GOTO

    springt zu einer Marke

    [19],[21]

    HOLD-PROCEDURE

    unterbricht Prozedurablauf und ermöglicht die Kommandoeingabe vom Datensichtgerät

    [19]

    HOLD-PROGRAM

    unterbricht Programmablauf und ermöglicht die Kommandoeingabe vom Datensichtgerät

    [19]

    IF

    leitet einen Block ein

    [19],[21]

    IF-BLOCK-ERROR

    leitet eine Block-Fehlerbehandlung ein

    [19],[21]

    IF-CMD-ERROR

    leitet eine Kommando-Fehlerbehandlung ein

    [21]

    LOGON

    Auftrag (Job) einleiten

    [33]

    MODIFY-ACCOUNTING-PARAMETERS

    legt Abrechnungssätze und Satzerweiterungen für die Accountingdatei fest

    [19]

    MODIFY-JV-CONDITIONALLY

    ändert den Wert einer Jobvariablen und verzweigt zum Sprungziel

    [19]

    ON

    bedingte Ausführung einer Kommandofolge

    [33]

    PROCEDURE

    Prozedurdateimerkmale festlegen

    [33]

    REMOVE-CJC-ACTION

    Wirksamkeit von ADD-CJC-ACTION-Kommandos aufheben (Jobvariablen)

    [19]

    REPEAT

    leitet einen REPEAT-Block ein

    [21]

    RESTART-PROGRAM

    startet ein Programm an seinem Fixpunkt

    [19]

    RESUME-PROCEDURE

    unterbrochenen Prozedurablauf fortsetzen

    [19]

    SELECT-PRODUCT-VERSION

    wählt eine Produktversion aus

    [19]

    SET-JOB-STEP

    beendet SPIN-OFF

    [19]

    SET-LOGON-PARAMETERS

    leitet einen Dialog- oder Batch-Auftrag ein

    [19]

    SHOW-ACCOUNTING-STATUS

    informiert über das Abrechnungssystem

    [19]

    SKIP-COMMANDS

    bedingt oder unbedingt springen

    [19]

    SKIPJV

    springen in Abhängigkeit von Jobvariablen

    [33]

    SKIPUS

    springen in Abhängigkeit von Benutzerschaltern

    [33]

    START-ACCOUNTING

    Abrechnungssystem einschalten

    [19]

    STEP

    beendet SPIN-OFF

    [33]

    STOP-ACCOUNTING

    Abrechnungssystem ausschalten

    [19]

    UNTIL

    schließt einen REPEAT-Block ab

    [21]

    WAIT-EVENT

    bedingte Wartezeit (Batch-Auftrag) angeben

    [19]

    WHEN

    Batch-Auftrag bedingt (Benutzerschalter) anhalten

    [33]

    WHILE

    leitet einen WHILE-Block ein

    [21]

  • Beim Aufruf folgender Kommandos durch den Makro CMD wird das aufrufende Programm entladen:

    Kommando

    Funktion

    Handbuch

    ABEND

    laufenden Auftrag abbrechen

    [33]

    CALL

    Prozedur aufrufen

    [33]

    CALL-PROCEDURE

    Prozedur aufrufen

    [19]

    DO

    Prozedur aufrufen

    [33]

    EXECUTE

    Modul laden und starten

    [33]

    EXIT-JOB

    Auftrag (Job) beenden

    [19]

    HELP-SDF

    Anleitung zum Aufruf von SDF-Kommandos

    [19]

    LOAD

    Modul laden

    [33]

    LOAD-EXECUTABLE-PROGRAM

    Modul laden

    [19]

    LOAD-PROGRAM

    Modul laden

    [19]

    LOGOFF

    Auftrag (Job) beenden

    [33]

    START-EXECUTABLE-PROGRAM

    Modul binden, laden und starten

    [19]

    START-PROGRAM

    Modul binden, laden und starten

    [19]

    Tabelle 13: Kommandos, bei deren Aufruf das aufrufende Programm entladen wird

    Das aufrufende Programm wird ebenfalls entladen, wenn das aufgerufene Kommando durch eine Kommandoprozedur realisiert ist. Dies ist z.B. für alle EDIT-Kommandos der Fall (siehe Handbuch „Kommandos“ [19]). Es kann aber auch mittels SDF-A selbstdefinierte Kommandos dieser Art geben (siehe Handbuch „SDF-A“ [20]).

    Um das Entladen zu verhindern, können Kommandos, die über eine Kommandoprozedur realisiert sind, sowie die Kommandos CALL-PROCEDURE, CALL und DO indirekt über das SDF-P-Kommando INCLUDE-CMD aufgerufen werden (siehe Handbuch „SDF-P“ [21]). Das eigentlich auszuführende Kommando wird dabei als Operand von INCLUDE-CMD angegeben.
    INCLUDE-CMD unterbricht das aufrufende Programm, führt das als Operand angegebene Kommando (und damit die zugehörige Kommandoprozedur) aus und kehrt dann wieder zum Programm zurück. Die aufgerufene Kommandoprozedur darf aber ihrerseits kein Kommando ausführen, das zum Entladen des Programms führt.

    Das SYSOUT-Protokoll wird bei Kommandos, die das aufrufende Programm beenden, demzufolge nicht in das Empfangsfeld adr übertragen. Eine ggf. definierte STXIT-Routine für die Ereignisklasse „Programmbeendigung“ wird aktiviert.
    Eine den Auftrag überwachende Jobvariable wird auf „$T“ gesetzt.

Rückinformation und Fehleranzeigen

R15:

+---------------+
|   |   |   |   |
| | | | | | |a|a|
+---------------+

Über die Ausführung des Makros CMD wird im Register R15 rechtsbündig ein Returncode übergeben.

X'aa'

Erläuterung

X'00'

Die Funktion wurde erfolgreich ausgeführt.

X'04'

Die Funktion wurde abgebrochen: Es ist nicht genügend Speicherbereich vorhanden.

X'08'

Die Funktion wurde abgebrochen: Fehler im Datenbereich (Adressbereich).

X'0C'

Die Funktion wurde abgebrochen: Das Empfangsfeld ist zu kurz.
Der letzte Ausgabesatz, der in das Empfangsfeld gebracht wurde, ist abgeschnitten.

X'10'

Die Funktion wurde abgebrochen: Makroaufruf-/Kommando-Fehler
(das Kommando gab dem MCLP einen Fehler zurück).

X'14'

Die Funktion wurde abgebrochen: Ungültiges Kommando in der Operandenliste.

X'24'

Die Funktion wurde abgebrochen: Fehler bei der Substitution der Kommandoeingabe.

zusätzlich bei PARMOD=31:

Standardheader:

+---------------+
|   |   |   |   |
|c|c|b|b|a|a|a|a|
+---------------+

Über die Ausführung des Makros CMD wird im Standardheader folgender Returncode übergeben (cc=Subcode2, bb=Subcode1, aaaa=Maincode):

cc

bb

aaaa

Erläuterung

00

00

0000

Die Funktion wurde erfolgreich ausgeführt.

00

01

0008

Die Funktion wurde abgebrochen: Operandenfehler.

00

20

0004

Die Funktion wurde abgebrochen: Interner Fehler.

00

40

0010

Die Funktion wurde abgebrochen: Makroaufruf-/Kommandofehler.

00

40

0014

Die Funktion wurde abgebrochen: Ungültiges Kommando in der Operandenliste.

00

40

0024

Die Funktion wurde abgebrochen: Fehler bei der Substitution der Kommandoeingabe.

02

00

000C

Die Funktion wurde abgebrochen: Das Empfangsfeld ist zu kurz. Der letzte Ausgabesatz, der in das Empfangsfeld gebracht wurde, ist abgeschnitten.

Weitere Returncodes, deren Bedeutung durch Konvention makroübergreifend festgelegt ist, können der Tabelle „Standard-Returncodes“ (Standardheader) entnommen werden.

Layout der DSECT für VER=4

           CMD MF=D,PARMOD=31,VER=4
1          #INTF REFTYPE=REQUEST,INTNAME=CMD,INTCOMP=4
1          DS    0F
1          MFCHK DMACID=CLP,PREFIX=M,MACID=CLP,MF=D,DNAME=DMCLP
2 MDMCLP   DSECT ,
2                *,##### PREFIX=M, MACID=CLP #####
1 MCLPSTRT DS    0F
1          FHDR  MF=(C,MCLP)
2          DS    0A
2 MCLPFHE  DS    0XL8            0   GENERAL PARAMETER AREA HEADER
2 *
2 MCLPIFID DS    0A              0   INTERFACE IDENTIFIER
2 MCLPFCTU DS    AL2             0   FUNCTION UNIT NUMBER
2 *                                  BIT 15    HEADER FLAG BIT,
2 *                                  MUST BE RESET UNTIL FURTHER NOTICE
2 *                                  BIT 14-12 UNUSED, MUST BE RESET
2 *                                  BIT 11-0  REAL FUNCTION UNIT NUMBER
2 MCLPFCT  DS    AL1             2   FUNCTION NUMBER
2 MCLPFCTV DS    AL1             3   FUNCTION INTERFACE VERSION NUMBER
2 *
2 MCLPRET  DS    0A              4   GENERAL RETURN CODE
2 *
2 * GENERAL_RETURN_CODE CLEARED (X'00000000') MEANS
2 * REQUEST SUCCESSFUL PROCESSED AND NO ADDITIONAL INFORMATION
2 *
2 MCLPSRET DS    0AL2            4   SUB RETURN CODE
2 MCLPSR2  DS    AL1             4   SUB RETURN CODE 2
2 * ALWAYS CLEARED (X'00') IF MAIN_RETURN_CODE IS X'FFFF'
2 * Standard subcode2 values as defined by convention:
2 MCLPR2OK EQU   X'00'               All correct, no additional info
2 MCLPR2NA EQU   X'01'               Successful, no action was necessary
2 MCLPR2WA EQU   X'02'               Warning, particular situation
2 MCLPSR1  DS    AL1             5   SUB RETURN CODE 1
2 *
2 * GENERAL INDICATION OF ERROR CLASSES
2 *
2 * CLASS A    X'00'           FUNCTION WAS SUCCESSFULLY PROCESSED
2 * CLASS B    X'01' - X'1F'   PARAMETER SYNTAX ERROR
2 * CLASS C    X'20'           INTERNAL ERROR IN CALLED FUNCTION
2 * CLASS D    X'40' - X'7F'   NO CLASS SPECIFIC REACTION POSSIBLE
2 * CLASS E    X'80' - X'82'   WAIT AND RETRY
2 *
2 MCLPRFSP EQU   X'00'               FUNCTION SUCCESSFULLY PROCESSED
2 MCLPRPER EQU   X'01'               PARAMETER SYNTAX ERROR
2 *  3 GLOBALLY DEFINED ISL ERROR CODES IN CLASS X'01' - X'1F'
2 MCLPRFNS EQU   X'01'               CALLED FUNCTION NOT SUPPORTED
2 MCLPRFNA EQU   X'02'               CALLED FUNCTION NOT AVAILABLE
2 MCLPRVNA EQU   X'03'               INTERFACE VERSION NOT SUPPORTED
2 *
2 MCLPRAER EQU   X'04'               ALIGNMENT ERROR
2 MCLPRIER EQU   X'20'               INTERNAL ERROR
2 MCLPRCAR EQU   X'40'               CORRECT AND RETRY
2 *  2 GLOBALLY DEFINED ISL ERROR CODES IN CLASS X'40' - X'7F'
2 MCLPRECR EQU   X'41'               SUBSYSTEM (SS) MUST BE CREATED
2 *                                  EXPLICITELY BY CREATE-SS
2 MCLPRECN EQU   X'42'               SS MUST BE EXPLICITELY CONNECTED
2 *
2 MCLPRWAR EQU   X'80'               WAIT FOR A SHORT TIME AND RETRY
2 MCLPRWLR EQU   X'81'                    "     LONG       "
2 MCLPRWUR EQU   X'82'               WAIT TIME IS UNCALCULABLY LONG
2 *                                  BUT RETRY IS POSSIBLE
2 *  2 GLOBALLY DEFINED ISL ERROR CODES IN CLASS X'80' - X'82'
2 MCLPRTNA EQU   X'81'               SS TEMPORARILY NOT AVAILABLE
2 MCLPRDH  EQU   X'82'               SS IN DELETE / HOLD
2 *
2 MCLPMRET DS    0AL2            6   MAIN RETURN CODE
2 MCLPMR2  DS    AL1             6   MAIN RETURN CODE 2
2 MCLPMR1  DS    AL1             7   MAIN RETURN CODE 1
2 *
2 * SPECIAL LAYOUT OF LINKAGE_MAIN_RETURN_CODE (YYYY IN X'00XXYYYY')
2 *
2 MCLPRLNK EQU   X'FFFF'             LINKAGE ERROR / REQ. NOT PROCESSED
2 MCLPFHL  EQU   8               8   GENERAL OPERAND LIST HEADER LENGTH
2 *
1 MCLPFLAG DS    X                       Flag bits
1 *              Flag bits:.0......    : UNUSED
1 *                        0.......    : reserved for TPR usage
1 MCLPDIA  EQU   X'20'     ..1.....    : DIALOG possible (w. SDF only)
1 MCLPNSYS EQU   X'10'     ...1....    : no SYSOUT logging
1 MCLPLIST EQU   X'08'     ....1...    : LIST of commands
1 MCLPNOUT EQU   X'04'     .....10.    : no output buffer
1 MCLPLONG EQU   X'02'     .....01.    : long output buffer
1 *                        .....00.    : short (old) output buffer
1 MCLPREG  EQU   X'01'     .......1     buffer @ given via a register/
1 MCLPADDR EQU   X'00'     .......0     buffer @ given directly
1 MCLPNSRG EQU   X'11'     ...1...1     no SYSOUT, buff.@ in a reg.
1 MCLPNSAD EQU   X'10'     ...1...0     no SYSOUT, buff.@ given directly
1 MCLPFLA3 DS    XL1                    FLAG 3
1 MCLPSJV  EQU   X'80'     10......     substitute jv only
1 MCLPSALL EQU   X'40'     01......     substitute all
1 MCLPDATE EQU   X'20'     ..1.....     data var buf extend
1 MCLPMSGE EQU   X'10'     ...1....     msg var buf extend
1 MCLPCUOR EQU   X'04'     .....1..     origin=current
1 MCLPUNUS DS    XL1                    reserved (unused)
1 MCLPROUT DS    XL1                    reg.# if buffer @ in reg.
1 MCLPOUT  DS    A                      buffer @ or 0
1 MCLPCMD@ DS    A                      @ of command (-> V-field)
1 MCLPRC@  DS    A                      @ return code of command
1 MCLPTPR2 DS    A              reserved for TPR usage.
1 MCLPDAV@ DS    A                      @ of var name for data
1 MCLPMSV@ DS    A                      @ of var name for message
1 MCLPDAVL DS    H                      length of var name
1 MCLPMSVL DS    H                      length of var name
1 MCLPTPR3 DS    A              reserved for TPR usage.
1 MCLPHLN  EQU   *-MCLPSTRT           CMD p.l. length
1 MCLPLNTH EQU   *       command's V-field when CLPCMD@ points here
1 MCLPCMD  EQU   *+4     cmd start when MCLPCMD@ points to MCLPLNTH

Beispiel

Mit dem Makro CMD wird das Kommando SHOW-JOB-STATUS in zwei Ausprägungen ausgeführt. Die Programmausführung erfolgt im 31-Bit-Adressierungsmodus unterhalb der 16-MB-Grenze.

CMD      START
         PRINT NOGEN
CMD      AMODE ANY
         BALR  3,0
         USING *,3
         CMD   MF=(E,LFORMAD1),PARMOD=31 --------------------------------(1)
         CMD   MF=(E,LFORMAD2),PARMOD=31 --------------------------------(2)
         MVC   MESSAGE(4),PROTCONT
         MVC   MESSTXT,PROTCONT+4
         WROUT MESSAGE,END,PARMOD=31
END      TERM
LFORMAD1 CMD   'SHOW-JOB-STA','INF=(*STD,*PROGRAM)',MF=L,PARMOD=31 ------(3)
LFORMAD2 CMD   'SHOW-JOB-STA','INF=*STD',PROT,SYSOUT=NO,MF=L,PARMOD=31 --(4)
         DS    0F
PROT     DC    Y(PROTEND-PROT) ------------------------------------------(5)
         DC    X'4040'
PROTCONT DS    CL2500
PROTEND  EQU   *
MESSAGE  DC    Y(ENDMESS-MESSAGE)      Record length
         DS    CL2                     Reserved
         DC    X'01'                   Print feed control character
MESSTXT  DS    CL255                   Contents
ENDMESS  EQU   *
         END

(1)

Der Makroaufruf ist in Befehlsteil und Datenbereich aufgespalten (siehe Abschnitt „S-Typ-Makroaufrufe“). Hier steht nur der Befehlsteil (SVC) mit einem Verweis auf den Datenbereich LFORMADR1 im Datenteil des Programms.

(2)

Der Makro wird mit einem Verweis auf den Datenbereich LFORMADR2 aufgerufen.

(3)

Das Kommando SHOW-JOB-STATUS wird mit dem Operanden INF=(*STD,*PROGRAM) aufgerufen. Die Ausgabe erfolgt an der Datensichtstation.

(4)

Das Kommando SHOW-JOB-STATUS wird mit dem Operanden INF=*STD aufgerufen. Die Information wird in den Bereich PROT ausgegeben.

(5)

Der Bereich für die Kommando-Ausgabe beginnt an einer Wortgrenze mit dem Eintrag der Bereichslänge in den beiden ersten Byte.

Ablaufprotokoll:

/start-assembh
%  BLS0500 PROGRAM 'ASSEMBH', VERSION '<ver>' OF '<date>' LOADED
%  ASS6010 <ver> OF BS2000 ASSEMBH  READY 
//compile source=*library-element(macexmp.lib,cmd), -
//        compiler-action=module-generation(module-format=llm), -
//        module-library=macexmp.lib, -
//        listing=parameters(output=*library-element(macexmp.lib,cmd))
%  ASS6011 ASSEMBLY TIME: 344 MSEC
%  ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES
%  ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS
%  ASS6006 LISTING GENERATOR TIME: 80 MSEC
//end
%  ASS6012 END OF ASSEMBH
/start-executable-program library=macexmp.lib,element-or-symbol=cmd
%  BLS0523 ELEMENT 'CMD', VERSION '@' FROM LIBRARY
   ':2OSG:$QM212.MACEXMP.LIB' IN PROCESS
%  BLS0524 LLM 'CMD', VERSION ' ' OF '<date> <time>' LOADED
NAME      TSN TYPE       PRI      CPU-USED CPU-MAX ACCOUNT# -------------(6)
MACTEST  2QSE 3 DIALOG1  0 210     58.7710    9000 89002
NAME      TSN TYPE        SIZE CURR-CMD
MACTEST  2QSE 3 DIALOG1      1 START-EXECUTABLE-PROGRAM
              PROG::2OSG:$QM212.MACEXMP.LIB(CMD,@,L)
NAME      TSN TYPE       PRI      CPU-USED CPU-MAX ACCOUNT# -------------(7)
MACTEST  2QSE 3 DIALOG1  0 210     58.7856    9000 89002

(6)

Ausgabe des ersten CMD-Aufrufs direkt auf Datensichtstation.

(7)

Der Ausgabebereich PROT des zweiten CMD-Aufruf wird mit WROUT ausgegeben.