Dieser Exit wird jedes Mal bei der Eingabe eines Systemkommandos durchlaufen, sofern die Task aktiviert ist.
Drei Fälle der Kommandoeingabe werden unterschieden:
im Dialog von der Datensichtstation (interaktiver Modus)
aus einer katalogisierten Datei (SPOOLIN, ENTER-JOB, CALL-PROCEDURE) oder im Stapelbetrieb
aus einem TU-Programm über die MCLP-Schnittstelle (siehe Handbuch „Makroaufrufe an den Ablaufteil“ [9])
Mithilfe der Exit-Routine kann der Kommandofluss aller aktiven Tasks während der OPEN-Session überwacht werden.
Die Exit-Routine kann
das eingegebene Kommando unverändert akzeptieren (Returncode EX080CAC)
das Kommando abweisen (Returncode EX080CRJ)
das Kommando verändern oder ersetzen (Returncode EX080CRO)
ein neues oder mehrere Kommandos einfügen (Returncodes EX080CRS/EX080CLR)
Die Rückinformation der Exit-Routine muss im Feld EX080RC des Parameterbereichs EX080 hinterlegt werden. Die Adresse des Parameterbereichs wird im R1 an die Exit-Routine übergeben.
Folgende Informationen werden an die Exit-Routine übergeben:
R1 = A(EX080-Parameterbereich) R12 = A(TPR Program Manager) R13 = A(Sicherungsbereich der rufenden Komponente) R14 = A(indirekter Rücksprung) R15 =A(Exit-Routine)
Hinweise
Register 12, 13 und 14 dürfen von der Exit-Routine nicht zerstört werden.
Die SYSCMD-Exit-Routine sollte Kommandos, die über die verschiedenen Wege eingegeben werden, dennoch gleich verarbeiten.
Wird die Exit-Routine deaktiviert, während ein Kommando durch mehrere ersetzt wird, wird der Dummy-Kommandosatz
/REMARK SYSCMD EXIT NO MORE ACTIVE DURING PROCESSING
an das Benutzerprogramm gesendet.Werden in einer Prozedur Kommandos mit
/SKIP-COMMANDS
übergangen, wird für jedes übergangene Kommando die Exit-Routine gerufen. Das Gleiche gilt, wenn durch Spinoff (Suche nach STEP, LOGOFF, SET-JOB-STEP) Kommandos übergangen werden.In CALL-PROCEDURE-Prozeduren ist die Variablensubstitution zum Zeitpunkt des Exit-Aufrufs bereits durchgeführt.
Das Sprungziel bei Sprungmarken wird zweimal zur Verfügung gestellt.
Die Rückinformation an die rufende Systemkomponente muss im Feld EX080RC des Parameterbereichs hinterlegt werden.
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 | Art der Kommandoeingabe | |
EX080TER | Kommandoeingabe von der Datenstation | |
EX080FIL | Kommandoeingabe aus einer JCL-Date | |
EX080MCL | Kommandoeingabe über MCLP aus einem Benutzerprogramm | |
EX080BIT | Indikator für SDF | |
EX080SDF | Eingabe in SDF-Struktur | |
EX080STR | Eingabe nicht in SDF-Struktur | |
EX080IR | Adresse des Eingabe-Kommandosatzes | |
EX080RC | Rückinformation | |
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) |
Erklärung der Returncodes im Feld EX080RC
Returncode X'04': Kommando zurückweisen (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 (PROC A oder PROC C bzw. entsprechende SDF-Kommandos) 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 und die Adresse des Kommandosatzes 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 weder DO-, CALL-, LOAD-, LOGOFF-, ABEND- oder EXECUTE-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.
Returncodes X'0C'/X'10': ein Kommandos 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 '08' betreffen. Die o.g. Kommandos 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!