Dieser Exit entspricht dem Exit 081. Alle Aussagen gelten gleichermaßen für beide Exits.
Hinweise
Register 12, 13 und 14 dürfen von der Exit-Routine nicht zerstört werden.
Die SYSTMT-Exit-Routine sollte Anweisungen, die über die verschiedenen Wege eingegeben werden, dennoch gleich verarbeiten.
Wird die Exit-Routine deaktiviert, während eine Anweisung durch mehrere ersetzt wird, wird der Dummy-Kommandosatz
/REMARK SYSCMD EXIT NO MORE ACTIVE DURING PROCESSING
an das Benutzerprogramm gesendet.Ein Kommando/eine Anweisung darf nur verändert werden durch ein Kommando oder eine Anweisung, die in der System-Syntaxdatei definiert sind.
In Prozeduren ist die Variablensubstitution zum Zeitpunkt des Exit-Aufrufs bereits durchgeführt.
DSECT
EX080 D EX080PL DSECT *- *- INPUT INFORMATION *- EX080IND DC AL1(0) SOURCE OF COMMANDS EX080TER EQU 1 -CMD READ FROM A TERMINAL EX080FIL EQU 2 -CMD READ FROM A JCL FILE EX080MCL EQU 4 -CMD READ VIA MCLP EX080TRN EQU 8 -CMD READ VIA TRCMD 999 EX080BUF EQU 16 -CMD FOUND IN BS2000 BUFFER 999 *- EX080BIT DC X'00' BIT_INFO 900 EX080SDF EQU X'80' -INPUT IN SDF STRUCTURED FORM002 EX080SD2 EQU X'40' -INPUT IN NEW SDF STRUCT FORM120 EX080STR EQU X'00' -INPUT IN STRING MODE 900 *- EX080UNU DC 2X'00' 900 *- EX080IR DC A(0) A (INPUT RECORD) *- *- OUTPUT INFORMATION *- EX080RC DC AL1(0) SYSCMD EXIT'S RETURN CODE EX80CAC EQU 0 -CMD REC ACCEPTED EX80CRJ EQU 4 -CMD REC REJECTED EX80CRO EQU 8 -CMD REC REPLACED BY ONE EX80CRS EQU 12 -CMD REC REPLACED BY SEVERAL EX80CLR EQU 16 -LAST CMD REC REPLACED DC 3X'00' UNUSED IN VER=710 *- EX080RR DC A(0) A (RETURNED RECORD) *- *- ADDITIONAL INPUT INFORMATION *- EX080ILR DC A(0) A (LOWER CASE INPUT RECORD) EX080STD DC A(0) A (STD FORM) EX080PLL EQU *-EX080PL LENGTH OF SYSCMD EXIT P/L
Erklärung der Felder:
EX080IND | Quelle des Kommandos | |
EX080TER | Kommandoeingabe vom Terminal | |
EX080FIL | Kommandoeingabe aus einer JCL-Date | |
EX080MCL | Kommandoeingabe über MCLP aus einem Benutzerprogramm | |
EX080TRN | Kommandoeingabe von TRCMD | |
EX080BUF | Kommando intern gelesen | |
EX080BIT | Indikator für SDF | |
EX080SDF | Eingabe in SDF-Struktur | |
EX080STR | Eingabe nicht in SDF-Struktur | |
EX080IR | Adresse des Eingabe-Kommandosatzes oder des normierten Übergabebereichs | |
Returncode des System Exits | ||
EX080CAC | Kommando akzeptiert | |
EX080CRJ | Kommando abgewiesen | |
EX080CRO | Kommando geändert oder ersetzt | |
EX080CRS | Kommando wird durch mehrere Kommandos ersetzt | |
EX080CLR | letzter Kommandosatz ersetzt | |
EX080RR | Adresse des Kommandosatzes, der an die rufende Systemkomponente zurückgegeben wird (bei Ändern/Ersetzen) | |
EX080ILR | Adresse des Eingabesatzes | |
EX080STD | Adresse der Standardeingabe |
Erklärung der Returncodes im Feld EX080RC
Returncode X'04': Kommando zurückgewiesen (EX080RC=EX080CRJ)
Im Dialogbetrieb wird keine Systemmeldung ausgegeben; die Exit-Routine kann jedoch eine Meldung an den Benutzer senden
Bei Kommandoeingabe aus einer katalogisierten Datei wird folgende Meldung ausgegeben:
/REMARK COMMAND REJECTED BY THE SYSTEM ADMINISTRATOR
Im Stapelbetrieb wird die gleiche Meldung in die Protokolldatei aufgenommen.
Returncode X'08': Kommando ersetzen oder ändern (EX080RC=EX080CRO)
Die Exit-Routine muss das neue oder geänderte Kommando selbst aufbauen bzw. den normierten Übergabebereich versorgen (siehe Handbuch „SDF-A“ [10]). Die Adresse des Kommandosatzes (des normierten Übergabebereichs) wird im Feld EX080RR des Parameterbereichs an die rufende Systemkomponente übergeben.
Aufbau des Kommandosatzes (sofern nicht normierter SDF-Übergabebereich)
0 | 2 | 4 | SL-1 |
SL | Kommando mit Operanden |
SL = Satzlänge
Der Kommandosatz darf keinen ISAM-Schlüssel, kein Fortsetzungszeichen und keine symbolischen Parameter (&...) enthalten. Die Satzlänge darf verändert werden.
Im Dialogbetrieb erfolgt keine Systemmeldung.
Bei Kommandoeingabe aus einer katalogisierten Datei wird das neue oder geänderte Kommando ausgegeben bzw. in die Protokolldatei geschrieben.
Bei Kommandoeingabe über MCLP muss das ersetzende Kommando ebenfalls MCLP-zulässig sein, sonst wird der Returncode X'14' (= ungültiges Kommando) an das Benutzerprogramm zurückgeben. Es darf kein CALL-PROCEDURE-, LOGOFF-, LOAD-PROGRAM- oder START-PROGRAM-Kommando zurückgegeben oder ein anders Kommando über MCLP aufgerufen werden, da dann das Anwenderprogramm sofort entladen wird. – Tritt bei Abarbeitung des neuen Kommandos ein Fehler auf, wird X'10' (unzulässiges Kommando) an das Anwenderprogramm gemeldet.
Returncode X'0C'/X'10': ein Kommando durch mehrere Kommandos ersetzen
(EX080RC=EX080CRS/EX080CLR)
Gibt die Exit-Routine einen Kommandosatz an das System zurück (siehe RC = X'08') und setzt gleichzeitig im Feld EX080RC den Returncode auf X'0C' (= EX080CRS), erhält sie sofort die Steuerung zurück und kann einen weiteren Kommandosatz übergeben. Ab dem zweiten Aufruf nach Returncode X'0C', ist die Adresse des Eingabe-Kommandosatzes (Feld EX080IR des Parameterbereichs) auf null gesetzt. Wenn die Exit-Routine das letzte Kommando zurückgibt, muss sie den Returncode im Parameterbereich auf X'10' (=EX080CLR) setzen.
Im Dialogbetrieb erfolgt keine Systemmeldung, wenn ein Kommando durch mehrere ersetzt wurde.
Im Stapelbetrieb werden die ersetzenden Kommandos in die Protokolldatei geschrieben.
Bei Kommandoeingabe über MCLP sind die Hinweise zu beachten, die den Returncode X'08' betreffen. Die o.g. Kommandos CALL-PROCEDURE etc. dürfen auch nicht in einer Kommandofolge zurückgegeben werden, da dann das Anwenderprogramm sofort entladen wird. Wenn im Anwenderprogramm ein Puffer für die Aufnahme der
Bearbeitungsergebnisse des MCLP-Kommandos zur Verfügung gestellt wird, muss dieser Puffer die Ergebnisse der gesamten Kommandofolge aufnehmen können.
Es ist zu erwarten, dass viele Anwenderprogramme, die MCLP-Aufrufe benutzen, nicht mehr korrekt ablaufen, wenn die Exit-Routine ein Kommando durch mehrere ersetzt!