Mit der Angabe *TEST bzw. *EXECUTE im Operanden MODE des Kommandos MODIFY-SDF-OPTIONS kann der Testmodus ein- bzw. ausgeschaltet werden. Bei eingeschaltetem Testmodus werden die nachfolgenden Kommandos von SDF nur syntaktisch geprüft, aber nicht ausgeführt. Zusätzlich kann in dem untergeordneten Operanden CHECK-PRIVILEGES eingestellt werden, ob die Privilegien der Task bei der Syntaxanalyse berücksichtigt werden sollen.
Die Kommandos MODIFY-SDF-OPTIONS und SHOW-SDF-OPTIONS werden als einzige ausgeführt. Damit können die SDF-Einstellungen während des Tests verändert bzw. der Testmodus wieder ausgeschaltet und Informationen über aktuelle Einstellungen eingeholt werden.
Hinweis
Das kostenpflichtige Subsystem SDF-P stellt dem Benutzer für S-Prozeduren geeignete Testhilfen zur Verfügung (siehe Handbuch „SDF-P“ [5]). Der hier beschriebene Testmodus wird in S-Prozeduren mit folgender Einschränkungen unterstützt:
Eingaben werden immer zuerst von SDF-P analysiert. Anweisungen können nicht getestet werden. SDF-P-Kontrollflusskommandos werden ausgeführt. Dies kann zu Fehlern führen, da z.B. Kommandos zum Setzen bzw. Deklarieren von S-Variablen im Testmodus nicht ausgeführt werden.
Jobvariablen, S-Variablen und Prozedurparameter werden vor der Syntaxanalyse ersetzt.
Im Prozedur- und Stapelbetrieb werden Eingabezeilen ohne führenden „/“ als Datensätze interpretiert und ignoriert. Ein Datensatz bzw. eine Folge von Datensätzen wird von den Meldungen CMD0091 und CMD0092 umschlossen, um nicht ausgewertete Eingabesätze kenntlich zu machen.
Die Angabe eines Programmnamens im Operanden DEFAULT-PROGRAM-NAME im Kommando MODIFY-SDF-OPTIONS bewirkt die Erweiterung der Syntaxanalyse auf Anweisungen an ein Programm mit SDF-Oberfläche. Sie wirkt jedoch nur im Prozedur- oder Stapelbetrieb und bei eingeschaltetem Testmodus.
Eingabezeilen mit führenden „//“ werden als Programmanweisungen interpretiert und ebenfalls syntaktisch analysiert. Die Syntaxanalyse der Anweisungen erfolgt anhand der Anweisungen, die für den angegebenen Programmnamen in der Syntaxdatei definiert wurden (nicht abhängig vom Dateinamen, der im Kommando START-PROGRAM verwendet wird).Sollen Anweisungen mehrerer Programme ausgewertet werden, so ist die Einstellung DEFAULT-PROGRAM-NAME vor dem jeweiligen Anweisungsblock entsprechend zu ändern.
Die Beschränkung der Syntaxanalyse auf Kommandos kann mit DEFAULT-PROGRAM-NAME=*NONE wieder erreicht werden.
Die Unterbrechung einer Prozedur mit der K2-Funktionstaste wird auch bei eingeschaltetem Testmodus ausgeführt. Die Rückkehr mit dem Kommando RESUME-PROCEDURE ist bei eingeschaltetem Testmodus nicht möglich.
Bei Beendigung einer Prozedur im Testmodus wird der Benutzer mit der Meldung CMD0093 darauf hingewiesen, dass der Testmodus noch eingeschaltet ist.
Beispiel
Inhalt der Prozedurdatei „PROC.SELECT“:
/BEG-PROC LOG=*ALL - / ,PAR=*YES( - / PROC-PAR=(&MODE=*EXEC,- / &TESTPROGRAM=PERCON,- / &OUTFILE, &ELEM)- / ,ESC-CHAR=C'&' - / ) /ASS-SYSDTA TO=*SYSCMD /MOD-SDF-OPT MODE=&MODE - / ,DEFAULT-PROG-NAME=&TESTPROGRAM - / ,LOG=*INPUT-FORM /SHOW-SDF-OPT INF=*USER /SHOW-FILE-ATTR F-NAME=&(JV.INFILE) /START-PERCON //SHOW-SDF-OPT //ASS-INPUT-F FILE=*DISK-F(NAME=&(JV.INFILE)) //ASS-OUT-F FILE=*DISK-F(NAME=&OUTFILE) //SEL-INPUT-REC COND= ((20,4)=NUMERIC AND (25,5)=ALPHA) //START-CONV //END /SHOW-FILE-ATTR F-NAME=&OUTFILE /MOD-JOB-SW ON=(1) /START-PROG FROM-FILE=$LMS LIB FILE=USER.LIB,USAGE=BOTH TOCX * ADDX &OUTFILE>&ELEM END /SET-JOB-STEP /MOD-JOB-SW OFF=(1) /MODIFY-SDF-OPT MODE=*EXEC - / ,DEFAULT-PROG-NAME=*NONE /END-PROC
Die Prozedur PROC.SELECT wählt mithilfe des Dienstprogrammes PERCON Datensätze, die bestimmte Kriterien erfüllen (ein Feld darf nur Ziffern, ein anderes Feld darf keine Ziffern enthalten), aus der Datei TEST aus (Name ist der Wert der Jobvariablen JV.INFILE), und schreibt sie in die Datei, deren Name über den Prozedurparameter &OUTFILE angegeben wird. Anschließend wird die Ergebnisdatei mit dem Dienstprogramm LMS in die Bibliothek USER.LIB übernommen. Der Name des Bibliothekselements wird über den Prozedurparameter &ELEM abgefragt (vorher werden die bereits existierenden Elemente angezeigt).
Ablaufprotokoll:
/clp proc.select,proc-par=(mode=*test) —————————————————————————————— (1) %/BEGIN-PROC LOG=*ALL ,PAR=*YES( PROC-PAR=(&MODE=*EXEC,&TESTPROGRAM=PERCON,&OUTFILE, &ELEM) ,ESC-CHAR=C'&' ) %/ASS-SYSDTA TO=*SYSCMD —————————————————————————— (2) %/MOD-SDF-OPT MODE=*TEST ,DEFAULT-PROG-NAME=PERCON ,LOG=*INPUT-FORM —————————————————————————— (3) %/SHOW-SDF-OPT INFORMATION=*USER —————————————————————————— (4) % USER : :2OSG:$USER1.SYSSDF.USER.EXAMPLE.1 % VERSION : UNDEFINED %CURRENT SDF OPTIONS : % GUIDANCE : *EXPERT % LOGGING : *INPUT-FORM % CONTINUATION : *NEW-MODE % UTILITY-INTERFACE : *NEW-MODE % PROCEDURE-DIALOGUE : *NO % MENU-LOGGING : *NO % MODE : *TEST % CHECK-PRIVILEGES : *YES % DEFAULT-PROGRAM-NAME : PERCON % FUNCTION-KEYS : *STYLE-GUIDE-MODE % INPUT-HISTORY : *ON % NUMBER-OF-INPUTS : 20 % PASSWORD-PROTECTION: *YES %/SHOW-FILE-ATTR F-NAME=TEST ———————————————————————————————————————( 5 ) %/START-PERCON %//SHOW-SDF-OPT ———————————————————————————————————— ( 6 ) %//ASS-INPUT-F FILE=*DISK-F(NAME=TEST) —————————————————————— ( 7 ) %//ASS-OUT-F FILE=*DISK-F(NAME=&OUTFILE) %&OUTFILE=test4 ———————————————————————————————————— ( 8 ) %//ASS-OUT-F FILE=*DISK-F(NAME=TEST4) —————————————————————— ( 9 ) %//SEL-INPUT-REC COND= ((20,4)=NUMERIC AND (25,5)=ALPHA) %//START-CONV %//END %/SHOW-FILE-ATTR F-NAME=TEST4 %/MOD-JOB-SW ON=(1) %/START-PROG FROM-FILE=$LMS % CMD0091 NEXT INPUT(S) IGNORED UNTIL MESSAGE CMD0092 ——————————————— ( 10 ) %LIB FILE=USER.LIB,USAGE=BOTH %TOCX * %ADDX &OUTFILE>&ELEM %END % CMD0092 END OF IGNORED INPUT OR INPUTS —————————————————————————————— ( 11 ) %/SET-JOB-STEP %/MOD-JOB-SW OFF=(1) %/MODIFY-SDF-OPT MODE=*EXEC ,DEFAULT-PROG-NAME=*NONE —————————————————— ( 12 ) %/END-PROC
(1) | Aufruf der Prozedur PROC.SELECT mit Angabe des Prozedurparameters MODE=*TEST. |
(2) | Der Systemdatei SYSDTA wird als Eingabequelle die Systemdatei SYSCMD zugewiesen, d.h. Datensätze werden ebenfalls aus der Prozedurdatei gelesen. |
(3) | Die SDF-Einstellungen werden geändert: Die Angabe MODE=*TEST bewirkt das Einschalten des Testmodus. Der Testmodus wird auf Anweisungen mit führenden „//“ erweitert. Die Protokollierung erfolgt wie eingegeben. |
(4) | SHOW-SDF-OPTIONS wird ausgeführt und die Ausgabe der aktuellen SDF-Einstellungen. |
(5) | Die Jobvariablenersetzung wurde durchgeführt. Für &(JV.INFILE) wurde der Inhalt der Jobvariablen JV.INFILE, „TEST“ eingesetzt. |
(6) | Anweisungen mit führenden „//“ werden nur syntaktisch geprüft. (SHOW-SDF-OPTIONS ist hier eine Anweisung!) |
(7) | Die Jobvariablenersetzung wurde durchgeführt (wie bei Punkt 5). |
(8) | Der Prozedurparameter OUTFILE wurde bei Prozeduraufruf nicht angegeben. Deshalb wird er durch Prompting abgefragt. |
(9) | Für &OUTFILE wird der angegebene Wert „TEST4“ gesetzt. |
(10) | Die nachfolgenden Anweisungen an das Dienstprogramm LMS werden ignoriert, da sie nicht mit „//“ eingeleitet werden. |
(11) | Der letzte zu ignorierende Datensatz wird erkannt. Die nächste Eingabezeile beginnt mit „/“ bzw. „//“. |
(12) | MODIFY-SDF-OPTIONS wird ausgeführt und bewirkt hier das Ausschalten des Testmodus. |