*DECK     TXVCBNV 
PROC TXVCBNV; 
# TITLE TXVCBNV - VCB I/O SYMPL TEXT FOR NVF.                          #
  
      BEGIN  # TXVCBNV #
# 
**    TXVCBNV - VCB I/O SYMPL TEXT FOR NVF. 
* 
*     A. LIM.    81/11/04.
*     C. BRION.  82/06/22.
* 
*     THIS PROC GENERATES A SYMPL TEXT FOR COMPILING NVF ACCESS VCB 
*     FILE ROUTINES.  IT CONTAINS DEFINITIONS OF SYMBOLS, ITEMS, ARRAYS 
*     AND COMMON BLOCKS USED FOR THOSE ROUTINES AND VCB I/O PROCESSING. 
* 
*     PROC TXVCBNV
# 
  
      CONTROL STEXT;
  
# 
****
# 
#     *** AVRT ***                                                     #
      DEF AVRTMAX$   #  9 #; #AVRT UPPER BOUND = 10 PRUS               #
      DEF RDWRITE$   #  0 #; #READ-TYPE:  READ FOR A WRITE             #
      DEF RDREAD$    #  1 #; #            READ FOR READ DATA           #
      DEF RDSS$      #  2 #; #            READ FOR A SERIAL SEARCH     #
      DEF MARKED$    #  5 #; # TYPE 0 CONVERTED TO MARKED$ AFTER PROCD #
#     *** READLIST ***                                                 #
      DEF RLMAX$     # 10 #; #READLIST UPPER BOUND (ALSO BOUNDS AVRT)  #
#     *** VCB FILE ***                                                 #
      DEF VBESIZ$    #  8 #; # VCB ENTRY SIZE                          #
      DEF VBMXENTRY$ #  7 #; # MAX NO OF VCB ENTRIES PER PRU           #
      DEF VBRECD$    # 56 #; # VCB RECORD = VBMXENTRY X VBESIZ$        #
      DEF VBRECD1$   # 55 #; # VBRECD1$ = VBRECD$ - 1                  #
      DEF VBRECDCW$  # 58 #; # VBRECDCW$ = VBRECD$ + 2 CONTROL WORDS   #
      DEF VBRECDCW1$ # 57 #; # VBRECDCW1$ = VBRECDCW$ - 1              #
      DEF VBBL$      #280 #; # BLOCK LEN = VBMXENTRY$ X VBESIZ$ X 5    #
      DEF VBLNEOR$   #  0 #; # LEVEL NUMBER = EOR                      #
      DEF VBFETSIZ$  #  7 #; # VCB FET SIZE:  L FIELD = VBFETSIZ$ - 5  #
      DEF VBBUFLIM$  #291 #; # CIO BUF UPPER BOUND = 5 X VBRECDCW$ + 1 #
      DEF PRUSIZ$    # 64 #; # PRU SIZE#
      DEF MAXSEC$    #214 #; # MAX NUMBER OF SECTORS PER TRACK         #
#     *** VOT AND VDT (SEE NVFIIVT) ***                                #
      DEF MAXENSEC$  #  8 #; # MAX ENTRIES/SECTOR                      #
      DEF ACTENSEC$  #  7 #; # ACTUAL ENTRIES/SECTOR = VBMXENTRY$      #
      DEF BITSWORD$  # 48 #; # USEFUL BITS/WORD IN BITMAP              #
      DEF VTSIZE$    # 35 #; # VOT AND VDT TABLE SIZE                  #
                             #   = WRDS IN *NVFIIVT*                   #
      DEF DFILE$     #  0 #; # MESSAGE OPTION - DAYFILE                #
      DEF VALID$     #  0 #; # MARK DATA IN *VDT* VALID INDICATOR      #
      DEF INVALID$   #  1 #; # MARK DATA IN *VDT* INVALID INDICATOR    #
#     *** AVST ***                                                     #
      DEF AVSTSIZ$   #  3 #; # AVST ENTRY SIZE                         #
      DEF MAXSSRD$   #  5 #; # MAX NO OF VCB BLOCKS READ AT A TIME     #
# 
****
# 
  
