I have a macro that reports the statement number where something bad
happened.  Some programs that use this are large (although none have yet
exceeded 1M lines).  This is the logic in the macro that captures that
number as efficiently as possible.

Anyway, the technique may be useful in other contexts.

.*  +--------------------------------------------------------+
.*  |                                                        |
.*  |  ERRLINE/SYSALVL   <2      =2      >2                  |
.*  |    <32K            LHI     LLILL   LLILL               |
.*  |    <64K            LAY     LLILL   LLILL               |
.*  |    <1M             LAY     LAY     LLILF               |
.*  |    >=1M            L =F    L =F    LLILF               |
.*  |                                                        |
.*  |  LHI, LLILL are 4 bytes, LAY, LLILF are 6, L=F uses 8  |
.*  |                                                        |
.*  +--------------------------------------------------------+
         AIF   (&ERRLINE GT 32767 OR &SYSALVL GE 2).TRYLLI
         LHI   R1,&ERRLINE
         AGO   .ERLDONE
.TRYLLI  AIF   (&SYSALVL LT 2).TRYLAY
         AIF   (&ERRLINE GT 65535).TRYLLF
         LLILL R1,&ERRLINE
         AGO   .ERLDONE
.TRYLLF  AIF   (&SYSALVL LE 2).TRYLAY
         LLILF R1,&ERRLINE
         AGO   .ERLDONE
.TRYLAY  AIF   (&ERRLINE GT 1048575).LOADERL
         LAY   R1,&ERRLINE
         AGO   .ERLDONE
.LOADERL ANOP
         L     R1,=F'&ERRLINE'
.ERLDONE ANOP

--
sas

Reply via email to