CLP の自分自身の名前を取得するには 自分自身にメッセージを送信して
それを自分自身が受け取って、誰が送信したのかを調べる方法がよく知られている。
【 サンプルCLP : TESTWHO 】
--------------------------------------------------------------------------------------- 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))
によって呼び出したプログラム、つまり自分自身の名前を取得する。