メニューボタン
サポートチーム便り2011.01.17

6.1 INCLUDEコマンドを使用したCL Copybooks

i/OS 6.1 の新機能に CL コマンドの INCLUDE があります。このコマンドのおかげでやっと OPM および ILE の CL プログラムの CL「CopyBooks」が実現しました。INCLUDE は RPG と COBOL ステートメントの /COPY と同じ基本コマンドです。

INCLUDE コマンドは CLP または CLLE ソース・メンバー内で使用され、(INCLUDED など) コピーされるソース・コード・メンバーを示します。コマンド・フォーマットは以下のとおりです。

INCLUDE SRCMBR(MYCOPY1) SRCFILE(*INCFILE)

SRCMBR パラメーターは、コンパイル操作中にこのロケーションに含まれる (コピーされる) ソース・メンバーの名前を示します。

SRCFILE パラメーターにより、「含まれている」メンバーが *DEFAULT ソース・ファイル (*INCFILE) に常駐することを指定できます。以下の例のように、「含まれている」ソース・メンバーのリポジトリーとして異なるソース・ファイルを指定することもできます。

INCLUDE SRCMBR(MYCOPY1) SRCFILE(MYLIB/INCLUDES)

標準メッセージ処理に使用できる 2 つの INCLUDE ソース・メンバーの例を以下に示します。

ソース・メンバー CPY_ERR
DCL        VAR(&MSGID)       TYPE(*CHAR) LEN(7)
DCL        VAR(&MSGF)        TYPE(*CHAR) LEN(10)
DCL        VAR(&MSGFLIB)     TYPE(*CHAR) LEN(10)
DCL        VAR(&MSGDTA)      TYPE(*CHAR) LEN(512)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))

最初のソース・コード・メンバー CPY_ERR には DCL コマンドと Global MONMSG コマンドが含まれています。DCL コマンドは、次に示すソース・メンバー CPY_ERR2 に含まれているエラー処理ルーチンに必要な変数を宣言しています。

ソース・メンバー CPY_ERR2
ERROR:     RCVMSG            MSGTYPE(*LAST) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                             MSGF(&MSGF) SNDMSGFLIB(&MSGFLIB)
           MONMSG            MSGID(CPF0000) /* 万が一のため */
                   
           SNDPGMMSG         MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                             MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
           MONMSG            MSGID(CPF0000) /* 万が一のため */

以下のソース・メンバーは、適切な時点で INCLUDE コマンドを使用して TEST_ERR という名前で仕上がった CL プログラム・コードです。

ソース・メンバー TEST_ERR
PGM	 
 	 
INCLUDE    SRCMBR(CPY_ERR)
 	 
CHKOBJ     OBJ(XXXX) OBJTYPE(*FILE)
 	 
RETURN	/* プログラムの通常終了 */
 	 
INCLUDE    SRCMBR(CPY_ERR2)
 	 
ENDPGM	 

ソース・メンバー TEST_ERR は、ライブラリー MYLIB のソース・ファイル QCLSRC にあります。そのソース・ファイルは、ソース・ファイル名が INCLUDE コマンドで指定されていない場合に使用される *DEFAULT ソース・ファイルです。この場合、INCLUDE ソース・メンバーもライブラリー MYLIB のソース・ファイル QCLSRC にあります。

TEST_ERR ソース・コードをコンパイルすると、INCLUDE コマンドにより、それら含まれたメンバーのソース・コードが、コンパイラー・リストに示されているように、コンパイラー入力ソース・コードにコピーされます。

100-         PGM
101-
200-  /* START INCLUDE SRCMBR(CPY_ERR) SRCFILE(MYLIB/QCLSRC) */
400-         DCL        VAR(&MSGID)       TYPE(*CHAR) LEN(7)
500-         DCL        VAR(&MSGF)        TYPE(*CHAR) LEN(10)
600-         DCL        VAR(&MSGFLIB)     TYPE(*CHAR) LEN(10)
700-         DCL        VAR(&MSGDTA)      TYPE(*CHAR) LEN(512)
800-         MONMSG         MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
900-  /* END    INCLUDE SRCMBR(CPY_ERR)  SRCFILE(MYLIB/QCLSRC) */
1000-
1100-        CHKOBJ         OBJ(XXXX) OBJTYPE(*FILE)
1201-
1302-        RETURN         /* プログラムの通常終了 */
1400-
1501- /* START INCLUDE SRCMBR(CPY_ERR2)  SRCFILE(MYLIB/QCLSRC) */
1600- ERROR: RCVMSG     MSGTYPE(*LAST) MSGDTA(&MSGDTA) MSGID(&MSGID)+
1700                       MSGF(&MSGF) SNDMSGFLIB(&MSGFLIB)
1800-        MONMSG     MSGID(CPF0000) /* 万が一のため */
1900-        SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
2000                       MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
2100-        MONMSG     MSGID(CPF0000) /* 万が一のため */
2201-  /* END    INCLUDE SRCMBR(CPY_ERR2)  SRCFILE(MYLIB/QCLSRC) */
2302-
2403-        ENDPGM
* * * * * ソースの終わり  * * * * *

コンパイラーにより INCLUDE コマンドがソース・ファイル名を指定するよう展開されているのがわかると思います。このファイル名は TEST_ERR ソース・コードでは指定されて「いません」でした。INCLUDE コマンドは 2 つのコメントで置き換えられており、展開されたコマンドを示し、INCLUDE ソース・コードを区切っています。INCLUDE ソース・コードはそれらのコメントの間に組み込まれています。

CLP コンパイラーと CLLE コンパイラーには、コンパイル操作で使用される *DEFAULT ソース・ファイルを示す INCFILE という新しいパラメーターがあります。以下の例のように *SRCFILE を指定すると、INCLUDE コマンドの *DEFAULT ソース・ファイルは SRCFILE パラメーターで指定されたソース・ファイルになります。ここでは、MYLIB/QCLSRC になります。

コンパイラーの新しいパラメーター INCFILE(Include Source File) の使用例を以下に示します。

CRTCLPGM PGM(MYLIB/TEST_ERR) SRCFILE(MYLIB/QCLSRC) SRCMBR(TEST_ERR) INCFILE(*SRCFILE)

CRTBNDCL PGM(MYLIB/TEST_ERR) SRCFILE(MYLIB/QCLSRC) SRCMBR(TEST_ERR) INCFILE(*SRCFILE)

CL CopyBooks を作成して使用する、この新機能を是非お楽しみください。

あわせて読みたい記事

PAGE TOP