Following any transfer of control because of a CALL or SIGNAL, the program
line number of the clause causing the transfer of control is stored in the
special variable SIGL. If the transfer of control is because of a condition
trap, the line number assigned to SIGL is that of the last clause processed
(at the current subroutine level) before the CALL or SIGNAL took place. The
setting of SIGL is especially useful after a SIGNAL ON SYNTAX trap when the
number of the line in error can be used, for example, to control a text editor.
Typically, code following the SYNTAX label can PARSE SOURCE to find the source
of the data and then call an editor to edit the source file, positioned at
the line in error. Note that in this case you might have to run the program
again before any changes made in the editor can take effect.
Alternatively, SIGL can help determine the cause of an error (such as the
occasional failure of a function call) as in the following example:
Example 11.2. SIGL
signalonsyntaxa=a+1/* This is to create a syntax error */say"SYNTAX error not raised"exit/* Standard handler for SIGNAL ON SYNTAX */syntax:say"Rexx error"rc"in line"sigl":""ERRORTEXT"(rc)say"SOURCELINE"(sigl)trace?r;nop
This code first displays the error code, line number, and error message.
It then displays the line in error, and finally drops into debug mode to
let you inspect the values of the variables used at the line in error.