# 
**    VCBIO - A COMMON BLOCK FOR VCB I/O PROCESSING.
* 
*     VCBIO IS A COMMON BLOCK OF DATA/DATA-STORAGE TO BE USED 
*     FOR ALL OF THE VCB I/O PROCESSING ROUTINES. 
# 
  
  
      COMMON VCBIO; 
      BEGIN  # VCBIO #
  
# 
**    TVRQ - TEMPLATE FOR VCB READ REQUEST QUEUE. 
* 
*     TVRQ IS THE TEMPLATE FOR THE ABH PORTION (WORD ONE) OF A VCB ENTRY
*     IT CONTAINS ONLY THOSE FIELDS NEEDED BY NVF ACCESS VCB PROCESS. 
# 
  
      BASED ARRAY TVRQ[00:00] S(1); 
        BEGIN 
        ITEM TVR$WORD   U(00,00,60);   #FULL WORD REFERENCE            #
        ITEM TVR$TYPE   U(00,00,06);   #READ REQUEST TYPE              #
        ITEM TVR$ORD    U(00,06,12);   #VCB ORDINAL                    #
        ITEM TVR$RPA    U(00,06,09);   #RELATIVE PRU ADDRESS           #
        ITEM TVR$ENTRY  U(00,15,03);   #ENTRY NO WITHIN THE PRU        #
        ITEM TVR$QADDR  U(00,18,18);   #QUEUE ADDRESS                  #
        END 
  
  
# 
**    AVRT AND READLIST- ACTIVE-VCB-READ-REQUEST-TABLE AND VCB READLIST.
* 
*     AVRT CONTAINS VCB READ REQUEST(S) THAT IS CURRENTLY BEING PROCESSE
*     IT IS A FIXED SIZE TABLE WITH ONE WORD PER ENTRY. 
*     ITS FIELDS ARE: 1) VCB ORDINAL WHICH IS COMPOSED OF:  
*                        A) RELATIVE PRU ADDRESS, AND 
*                        B) ENTRY NUMBER WITHIN THE PRU.
*                     2) READ REQUEST TYPE: 
*                        A) 0 = READ FOR A WRITE, 
*                           5 = TYPE 0 CONVERTED TO 5 AFTER ITS BEEN
*                               PROCESSED.  USED MERELY BY *NVFVDCD*
*                               WHEN SCANING THROUGH *AVRT*.
*                        B) 1 = READ FOR READING OF DATA, AND 
*                        C) 2 = READ FOR A SERIAL SEARCH. 
*                     3) QUEUE ADDRESS FOR THE DESTINATION OF DATA. 
*                        NOTE: FOR READ REQUEST TYPE = 0, THIS FIELD
*                              IS IMMATERIAL. 
* 
*     PRIOR TO ISSUEING THE READLS FUNCTION, AVRT WILL BE SORTED INTO 
*     ASCENDING ORDER BY THE ENTIRE ENTRY.  THIS PROVIDES MORE EFFICIENT
*     I/O PROCESSING AND ALSO GUARANTEES WRITE (TYPE 0) PRIORITY OVER 
*     READ (TYPE 1).
* 
*     READLIST IS THE ACTUAL READ LIST USED BY THE CIO READLS FUNCTION..
*     IT CONTAINS ONLY NON-DUPLICATED RELATIVE PRU ADDRESS PORTION OF 
*     THE SORTED AVRT.
* 
* 
*     THE FOLLOWING IS THE FORMAT OF AN AVRT ENTRY.  EACH ENTRY 
*     IS 1-WORD LONG. 
* 
* 
*                 1         2         3         4         5 
*       012345678901234567890123456789012345678901234567890123456789
*TEXT 
*T,9/RPA,3/EN,6/TYPE,18/QADDR,24/ 
*ENDTEXT
# 
  
  
      ARRAY AVRT[00:AVRTMAX$] S(1); 
        BEGIN 
# 
****
# 
        ITEM AVR$WORD   U(00,00,60);   #FULL WORD REFERENCE            #
        ITEM AVR$REQ    U(00,00,18);   #VCB REQUEST = ORD + TYPE       #
        ITEM AVR$ORD    U(00,00,12);   #VCB ORDINAL                    #
        ITEM AVR$RPA    U(00,00,09);   #RELATIVE PRU ADDRESS           #
        ITEM AVR$ENTRY  U(00,09,03);   #ENTRY NUM WITHIN THE PRU       #
        ITEM AVR$TYPE   U(00,12,06);   #READ REQUEST TYPE              #
        ITEM AVR$QADDR  U(00,18,18);   #QUEUE ADDRESS                  #
