*DECK     NVFUMVD 
USETEXT  TXVCBNV
PROC NVFUMVD(VCBORD,INDICATOR); 
# TITLE NVFUMVD - MARKS VCB DATA AS VALID/INVALID. #
  
      BEGIN    # NVFUMVD #
# 
**    NVFUMVD - MARKS VCB DATA AS VALID/INVALID.
* 
*     A. LIM    81/07/21
*     C. BRION  82/06/22
* 
*     THIS PROCEDURE MARKS THE VCB DATA AS VALID/INVALID. 
* 
*     PROC NVFUMVD(VCBORD,INDICATOR)
* 
*     ENTRY    VCBORD = VCB ORDINAL 
*              INDICATOR = 0/1 FOR VALID/INVALID. 
* 
*     EXIT     VCB DATA MARKED. 
* 
*     NOTES    NONE 
* 
*     METHOD   1) VERIFY THAT VCB ORDINAL IS LEGAL, 
*              2) VERIFY THAT VCB ORDINAL IS ASSIGNED, AND
*              3) VERIFY THAT VCB ORDINAL IS NOT ALREADY
*                 IN PRESENT STATE. 
*              IF EITHER ONE OF THE ABOVE FAILS, ISSUE
*              DAYFILE MESSAGE AND ABORT NVF.   ELSE
*              MARK THE DATA IN VCB-VALID-INDICATOR-TABLE(VDT)
*              AS VALID/INVALID.
* 
# 
  
  
# 
****  PROC NVFUMVD XREF LIST BEGIN. 
# 
      XREF
        BEGIN 
        PROC ABORT;                    # MACREL - ABORT TASK           #
        PROC MESSAGE;                  # MACREL - ISSUE MESSAGE        #
        PROC SSBCBW;                   # SS - CLEAR BIT IN WORD        #
        PROC SSBSBW;                   # SS - SET BIT IN WORD          #
        PROC SSBTBW;                   # SS - TEST BIT IN WORD         #
        FUNC XCDD C(10);               # MACREL-CNVRT INT TO DEC DSP CD#
        END 
# 
****
# 
  
  
  
      # FORMAL PARAMETERS # 
  
      ITEM VCBORD    I; 
      ITEM INDICATOR  B;
  
  
      # ACTUAL PARAMETERS # 
  
      ITEM WORD       I;
      ITEM BITN       I;
      ITEM VOTSTS     B;               # STATUS OF VCB ORD IN VOT      #
      ITEM VDTSTS     B;               # STATUS OF VCB DATA IN VDT     #
  
  
      # INDUCTION VARIABLES # 
  
      ITEM I          I;               # DUMMY                         #
  
  
      # ITEMS # 
  
      ITEM TEMP      C(10); 
  
  
  
  
  
      WORD = 0; 
      BITN = VCBORD;
      FOR I = 0 WHILE (BITN-48) GR 0    # CONVERT ORDNL TO WORD/BIT    #
      DO
        BEGIN 
        BITN = BITN-48; 
        WORD = WORD+1;
        END 
  
  
# 
*     1) VERIFY THAT VCB ORDINAL IS LEGAL,
*     2) VERIFY THAT VCB ORDINAL IS ASSIGNED, AND 
*     3) VERIFY THAT VCB ORDINAL IS NOT ALREADY IN PRESENT STATE. 
# 
  
  
      $BEGIN
      SSBTBW(VOT[WORD],BITN,VOTSTS);
      SSBTBW(VDT[WORD],BITN,VDTSTS);
      IF    WORD GR VTSIZE$ 
         OR (BITN - BITN/MAXENSEC$ * MAXENSEC$) EQ 0
         OR (BITN - BITN/MAXENSEC$ * MAXENSEC$) GR ACTENSEC$
         OR VOTSTS
         OR (INDICATOR AND VDTSTS)
         OR (NOT INDICATOR AND NOT VDTSTS)
      THEN
        BEGIN 
        TEMP = XCDD(VCBORD);
        V$MSG[0] = "ILLEGAL VCB ORDINAL = ";
        V$ORD[0] = C<7,3>TEMP;
        V$PID[0] = "NVFUMVD"; 
        MESSAGE(VCBMSG[0],DFILE$);
        ABORT;
        END 
      $END
  
      IF INDICATOR THEN 
        BEGIN 
        SSBSBW(VDT[WORD],BITN);      # MARK DATA AS INVALID            #
        END 
      ELSE
        BEGIN 
        SSBCBW(VDT[WORD],BITN);      # MARK DATA AS VALID              #
        END 
  
      RETURN; 
  
  
      END  # NVFUMVD #
  
      TERM
