I've run into a little hitch when attempting to use the program status
data structure in conjuction with a monitor block.
Here's the skeleton of a standard mainline for me:
iRC = 0;
iRC = process();
iRC = 999;
' (' + %char(PSDS_Status) + ')@' + PSDS_Line;
if iRC<> 0;
'** Internal error ' + %char(iRC) + PSDSInfo;
*inlr = *on;
Pretty straightforward. Set error code to zero. Execute process()
which returns zero or an error. On error, set iRC to 999 and get the
status and failing line from the program status data structure. After
the monitor block, check the return code. If it's non-zero, display
The problem? By the time I hit the on-error block, the line number for
the PSDS is the call to process, not the line that actually failed.
Let's assume this is a normal program with H specs and a prototype and
so on. In that case, the line iRC = process() would be, say, line 18.
So every time I get an error, the line number would be 18.00.
So evidently any entry in the call stack causes the PSDS to be changed.
Is there a way to identify the actual failing line?