# 
****
# 
        END 
  
# 
**    THE FOLLOWING IS THE FORMAT OF A READLIST ENTRY.  EACH
*     ENTRY IS 1-WORD LONG. 
* 
* 
*                 1         2         3         4         5 
*       012345678901234567890123456789012345678901234567890123456789
*TEXT 
*T,60/RPA 
*ENDTEXT
# 
  
      ARRAY READLIST[00:RLMAX$] S(1); 
        BEGIN 
# 
****
# 
        ITEM RL$RPA     U(00,00,60);   #RELATIVE PRU ADDRESS           #
# 
****
# 
        END 
  
      ITEM AVCOUNT    I;     #CURRENT COUNT OF NO OF ENTRIES IN AVRT   #
      ITEM RLCOUNT    I;     #CURRENT COUNT OF NO OF PRUS IN READLIST  #
  
  
# 
**
*E
**    AVST - ACTIVE-VCB-SERIAL-SEARCH-REQUEST-TABLE.
* 
*     AVST CONTAINS VCB SERIAL-SEARCH REQUEST(VSQ ENTRY) WITH ADDITIONAL
*     DATA THAT IS CURRENTLY BEING PROCESSED. 
*     IT IS A FIXED-SIZE TABLE. 
* 
* 
*     THE FOLLOWING IS THE FORMAT OF AN AVST ENTRY.  EACH ENTRY 
*     IS 3-WORDS LONG.
* 
* 
*                 1         2         3         4         5 
*       012345678901234567890123456789012345678901234567890123456789
*TEXT 
*T,WORD0,36/,3/RC,12/VCBLK,6/WORDP,1/ ,1/M,1/S
*T,WORD1,60/VALUE 
*T,WORD2,60/MASK
*ENDTEXT
# 
  
      ARRAY AVST[00:00] S(AVSTSIZ$);
        BEGIN 
# 
****
# 
        ITEM AVS$WORD0  U(00,00,60);   # WORD 0 REFERENCE              #
        ITEM AVS$WORD1  U(01,00,60);   # WORD 1 REFERENCE              #
        ITEM AVS$WORD2  U(02,00,60);   # WORD 2 REFERENCE              #
        ITEM AVS$APENDF B(00,35,01);   # LAST APPL FLAG # 
        ITEM AVS$RSSCNT U(00,36,03);   # READ-SS-COUNT                 #
        ITEM AVS$VCBLK  U(00,39,12);   # NEXT VCB BLOCK TO READ        #
        ITEM AVS$WORDP  U(00,51,06);   # WORD-POSITION                 #
        ITEM AVS$MTCHF  B(00,58,01);   # VCB-MATCH-FLAG                #
        ITEM AVS$SGLEF  B(00,59,01);   # SINGLE-ENTRY-FLAG             #
        ITEM AVS$VALUE  U(01,00,60);   # VALUE TO SEARCH               #
        ITEM AVS$MASK   U(02,00,60);   # MASK FOR THE VALUE            #
# 
****
# 
        END 
  
  
# 
**    VOT AND VDT - VCB ORDINAL TABLE AND 
*                     VCB VALD DATA INDICATOR TABLE.
* 
*     VOT AND VDT CONTAINS STATUS INFORMATION OF VCB ORDINAL
*     AND VCB DATA RESPECTIVELY.  BOTH TABLES ARE IN BIT MAP
*     FORMAT WITH 48 BITS/WORD (BITS 12 - 59) OF POSSIBLE 
*     INFORMATION, AND THERE IS A ONE-ONE CORRESPONDENCE
*     BETWEEN THE TWO TABLES, I.E. THE ITH BIT IN THE NTH 
*     WORD IN BOTH TABLES STANDS FOR THE SAME VCB ORDINAL.
*     VOT CONTAINS THE STATUS FREE/BUSY OF ALL VCB ORDINALS,
*     WHILE VDT CONTAINS THE STATUS INVALD/VALID OF ALL VCB DATA. 
# 
  
      ARRAY VOT[00:VTSIZE$] S(1); 
        BEGIN 
        ITEM VOT$WORD   U(00,00,60);   # FULL WORD REFERENCE           #
        END 
  
      ITEM AVCBCNT    I;     # COUNT FOR ACTIVE VCB ORDINALS IN VOT    #
  
  
      ARRAY VDT[00:VTSIZE$] S(1); 
        BEGIN 
        ITEM VDT$WORD   U(00,00,60);   # FULL WORD REFERENCE           #
        END 
  
  
