マクロ制御文
本章では、マクロ制御文およびオペランドについて説明します。
1. 概要
以下は、マクロ制御文の一覧です。
マクロ制御文 | 説明 |
---|---|
ジョブ制御マクロ定義を終了します。 |
|
ジョブ制御マクロ定義を開始します。 |
|
マクロ定義本体でDEXIT文が現れると、マクロ定義本体の読み取りを終了します。 |
|
IF文に指定されたパラメータ値が与えられた条件を満たす場合、マクロ展開の流れを変更します。 |
|
IFN文に指定されたパラメータ値が与えられた条件を満たす場合、マクロ展開の流れを変更します。 |
|
OpenFrameでは構文エラーのみチェックします。 |
|
何の動作も行いません。 |
|
内部または外部パラメータの値を変更します。 |
|
SKIP文に指定された名前を持つ文(ジョブ制御文またはマクロ制御文)にマクロ展開の流れを移動します。 |
|
OpenFrameでは構文エラーのみチェックします。 |
|
OpenFrameでは構文エラーのみチェックします。 |
|
ジョブ制御マクロの内容を記述します。 |
2. DEFEND文
ジョブ制御マクロ定義を終了します。ジョブ制御マクロ定義は、DEFINE文から開始され、DEFEND文で終了します。
構文
/[名前]△¹DEFEND△¹[コメント]
項目 | 説明 |
---|---|
名前 |
名前を指定します。「\」に続けて2桁目から8文字以内の記号文字で記述できます。特殊文字「.」を含めることができ、省略可能です。 |
DEFEND |
オペレーションを指定します。名前の後ろに1つ以上のスペースを入れて「DEFEND」と記述します。名前を省略した場合は、「\」の後ろに1つ以上のスペースを入れて指定します。 |
コメント |
DEFENDの後に1つ以上のスペースを入れて、71桁目まで記述できます。 |
例
/ DEFINE M1,P1=NO \ JOB J1 / IF P1=YES,S1 / SKIP S2 \S1 EX X / DEXIT \S2 EX Y / DEFEND
上記のようにマクロが定義された場合、マクロ呼び出しの結果は以下のとおりです。
\ M1 P1=NO
[ 結果 ]
\ JOB J1 \S2 EX Y
3. DEFINE文
ジョブ制御マクロ定義を開始します。
構文
/[マクロ展開規則]△¹DEFINE△¹位置オペランド[,キーワードオペランド]...△¹[コメント]
項目 | 説明 |
---|---|
マクロ展開規則 |
マクロ展開規則を「/」に続けて2桁目から記述します。 以下のいずれかを指定します。
OpenFrameでは、指定された値に関係なく、EXPAN規則(2~71桁目をマクロ展開)に従います。 |
DEFINE |
オペレーションを指定します。名前の後に1つ以上のスペースを入れて「DEFINE」と記述します。マクロ展開規則を省略した場合は、「\」の後ろに1つ以上のスペースを入れて記述します。 |
位置オペランド[,キーワードオペランド] |
DEFINEの後に1つ以上のスペースを入れて記述します。すべての位置オペランドを記述してから、キーワード・オペランドを記述します。オペランドの詳細については、オペランドを参照してください。 |
コメント |
オペランドの後に1つ以上のスペースを入れて、71桁目まで記述できます。 |
オペランド
以下は、オペランドについての説明です。
3.2. パラメータ名
マクロ内で使用されるパラメータ名を指定します。
複数のパラメータを指定する場合は、各パラメータをコンマで区切ります。パラメータ名に続けてデフォルト値を記述することも可能です。そのとき、マクロ呼び出し文でそのパラメータを指定しない場合は、デフォルト値が使用されます。(デフォルト値: 引用文字列)
また、パラメータのみ指定し、値を指定しない場合(例: パラメータ=)は、パラメータ値が空の値で初期化されます。
-
例
以下は、TESTという名前のジョブ制御マクロを定義する例です。
/ DEFINE TEST,JN,PP=4
上記例で、パラメータはJNとPPの2つです。JNパラメータはデフォルト値がなく、PPパラメータのデフォルト値は4です。
4. DEXIT文
マクロ定義本体でDEXIT文またはDEFEND文が現れると、システム入力制御プログラムは、マクロ定義本体の読み取りを終了します。
構文
/[名前]△¹DEXIT△¹[コメント]
項目 | 説明 |
---|---|
名前 |
名前を指定します。「\」に続けて2桁目から8文字以内の記号文字で記述できます。特殊文字「.」を含めることができ、省略可能です。 |
DEXIT |
オペレーションを指定します。名前の後に1つ以上のスペースを入れて「DEXIT」と記述します。名前を省略した場合は、「\」の後ろに1つ以上のスペースを入れて指定します。 |
コメント |
DEXITの後に1つ以上のスペースを入れて、71桁目まで記述できます。 |
例
/ DEFINE M1,P1=NO \ JOB J1 / IF P1=YES,S1 / SKIP S2 \S1 EX X / DEXIT \S2 EX Y / DEFEND
上記のようにマクロが定義された場合、マクロ呼び出しの展開結果は以下のとおりです。
\ M1 P1=YES
[ 結果 ]
\ JOB J1 \S1 EX X
5. IFN文
IFN文に指定されたパラメータ値が与えられた条件を満たす場合、マクロ展開の流れを変更します。IF文は文字列間の比較を実行しますが、IFN文は整数間の比較を行います。
構文
/[名前]△¹IFN△¹条件,分岐先△¹[コメント]
項目 | 説明 |
---|---|
名前 |
名前を指定します。「\」に続けて2桁目から8文字以内の記号文字で記述できます。特殊文字「.」を含めることができ、省略可能です。 |
IFN |
オペレーションを指定します。名前の後に1つ以上のスペースを入れて「IFN」と記述します。名前を省略した場合は、「\」の後ろに1つ以上のスペースを入れて指定します。 |
条件 |
IFNの後に1つ以上のスペースを入れて条件を記述します。 |
分岐先 |
条件とコンマの後に分岐先を記述します。 |
コメント |
分岐先の後に1つ以上のスペースを入れて、71桁目まで記述できます。 |
-
条件
条件の形式は以下のとおりです。
左辺 演算子 右辺 パラメータ名
{=|^=|=N|<|>|<=|>=}
{値|\パラメータ名}
以下は、条件形式の各項目についての説明です。
項目 説明 パラメータ名
比較対象の値が保存されているパラメータ名です。
=
左辺と右辺の値が等しい場合、分岐先へ移動します。
^= または =N
左辺と右辺の値が異なる場合、分岐先へ移動します。
<
左辺の値が右辺の値より小さい場合、分岐先へ移動します。
>
左辺の値が右辺の値より大きい場合、分岐先へ移動します。
<=
左辺の値が右辺の値より小さいか等しい場合、分岐先へ移動します。
>=
左辺の値が右辺の値より大きいか等しい場合、分岐先へ移動します。
値
比較対象の値です。整数または括弧で囲まれた整数です。
-
分岐先
以下は、分岐先についての説明です。分岐先を記述する位置には、名前またはパラメータ名を記述することができます。
項目 説明 名前
移動する位置(ジョブ制御文またはマクロ制御文)の名前です。
パラメータ名
移動する場所の名前が保存されているパラメータ名です。
例
/ DEFINE TEST,JN,PP= \ JOB \JN / IFN PP>(7),BB \ EX \ FD FD1=DA \ FD FD2=DA /BB NOP \ EX SAMPLE / DEFEND
上記のようにマクロが定義された場合、マクロ呼び出しに対する展開結果は以下のとおりです。
\ TEST ABC,PP=10
[ 結果 ]
\ JOB ABC \ EX SAMPLE
6. IF文
IF文に指定されたパラメータ値が与えられた条件を満たす場合、マクロ展開の流れを変更します。IF文は文字列間の比較を実行しますが、IFN文は整数間の比較を行います。
構文
/[名前]△¹IF△¹条件,分岐先△¹[コメント]
項目 | 説明 |
---|---|
名前 |
名前を指定します。「\」に続けて2桁目から8文字以内の記号文字で記述できます。特殊文字「.」を含めることができ、省略可能です。 |
IF |
オペレーションを指定します。名前の後に1つ以上のスペースを入れて「IF」と記述します。名前を省略した場合は、「\」の後ろに1つ以上のスペースを入れて指定します。 |
条件 |
IFの後に1つ以上のスペースを入れて条件を記述します。 |
分岐先 |
条件とコンマの後に分岐先を記述します。 |
コメント |
分岐先の後に1つ以上のスペースを入れて、71桁目まで記述できます。 |
-
条件
条件の形式は以下のとおりです。
左辺 演算子 右辺 パラメータ名
{=|^=|=N}
{値|\パラメータ名}
以下は、条件形式の各項目についての説明です。
項目 説明 パラメータ名
比較対象の値が保存されているパラメータ名です。
=
左辺と右辺の値が等しい場合、分岐先へ移動します。
^= または =N
左辺と右辺の値が異なる場合、分岐先へ移動します。
値
比較対象の値です。引用文字列で指定します。
-
分岐先
以下は、分岐先についての説明です。分岐先を記述する位置には、名前またはパラメータ名を記述することができます。
項目 説明 名前
移動する位置(ジョブ制御文またはマクロ制御文)の名前です。
パラメータ名
移動する場所の名前が保存されているパラメータ名です。
例
-
条件の右辺に値を指定し、分岐先の名前を直接指定する場合
/ DEFINE M1,JN,PP=NO \ JOB \JN \A EX X \ FD FD1=DA \ FD FD2=DA / IF PP=YES,C \B EX Y \ FD FD3=DA / DEXIT \C EX Z \ FD FD4=DA / DEFEND
上記のようにマクロが定義されている場合、マクロ呼び出しの展開結果は以下のとおりです。
\ M1 SAMPLE,PP=YES
[ 結果 ]
\ JOB SAMPLE \A EX X \ FD FD1=DA \ FD FD2=DA \C EX Z \ FD FD4=DA
-
条件の右辺と分岐先にパラメータ名を指定する場合
/ DEFINE TEST1,JN,AA=YES,BB=YES,SS= \ JOB \JN \A EX V \ FD FD1=DA \ FD FD2=DA / IF AA^=\BB,\SS \B EX W \ FD FD3=DA /C NOP \ EX X \ FD FD4=DA / DEFEND
上記のようにマクロが定義されている場合、マクロ呼び出しの展開結果は以下のとおりです。
\ TEST1 SAMPLE1,AA=NO,SS=C
[ 結果 ]
\ JOB SAMPLE1 \A EX V \ FD FD1=DA \ FD FD2=DA \ EX X \ FD FD4=DA
7. MSG文
OpenFrameでは構文エラーのみチェックします。
構文
/[名前]△¹MSG△¹[メッセージ]
項目 | 説明 |
---|---|
名前 |
名前を指定します。「\」に続けて2桁目から8文字以内の記号文字で記述できます。特殊文字「.」を含めることができ、省略可能です。 |
MSG |
オペレーションを指定します。名前の後ろに1つ以上のスペースを入れて「MSG」と記述します。名前を省略した場合は、「\」の後ろに1つ以上のスペースを入れて指定します。 |
メッセージ |
コンソールに出力するメッセージを40文字以内の引用文字列で記述します。 |
8. NOP文
何も実行しません。ただし、NOP文の名前はSKIP文、IF文またはIFN文の分岐先として使用することができます。
構文
/[名前]△¹NOP△¹[コメント]
項目 | 説明 |
---|---|
名前 |
名前を指定します。「\」に続けて2桁目から8文字以内の記号文字で記述できます。特殊文字「.」を含めることができ、省略可能です。 |
NOP |
オペレーションを指定します。名前の後に1つ以上のスペースを入れて「NOP」と記述します。名前を省略した場合は、「\」の後ろに1つ以上のスペースを入れて指定します。 |
コメント |
NOPの後に1つ以上のスペースを入れて、71桁目まで記述できます。 |
例
/S1 NOP
9. SET文
内部または外部パラメータの値を変更します。
構文
/[名前]△¹SET△¹パラメータ名1={値|\パラメータ名2}△¹[コメント]
項目 | 説明 |
---|---|
名前 |
名前を指定します。「\」に続けて2桁目から8文字以内の記号文字で記述できます。特殊文字「.」を含めることができ、省略可能です。 |
SET |
オペレーションを指定します。名前の後に1つ以上のスペースを入れて「SET」と記述します。名前を省略した場合は、「\」の後ろに1つ以上のスペースを入れて指定します。 |
パラメータ名1 |
変更するパラメータ名を指定します。 |
値 |
パラメータの値をここで指定された値に変更します。引用符で囲んだラインとして指定します。値には通常の文字列、引用符で囲まれた文字列、括弧で囲まれた文字列を指定することができます。 |
パラメータ名2 |
パラメータ値をこのパラメータ値に変更します。 |
コメント |
定数またはパラメータ名2 の後に1つ以上のスペースを入れて、71桁目まで記述できます。 |
値の指定規則
-
通常の文字列
段落記号を除いた文字を指定することができます。段落記号にはコンマ、空白、括弧、引用符が含まれます。
-
引用符で囲まれた文字列
空白を除いた文字を指定することができます。両端の括弧は置換時に含まれません。括弧の対応が取れていない場合、文法エラーとして扱われます。
以下は、括弧で囲まれた値の例です。
作成例 置換される値 (A)
A
(CONT,CAT)
CONT,CAT
CONT,DLT
(CONT,DLT)
('A')
A
('CONT',DLT)
CONT,DLT
(A')'BCD,'( ')
A)BCD,(
-
括弧で囲まれた文字列
すべての文字を値として指定することができます。両端の引用符は値に含まれません。引用符を連続して2回入力した場合、1つの引用符に置換されます。引用符の対応が取れていない場合、文法エラーとして扱われます。
以下は、引用符で囲まれた値の例です。
作成例 置換される値 'A'
A
'CONT,CAT'
CONT,CAT
'A B, C(D) '
A B, C(D)
'''A'
'A
''''''''
'''
''
空白
例
-
内部パラメータの値を変更する場合
/ DEFINE TEST,PN=A \ JOB JOB1 \ EX \PN / SET PN=(B) \ EX \PN \ JEND / DEFEND
上記のようにマクロが定義された場合、マクロ呼び出しの展開結果は以下のとおりです。
\ TEST
[ 結果 ]
\ JOB JOB1 \ EX A \ EX B \ JEND
-
外部パラメータの値を変更する場合
/ SET &&USER.DISP=(REF,CAT)
上記の構文は、外部パラメータ「&USER.DISP」の値を「REF,CAT」に変更します。
|
10. SKIP文
SKIP文に指定された名前を持つ文(ジョブ制御文またはマクロ制御文)にマクロ展開の流れを移動します。つまり、SKIP文の後から、指定された文の前までのマクロ定義本体を無視します。
構文
/[名前]△¹SKIP△¹分岐先△¹[コメント]
項目 | 説明 |
---|---|
名前 |
名前を指定します。「\」に続けて2桁目から8文字以内の記号文字で記述できます。特殊文字「.」を含めることができ、省略可能です。 |
SKIP |
オペレーションを指定します。名前の後に1つ以上のスペースを入れて「SKIP」と記述します。名前を省略した場合は、「\」の後ろに1つ以上のスペースを入れて指定します。 |
分岐先 |
SKIPの後に1つ以上のスペースを入れて記述します。 分岐先の記述位置には、名前またはマラメータ名を記述することができます。
|
コメント |
分岐先の後に1つ以上のスペースを入れて、71桁目まで記述できます。 |
例
-
分岐先の名前を設定する例です。
\STEP1 EX PGM \ FD FD1=DA / SKIP STEP2 \ FD FD2=DA \ FD FD3=DA \STEP2 EX
上記の構文の展開結果は以下のとおりです。
\STEP1 EX PGM \ FD FD1=DA \STEP2 EX
-
分岐先のパラメータ名を設定する例です。
\STEP1 EX PGM1 / SKIP \PAA \STEP2 EX PGM2 \ FD FD1=DA \ FD FD2=DA \STEP3 EX PGM3 \ FD FD3=DA
PAAパラメータの値がSTEP2の場合、上記の構文の展開結果は以下のとおりです。
\STEP1 EX PGM1 \STEP2 EX PGM2 \ FD FD1=DA \ FD FD2=DA \STEP3 EX PGM3 \ FD FD3=DA
PAAパラメータの値がSTEP3の場合、上記の構文の展開結果は以下のとおりです。
\STEP1 EX PGM1 \STEP3 EX PGM3 \ FD FD3=DA
13. マクロ定義本体
ジョブ制御文の構文と同じですが、マクロ定義本体文にはパラメータを指定できます。
マクロ定義本体には、CHAM文、MACRO文、MEND文、SCAN文、SCEND文以外のすべてのジョブ制御文を含めることができます。マクロを展開する場合は、「\」後から次の文字の前までの文字列をパラメータ名とみなします。パラメータ名は記号文字です。
構文
\ * , = ( ) ' ^ < > & 空白文字
例
-
パラメータ名の前に文字列が存在する場合です。
FILE=ABC\FF TEST.\K
上記の展開結果は以下のとおりです。
FILE=ABC<FFパラメータの値> TEST.<Kパラメータの値>
-
パラメータ名の後に「*」と文字列が存在する場合、「*」を区切り文字として使用します。マクロの展開時に「*」は削除され、「**」は「*」に変更されます。
\JBN*GP
上記の展開結果は以下のとおりです。
<JBNパラメータの値>GP
-
パラメータ名の後に別のパラメータ名が存在する場合、パラメータ区切り文字の「*」は省略できます。
\GE*\LMN FILE=\HD\SUB\SSUB
上記の展開結果は以下のとおりです。
<GEパラメータの値><LMNパラメータの値> FILE=<HDパラメータの値><SUBパラメータの値><SSUBパラメータの値>
-
「\\」が存在する場合、「\\」は「\」に変更されます。
LSI\\\MSI
上記の展開結果は以下のとおりです。
LSI\<MSIパラメータの値>
-
「&&」が存在する場合、「&&」は「&」に変更されます。
LST&&&EM.SSS
上記の展開結果は以下のとおりです。
LST&<EM.SSSパラメータの値>