マクロ制御文

本章では、マクロ制御文およびオペランドについて説明します。

1. 概要

以下は、マクロ制御文の一覧です。

マクロ制御文 説明

DEFEND文

ジョブ制御マクロ定義を終了します。

DEFINE文

ジョブ制御マクロ定義を開始します。

DEXIT文

マクロ定義本体でDEXIT文が現れると、マクロ定義本体の読み取りを終了します。

IF文

IF文に指定されたパラメータ値が与えられた条件を満たす場合、マクロ展開の流れを変更します。

IFN文

IFN文に指定されたパラメータ値が与えられた条件を満たす場合、マクロ展開の流れを変更します。

MSG文

OpenFrameでは構文エラーのみチェックします。

NOP文

何の動作も行いません。

SET文

内部または外部パラメータの値を変更します。

SKIP文

SKIP文に指定された名前を持つ文(ジョブ制御文またはマクロ制御文)にマクロ展開の流れを移動します。

WTOR文

OpenFrameでは構文エラーのみチェックします。

WTO文

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桁目から記述します。

以下のいずれかを指定します。

  • NOEXPAN

  • EXPAN

  • SEXPAN

OpenFrameでは、指定された値に関係なく、EXPAN規則(2~71桁目をマクロ展開)に従います。

DEFINE

オペレーションを指定します。名前の後に1つ以上のスペースを入れて「DEFINE」と記述します。マクロ展開規則を省略した場合は、「\」の後ろに1つ以上のスペースを入れて記述します。

位置オペランド[,キーワードオペランド]

DEFINEの後に1つ以上のスペースを入れて記述します。すべての位置オペランドを記述してから、キーワード・オペランドを記述します。オペランドの詳細については、オペランドを参照してください。

コメント

オペランドの後に1つ以上のスペースを入れて、71桁目まで記述できます。

オペランド

以下は、オペランドについての説明です。

  • 位置オペランド

    オペランド 説明

    マクロ名

    ジョブ制御マクロの参照時に使用される名前を指定します。

  • キーワード・オペランド

    オペランド 説明

    パラメータ名

    マクロ内で使用されるパラメータ名を指定します。

3.1. マクロ名

ジョブ制御マクロの参照時に使用される名前を指定します。

この名前をOpenFrameでは参照しません。詳細については、マクロ呼び出し文を参照してください。

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」に変更します。

  1. 外部パラメータはPDSのメンバーとして管理されます。実行環境では各ノードのTCacheに保存され、使用時にTCacheに保存された情報が使用されます。

  2. SET &&はTCache情報のみ更新され、再起動まで維持されます。

  3. 外部パラメータを管理するPDSデータセットの設定については、OpenFrame Batch『環境設定ガイド』の「PROCLIB」と「EPARMLIB」の設定を参照してください。

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

11. WTOR文

OpenFrameでは構文エラーのみチェックします。

構文
/[名前]△¹WTOR△¹引用文字列,記号文字

12. WTO文

OpenFrameでは構文エラーのみチェックします。

構文
/[名前]△¹WTO△¹引用文字列

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パラメータの値>