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

ページトップ

ボタン