先の「64. CLP の名前を取得するには ? (1)」で紹介した方法は名前は取得できるが
ライブラリー名までは取得することができない。
現在実行中のライブラリー名を取得した場合も当然、発生する。
そこでここでは MI を使って CLP の名前とライブラリー名の両方を取得する方法を紹介しよう。
もちろんこの手法は IBM マニュアルのどこにも紹介されていない。
---------------------------------------------------------------------------------------------------
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 桁目からライブラリー名を取得するとこができる。