*DECK     NVFIIVF 
USETEXT TXVCBNV 
PROC NVFIIVF; 
# TITLE NVFIIVF - INITIALIZE THE VCB FILE # 
  
      BEGIN  # NVFIIVF #
# 
**    NVFIIVF - INITIALIZE THE VCB FILE.
* 
*     A. LIM    81/09/14
* 
*     THIS ROUTINE IS PART OF THE INITIALIZATION PROCESS FOR NVF. 
*     ITS JOB IS TO PRESET THE VCB FILE WITH ZEROES, AND PRE-ASSIGN 
*     EACH ENTRY WITH A VCB ORDINAL.
* 
*     PROC NVFIIVF
* 
*     ENTRY    NONE 
* 
*     EXIT     VCB FILE INITIALIZED.
* 
*     NOTES    NONE 
* 
*     METHOD   MARCEL ROUTINE WRITECW IS CALLED TO WRITE PRU
*              IMAGES CONTINUOUSLY ON THE VCB FILE. 
* 
# 
  
  
  
  
  
# 
****  PROC NVFIIVF - XREF LIST BEGIN
# 
  
      XREF
        BEGIN 
        PROC RECALL;
        PROC REWIND;
        PROC WRITECW; 
        PROC WRITEF;
        PROC WRITEWC; 
        END 
  
# 
****
# 
  
  
#     ITEMS     # 
  
      ITEM I,J,K,L;                       # INDUCTION VARIABLES        #
      ITEM ENTRYNO    U;                  # ENTRY NUMBER               #
      ITEM VCBORD     U;                  # VCB ORDINAL                #
  
  
# 
**    PRUBUF - ONE VCB RECORD + 2 CONTROL WORDS 
* 
*     PRUBUF CONTAINS THE IMAGE OF ONE VCB RECORD + 2 CONTROL WORDS 
*     WITHIN A PRU. 
# 
  
      ARRAY PRUBUF[00:VBRECDCW1$] S(1); 
        BEGIN 
        ITEM PR$WORD    U(00,00,60);   # FULL WORD REFERENCE           #
        ITEM PR$PRUSIZ  U(00,06,18);   # PRU SIZE                      #
        ITEM PR$BL      U(00,36,24);   # BLOCK LENGTH                  #
        ITEM PR$LN      U(00,00,12);   # LEVEL NUMBER                  #
        ITEM PR$VCBORD  U(00,48,12);   # VCB ORDINAL                   #
        END 
  
# 
*     CWBUF - 2 CONTROL WORDS 
# 
      ARRAY CWBUF[00:00] S(2);
        BEGIN 
        ITEM CW$WORD    U(00,00,60);   # FULL WORD REFERENCE           #
        ITEM CW$PRUSIZ  U(00,06,18) = [O"100"];   # PRU SIZE           #
        ITEM CW$LN      U(01,00,12) = [O"17"];    #LEVEL NUMBER        #
        END 
  
CONTROL EJECT;
# 
*     INITIALIZES VCB FET 
# 
  
      VB$LFN[0] = "VCBFILE";
      VB$CODE[0] = 3; 
      VB$R[0] = TRUE; 
      VB$L[0] = VBFETSIZ$ - 5;
  
  
# 
*     SET VCB FET TO THE LOCATION OF VCB BUFFER.
# 
  
      VB$FIRST[0] = LOC(VCBBUFR); 
      VB$IN[0] = LOC(VCBBUFR);
      VB$OUT[0] = LOC(VCBBUFR); 
      VB$LIMIT[0] = VB$FIRST[0] + VBBUFLIM$ + 1;
  
  
  
#     PRESET THE WHOLE BUFFER WITH ZEROES                              #
  
      FOR I = 0 STEP 1 UNTIL VBRECDCW1$ 
      DO
        BEGIN 
        PR$WORD[I] = 0; 
        END 
  
  
#     SET CONTROL WORDS                                                #
  
      PR$PRUSIZ[0] = PRUSIZ$;          # SET PRU SIZE                  #
      PR$BL[0] = VBBL$;                # SET BLOCK LENGTH              #
      PR$LN[VBRECDCW1$] = VBLNEOR$;    # SET EOR AS THE LEVEL NUMBER   #
  
#     SET VCB ORDINALS FOR ALL ENTRIES WITHIN THE FIRST PRU            #
  
      ENTRYNO = 1;
      FOR J = 1 STEP 1 UNTIL VBMXENTRY$ 
      DO
        BEGIN 
        PR$VCBORD[ENTRYNO] = J;        # SEQUENTIALLY ASSIGN VCB ORD   #
        ENTRYNO = ENTRYNO + VBESIZ$;
        END 
  
# 
*     WRITE THE FIRST RECORD TO THE CIO BUFFER
# 
  
      REWIND(VCBFET);                  # REWIND VCB FILE               #
      WRITEWC(VCBFET,PRUBUF,VBRECDCW$); # TRANSFR THE RECORD TO CIR BUF#
      WRITECW(VCBFET);                 # WRITE FUNCTION CODE ON VCB FET#
  
  
# 
*     WRITE THE REST (MAXSEC$ - 1) OF RECORDS TO VCB FILE 
# 
  
  
      FOR K = 1 STEP 1 UNTIL MAXSEC$ - 1
      DO
        BEGIN 
        VCBORD = K * 2 ** 3 + 1;    # SET VCB ORDINAL FOR THIS(KTH) PRU#
        ENTRYNO = 1;
        FOR L = 1 STEP 1 UNTIL VBMXENTRY$ 
        DO
          BEGIN                # ASSIGN VCB ORDINAL                    #
          PR$VCBORD[ENTRYNO] = VCBORD;
          VCBORD = VCBORD + 1;
          ENTRYNO = ENTRYNO + VBESIZ$;
          END 
        WRITEWC(VCBFET,PRUBUF,VBRECDCW$);  # TRANSFER THE RECORD       #
        END 
      WRITEWC(VCBFET,CWBUF,2);         # WRITE 2 CONTROL WORDS         #
      WRITECW(VCBFET);
      RECALL(VCBFET); 
  
  
      END  # NVFIIVF #
  
 TERM 
