Wednesday, October 10, 2007

Make a CL program or Module to retrieve its Name:

The trick is to make a program send a message to itself and retrieve the program name from the message about the sender. The following code works in OPM CL programs, ILE CL programs, and ILE CL modules.
dcl &MsgKey *char 4
dcl &PgmName *char 10
dcl &Sender *char 80

sndpgmmsg msg(' ') topgmq(*same) msgtype(*info) keyvar(&msgkey)
rcvmsg pgmq(*same) msgtype(*info) sender(&sender) rmv(*yes)
chgvar &PgmName %sst(&Sender 56 10)

In the case of CL modules, you should know that this routine returns the name of the program in which this module is bound, not the name of the module. In ILE modules, the following code retrieves both program name and module name.
dcl &MsgKey *char 4
dcl &PgmName *char 10
dcl &ModName *char 10
dcl &Sender *char 720

sndpgmmsg msg(' ') topgmq(*same) msgtype(*info) keyvar(&msgkey
rcvmsg pgmq(*same) msgtype(*info) rmv(*yes) +
sender(&sender) senderfmt(*long)
chgvar &PgmName %sst(&Sender 42 10)
chgvar &ModName %sst(&Sender 54 10)

No comments: