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 を作成して使用する、この新機能を是非お楽しみください。