先の「64. CLP の名前を取得するには ? (1)」で紹介した方法は名前は取得できるが
ライブラリー名までは取得することができない。
現在実行中のライブラリー名を取得した場合も当然、発生する。
そこでここでは MI を使って CLP の名前とライブラリー名の両方を取得する方法を紹介しよう。
もちろんこの手法は IBM マニュアルのどこにも紹介されていない。
【 サンプル・プログラム : TESTMAT 】
--------------------------------------------------------------------------------------------------- 0001.00 PGM 0002.00 /*---------------------------------------------------------*/ 0003.00 /* TESTMAT : CLP のプログラム名の取得 */ 0004.00 /* */ 0005.00 /* CRTBNDCL MYLIB/TESTMAT SRCFILE(MYSRCLIB/QCLLESRC) */ 0006.00 /*---------------------------------------------------------*/ 0007.00 DCL VAR(&PGMNAME) TYPE(*CHAR) LEN(10) 0008.00 DCL VAR(&LIBNAME) TYPE(*CHAR) LEN(10) 0009.00 DCL VAR(&BUFFER) TYPE(*CHAR) LEN(80) 0010.00 0011.00 CHGVAR VAR(%BIN(&BUFFER 1 4)) VALUE(80) 0012.00 CHGVAR VAR(%BIN(&BUFFER 5 4)) VALUE(80) 0013.00 CHGVAR VAR(%BIN(&BUFFER 9 4)) VALUE(0) 0014.00 CHGVAR VAR(%BIN(&BUFFER 13 4)) VALUE(0) 0015.00 0016.00 CALLPRC PRC('_MATPGMNM') PARM(&BUFFER) 0017.00 0018.00 CHGVAR VAR(&PGMNAME) VALUE(%SST(&BUFFER 51 10)) 0019.00 CHGVAR VAR(&LIBNAME) VALUE(%SST(&BUFFER 19 10)) 0020.00 0021.00 SNDPGMMSG MSG('PGM = ' *CAT &LIBNAME *TCAT '/' + 0022.00 *CAT &PGMNAME) MSGTYPE(*DIAG) 0023.00 ENDPGM ---------------------------------------------------------------------------------------------------
【 解説 】
CLP はソース・タイプ : CLLE で作成して CRTCLPGM ではなく
CRTBNDCL によってコンパイルすること。
CALLPRC PRC('_MATPGMNM') PARM(&BUFFER)
によってプログラム名の解決: _MATPGMNM を実行すると
&BUFFER の 51 桁目からプログラム名を、
19 桁目からライブラリー名を取得するとこができる。