CLP の自分自身の名前を取得するには 自分自身にメッセージを送信して
それを自分自身が受け取って、誰が送信したのかを調べる方法がよく知られている。
---------------------------------------------------------------------------------------
0001.00 PGM
0002.00 /*---------------------------------------------------------*/
0003.00 /* TESTWHO : CLP の名前を調べる */
0004.00 /*---------------------------------------------------------*/
0005.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132)
0006.00 DCL VAR(&SENDER) TYPE(*CHAR) LEN(80)
0007.00 DCL VAR(&CALPGM) TYPE(*CHAR) LEN(10)
0008.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
0009.00
0010.00 SNDPGMMSG MSG(' ') TOPGMQ(*PRV)
0011.00 RCVMSG PGMQ(*PRV) SENDER(&SENDER)
0012.00 CHGVAR VAR(&CALPGM) VALUE(%SST(&SENDER 27 10))
0013.00 SNDPGMMSG MSG('PGM NAME IS ' *CAT &CALPGM) +
0014.00 MSGTYPE(*DIAG)
0015.00 RETURN
0016.00
0017.00 ERROR: RCVMSG RMV(*NO) MSG(&MSG)
0018.00 SNDMSG: SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG)
0019.00 ENDPGM
---------------------------------------------------------------------------------------
SNDPGMMSG MSG(' ') TOPGMQ(*PRV)
によって、このプログラムの呼び出し元のメッセージ待ち行列にブランクのメッセージを送る。
それを
RCVMSG PGMQ(*PRV) SENDER(&SENDER)
によって受け取って
CHGVAR VAR(&CALPGM) VALUE(%SST(&SENDER 27 10))
によって呼び出したプログラム、つまり自分自身の名前を取得する。