*COMDECK PVV
#----------------------------------------------------------------------#
#                                                                      #
#     P V V                                                            #
#                                                                      #
#     PVV HANDLES THE VETO OPTION.  IT DISPLAYS PARTS OF THE RECORD.   #
#     IT REQUESTS THE USER-S RESPONSE.  IT RETURNS TRUE IF USER SAID Y.#
#     IT RETURNS FALSE IF USER SAID N.  IT SETS PVVFLAG = 1 IF USER    #
#     SAID P.  IT EXITS OVERLAY BY CALLING *EXITCTL* IF USER SAID E    #
#                                                                      #
#----------------------------------------------------------------------#
  
      FUNC PVV B; 
      BEGIN 
      ITEM PVVFLAG I = 0; 
      ITEM REPLY C(1);
      ITEM CHARS; 
      ITEM I, J;
      ARRAY RESPOND [1:3];
        ITEM RSP = [ " VALID RES", "PONSES TO ", "VETO ARE  " ];
      ITEM PROCEED C(10) = VETOGO,
           EXIT    C(10) = VETOSTOP,
           YES     C(10) = VETOYES, 
           NO      C(10) = VETONO,
           ANSWER  C(10) = VETOANSW;
      SWITCH CPTEST CPTYPE0, CPTYPE1, CPTYPE2, CPTYPE3, CPTYPE4;
                                                                         CTL40
      P<FIT> = P<AREAFIT>;                                               CTL40
      PVV = FALSE;
      IF TERMINAL EQ 0 OR PVVFLAG EQ 1 OR BASCPASS [BASTABIND] OR 
        NOT (VETOFLAG OR BASCVETO [BASTABIND]) THEN RETURN; 
      P<RECORD> = FITWSA;          #POINT TO THE WSA FOR THE RECORD.   # CTL40
      IF VERAREATBL NQ P<AREA$TABLE>  # IF NO VERIFY LIST FOR THIS AREA#
      THEN
        BEGIN 
        C<00,10>LINE = " ";        # CARRAGE CONTROL FOR WRITE         #
        I = KT$RECLENC[RECDORD];   # RECORD LENGTH IN CHARACTERS       #
        IF I LS 40                 # IF RECORD LENGTH LESS THAN 40 CHAR#
        THEN
          BEGIN 
          C<I,50-I>LINE = " ";     # CLEAR REST OF OUTPUT LINE         #
          CMOVE (RECORD, 0, I, LINE, 1);  # COPY LINE TO BE WRITTEN    #
          END 
        ELSE
          BEGIN 
          C<40,10>LINE = " ";             # CLEAR END OF LINE FOR WRITE#
          CMOVE(RECORD, 0, 40, LINE, 1);  # COPY LINE TO BE WRITTEN    #
          END 
        WRITE(LINE, 41, RC);       # WRITE OUT LINE TO TERMINAL        #
        END 
      ELSE
        BEGIN 
        IF VERIBUF EQ 0 THEN
          BEGIN 
          VERIBUF = CMM$ALF(AT$VERLEN, 0, 0); 
          END 
        P<DTABLEPTR> = VERIBUF; 
                                                                         CTL40
        FOR I=0 STEP 1                                                   CTL40
          UNTIL AT$VERLEN - 1 
        DO                                                               CTL40
          BEGIN                                                          CTL40
          DUMY[I] = "          ";                                        CTL40
          END                                                            CTL40
                                                                         CTL40
        J = AT$VERILOC;            # POSITION TO VERIFY TABLE          #
        P<DTABLE> = J;
                                                                         CTL40
        FOR DUMMY=DUMMY                                                  CTL40
          WHILE CPENTRY[0] NQ 0                                          CHANGES
        DO                                                               CTL40
          BEGIN 
      FOR I = 0 STEP EESIZE UNTIL 5 DO
            BEGIN 
            P<DTABLE> = J + I;
            IF CPTYPE[0] NQ 0 THEN
              CHARS = CPTCHAR[0] + 10 * CPTOADDR[0] + CPCHARLG[0];
            GOTO CPTEST [CPTYPE[0]];
CPTYPE0:  
            TEST I;                                                      CTL40
CPTYPE1:  
            MOVEC(DTABLE);                                               CTL40
            TEST I;                                                      CTL40
CPTYPE2:  
            CONVERT(DTABLE, RC);                                         CTL40
            TEST I;                                                      CTL40
CPTYPE3:  
            LOGICALRESLT = FALSE; 
            PROGSTACKLOC = CPSTACK[0];
            EXPEVAL(RC);           # EVALUATE EXPRESSION               #
            CONVERT(DTABLE, RC);                                         CTL40
            TEST I;                                                      CTL40
CPTYPE4:  
            FIGSUB(DTABLE, RC);                                          CTL40
            END 
          P<DTABLE> = P<DTABLE> + EESIZE;  # GET PTR TO NEXT TABLE     #
          J = CPENTRY[0];      # PICK UP LINK TO NEXT TABLE  #
          END  # CPENTRY[0] NQ 0   #
        WRITE(DTABLEPTR, CHARS, RC);                                     CTL40
        END 
      FOR DUMMY=DUMMY                                                    CTL40
        WHILE TRUE                 #LOOP UNTIL EXIT40 CALL             # CTL40
      DO                                                                 CTL40
        BEGIN                                                            CTL40
        PROMTYPE = 54;             # INSERT OCTAL 13 FOR RESPONSE      #
                                   # ON SAME LINE.                     #
        WRITE(ANSWER, 6, RC);                                            CTL40
        READ(REPLY, CHARS, 10, RC);                                      CTL40
        IF CHARS GR 10 THEN 
          I = 60; 
        ELSE
          BEGIN 
          I = CHARS * 6;           # NUMBER OF BITS TO COMPARE         #
          END 
        J = B<0,I>REPLY;
        IF J EQ B<0,I>YES THEN RETURN;
        IF J EQ B<0,I>NO THEN 
          BEGIN 
          PVV = TRUE; 
          RETURN; 
          END 
        IF J EQ B<0,I>PROCEED THEN
          BEGIN 
          PVVFLAG = 1;
          RETURN; 
          END 
        IF J EQ B<0,I>EXIT THEN 
          BEGIN 
          CLEANUP;                                                       CTL40
          EXITCTL;                 # EXIT FROM THIS OVERLAY (AND LOOP) # CHANGES
          END                                                            CTL40
                                                                         CTL40
        WRITE(RESPOND, 70, RC);                                          CTL40
        END 
     END                                                                001560
