h option(*nodebugio : *srcstmt) * Program Information d ProgStatus sds d Parms *PARMS d ProgName *PROC d ErrMsgID 40 46 d ErrMsg 91 169 d JobName 244 253 d Userid 254 263 d JobNumber 264 269 * Call Stack d FindCaller PR Extpgm('QWVRCSTK') d 2000a d 10I 0 d 8a CONST d 56a d 8a CONST d 15a * Call Stack Data d Var DS 2000 d BytAvl 10I 0 d BytRtn 10I 0 d Entries 10I 0 d Offset 10I 0 d EntryCount 10I 0 * Call Stack Job Information d JobIdInf DS d JIDQName 26a Inz('*') d JIDIntID 16a d JIDRes3 2a Inz(*loval) d JIDThreadInd 10I 0 Inz(1) d JIDThread 8a Inz(*loval) * Call Stack Program Names d Entry DS 256 d EntryLen 10I 0 d ReqstLvl 10I 0 Overlay(Entry:21) d PgmNam 10a Overlay(Entry:25) d PgmLib 10a Overlay(Entry:35) d VarLen s 10I 0 Inz(%size(Var)) d ApiErr s 15a d Caller s 50a d WhoCalled s 10a d i s 10I 0 /free CallP FindCaller(Var:VarLen:'CSTK0100':JobIdInf :'JIDF0100':ApiErr); For i = 1 to EntryCount; Entry = %subst(Var:Offset + 1); Caller = %trim(PgmLib) + '/' + %trim(PgmNam); If (PgmNam <> ProgName and WhoCalled = *blanks); WhoCalled = PgmNam; Endif; Offset = Offset + EntryLen; Endfor; dsply WhoCalled; *inlr = *on; Return; /end-free
Please note: If you are using an ILE program and making a dynamic call then you will see the same program name twice in the call stack. Dynamic calls to ILE programs always results in a PEP being placed on the call stack corresponding to the ILE HLL used for the module specified on the ENTMOD keyword of the CRTPGM command.
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.