*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