マクロ制御文

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

1. 概要

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

マクロ制御文 説明

DO文

指定された条件に従ってDOグループ(DO文からEND文まで)を繰り返します。

END文

DO文の終わりを示します。

IF文

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

INCLUDE文

指定したメンバーの内容をJCL文に含めます。

NOP文

何の動作も行いません。

PEXIT文

PEXIT文までを実行し、以降は無視します。

SET文

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

SKIP文

マクロ展開のフローを、SKIP文に記述された名前を有する構文(ジョブ制御 文またはマクロ制御文)に移動します。

2. DO文

指定された条件に従ってDOグループ(DO文からEND文まで)を繰り返します。

  • 構文

    /\[名前]△¹DO△¹制御パラメータ名={初期値}△¹TO△¹{終了値}△¹[ BY △¹増分値]△¹[コメント]
    項目 説明

    名前

    名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。

    DO

    オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「DO」と記述します。

    名前を省略した場合、「/\」の後ろに1つ以上の空白を入れて記述します。DO文の終了は必ずEND文を記述します。

    制御パラメータ名

    DOグループ(DO文を始めとしEND文まで)を繰り返す制御パラメータです。

    初期値から始めて終了値まで繰り返してから終了します。繰り返すたびに増分値が加わり、増分値がない場合には1ずつ増加します。

    初期値

    制御パラメータの初期値です。(0以上の数値で記述します)

    TO

    オペレーションを記述する位置であり、初期値の後ろに1つ以上の空白を入れて「TO」と記述します。

    終了値

    制御パラメータの終了値です。(0以上の数値で記述します)

    BY

    オペレーションを記述する位置であり、初期値の後ろに1つ以上の空白を入れて「BY」と記述します。

    増分値

    制御パラメータの増分値です。(0以上の数値で記述します)

    コメント

    定数やパラメータ名の次に1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。

  • 以下は、指定された条件(1から4まで)に従ってDOグループを繰り返す例です。

    //*********************************************************
    //* MACRO DO (MACDO)
    //*********************************************************
    //PROC01  PROC
    /\DO01    DO N=1 TO 4
    //PS010   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*
    /\END01   END

    上記のようにマクロが定義されたプロシージャ(MACDO)を呼び出すと、PS010ステップが4回繰り返されます。

    //MAC    JOB JOB1,CLASS=A,MSGCLASS=X
    //STEP1  EXEC MACDO

3. END文

END文とDO文はペアで使用されます。DOグループ(DO文を始めとしEND文まで)の終わりを示します。

  • 構文

    /\[名前]△¹END△¹[コメント]
    項目 説明

    名前

    名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。

    END

    オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「END」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。

    コメント

    ENDの後ろに1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。

  • /\S1      END

4. IF文

IF文に指定されたパラメータの値を比較して条件を満たす場合はマクロ展開のフローを変更します。

  • 構文

    /\[名前]△¹IF△¹条件,分岐先△¹[コメント]
    項目 説明

    名前

    名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。

    IF

    オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「IF」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。

    条件

    IFの後ろに1つ以上の空白を入れて条件を記述します。

    左辺                  演算子                            右辺
    -------------------------------------------------------------------------------
    パラメータ名         {=|^=|=N|<|>|<=|>=}               {値}
    • パラメータ名: 比較対象の値が保存されているパラメータ名です。

    • = : 左辺と右辺の値が等しい場合、分岐先へ移動します。

    • ^=または=N : 左辺と右辺の値が異なる場合、分岐先へ移動します。

    • 値: 比較対象の値です。引用符号付き文字列で指定します。

    分岐先

    条件とコンマの後ろに分岐先を記述します。

    以下は、分岐先についての説明です。分岐先を記述する位置には、名前またはパラメータ名を記述することができます。

    • 名前: 移動する場所(ジョブ制御文またはマクロ制御文)の名前です。

    • パラメータ名: 移動する場所の名前が保存されているパラメータ名です。

    コメント

    分岐先の後ろに1つ以上の空白を入れて記述します。コメント71桁目まで記述できます。

  • 以下は、条件の右辺に値を指定し、分岐先の名前を直接指定する場合の例です。

    //*********************************************************
    //* MACRO IF (MACIF)
    //*********************************************************
    //PROC01  PROC
    /\IF01    IF PASS=YES,LABEL01
    //PS010   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*
    /\LABEL01 NOP
    //PS020   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*

    上記のようなマクロが定義されたプロシージャ(MACIF)を呼び出して展開された結果は以下のとおりです。

    //MAC     JOB JOB1,CLASS=A,MSGCLASS=X
    //STEP1   EXEC MACIF,PASS=YES

    [ 結果 ]

    //MAC     JOB JOB1,CLASS=A,MSGCLASS=X
    //PS020   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*

5. INCLUDE文

