Verzweigungen im Prozedurlauf können mit IF-Blöcken erzeugt werden. In IF-Blöcken werden Kommandofolgen abhängig vom Ergebnis einer Bedingung ausgeführt. Ein IF-Block wird mit dem Kommando IF eingeleitet und mit dem Kommando END-IF abgeschlossen. Er kann mit einer Marke versehen werden.
Wenn nur eine Bedingung geprüft werden soll, besteht der IF-Block aus dem IF-Kommando mit der Bedingung, der dazugehörenden Kommandofolge und dem Kommando END-IF. Die Bedingung muss als boolescher Wert angegeben werden.
/IF bedingung kommandofolge1 /END-IF |
Wenn die Bedingung im IF-Kommando erfüllt ist, wird kommandofolge
1
ausgeführt. Wenn die Bedingung nicht erfüllt ist, wird der IF-Block beendet. Das Kommando, das auf END-IF folgt, wird ausgeführt.
Wie in höheren Programmiersprachen wird in IF-Blöcken zwischen THEN-Zweig und ELSE-Zweig unterschieden. Im obigen Beispiel bildet kommandofolge
1
den THEN-Zweig und der Sprung zu END-IF den ELSE-Zweig.
Wenn alternativ zu kommandofolge
1
eine andere Kommandofolge ausgeführt werden soll, muss explizit ein ELSE-Zweig angegeben werden. Der ELSE-Zweig enthält die alternative Kommandofolge. Er wird mit dem Kommando ELSE eingeleitet und mit dem Kommando END-IF abgeschlossen.
/IF bedingung kommandofolge1 /ELSE kommandofolge2 /END-IF |
Wenn die Bedinung im IF-Kommando erfüllt ist, wird kommandofolge
1
ausgeführt, und der Block wird beendet. Wenn die Bedingung nicht erfüllt ist, wird kommandofolge
2
ausgeführt.In einem IF-Block können auch mehrere Bedinungen nacheinander geprüft werden.
/IF bedingung1 /ELSE-IF bedingung2 /ELSE-IF bedingung3 ... /ELSE kommandofolgei /END-IF |
Ist die Bedingung im IF-Kommando erfüllt, wird kommandofolge
1
ausgeführt. Ist sie nicht erfüllt, wird die Bedingung im ersten ELSE-IF-Kommando geprüft. Ist diese Bedingung erfüllt, wird kommandofolge
2
ausgeführt, andernfalls wird die Bedingung im nächsten ELSE-IF-Kommando geprüft usw. Ist keine der Bedingungen erfüllt, wird kommandofolge
i
aus-geführt, die dem ELSE-Kommando folgt.
Die Kommandofolgen zwischen den Kommandos IF, ELSE-IF, ELSE und END-IF bilden jeweils eigene Blöcke.
Beispiel
Abhängig vom Wert der Variablen A soll eine Datei angelegt werden, deren Dateiname als Teilnamen den Wert der Variablen enthält:
Wenn der Wert der Variablen A kleiner ist als 11, soll eine Datei DATEI.KLEIN.&A angelegt werden.
Wenn der Wert der Variablen A zwischen 11 und 100 liegt, soll eine Datei DATEI.MITTEL.&A angelegt werden.
Ist A größer als 100, soll eine Datei DATEI.GROSS.&A angelegt werden.
/DECLARE-PARAMETER A(INITIAL-VALUE=*PROMPT,TYPE=*INTEGER) /IF (A < 11) / CREATE-FILE DATEI.KLEIN.&A,SUPPORT=*PUB-DISK(SPACE=*RELA(PRIM-ALLOC=30)) / ELSE-IF (A < 101) / CREATE-FILE DATEI.MITTEL.&A,SUPPORT=*PUB-DISK(SPACE=*RELA(PRIMALLOC=60)) / ELSE / CREATE-FILE DATEI.GROSS.&A,SUPPORT=*PUB-DISK(SPACE=*RELA(PRIM-ALLOC=90)) /END-IF
Die Dateien werden angelegt mit SUPPORT = *PUB-DISK(SPACE = *RELA(PRIM-ALLOC= ...)) im Kommando CREATE-FILE:
SUPPORT = *PUBLIC-DISK bewirkt, dass die Datei als Plattendatei auf einer gemeinschaftlichen Platte angelegt wird.
SPACE = *RELATIVE bewirkt relative Speicherplatzzuweisung.
PRIMARY-ALLOCATION bewirkt, dass der Datei n PAM-Seiten Speicherplatz zugewiesen werden.
Wie Dateien erzeugt werden, ist ausführlich im Handbuch „Einführung in das DVS“ [1] beschrieben. Dort sind auch die Begriffe „Plattendatei“, „gemeinschaftliche Platte“, „(relative) Speicherplatzzuweisung“ und „PAM-Seite“ erklärt.