*DECK SELECT
USETEXT TENVIRN 
USETEXT TEXPRES 
USETEXT TOPTION 
USETEXT TREPORT 
USETEXT TXSTD 
USETEXT TPSTACK 
      PROC SELECT;
  
#----------------------------------------------------------------------#
#                                                                      #
#  THE FOLLOWING PROCS ARE XDEF"D WITHIN THIS DECK:                    #
#                                                                      #
#     SETTAG                       STORE THE TAG NUMBER                #
#     STOSELE                      STORE THE *SELECT* ENTRY            #
#                                                                      #
#----------------------------------------------------------------------#
  
      BEGIN 
  
      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 
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
       XDEF PROC SETTAG;
       PROC SETTAG; 
       BEGIN
          ITEM I,J; 
          I = ICWI[5];
          IF I GR 63 OR I LS 1 THEN 
          BEGIN DIAG(23); STDNO; END
          C<8,2>KEYAREA = BINDEC(I, 2);  # TWO DIGIT DISP CODE TAG     #
          IF NOT FULLSYNTX THEN STDYES; 
          FOR J = 1 STEP 1 UNTIL MAXSELECT DO 
              IF SELTAG[J] EQ 0 THEN
          BEGIN SELTAG[J] = I; LEVELNB = J; STDYES; END 
            DIAG(158);
          STDNO;
       END
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
          XDEF PROC STOSELE;
          PROC STOSELE; 
          BEGIN 
          IF NOT FULLSYNTX         # IF NOT PREPARING A REPORT         #
          THEN
            BEGIN 
            STDYES; 
            END 
          SELEXPR[LEVELNB] = PROGSTACKLOC;
              SELRELT[LEVELNB] = RESULTSLOC;
          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