# 
*     DAYFILE MESSAGE ARRAY: "ILLEGAL VCB ORDINAL = XXX"
# 
  
      ARRAY VCBMSG[00:00] S(4); 
        BEGIN 
        ITEM V$MSG      C(00,00,22);
        ITEM V$ORD      C(02,12,03);
        ITEM V$SPC      C(02,30,01) = [" "];
        ITEM V$PID      C(02,36,07);
        ITEM V$ZERO     C(03,18,42) = [0];   # ZERO BYTE TERMINATOR # 
        END 
  
  
# 
**    VCBFET AND VCBBUFR - FET AND CIRCULAR BUFFER FOR THE VCB. 
* 
*     THE VCB FET AND CIRCULAR BUFFER ARE DEFINED IN A GLOBAL LABELLED
*     COMMON AREA BECAUSE THE VCB IS USED BY BOTH THE INITIALIZATION
*     ROUTINES AND BY THE VCB ROUTINES.  THESE ARRAYS ARE COMPILED
*     INTO A TEXT.  HENCE, ALL PRESETTING MUST BE DONE AT INITIALIZATION
*     TIME. 
# 
  
      ARRAY VCBFET [00:00] S(VBFETSIZ$);
        BEGIN 
        ITEM VB$WORD    U(00,00,60);   #FIRST WORD OF FET              #
        ITEM VB$LFN     C(00,00,07);   #FILE NAME-- WILL BE *VCB*      #
        ITEM VB$LNAT    U(00,42,08);   #COMB LEVEL NR AND ABN TERM CODE#
        ITEM VB$CODE    U(00,50,10);   #CIO FUNCTION CODE              #
        ITEM VB$CBIT    B(00,59,01);   #FUNCTION COMPLETE BIT          #
        ITEM VB$R       B(01,12,01);   #RANDOM ACCESS FLAG             #
        ITEM VB$L       U(01,36,06);   #FET LENGTH IN EXCESS OF 5 WORDS#
        ITEM VB$FIRST   U(01,42,18);   #ADDRESS OF FIRST WORD OF BUFFER#
        ITEM VB$IN      U(02,42,18);   #NEXT DATA IN POINTER           #
        ITEM VB$OUT     U(03,42,18);   #NEXT DATA OUT POINTER          #
        ITEM VB$LIMIT   U(04,42,18);   #LAST WORD ADDRESS + 1 OF BUFFER#
        ITEM VB$LA      U(05,42,18);   #LIST ADDRESS                   #
        ITEM VB$W       B(06,30,01);   # WRITE-IN-PLACE OPERATION      #
        ITEM VB$RR      U(06,31,29);   #RANDOM REQUEST RELATIVE PRU ADR#
        END 
  
      ARRAY VCBBUFR [00:VBBUFLIM$] S(1);
        BEGIN 
        ITEM VBR$WORD   U(00,00,60);   #FULL WORD REFERENCE            #
        END 
  
# 
**    VCBWSA - WORKING STORAGE AREA FOR 1 PRU OF VCB DATA.
* 
*     VCBWSA IS THE WORKING STORAGE AREA FOR 1 PRU OF VCB DATA. 
*     THE PRU IS READ IN BY *NVFVDCD* FROM CIO BUFFER WHICH IS
*     READ IN BY THE READLS FUNCTION ISSUED BY *NVFVRVF*. 
# 
  
      ARRAY VCBWSA[01:VBMXENTRY$] S(VBESIZ$); 
        BEGIN 
        ITEM VBW$WORD   U(00,00,60);  # FULL WORD REFERENCE            #
        ITEM VBW$ORD    U(00,48,12);  # VCB ORDINAL                    #
        ITEM VBW$RPA    U(00,48,09);  # RELATIVE PRU ADDRESS           #
        ITEM VBW$ENTRY  U(00,57,03);  # ENTRY NO WITHIN THE PRU        #
        END 
  
  
      END  # VCBIO #
  
      END  # TXVCBNV #
  
      TERM
