Anwendungsgebiet: PROCEDURE
Kommandobeschreibung
Kommandoblöcke, die als logische Einheit behandelt werden sollen, werden mit dem Kommando BEGIN-BLOCK eingeleitet und mit dem Kommando END-BLOCK abgeschlossen. Diese Kommandoblöcke werden auch als BEGIN-Blöcke bezeichnet (BEGIN-Block siehe Abschnitt „Einfache Kommandoblöcke definieren“).
Der Kommandoblock kann über eine Marke benannt werden. Diese Marke kann auch als Sprungziel verwendet werden (zu Marken siehe "Prozedurzeilen ").
Der Operand PROGRAM-INPUT steuert die Behandlung von Kommandos innerhalb von Eingaben an Programme (Anweisungen und Daten) und die Behandlung der Returncodes von Programmanweisungen.
Format
BEGIN-BLOCK |
PROGRAM-INPUT = *STD / *MIXED-WITH-CMD(...) *MIXED-WITH-CMD(...) PROPAGATE-STMT-RC = *STD / *TO-CMD-RC |
Operandenbeschreibung
PROGRAM-INPUT =
Legt fest, ob innerhalb von Eingaben an Programme (Anweisungen und Daten) auch Kommandos erlaubt sind und steuert die Behandlung der Returncodes von Programmanweisungen. Die Einstellung wird nicht in nachfolgende Prozeduraufrufe vererbt.
PROGRAM-INPUT = *STD
Kommandos werden wie im umschließenden BEGIN-Block behandelt. Im äußersten BEGIN-Block bzw. falls überhaupt kein BEGIN-Block existiert, müssen Kommandos durch die Kommandos HOLD-PROGRAM und RESUME-PROGRAM eingeschlossen werden. Das heißt, wenn die Datenzeilen durch ein Kommando (außer durch HOLD-PROGRAM) unterbrochen werden, wird die Dateiendebedingung (EOF) erzeugt.
PROGRAM-INPUT = *MIXED-WITH-CMD(...)
Es wird nicht zwischen Anweisungen / Datensätzen einerseits und Kommandos andererseits unterschieden. Das heißt, Kommandos erzeugen keine Dateiendebedingung (EOF).
PROPAGATE-STMT-RC =
Legt fest, ob Returncodes von Programmanweisungen als Kommando-Returncodes interpretiert werden und ob diese Returncodes eine SDF-P-Fehlerbehandlung auslösen sollen.
PROPAGATE-STMT-RC = *STD
Die Returncodes von Anweisungen und die SDF-P-Fehlerbehandlung werden wie im umschließenden BEGIN-Block behandelt. Im äußersten BEGIN-Block bzw. falls überhaupt kein BEGIN-Block existiert, werden die Returncodes von Anweisungen ignoriert; eine Fehlerbehandlung auf Kommandoebene ist nur durch Verwendung der vordefinierten Funktion STMT-SPINOFF() möglich.
PROPAGATE-STMT-RC = *TO-CMD-RC
Die Returncodes von Programmanweisungen stehen als Kommando-Returncodes zur Verfügung und steuern die SDF-P-Fehlerbehandlung. In der weiteren Verarbeitung wird nicht zwischen Returncodes von Kommandos und Programmanweisungen unterschieden.
Die SDF-P-Fehlerbehandlung wird nur ausgelöst, wenn SUBCODE1 ungleich Null ist.
Hinweis
Die Verwendung der vordefinierten Funktion STMT-SPINOFF( ) ist hier nicht sinnvoll, da sie an dieser Stelle niemals den Wert „YES“ liefert.
Kommando-Returncode
(SC2) | SC1 | Maincode | Bedeutung |
0 | CMD0001 | Ohne Fehler | |
1 | CMD0202 | Syntaxfehler | |
1 | SDP0118 | Kommando im falschen Kontext | |
1 | SDP0223 | Falsche Umgebung | |
3 | CMD2203 | Falsche Syntaxdatei | |
32 | CMD0221 | Systemfehler (interner Fehler) | |
130 | SDP0099 | Kein Adressraum mehr verfügbar |
Beispiele
Programmanweisungen und Kommandos voneinander separiert:
Programmanweisungen sind durch die Kommandos RESUME-PROGRAM und HOLD-PROGRAM eingeschlossen. Ein BEGIN-Block wird nicht benötigt.
/start-lms / hold-program / library = 'my-library' / write-text 'Elements of &library.' / resume-program // show-element-attributes *library-element(&library.) / hold-program / library = 'my-second-library' / write-text 'Elements of &library.' / resume-program // show-element-attributes *library-element(&library.) //end
Programmanweisungen und Kommandos gemischt:
Die Kommandos und Programmanweisungen sind in einem BEGIN-Block eingeschlossen. Kommandos und Programmanweisungen werden automatisch erkannt.
/begin-block program-input = *mixed-with-cmd / start-lms / library = 'my-library' / write-text 'Elements of &library.' // show-element-attributes *library-element(&library.) / library = 'my-second-library' / write-text 'Elements of &library.' // show-element-attributes *library-element(&library.) // end /end-block
Returncodes von Programmanweisungen
Die Returncodes von Programmanweisungen werden wie die von Kommandos behandelt.
/begin-block program-input = *mixed-with-cmd(propagate-stmt-rc = *to-cmd-rc) / &* Start a program which generates statement returncodes / start-executable-program my-new-program // my-statement1 / if-cmd-error &* Test statement returncode / write-text 'Error during execution of my-statement' / write-text 'Maincode: &mc; Subcode1: &sc1; Subcode2: &sc2' / end-if / show-file-attributes &my-file. / if-cmd-error &* Test command returncode / write-text 'Error &mc during access to my-file' / end-if // my-statement2 / save-returncode &* Save statement returncode / if (maincode <> 'CMD0001') / write-text 'Warning &mc during execution of my-statement2' / end-if // end /end-block
Verarbeitung der STEP-Anweisung:
Die STEP-Anweisung setzt die durch fehlerhafte Anweisungen ausgelöste SDF-P-Fehlerbehandlung zurück. Wenn der Returncode benötigt wird, muss eine eigene Fehlerbehandlung in einem SDF-P-Fehlerblock erfolgen (/IF-BLOCK-ERROR oder /IF-CMD-ERROR statt //STEP).
/begin-block program-input = *mixed-with-cmd(propagate-stmt-rc = *to-cmd-rc) / &* Das folgende Programm liefert Returncodes für Programmanweisungen / start-executable-program <name> // <anweisung> // step / &* die SDF-P-Fehlerbehandlung wird zurückgesetzt // end /end-block
Verarbeitung der END-Anweisung:
Die END-Anweisung (//END) beendet die Programmausführung und gleichzeitig auch eine durch fehlerhafte Anweisungen ausgelöste SDF-P-Fehlerbehandlung. Wenn der Returncode benötigt wird, muss die Fehlerbehandlung in einem SDF-P-Fehlerblock vor der END-Anweisung erfolgen (/IF-BLOCK-ERROR oder /IF-CMD-ERROR).
/begin-block program-input = *mixed-with-cmd(propagate-stmt-rc = *to-cmd-rc) / &* Start a program which generates statement returncodes / start-executable-program <name> // my-statement // end / if-block-error / &* the //END statement has been processed, / &* the return code which is available is the command / &* return code of the /start-exec-prog and NOT the statement / &* return code of //my-statement / write-text 'Error &mc returned by /start-exec-prog' / end-if /end-block