CL

158. 自分自身を具体化するCLプログラム

自分自身を具体化(=Materialize)するとは自分の実体の名前を取得するという
ことである。
もう少し具体的に言えば実行したプログラムが自分のプログラム名と
実行されたオブジェクト・ライブラリー名を取得することである。
 _

[ CLP: TESTMAT ]

ソースはこちらから

0001.00              PGM                                                         
0002.00 /*-------------------------------------------------------------------*/  
0003.00 /*   TESTMAT    :   自分自身を具体化する                             */  
0004.00 /*                                                                   */  
0005.00 /*   2023/07/08  作成                                                */  
0006.00 /*-------------------------------------------------------------------*/  
0007.00 /*( _MATPGMNM の変数 )*/                                                 
0008.00              DCL        VAR(&BUFFER) TYPE(*CHAR) LEN(80) +               
0009.00                           VALUE(X'00000050000000500000000000000000')     
0010.00              DCL        VAR(&PGM) TYPE(*CHAR) LEN(10)                    
0011.00              DCL        VAR(&OBJLIB) TYPE(*CHAR) LEN(10)                 
0012.00                                                                          
0013.00 /*( 自分自身の取得 )*/                                                   
0014.00              CALLPRC    PRC('_MATPGMNM') PARM(&BUFFER)                   
0015.00              CHGVAR     VAR(&PGM) VALUE(%SST(&BUFFER 51 10))             
0016.00              CHGVAR     VAR(&OBJLIB) VALUE(%SST(&BUFFER 19 10))          
0017.00              SNDPGMMSG  MSG('PGM=' *CAT &PGM *TCAT ' OBJLIB=' +          
0018.00                           *CAT &OBJLIB) MSGTYPE(*DIAG)                   
0019.00                                                                          
0020.00              ENDPGM    


                                                    

[COMPILE]

CRTBNDCL PGM(OBJLIB/TESTMAT) SRCFILE(SRCLIB/QCLSRC) DFTACTGRP(*NO) ACTGRP(*NEW)
AUT(*ALL) DBGVIEW(*SOURCE)

[解説]

_MAPPGMNM という名前のAPIは MI(=Machine Interface)である。
MIというと機械語インターフェースとしてなにやら難しそうであるが
日常でC言語からでもよく使っている。
_MAPPGMNM(=Materialize Prpgramm Name)はプログラムの自分の名前と
自分が呼び出されたライブラリー名を取得することができる。
これが何の役に立つのかというと複数の異なるライブラリーで実行されたときに
自分がどのライブラリーから呼び出されたものなのかを判断することが
できるのである。

弊社では複数の異なる製品のどのライブラリーから呼び出されたのかを
判断することに役立つし読者であればテスト環境のライブラリーから呼び出されたものか
本番環境のライブラリーから呼び出されたものかを判断させることができる。

ただしこのCLPはソース・タイブはCLPではなくCLLEでSEUわ実行させる必要がある。
コンパイルもCRTCLPGM ではなく ILE-CLPであるので CRTBNDCLでコンパイルすること。
_