*DECK RPTEVAL 
USETEXT TCMMDEF 
USETEXT TDESATT 
USETEXT TENVIRN 
USETEXT TEXPRES 
USETEXT TPSTACK 
USETEXT TREPORT 
USETEXT TXSTD 
      PROC RPTEVAL; 
  
#----------------------------------------------------------------------#
#                                                                      #
#  THE FOLLOWING PROCS ARE XDEF"D WITHIN THIS DECK:                    #
#                                                                      #
#     RESETEV                      RESET FOR ANOTHER EVALUATE          #
#     SAVEVAL                      SAVE THIS EVALUATE                  #
#                                                                      #
#----------------------------------------------------------------------#
  
      BEGIN 
  
      XREF ITEM ALL          B;    # FLAG FOR *ALL* IN THE MOVE/EVAL   #
      BASED ARRAY DESATT1NAME;     # DESATT1 NAME FIELD                #
        BEGIN 
        ITEM NAME$CHAR  C(0,0,1);  # FIRST CHARACTER OF NAME           #
                                   # IF THE FIRST CHARACTER OF THE NAME#
                                   # IS A COMMA, THEN IT WILL BE       #
                                   # FOLLOWED BY THE CUMMULATIVE       #
                                   # FUNCTION CODE.                    #
        ITEM NAME$CODE  U(0,6,9);  # FUNCTION CODE                     #
        END 
      XREF ITEM ENDPTR;            # INDEX INTO EVALUATE TABLE         #
      XREF ITEM EVALFWA;           # FWA OF FIRST EVALUATE TABLE       #
      XREF BASED ARRAY EVALDATA;
          ITEM LOGRST B(0,0,1), 
               DATASTACK I(0,24,18),
               DATACNVT I(0,6,18),
               DATADEFADDR I(0,42,18);
      BASED ARRAY DTABLE;          # MOVE/CONVERT TABLE                # QU30299
        BEGIN                                                            QU30299
        ITEM CPADDRFROM I(1,24,18);                                      QU30299
        ITEM DAREAORD U(2,42,6);   # AREA ORDINAL OF AREA ITEM         # QU30299
        END                                                              QU30299
      ARRAY EXPRSTACK [9];                                               QU30299
        BEGIN                                                            QU30299
        ITEM STACKADDR I(0,42,18);  # SAVED ADDR OF PROG STACK         # QU30299
        ITEM PSTKPTR I(0,24,18);   # INDEX WITHIN SAVED PROG STACK     # QU30299
        END                                                              QU30299
      XREF PROC DIAG;                                                    QU30299
      ITEM PREVIOUS I;             # INDEX INTO EXPRSTACK              # QU30299
      ITEM LOOPCON B;              # LOOP CONTROL                      # QU30299
      ITEM STEPPER I;              # LOOP VARIABLE                     # QU30299
      ITEM FINISHED B;             # LOOP CONTROL                      # QU30299
      XREF ITEM DUMMY I;           # LOOP CONTROL                      # QU30299
      ITEM J            I;         # SCRATCH TEMPORARY                 #
      XREF ITEM MVFLAG       B;    # TRUE FOR MOVE, FALSE FOR EVALUATE #
      XREF ITEM NOSEL        B;    # FLAG FOR *NO SELECT*              #
      BASED ARRAY RESULT$FIELD;    # FOR LOOKING AT RESULT FIELD       #
        BEGIN 
        ITEM RESULT U(0,0,60);     # ONE WORD OF RESULT FIELD          #
        END 
      XREF ITEM SM$GROUPID   I;    # GROUP ID FOR CURRENT SYNTAX STUFF #
      XREF ITEM TBLA         I; 
      XREF PROC RECNO;
      XREF PROC RECYES; 
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
          XDEF PROC RESETEV;
          PROC RESETEV; 
          BEGIN 
          ALL = FALSE;             # CLEAR *ALL/ANY* FLAG              #
          RECNO;                   # RETURN TO STDNO IF RECORDING      #
              MVFLAG = FALSE; 
          ENDPTR = 0; 
          IF FULLSYNTX THEN 
            BEGIN 
            P<EVALDATA> = CMM$ALF(7, 0, SM$GROUPID);
            END 
          TBLA=P<EVALDATA>; 
          EVALFWA = P<EVALDATA>;   # SAVE FWA OF FIRST EVALUATE TABLE  #
         NOSEL = FALSE;                                                 020860
              STDNO;
          END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
          XDEF PROC SAVEVAL;
          PROC SAVEVAL; 
          BEGIN 
          RECYES;                  # RETURN TO STDYES IF RECORDING     #
         IF NOT FULLSYNTX THEN
           BEGIN
           STDYES;
           END
      IF FIGLITDATA NQ 2           # NOT DEFINED                       # QU30299
        AND FIGLITDATA NQ 4        # NOT SPECIFIED                     # QU30299
      THEN                                                               QU30299
        BEGIN                                                            QU30299
        DIAG (144);                                                      QU30299
        STDNO;                                                           QU30299
        END                                                              QU30299
          IF ENDPTR EQ 6 THEN 
            BEGIN 
            DATADEFADDR[6] = CMM$ALF(7, 0, SM$GROUPID); 
                P<EVALDATA>=DATADEFADDR[6]; 
                ENDPTR = 0; 
          END 
              DATADEFADDR[ENDPTR] = DATANAMEPTR;
          NONEMPTYRPT = TRUE;                                           004340
              P<DESATT1> = DATANAMEPTR; 
      P<DTABLE> = DCNVTBL[0];                                            QU30299
      IF P<DTABLE> NQ 0            # IF MOVE TABLE EXISTS              # QU30299
      THEN                                                               QU30299
        BEGIN                                                            QU30299
        IF DAREAORD[0] NQ 0        # IF EQUAL TO AREA ITEM             # QU30299
          OR (CPADDRFROM[0] LQ O"100"                                    QU30299
            AND CPADDRFROM[0] GR 0)                                      QU30299
        THEN                                                             QU30299
          BEGIN                                                          QU30299
          DIAG (617);              # DATA-NAME INVOLVES AREA-ITEM      # QU30299
          STDNO;                                                         QU30299
          END                                                            QU30299
        END                                                              QU30299
      P<PROGRAMSTACK> = DEXPPTR[0];                                      QU30299
      IF P<PROGRAMSTACK> NQ 0                                            QU30299
      THEN                                                               QU30299
        BEGIN                                                            QU30299
        PREVIOUS = -1;                                                   QU30299
        LOOPCON = TRUE;                                                  QU30299
        FOR STEPPER = STEPPER                                            QU30299
          WHILE LOOPCON                                                  QU30299
        DO                                                               QU30299
          BEGIN                                                          QU30299
          FINISHED = FALSE;                                              QU30299
          FOR DUMMY = 0 STEP 1                                           QU30299
            WHILE NOT FINISHED                                           QU30299
          DO                                                             QU30299
            BEGIN                                                        QU30299
            IF ENTRYTYPE[DUMMY] EQ 3  # IF POINTS TO ANOTHER PROG STK  # QU30299
              OR ENTRYTYPE[DUMMY] EQ 6                                   QU30299
            THEN                                                         QU30299
              BEGIN                                                      QU30299
              PREVIOUS = PREVIOUS + 1;  # SAVE ADDR OF THIS PROG STACK # QU30299
              STACKADDR[PREVIOUS] = P<PROGRAMSTACK>;                     QU30299
              PSTKPTR[PREVIOUS] = DUMMY;                                 QU30299
              P<PROGRAMSTACK> = EXPRESSTACK[DUMMY];                      QU30299
              TEST STEPPER;                                              QU30299
              END                                                        QU30299
            IF ENTRYTYPE[DUMMY] NQ 7  # IF OPERAND                     # QU30299
            THEN                                                         QU30299
              BEGIN                                                      QU30299
              IF AREAORD[DUMMY] NQ 0  # IF OPERAND IS AREA-ITEM        # QU30299
                OR (TOWORDBASE[DUMMY] LQ O"100"                          QU30299
                  AND TOWORDBASE[DUMMY] GR 0)                            QU30299
              THEN                                                       QU30299
                BEGIN                                                    QU30299
                DIAG (617);        # DATA-NAME INVOLVES AREA-ITEM      # QU30299
                STDNO;                                                   QU30299
                END                                                      QU30299
              END                                                        QU30299
            ELSE                   # IF OPERATOR                       # QU30299
              BEGIN                                                      QU30299
              IF OPCODE[DUMMY] EQ O"70"  # IF END OF PROG STACK        # QU30299
              THEN                                                       QU30299
                BEGIN                                                    QU30299
                IF PREVIOUS LS 0   # IF NO MORE PROG STACKS            # QU30299
                THEN                                                     QU30299
                  BEGIN                                                  QU30299
                  LOOPCON = FALSE; # TERMINATE LOOP                    # QU30299
                  TEST STEPPER;                                          QU30299
                  END                                                    QU30299
                ELSE               # MORE PROG STACKS                  # QU30299
                  BEGIN                                                  QU30299
                  P<PROGRAMSTACK> = STACKADDR[PREVIOUS];                 QU30299
                  DUMMY = PSTKPTR[PREVIOUS];                             QU30299
                  PREVIOUS = PREVIOUS - 1;                               QU30299
                  TEST DUMMY;                                            QU30299
                  END                                                    QU30299
                END                                                      QU30299
              END                                                        QU30299
            END                                                          QU30299
          END                                                            QU30299
        END                                                              QU30299
                                   # WHEN EVALUATING A CUMULATIVE      #
                                   # FUNCTION, RESET ITS VALUE.        #
                                   # LOOK AT ITEM NAME ENTRY.          #
          IF DIMOCC[0] THEN        # IF DIMENSIONED OCCURANCE...       #
            BEGIN 
            P<DESATT1NAME> = P<DESATT1> + 4;  # ITEM NAME IS HERE      #
            END 
          ELSE
            BEGIN 
            P<DESATT1NAME> = P<DESATT1> + 3;  # ITEM NAME IS HERE      #
            END 
          IF NAME$CHAR EQ "," OR NAME$CHAR EQ "."       # IF CUM FUNC  #
          THEN
            BEGIN 
            P<PROGRAMSTACK> = DEXPPTR[0];  # PICK UP STACK ADDRESS     #
                                   # IF COUNT, SUM, OR MEAN...         #
                                   # (CODE = 307, 310, OR 311)         #
            IF NAME$CODE LS O"312" THEN 
              BEGIN 
                                   # PICK UP RESULT ADDRESS            #
              P<RESULT$FIELD> = TOWORDADDR[2];
              RESULT[0] = 0;       # RESET COUNT, SUM, OR MEAN         #
              RESULT[1] = 0;
              END 
            ELSE
              BEGIN 
              J = OPCODE[2];       # PICK UP OP CODE IN STACK          #
              IF J LS O"120" THEN  # IF MAX OR MIN...                  #
                BEGIN 
                OPCODE[2] = J + O"50";  # RESET OP CODE                #
                END 
              END 
            END 
              DATASTACK[ENDPTR] = DEXPPTR[0]; 
              DATACNVT[ENDPTR] = DCNVTBL[0];
         IF LOGICALRESLT THEN LOGRST[ENDPTR]=TRUE;                      020710
         ELSE LOGRST[ENDPTR] = FALSE;                                   020720
          ENDPTR = ENDPTR + 1;
              STDYES; 
          END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
      END 
      TERM
