cdc:nos2.source:nam5871:nvfvfsd
Table of Contents
NVFVFSD
Table Of Contents
- [00006] PROC NVFVFSD
- [00011] FILTER SERIAL-SEARCH DATA BLOCK.
- [00045] PROC NVFURDS
- [00046] PROC SSTAQE
- [00061] TVENTRY - TEMPLATE FOR A VCB ENTRY IN A WORD ADDRESSABLE BASE.
Source Code
- NVFVFSD.txt
- *DECK NVFVFSD
- USETEXT TEXTNVF
- USETEXT TEXTSS
- USETEXT TXTANVF
- USETEXT TXVCBNV
- PROC NVFVFSD;
- # TITLE NVFVFSD - FILTER SERIAL-SEARCH DATA BLOCK. #
- BEGIN # NVFVFSD #
- #
- ** NVFVFSD - FILTER SERIAL-SEARCH DATA BLOCK.
- *
- * A. LIM. 82/04/21.
- * C. BRION 83/05/10.
- *
- * THIS PROCEDURE-S MAIN FUNCTION IS TO FILTER THE DATA BLOCK
- * (RETURNING FROM READING THE VCB FILE) ACCORDING TO A GIVEN
- * SET OF VALUES IN ACTIVE-VCB-SERIAL-SEARCH TABLE *AVST*.
- * IT IS CALLED INTO EXECTION BY: *NVFVDCD*
- *
- * ENTRY VCB DATA BLOCK IN *VCBWSA* DEFINED IN *TXVCBNV*.
- * THE ORIGINAL VCB SERIAL-SEARCH REQUEST WITH ADDITIONAL
- * INFORMATIONS IN *AVST*.
- *
- * EXIT VCB DATA BLOCK FILTERED AND ENTRY(IES) MADE INTO VCB
- * SERIAL-SEARCH DATA QUEUE *VCBSSQ*.
- * VARIOUS FLAGS AND COUNT IN *AVST* GET UPDATED.
- * IF NO MORE READ BLOCKS OUTSTANDING, INTERRUPT
- * CELL FOR *NVFVPSR* TRIGGERRED.
- *
- * METHOD DECREMENT READ-SS-COUNT IN *AVST*.
- * FOR EACH VCB ENTRY IN THE VCB DATA BLOCK, IF IT MATCHES
- * A GIVEN SET OF VALUES, AN ENTRY IS MADE INTO *VCBSSQ*,
- * AND IF SEARCH FOR A SINGLE ENTRY, THEN WE ARE DONE.
- * IF READ-SS-COUNT EQUAL ZERO (NO READ BLOCKS OUTSTANDING)
- * INCREMENT INTERRUPT *INVPSR* TO TRIGGER *NVFVPSR*.
- #
- #
- **** PROC NVFVFSD XREF LIST
- #
- XREF
- BEGIN
- PROC NVFURDS; # REQUEST VCB DATA STATUS #
- PROC SSTAQE; # SS- ACCEPT A QUEUE ENTRY #
- END
- #
- ****
- #
- ITEM DONE B; # LOOP EXIT VARIABLE #
- ITEM I I; # LOOP INDUCTION VARIABLE #
- ITEM STATIS B; # STATUS OF DATA IN VCB ENTRY #
- ITEM VALUE U; # VALUE OF WORDP-TH WORD IN VCB ENTRY #
- ITEM AORD U; # AST ORDINAL OF AST ENTRY #
- #
- ** TVENTRY - TEMPLATE FOR A VCB ENTRY IN A WORD ADDRESSABLE BASE.
- *
- * TVENTRY IS A BASED ARRAY FOR A VCB ENTRY THAT CAN BE ADDRESSED
- * IN A SINGLE WORD BASE.
- #
- BASED ARRAY TVENTRY[01:VBESIZ$] S(1);
- BEGIN
- ITEM TVE$WORD U(00,00,60); # FULL WORD REFERENCE #
- END
- CONTROL EJECT;
- WCB$WORD[0] = 0; # CLEAR WC WORD 0 #
- WCB$WC[0] = VSSQSIZ$ + 2; # PRESET COUNT TO VCBSSQ ENTRY SIZE #
- ABH$WORD[0] = 0; # CLEAR ABH WORD 0 (IT IS IMMATERIAL) #
- FOR I = 0 STEP 1 UNTIL NMSGBUF$/2
- DO
- BEGIN # CLEAR FIRST HALF OF MSGBUF #
- MSG$WORD[I] = 0;
- END
- P<TVCBSSQ> = LOC(MSGBUF[0]); # PT VCB SS DATA TEMPLATE AT MSGBUF#
- AVS$RSSCNT[0] = AVS$RSSCNT[0] - 1; # DECREMENT READ SS CNT #
- IF NOT ((AVS$MTCHF[0] AND AVS$SGLEF[0]) OR ABORTCMDF)
- THEN
- BEGIN # NOT DONE SEARCH AND NO ABORT, FILTER BLK#
- DONE = FALSE;
- FOR I = 1 STEP 1 WHILE (I LQ VBMXENTRY$)
- AND (NOT DONE)
- DO
- BEGIN # LOOP TIL ALL ENTRIES FILTERED OR DONE #
- P<TVENTRY> = LOC(VCBWSA[I]); # SET PTR TO THIS I-TH ENTRY #
- P<VCBBUF> = LOC(VCBWSA[I]);
- NVFURDS(VCB$VCB[0],STATIS); # DETERMINE STATUS OF DATA #
- IF NOT STATIS
- THEN # IF VCB DATA IS O.K. #
- BEGIN
- VALUE = TVE$WORD[AVS$WORDP[0]+1];#EXTRACT WD CONTAINS VALUE#
- VALUE = VALUE LAN AVS$MASK[0]; # MASK OFF VALUE #
- IF VALUE EQ AVS$VALUE[0]
- THEN
- BEGIN # ENTRY MATCH ON WHAT-S REQUESTED #
- AVS$MTCHF[0] = TRUE; # SET MATCH FLAG IN AVST #
- P<VCBBUF> = LOC(VCBWSA[I]);# SET VCB ENTRY PTR #
- TSS$TN[0] = VCB$TN[0]; # BUILD VCBSSQ ENTRY #
- TSS$DT[0] = VCB$DT[0];
- TSS$SWAPAN[0] = VCB$SWAPAN[0];
- TSS$UWORD[0] = VCB$UWORD[0];
- TSS$LTIME[0] = VCB$CTIME[0];
- TSS$CATIME[0] = VCB$STIME[0];
- TSS$AACN[0] = VCB$AACN[0];
- #
- * USING THE APPLICATION NUMBER, LOCATE AST ENTRY FOR NAME.
- #
- FOR AORD=0 STEP 1 WHILE
- ((AORD LS (ASTLNGTH/ASTSIZ$)) AND
- (TSS$SWAPAN[0] NQ AST$AN[AORD]))
- DO
- BEGIN
- END
- TSS$SWAPNM[0] = AST$PANAM[AORD];
- SSTAQE(P<VCBSSQ>,WCBUF[0],ABHBUF[0],MSGBUF[0]);
- IF AVS$SGLEF[0]
- THEN
- BEGIN
- DONE = TRUE; # SINGLE ENTRY AND MATCH, DONE #
- END
- END
- END
- END
- END
- #
- * HERE IF 1) DONE SERIAL SEARCH, OF
- * 2) ABORT (HOP/BRK OR HOP/END), OR
- * 3) DONE FILTER A DATA BLOCK.
- #
- IF AVS$RSSCNT[0] EQ 0
- THEN
- BEGIN # NO READ BLOCKS OUTSTANDING #
- INVPSR = INVPSR + 1; # INCREMENT INTERRUPT TO TRIGGER *NVFVPSR*#
- END
- END # NVFVFSD #
- TERM
cdc/nos2.source/nam5871/nvfvfsd.txt ยท Last modified: 2023/08/05 17:23 by Site Administrator