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)
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment