Es soll ein Programm erstellt werden, das ISAM- und SAM-Dateien kopiert. Dabei soll es möglich sein, Folgendes zu ändern:
die Zugriffsmethode
die Satzlänge
den ISAM-Schlüssel.
Das Programm soll als Hauptprogramm ablaufen.
Falls die zu bearbeitende Datei durch ein Kennwort geschützt ist, soll dieses dunkelgesteuert eingegeben werden können. Fehlt das Kennwort, so soll es in einem Fehlerdialog angefordert werden.
Das Programm hat neben den SDF-Standardanweisungen die folgende Anweisung:
COPY-FILE |
FROM-FILE = <filename 1..54> ,TO-FILE = <filename 1..54 without-gen-vers>(...) <filename 1..54 without-gen-vers>(...)
*ISAM(...)
,PASSWORD = *NONE / <c-string 1..4> / *SECRET-PROMPT |
Programm in der Benutzersyntaxdatei definieren
Das Programm KOP wird in der Benutzersyntaxdatei SDF.KOP.SYNTAX definiert:
|
(1) | Unter der Benutzerkennung SDFUSR wird eine Task gestartet. |
(2) | SDF-A wird geladen und gestartet. |
(3) | Die Benutzersyntaxdatei SDF.KOP.SYNTAX wird erzeugt und geöffnet. |
(4) | Das Programm KOP wird definiert. Als INTERNAL-NAME übernimmt SDF-A standardmäßig die ersten drei Buchstaben KOP. |
(5) | Der Kopf der zum Programm KOP gehörenden Anweisung COPY-FILE wird definiert. Ihr INTERNAL-NAME ist COPYFI. Sie erhält die Versionsnummer 1. |
(6) | Der erste Operand der Anweisung COPY-FILE wird definiert. Sein Name ist FROM-FILE. Im Operanden-Array des Übergabebereichs steht er an erster Stelle. |
(7) | Es wird definiert, dass der Wert des Operanden FROM-FILE vom Datentyp FILE-NAME sein muss. |
(8) | Der zweite Operand der Anweisung COPY-FILE wird definiert. Sein Name ist TO-FILE. Im Operanden-Array des Übergabebereichs steht er an zweiter Stelle. |
(9) | Es wird definiert, dass der Wert des Operanden TO-FILE vom Datentyp FILENAME sein muss. Es darf weder eine Generationsnummer noch eine Versionsbezeichnung angegeben werden. FILENAME leitet eine Struktur ein. |
(10) | Der erste Operand in der Struktur FILENAME wird definiert. Sein Name ist ACCESS-METHOD. Sein Default-Wert ist SAME. Im Operanden-Array des Übergabebereichs steht er an dritter Stelle. |
|
(11) | Es wird definiert, dass das Schlüsselwort SAME ein zulässiger Wert des Operanden ACCESS-METHOD ist. |
(12) | Es wird definiert, dass das Schlüsselwort ISAM ein zulässiger Wert des Operanden ACCESS-METHOD ist. ISAM leitet eine Struktur ein. |
(13) | Der erste Operand in der Struktur ISAM wird definiert. Sein Name ist KEY-LENGTH. Sein Default-Wert ist STD. Im Operanden-Array des Übergabebereichs steht er an vierter Stelle. |
(14) | Es wird definiert, dass das Schlüsselwort STD ein zulässiger Wert des Operanden KEY-LENGTH ist. |
(15) | Es wird definiert, dass der Wert des Operanden KEY-LENGTH vom Datentyp INTEGER sein kann. Als untere Grenze wird 1 und als obere 50 definiert. |
(16) | Die gerade bearbeitete Struktur ISAM wird geschlossen. |
(17) | Es wird definiert, dass das Schlüsselwort SAM ein zulässiger Wert des Operanden ACCESS-METHOD ist. |
(18) | Der zweite Operand in der Struktur FILENAME wird definiert. Sein Name ist RECORD-SIZE. Sein Default-Wert ist SAME. Im Operanden-Array des Übergabebereichs steht er an fünfter Stelle. |
(19) | Es wird definiert, dass das Schlüsselwort SAME ein zulässiger Wert des Operanden RECORD-SIZE ist. |
(20) | Es wird definiert, dass das Schlüsselwort VARIABLE ein zulässiger Wert des Operanden RECORD-SIZE ist. |
(21) | Es wird definiert, dass der Wert des Operanden RECORD-SIZE vom Datentyp INTEGER sein kann. Als untere Grenze wird 1 und als obere 2048 definiert. |
(22) | Die gerade bearbeitete Struktur FILENAME wird geschlossen. |
|
(23) | Der dritte globale Operand der Anweisung COPY-FILE wird definiert. Sein Name ist PASSWORD. Sein Default-Wert ist NONE. Er ist als geheimer Operand definiert. Im Operanden-Array des Übergabebereichs steht er an sechster Stelle. |
(24) | Es wird definiert, dass das Schlüsselwort NONE ein zulässiger Wert des Operanden PASSWORD ist. |
(25) | Es wird definiert, dass der Wert des Operanden PASSWORD vom Datentyp C-STRING sein kann. Als minimale Länge ist 1 definiert, als maximale 4. |
(26) | Es wird definiert, dass das Schlüsselwort SECRET-PROMPT ein zulässiger Wert des Operanden PASSWORD ist. Es wird nicht an die Implementierung übergeben, sondern nach seiner Eingabe fordert SDF die dunkelgesteuerte Eingabe eines Werts für PASSWORD an. |
(27) | Die Definition der Anweisung COPY-FILE wird abgeschlossen. |
(28) | Die Definition des Programms KOP wird mit der einzigen zugehörigen Anweisung in der ausführlichsten Form ausgegeben. |
Nach Analyse der Anweisung COPY-FILE schreibt SDF folgende Informationen in den Übergabebereich. Die in runde Klammern eingeschlossenen Angaben schreibt SDF-A nur im Fall ACCESS-METHOD=*ISAM.
Byte | Länge in | Bezeichnung | Wert |
0 bis 7 | 8 | Standardheader | |
8 bis 11 | 4 | Länge des Übergabebereichs | |
12 bis 19 | 8 | interner Anweisungsname | C'COPYFI' |
20 bis 23 | 4 | reserviert | |
24 bis 26 | 3 | Version der Anweisung | C'001' |
27 bis 35 | 9 | reserviert | |
36 bis 37 | 2 | Anzahl der Positionen im Operanden-Array | 6 |
38 bis 39 | 2 | reserviert | |
40 41 42 43 44 bis 47 | 1 1 1 1 4 | Zusatzinformation für FROM-FILE Typbeschreibung für FROM-FILE Globale Syntaxattribute für FROM-FILE (immer 0, da Wildcards nicht erlaubt sind) Syntaxattribute für Datentyp <filename>, wenn:
Absolutadresse des Werts von FROM-FILE | B'1... ....' 11 B'.... ....' B'1... ....' B'.1.. ....' B'..1. ....' B'...1 ....' B'.... 1...' aaaa |
48 49 50 51 52 bis 55 | 1 1 1 1 4 | Zusatzinformation für TO-FILE Typbeschreibung für TO-FILE Globale Syntaxattribute für TO-FILE (immer 0, da Wildcards nicht erlaubt sind) Syntaxattribute für Datentyp <filename>, wenn:
Absolutadresse des Werts von TO-FILE | B'1... ....' 11 B'.... ....' B'1... ....' B'.1.. ....' B'.... 1...' aaaa |
56 57 58 59 60 bis 63 | 1 1 1 1 4 | Zusatzinformation für ACCESS-METHOD Typbeschreibung für ACCESS-METHOD reserviert reserviert Absolutadresse des Werts von ACCESS-METHOD | B'1... ....' 22 aaaa |
64 65 66 67 68 bis 71 | 1 1 1 1 4 | Zusatzinformation für KEY-LENGTH Typbeschreibung für KEY-LENGTH reserviert reserviert Absolutadresse des Werts von KEY-LENGTH | B'0... ....' oder B'1... ....' (2 oder 22 (aaaa) |
72 73 74 75 76 bis 79 | 1 1 1 1 4 | Zusatzinformation für RECORD-SIZE Typbeschreibung für RECORD-SIZE reserviert reserviert Absolutadresse des Werts von RECORD-SIZE | B'1... ....' 2 oder 22 aaaa |
80 81 82 83 84 bis 87 | 1 1 1 1 4 | Zusatzinformation für PASSWORD Typbeschreibung für PASSWORD reserviert Syntaxattribute für Datentyp <c-string>:
Absolutadresse des Werts von PASSWORD | B'1... ....' 2 oder 22 B'1... ....' aaaa |
2 2 ≤54 | Längenangabe reserviert Wert von FROM-FILE | II xxx | |
2 2 ≤54 | Längenangabe reserviert Wert von TO-FILE | II xxx | |
2 2 ≤4 | Längenangabe reserviert Wert von ACCESS-METHOD | II xxx | |
2 2 (≤ 4) | (Längenangabe) (reserviert) (Wert von KEY-LENGTH) | (II) (xxx) | |
2 2 ≤ 8 | Längenangabe reserviert Wert von RECORD-SIZE | II xxx | |
2 2 ≤ 4 | Längenangabe reserviert Wert von PASSWORD | II xxx |
Die Anweisung COPY-FILE belegt im Übergabebereich maximal 240 Byte. Der Übergabebereich muss deshalb mindestens 240 Byte groß sein.
Programm erstellen
Im Folgenden ist das Programm KOP wiedergegeben:
KOP START TITLE 'Example of program using SDF macros' *---------------------------------------------------------------------* * The program reads and corrects the statement COPY-FILE with SDF, * then executes it. * The field identifiers used by this program are to be found in the * SDF macros CMDTA for the transfer area, CMDMEM for the status. *---------------------------------------------------------------------* R0 EQU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 *---------------------------------------------------------------------* FRFILE# EQU 1 position of operand FROM-FILE TOFILE# EQU 2 TO-FILE ACCESS# EQU 3 ACCESS-METH KEYLEN# EQU 4 KEY-LENGTH RECSIZ# EQU 5 RECORD-SIZE PASSWR# EQU 6 PASSWORD CMDANALY , SDF return codes TAD CMDTA MF=D SDF transfer area RSTD CMDRST MF=D Read statements CSTD CMDCST MF=D Correct statement *---------------------------------------------------------------------* * Register usage * R2 SDF output area for CMDSTA, CMDRST, CMDCST. * R3 current character in filename analysis * R3 current field in SDF output area * * R5 help register * R10,R11 base registers * R15 return code *---------------------------------------------------------------------* KOP CSECT , BEGIN BALR R10,R0 USING *,R10,R11 B F00 SLICE# DC F'4096' F00 LR R11,R10 A R11,SLICE# *---------------------------------------------------------------------* * Check if user syntax file is activated. *---------------------------------------------------------------------* CMDMEM D,P=XMD Layout for CMDSTA output * KOP CSECT , * CMDSTA OUTAREA=STA#OUT Get SDF options * USING XMDMEM,R2 LA R2,STA#OUT LA R3,XMDUSER CLI 0(R3),':' Check catid BNE NOCATID CATIDL LA R3,1(R3) CLI 0(R3),':' BNE CATIDL LA R3,1(R3) NOCATID CLI 0(R3),'$' Check userid BNE NOUSERID USERIDL LA R3,1(R3) CLI 0(R3),'.' BNE USERIDL LA R3,1(R3) NOUSERID CLC 0(USF#L,R3),USF#NAME Check user syntax file BNE FC#ERROR DROP R2 *---------------------------------------------------------------------* * Read SDF statement. *---------------------------------------------------------------------* READSTMT DS 0Y MVI OWNFLAGS,0 USING RSTD,1 from CMDRST USING TAD,R2 from CMDTA LA R1,RSTPL LA R2,OUTPUT * CMDRST MF=E,PARAM=RSTPL * CLI CMDRMR1,CMDRSUCCESSFUL no error, continue... BE F01 CLI CMDRMR1,CMDREOF EOF reached BE FC#EOF CLI CMDRMR1,CMDREND_STMT //END was read BE FC#END B FC#ERROR otherwise error... *---------------------------------------------------------------------* * Evaluate structured-description *---------------------------------------------------------------------* F01 DS 0H CLC CMDINTN,COPYFILE is this //COPY-FILE ? BNE FC#ERROR it can only be //COPY-FILE ! *---------------------------------------------------------------------* * operand FROM-FILE *---------------------------------------------------------------------* LA R3,CMDMAIN+(FRFILE#-1)*CMDHEAL FROM-FILE USING CMDHEAD,R3 L R3,CMDOPTR A(from-file value) MVI FRFILE,' ' MVC FRFILE+1(L'FRFILE-1),FRFILE USING CMDOVAL,R3 value field LH R5,CMDLVAL value length BCTR R5,R0 EX R5,EX#MVC1 mvc with l=R5 B F02 skip ex#mvc1... EX#MVC1 MVC FRFILE(1),CMDAVAL *---------------------------------------------------------------------* * operand PASSWORD *---------------------------------------------------------------------* F02 DS 0H LA R3,CMDMAIN+(PASSWR#-1)*CMDHEAL PASSWORD USING CMDODES,R3 CLI CMDOTYP,CMDCSTR C-string input ? BNE NO#PASS no: no password input * copy input password into own field MVI PASSWR,' ' MVC PASSWR+1(L'PASSWR-1),PASSWR USING CMDHEAD,R3 operand description L R3,CMDOPTR A(password value) USING CMDOVAL,R3 value field LH R5,CMDLVAL value length BCTR R5,R0 EX R5,EX#MVC2 mvc with l=R5 B FC#OPEN skip ex#mvc2... EX#MVC2 MVC PASSWR(1),CMDAVAL NO#PASS DS 0H OI OWNFLAGS,NOPASS FC#OPEN DS 0H CLC PASSWR,QUESTION is password = '????' BE PASS#ER test corstmt part. * open of file FROM-FILE * ... * if error at open of FROM-FILE: * B PASS#ER *---------------------------------------------------------------------* * operand TO-FILE *---------------------------------------------------------------------* LA R3,CMDMAIN+(TOFILE#-1)*CMDHEAL TO-FILE USING CMDODES,R3 TM CMDGSTA,CMDOCC operand input ? BZ FC#ERROR no: error MVI TOFILE,' ' MVC TOFILE+1(L'TOFILE-1),TOFILE USING CMDHEAD,R3 L R3,CMDOPTR A(to-file value) USING CMDOVAL,R3 value field LH R5,CMDLVAL value length BCTR R5,R0 EX R5,EX#MVC3 mvc with l=R5 B F03 skip ex#mvc3... EX#MVC3 MVC TOFILE(1),CMDAVAL *---------------------------------------------------------------------* * operand ACCESS-METHOD *---------------------------------------------------------------------* F03 DS 0H LA R3,CMDMAIN+(ACCESS#-1)*CMDHEAL ACCESS-METHOD USING CMDODES,R3 TM CMDGSTA,CMDOCC operand input ? BZ FC#ERROR no: error USING CMDHEAD,R3 L R3,CMDOPTR A(access-method value) USING CMDOVAL,R3 value field LH R5,CMDLVAL value length CH R5,THREE sam? BE I#SAM CLI CMDAVAL,'I' isam? BE I#SAM * access-method = same OI OWNFLAGS,ACCSAME MVI ACCESS,'X' B F04 skip sam/isam * access-method = sam / isam I#SAM DS 0H MVC ACCESS,CMDAVAL S:sam / I:isam *---------------------------------------------------------------------* * operand KEY-LENGTH *---------------------------------------------------------------------* F04 DS 0H LA R3,CMDMAIN+(KEYLEN#-1)*CMDHEAL KEY-LENGTH USING CMDODES,R3 TM CMDGSTA,CMDOCC operand input ? BZ F05 no: not isam, next operand. CLI CMDOTYP,CMDINT BE KEYINT * key-length = std : keylen := 8 MVI KEYLEN,8 B F05 * key-length = <integer_1..50> KEYINT DS 0H USING CMDHEAD,R3 L R3,CMDOPTR A(key-length value) USING CMDOVAL,R3 value field MVC KEYLEN,CMDAVAL+3 B F05 *---------------------------------------------------------------------* * operand RECORD-SIZE *---------------------------------------------------------------------* F05 DS 0H LA R3,CMDMAIN+(RECSIZ#-1)*CMDHEAL RECORD-SIZE USING CMDODES,R3 TM CMDGSTA,CMDOCC operand input ? BZ FC#ERROR no: error CLI CMDOTYP,CMDINT BE RECINT USING CMDHEAD,R3 L R3,CMDOPTR A(record-size value) USING CMDOVAL,R3 value field LH R5,CMDLVAL value length CH R5,FOUR BNE F051 * record-size = same OI OWNFLAGS,RECSAME B F06 F051 DS 0H * record-size = variable OI OWNFLAGS,RECVAR B F06 * record-size = <integer_1..2048> RECINT DS 0H USING CMDHEAD,R3 L R3,CMDOPTR A(record-size value) USING CMDOVAL,R3 value field MVC RECSIZ,CMDAVAL+2 F06 DS 0H *---------------------------------------------------------------------* * ... Copy file ... * Output of copied values for test purpose (even password!) *---------------------------------------------------------------------* WROUT MESS1,FC#END WROUT MESS2,FC#END TM OWNFLAGS,NOPASS BZ WMESS3 WROUT MESS11,FC#END B WMESS4 WMESS3 DS 0H WROUT MESS3,FC#END WMESS4 DS 0H TM OWNFLAGS,ACCSAME BZ WMESS5 WROUT MESS4,FC#END access given B WMESS6 WMESS5 WROUT MESS5,FC#END access default WMESS6 DS 0H TM OWNFLAGS,KEYSTD BNZ WMESS8 UNPK BUFF5(5),KEYHW(3) TR BUFF5(4),CONVCHAR-XF0 MVC KEYCHAR,BUFF5 WROUT MESS6,FC#END B WMESS7 WMESS8 WROUT MESS8,FC#END WMESS7 DS 0H TM OWNFLAGS,RECSAME BNZ WMESS9 TM OWNFLAGS,RECVAR BNZ WMESS10 UNPK BUFF5(5),RECSIZ(3) TR BUFF5(4),CONVCHAR-XF0 MVC RECCHAR,BUFF5 WROUT MESS7,FC#END B REPEAT WMESS9 WROUT MESS9,FC#END B REPEAT WMESS10 WROUT MESS10,FC#END * * R E P E A T READSTMT * REPEAT DS 0H B READSTMT *---------------------------------------------------------------------* * Password handling routine *---------------------------------------------------------------------* PASS#ER DS 0H LA R3,CMDMAIN+(PASSWR#-1)*CMDHEAL PASSWORD USING CMDODES,R3 OI CMDGSTA,CMDERR set operand erroneous LA R1,CSTPL USING CSTD,R1 CMDCST MF=M,MESSAGE=A(MESSAGE) CORRSTMT CMDCST MF=E,PARAM=CSTPL CLI CMDCMR1,CMDCSUCCESSFUL corstmt successful? BNE READSTMT no: new read... B F01 repeat analysis... * * Game over. * B FC#END *---------------------------------------------------------------------* FC#ERROR DS 0H error handling routine * ... FC#EOF DS 0H EOF handling routine * ... *---------------------------------------------------------------------* FC#END TERM *---------------------------------------------------------------------* * Parameter lists *---------------------------------------------------------------------* RSTPL CMDRST MF=L,PROGRAM='KOP',OUTPUT=A(OUTPUT) CSTPL CMDCST MF=L,INOUT=A(OUTPUT),MESSAGE=A(0) * given at execution *---------------------------------------------------------------------* * Used constants, variables and buffers *---------------------------------------------------------------------* RC DS X return code byte USF#NAME DC 'SDF.KOP.SYNTAX' syntax file name USF#L EQU *-USF#NAME user syntax file length COPYFILE DC 'COPYFI ' //COPY-FILE internal name QUESTION DC '????' THREE DC H'3' FOUR DC H'4' EIGHT DC H'8' CONVCHAR DC C'0123456789ABCDEF' XF0 EQU X'F0' * Message for CORSTMT MESSAGE DS 0F DC Y(MSGEND-MESSAGE) DS XL2 DC C'BITTE PASSWORT FUER EINGABEDATEI ANGEBEN' MSGEND EQU * *---------------------------------------------------------------------* * Output fields for statement operands *---------------------------------------------------------------------* MESS1 DS 0F DC Y(END1-MESS1) DS CL2 DC X'40' DC C'FROM-FILE = ' FRFILE DS CL52' ' own from-file END1 EQU * MESS2 DS 0F DC Y(END2-MESS2) DS CL2 DC X'40' DC C'TO-FILE = ' TOFILE DS CL52' ' own to-file END2 EQU * MESS3 DS 0F DC Y(END3-MESS3) DS CL2 DC X'40' DC C'PASSWORD = ' PASSWR DS CL4 own password END3 EQU * MESS4 DS 0F DC Y(END4-MESS4) DS CL2 DC X'40' DC C'ACCESS-METHOD IS SAME' END4 EQU * MESS5 DS 0F DC Y(END5-MESS5) DS CL2 DC X'40' DC C'ACCESS-METHOD = ' ACCESS DS X own access-method: Sam | Isam END5 EQU * MESS6 DS 0F DC Y(END6-MESS6) DS CL2 DC X'40' DC C'KEY-LENGTH = ' KEYCHAR DS CL4' ' key-length converted into hexa END6 EQU * MESS7 DS 0F DC Y(END7-MESS7) DS CL2 DC X'40' DC C'REC-SIZE = ' RECCHAR DS CL4' ' rec-size converted into hexa END7 EQU * MESS8 DS 0F DC Y(END8-MESS8) DS CL2 DC X'40' DC C'KEY-LENGTH IS STD' END8 EQU * MESS9 DS 0F DC Y(END9-MESS9) DS CL2 DC X'40' DC C'REC-SIZE IS SAME' END9 EQU * MESS10 DS 0F DC Y(END10-MESS10) DS CL2 DC X'40' DC C'REC-SIZE IS VARIABLE' END10 EQU * MESS11 DS 0F DC Y(END11-MESS11) DS CL2 DC X'40' DC C'PASSWORD IS NONE' END11 EQU * KEYHW DC H'0' ORG KEYHW FIL1 DS X KEYLEN DS AL1 own key-length BUFF5 DS CL5 buffer for unpack RECSIZ DS H own record-size OWNFLAGS DS X own flags ACCSAME EQU X'80' access-method=same KEYSTD EQU X'40' key-length=std RECSAME EQU X'20' record-size=same RECVAR EQU X'10' =variable NOPASS EQU X'08' no password. *---------------------------------------------------------------------* STA#OUT DS 0F CMDSTA output ORG *+XMDMEML length from CMDMEM OUTPUT CMDTA MF=L,MAXLEN=400 CMDRST output *---------------------------------------------------------------------* END KOP
Das gezeigte Quellprogramm KOP steht in der Datei KOP.SRC. Im Folgenden wird es übersetzt, gebunden und getestet.Programm übersetzen, binden und testen
| (1) | |
|
| |
|
|
(1) | Unter der Benutzerkennung SDFUSR wird eine Task gestartet. |
(2) | Das Programm muss mit ASSEMBH übersetzt werden, da es die neuen Makros CMDTA, CMDCST und CMDRST enthält. Das oben auszugsweise gezeigte Quellprogramm steht als Typ-S-Element mit dem Namen KOP.SRC in der Bibliothek KOP.LIB. Die SDF-Makros stehen in der Makrobibliothek $.SYSLIB.SDF.045. Das erzeugte Bindemodul soll unter dem Elementnamen KOP in der Bibliothek KOP.LIB abgelegt werden. |
(3) | Der Binder BINDER soll ein Bindelademodul (LLM) mit dem internen Namen KOP erzeugen. |
(4) | Der Binder soll das in Arbeitsschritt 2 erzeugte Bindemodul KOP einlesen und in das LLM einfügen. |
|
(5) | Das ablauffähige Bindelademodul soll unter dem Namen KOP (als Typ-L-Element) in der Bibliothek KOP.LIB abgelegt werden. |
(6) | Die Benutzersyntaxdatei SDF.KOP.SYNTAX, in der die Anweisungen für das Programm KOP definiert sind, wird aktiviert. |
(7) | Das Programm KOP wird gestartet. Das hier verwendete Kommando START-EXECUTABLE-PROGRAM steht ab BLSSERV V2.3 zur Verfügung (ggf. ist das Kommando START-PROGRAM mit RUN-MODE=*ADVANCED zu verwenden). |
(8) | Die Benutzerführung wird auf den Modus NO eingestellt. |
(9) | Fall 1: Die Anweisung COPY-FILE wird ohne den Pflichtoperanden TO-FILE eingegeben. Die Kennworteingabe soll dunkelgesteuert erfolgen. SDF fordert das Kennwort und den fehlenden Operanden an. |
(10) | Fall 2: Die Anweisung COPY-FILE wird ohne das erforderliche Kennwort eingegeben. Über den Operanden ACCESS-METHOD werden weitere Informationen angefordert. SDF liefert die Informationen und fordert zur Eingabe des Kennworts auf. |
%STMT:cop-f testdat.iv,testdat.cop.3(?) ——————————————————————————————— (11)
(11) | Fall 3: Die Anweisung COPY-FILE wird ohne das erforderliche Kennwort eingegeben. Durch das Fragezeichen wird über die Struktur, die der Dateiname der Ausgabedatei einleitet, weitere Information angefordert. Dies bewirkt den Übergang in den temporär geführten Dialog. SDF liefert im Operandenfragebogen die gewünschten Informationen und fordert danach das benötigte Kennwort an. |
%STMT:? ——————————————————————————————————————————————————————————————— (12)
** NORMALES PROGRAMMENDE **
%CMD:exit-job
(12) | Mit dem Fragezeichen wird in den temporär geführten Dialog gewechselt. SDF gibt ein Menü aus, in dem die verfügbaren Anweisungen aufgelistet sind. Dazu gehören auch die Standardanweisungen. Die Anweisung STEP ist im Dialogbetrieb nicht verfügbar. Durch Eingabe der Nummer 2 wird die Anweisung END ausgewählt und das Programm beendet. |