指定したプロシージャの内容をJCL文に含めます。

  • 構文

    /\[名前]△¹INCLUDE△¹プロシージャ名△¹[コメント]
    項目 説明

    名前

    名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。

    INCLUDE

    オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「INCLUDE」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。

    プロシージャ名

    JCL文に含ませるプロシージャ名を記述します。

    INCLUDE文で指定したプロシージャにはPROC文を記述できません。

  • 以下は、指定したプロシージャの内容をJCLに含ませる場合の例です。

    //*********************************************************
    //* MACRO INCLUDE (MACINC)
    //*********************************************************
    //SYSOUT  DD SYSOUT=*

    上記のようにマクロが定義されたプロシージャ(MACINC)を呼び出して展開した結果は以下のとおりです。

    //PROC01  PROC
    //PS010   EXEC PGM=pgmtest_environ
    /\INC01   INCLUDE MACINC
    //PS020   EXEC PGM=pgmtest_environ
    /\INC02   INCLUDE MACINC

    [ 結果 ]

    //PROC01  PROC
    //PS010   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*
    //PS020   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*

6. NOP文

NOP文は、何の動作も行わないことを表します。ただし、NOP文の名前はSKIP文とIF文の分岐先として使用されることがあります。

  • 構文

    /\[名前]△¹NOP△¹[コメント]
    項目 説明

    名前

    名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。

    NOP

    オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「NOP」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。

    コメント

    NOPの後ろに1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。

  • /\S1      NOP

7. PEXIT文

マクロ展開のフローをPEXIT文までのみ実行し、PEXIT文の以降からは無視します。

  • 構文

    /\[名前]△¹PEXIT△¹[コメント]
    項目 説明

    名前

    名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。

    PEXIT

    オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「PEXIT」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。

    コメント

    PEXITの後ろに1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。

  • 以下は、PEXIT文を使用した例です。

    //*********************************************************
    //* MACRO PEXIT (MACPEXIT)
    //*********************************************************
    //PROC01  PROC
    //PS010   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*
    /\PEXIT01 PEXIT
    //PS020   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*

    上記のようにマクロが定義されたプロシージャ(MACPEXIT)を呼び出して展開された結果は以下のとおりです。

    //MAC     JOB JOB1,CLASS=A,MSGCLASS=X
    //STEP1   EXEC MACPEXIT

    [ 結果 ]

    //MAC     JOB JOB1,CLASS=A,MSGCLASS=X
    //PS010   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*

8. SET文

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

  • 構文

    /\[名前]△¹SET△¹パラメータ名1={値|\パラメータ名2}△¹[コメント]
    項目 説明

    名前

    名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。

    SET

    オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「SET」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。

    パラメータ名1

    変更するパラメータ名を記述します。

    パラメータの値を指定された値に変更します。引用符付き文字列で指定します。

    パラメータ名2

    パラメータを指定された名前に変更します。

    コメント

    定数またはパラメータ名2の後ろに1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。

  • 以下は、内部パラメータの値を変更する場合の例です。

    //*********************************************************
    //* MACRO SET (MACSET)
    //*********************************************************
    //PROC01  PROC
    /\SET01   SET PROGRAM=pgmtest_environ
    //PS010   EXEC PGM=&PROGRAM
    //SYSOUT  DD SYSOUT=*

    上記のようにマクロが定義されたプロシージャ(MACSET)を呼び出すと、PGMの&PROGRAMがpgmtest_environに置き換えられます。

    //MAC     JOB JOB1,CLASS=A,MSGCLASS=X
    //STEP1   EXEC MACSET

9. SKIP文

マクロ展開のフローを、SKIP文に記述された名前を有する構文(ジョブ制御文またはマクロ制御文)へ移動します。すなわち、SKIP文以降から指定された構文以前までのマクロ定義本体を無視します。

  • 構文

    /\[名前]△¹SKIP△¹分岐先△¹[コメント]
    項目 説明

    名前

    名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。

    SKIP

    オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「SKIP」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。

    分岐先

    SKIPの後ろに1つ以上の空白を入れて分岐先を記述します。

    以下は、分岐先についての説明です。分岐先を記述する位置には名前を記述することができます。

    • 名前: 移動先(ジョブ制御文またはマクロ制御文)の名前です。

    コメント

    分岐先の次に1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。

  • 以下は、分岐先の項目の中で名前を設定する例です。

    //*********************************************************
    //* MACRO SKIP (MACSKIP)
    //*********************************************************
    //PROC01  PROC
    /\SKIP01  SKIP LABEL01
    //PS010   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*
    /\LABEL01 NOP
    //PS020   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*

    上記のようにマクロが定義されたプロシージャ(MACSKIP)を呼び出して展開された結果は以下のとおりです。

    //MAC     JOB JOB1,CLASS=A,MSGCLASS=X
    //STEP1   EXEC MACSKIP,PASS=YES

    [ 結果 ]

    //MAC     JOB JOB1,CLASS=A,MSGCLASS=X
    //PS020   EXEC PGM=pgmtest_environ
    //SYSOUT  DD SYSOUT=*