*DECK BREAK 
USETEXT TENVIRN 
USETEXT TEXPRES 
USETEXT TOPTION 
USETEXT TREPORT 
USETEXT TRPTLST 
USETEXT TXSTD 
USETEXT TPSTACK 
      PROC BREAK; 
  
#----------------------------------------------------------------------#
#                                                                      #
#  THE FOLLOWING PROCS ARE XDEF"D WITHIN THIS DECK:                    #
#                                                                      #
#     BREAKOV                      SET *BREAK ON OVERFLOW* FLAG        #
#     BRKEJT                       SET *BREAK AND EJECT* BIT           #
#     BRKEND                       FINAL PROCESSING FOR *BREAK*        #
#     SETLEVEL                     STORE THE *BREAK* LEVEL NUMBER      #
#     STOCOND                      STORE THE *BREAK* CONDITION         #
#                                                                      #
#----------------------------------------------------------------------#
  
      BEGIN 
  
          BASED ARRAY A;
            ITEM AMRPT I(0,42,18),
                 ACLASS I(0,12,6),
              ADISPSIZ U(0,4,11), 
          ALLFG B(0,4,1), 
          UPBND I(0,30,12), 
          ADECPT  I(0,21,6),
                 AWPOS I(0,18,18),
         ABPOS  U(0,36,6),
                 ALG I(0,42,18),
                 AMURAL U(0,0,60),
         APICSZ I(0,27,15), 
                 AMLG I(0,0,3); 
      XREF ITEM LEVELNB      I; 
       DEF DFTRPWD #O"40000000000001000000"#;  #DEFAULT VALUE FOR 
                                                REPORTLIST WORD 1,
                                                BEYOND IS ON, 
                                                LINE NB IS 1# 
         DEF DFTRPWD2 #O"04010000000000000000"#;
  
  
      XREF FUNC BINDEC C(10);      # BINARY TO DECIMAL CONVERSION      #
      XREF PROC DIAG;              # ISSUE DIAGNOSTIC MESSAGE TO USER  #
  
      ITEM DUMMY     I;            # USED AS INDEX AND FOR LOOP CONTRL #
      ITEM FINISHED  B;            # USED FOR LOOP CONTROL             #
      ITEM LOOPCON   B;            # USED FOR LOOP CONTROL             #
      ITEM PREVIOUS  I;            # INDEX INTO EXPRSTACK              #
      ITEM STEPPER   I;            # LOOP VARIABLE                     #
  
      ARRAY EXPRSTACK [9];
        BEGIN 
        ITEM PSTKPTR   I(0,24,18);  # INDEX WITHIN SAVED PROG STACK    #
        ITEM STACKADDR I(0,42,18);  # SAVED ADDR OF PROG STACK         #
        END 
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
                 #PROC TO SET BREAK OVERFLOW BIT# 
          XDEF PROC BREAKOV;
          PROC BREAKOV; 
          BEGIN 
              BRKOVERFLOW[LEVELNB] = TRUE;
          BRKLOG[LEVELNB] = FALSE;                                      001080
          IF NOT FULLSYNTX
          THEN
            BEGIN 
            STDNO;
            END 
  
          TOCHAR[REPORTINDEX] = 1;                                      001090
              STDNO;
          END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
                 #PROC TO SET BREAK EJECT BIT#
          XDEF PROC BRKEJT; 
          PROC BRKEJT;
          BEGIN BRKEJECT[LEVELNB] = TRUE; 
              STDNO;
          END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
  
                 #PROC TO STORE BREAK INFORMATION#
                 #WHEN IT IS BREAK ON ITEM# 
          XDEF PROC BRKEND; 
          PROC BRKEND;
          BEGIN 
          IF NOT FULLSYNTX
          THEN
            BEGIN 
            STDYES; 
            END 
          FROMCHAR [REPORTINDEX] = DATACHARPOS; 
          CHARLENGTH[REPORTINDEX] = DATALENG; 
          P<A> = DATANAMEPTR + 1; 
          BRKLOG[LEVELNB] = FALSE;
           FROMADDRESS[REPORTINDEX] = AWPOS[0]; 
          REPORTWORD3[REPORTINDEX] = 0; 
          IF FIGLITDATA EQ 2 THEN 
      CNVTCODE[REPORTINDEX] = 63; 
                         #SET CNVTCODE TO NON-ZERO, TO SIGNIFY IT IS
                          A DEFINE ITEM#
          IF REPORTINDEX GQ MAXREPORT  # IF REPORT BUFFER FULL         #
          THEN
            BEGIN 
            DIAG (122); 
            STDNO;
            END 
                REPORTINDEX = REPORTINDEX + 1;
              REPORTWORD1[REPORTINDEX] = DFTRPWD; 
          REPORTWORD2[REPORTINDEX] = DFTRPWD2;
          REPORTWORD3[REPORTINDEX] = 0; 
          STDYES; 
          END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
         XDEF PROC SETLEVEL;
          PROC SETLEVEL;
          BEGIN 
          ITEM I,J; 
          P<REPORTLIST> = AREPORTLIST;
              I=ICWI[5];
          IF I LS 1 OR I GR 63 THEN STDNO;
          C<8,2>KEYAREA = BINDEC(I, 2);  # TWO DIGIT DISP CODE LEVEL   #
          FOR J=1 STEP 1 UNTIL MAXBREAK DO
               IF BRKLEVEL[J] EQ 0 THEN 
          BEGIN BRKLEVEL[J] = I;
              BRKEXPR[J] = REPORTINDEX; 
              LEVELNB = J;
          IF NOT FULLSYNTX THEN STDYES; 
              HEADPOINTER[REPORTINDEX] = LOC(BRKWORD[J]); 
          TOCHAR[REPORTINDEX] = 0;
              STDYES; 
          END 
          IF NOT FULLSYNTX THEN STDYES;                                 000440
          DIAG(159);
             STDNO; 
          END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
          XDEF PROC STOCOND;
          PROC STOCOND; 
          BEGIN 
          IF NOT FULLSYNTX         # IF NOT PREPARING A REPORT         #
          THEN
            BEGIN 
            STDYES; 
            END 
          BRKLOG[LEVELNB] = TRUE; 
                 BRKRESULT[LEVELNB] = RESULTSLOC; 
                 BRKEXPR[LEVELNB] = PROGSTACKLOC; 
          P<PROGRAMSTACK> = PROGSTACKLOC;  # INITIALIZE PROG STACK PTR #
          PREVIOUS = -1;                   # INITIALIZE STACK COUNTER  #
          LOOPCON = TRUE; 
          FOR STEPPER = STEPPER    # LOOP UNTIL END OF PROGRAM STACK   #
            WHILE LOOPCON 
          DO
            BEGIN 
            FINISHED = FALSE; 
                                   # NOTE - THE FOLLOWING LOOP IS      #
                                   # NECESSARY SO DUMMY CAN BE RE-     #
                                   # INITIALIZED WHEN STEPPER IS TESTED#
  
            FOR DUMMY = 0 STEP 1   # LOOP UNTIL END OF PROGRAM STACK   #
              WHILE NOT FINISHED   # USING DUMMY AS PROGRAMSTACK INDEX #
            DO
              BEGIN 
              IF ENTRYTYPE [DUMMY] EQ 3  #IF POINTS TO ANOTHER PROG STK#
                OR ENTRYTYPE [DUMMY] EQ 6 
              THEN
                BEGIN 
                PREVIOUS = PREVIOUS + 1;  # INCREMENT STACK COUNTER    #
                                          # SAVE ADDR OF THIS PROG STK #
                STACKADDR [PREVIOUS] = P<PROGRAMSTACK>; 
                PSTKPTR [PREVIOUS] = DUMMY;  # SAVE PROG STACK INDEX   #
                P<PROGRAMSTACK> = EXPRESSTACK [DUMMY];
                TEST STEPPER;      # REINITIALIZE DUMMY AND START OVER #
                END 
              IF ENTRYTYPE [DUMMY] NQ 7  # IF OPERAND                  #
              THEN
                BEGIN 
                IF AREAORD [DUMMY] NQ 0  # IF OPERAND IS AREA-ITEM     #
                  OR (TOWORDBASE [DUMMY] LQ O"100"
                    AND TOWORDBASE [DUMMY] GR 0)
                THEN
                  BEGIN 
                  DIAG (619);      # CONDITION IN REPORT DIRECTIVE     #
                                   # INVOLVES AN AREA-ITEM             #
                  STDNO;
                  END 
                END 
              ELSE
                                   # IF OPERATOR                       #
                BEGIN 
                IF OPCODE [DUMMY] EQ O"70"  # IF END OF PROG STACK     #
                THEN
                  BEGIN 
                  IF PREVIOUS LS 0  # IF NO MORE PROG STACKS           #
                  THEN
                    BEGIN 
                    LOOPCON = FALSE;  # TERMINATE LOOP                 #
                    TEST STEPPER; 
                    END 
                  ELSE
                                    # MORE PROGRAM STACKS              #
                    BEGIN 
                    P<PROGRAMSTACK> = STACKADDR [PREVIOUS];  # BACK-UP #
                    DUMMY = PSTKPTR [PREVIOUS]; 
                    PREVIOUS = PREVIOUS - 1;
                    TEST DUMMY; 
                    END 
                  END 
                END 
              END 
            END 
          STDYES; 
          END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
      END 
      TERM
