CL

65. CLP の名前を取得するには ? (2)

先の「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 桁目からライブラリー名を取得するとこができる。