User Tools

Site Tools


cdc:nos2.source:nam5871:nvfvfsd

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
  1. *DECK NVFVFSD
  2. USETEXT TEXTNVF
  3. USETEXT TEXTSS
  4. USETEXT TXTANVF
  5. USETEXT TXVCBNV
  6. PROC NVFVFSD;
  7. # TITLE NVFVFSD - FILTER SERIAL-SEARCH DATA BLOCK. #
  8.  
  9. BEGIN # NVFVFSD #
  10. #
  11. ** NVFVFSD - FILTER SERIAL-SEARCH DATA BLOCK.
  12. *
  13. * A. LIM. 82/04/21.
  14. * C. BRION 83/05/10.
  15. *
  16. * THIS PROCEDURE-S MAIN FUNCTION IS TO FILTER THE DATA BLOCK
  17. * (RETURNING FROM READING THE VCB FILE) ACCORDING TO A GIVEN
  18. * SET OF VALUES IN ACTIVE-VCB-SERIAL-SEARCH TABLE *AVST*.
  19. * IT IS CALLED INTO EXECTION BY: *NVFVDCD*
  20. *
  21. * ENTRY VCB DATA BLOCK IN *VCBWSA* DEFINED IN *TXVCBNV*.
  22. * THE ORIGINAL VCB SERIAL-SEARCH REQUEST WITH ADDITIONAL
  23. * INFORMATIONS IN *AVST*.
  24. *
  25. * EXIT VCB DATA BLOCK FILTERED AND ENTRY(IES) MADE INTO VCB
  26. * SERIAL-SEARCH DATA QUEUE *VCBSSQ*.
  27. * VARIOUS FLAGS AND COUNT IN *AVST* GET UPDATED.
  28. * IF NO MORE READ BLOCKS OUTSTANDING, INTERRUPT
  29. * CELL FOR *NVFVPSR* TRIGGERRED.
  30. *
  31. * METHOD DECREMENT READ-SS-COUNT IN *AVST*.
  32. * FOR EACH VCB ENTRY IN THE VCB DATA BLOCK, IF IT MATCHES
  33. * A GIVEN SET OF VALUES, AN ENTRY IS MADE INTO *VCBSSQ*,
  34. * AND IF SEARCH FOR A SINGLE ENTRY, THEN WE ARE DONE.
  35. * IF READ-SS-COUNT EQUAL ZERO (NO READ BLOCKS OUTSTANDING)
  36. * INCREMENT INTERRUPT *INVPSR* TO TRIGGER *NVFVPSR*.
  37. #
  38.  
  39.  
  40. #
  41. **** PROC NVFVFSD XREF LIST
  42. #
  43. XREF
  44. BEGIN
  45. PROC NVFURDS; # REQUEST VCB DATA STATUS #
  46. PROC SSTAQE; # SS- ACCEPT A QUEUE ENTRY #
  47. END
  48. #
  49. ****
  50. #
  51.  
  52.  
  53. ITEM DONE B; # LOOP EXIT VARIABLE #
  54. ITEM I I; # LOOP INDUCTION VARIABLE #
  55. ITEM STATIS B; # STATUS OF DATA IN VCB ENTRY #
  56. ITEM VALUE U; # VALUE OF WORDP-TH WORD IN VCB ENTRY #
  57. ITEM AORD U; # AST ORDINAL OF AST ENTRY #
  58.  
  59.  
  60. #
  61. ** TVENTRY - TEMPLATE FOR A VCB ENTRY IN A WORD ADDRESSABLE BASE.
  62. *
  63. * TVENTRY IS A BASED ARRAY FOR A VCB ENTRY THAT CAN BE ADDRESSED
  64. * IN A SINGLE WORD BASE.
  65. #
  66. BASED ARRAY TVENTRY[01:VBESIZ$] S(1);
  67. BEGIN
  68. ITEM TVE$WORD U(00,00,60); # FULL WORD REFERENCE #
  69. END
  70.  
  71.  
  72. CONTROL EJECT;
  73.  
  74. WCB$WORD[0] = 0; # CLEAR WC WORD 0 #
  75. WCB$WC[0] = VSSQSIZ$ + 2; # PRESET COUNT TO VCBSSQ ENTRY SIZE #
  76. ABH$WORD[0] = 0; # CLEAR ABH WORD 0 (IT IS IMMATERIAL) #
  77. FOR I = 0 STEP 1 UNTIL NMSGBUF$/2
  78. DO
  79. BEGIN # CLEAR FIRST HALF OF MSGBUF #
  80. MSG$WORD[I] = 0;
  81. END
  82. P<TVCBSSQ> = LOC(MSGBUF[0]); # PT VCB SS DATA TEMPLATE AT MSGBUF#
  83. AVS$RSSCNT[0] = AVS$RSSCNT[0] - 1; # DECREMENT READ SS CNT #
  84. IF NOT ((AVS$MTCHF[0] AND AVS$SGLEF[0]) OR ABORTCMDF)
  85. THEN
  86. BEGIN # NOT DONE SEARCH AND NO ABORT, FILTER BLK#
  87. DONE = FALSE;
  88. FOR I = 1 STEP 1 WHILE (I LQ VBMXENTRY$)
  89. AND (NOT DONE)
  90. DO
  91. BEGIN # LOOP TIL ALL ENTRIES FILTERED OR DONE #
  92. P<TVENTRY> = LOC(VCBWSA[I]); # SET PTR TO THIS I-TH ENTRY #
  93. P<VCBBUF> = LOC(VCBWSA[I]);
  94. NVFURDS(VCB$VCB[0],STATIS); # DETERMINE STATUS OF DATA #
  95. IF NOT STATIS
  96. THEN # IF VCB DATA IS O.K. #
  97. BEGIN
  98. VALUE = TVE$WORD[AVS$WORDP[0]+1];#EXTRACT WD CONTAINS VALUE#
  99. VALUE = VALUE LAN AVS$MASK[0]; # MASK OFF VALUE #
  100. IF VALUE EQ AVS$VALUE[0]
  101. THEN
  102. BEGIN # ENTRY MATCH ON WHAT-S REQUESTED #
  103. AVS$MTCHF[0] = TRUE; # SET MATCH FLAG IN AVST #
  104. P<VCBBUF> = LOC(VCBWSA[I]);# SET VCB ENTRY PTR #
  105. TSS$TN[0] = VCB$TN[0]; # BUILD VCBSSQ ENTRY #
  106. TSS$DT[0] = VCB$DT[0];
  107. TSS$SWAPAN[0] = VCB$SWAPAN[0];
  108. TSS$UWORD[0] = VCB$UWORD[0];
  109. TSS$LTIME[0] = VCB$CTIME[0];
  110. TSS$CATIME[0] = VCB$STIME[0];
  111. TSS$AACN[0] = VCB$AACN[0];
  112. #
  113. * USING THE APPLICATION NUMBER, LOCATE AST ENTRY FOR NAME.
  114. #
  115. FOR AORD=0 STEP 1 WHILE
  116. ((AORD LS (ASTLNGTH/ASTSIZ$)) AND
  117. (TSS$SWAPAN[0] NQ AST$AN[AORD]))
  118. DO
  119. BEGIN
  120. END
  121. TSS$SWAPNM[0] = AST$PANAM[AORD];
  122. SSTAQE(P<VCBSSQ>,WCBUF[0],ABHBUF[0],MSGBUF[0]);
  123. IF AVS$SGLEF[0]
  124. THEN
  125. BEGIN
  126. DONE = TRUE; # SINGLE ENTRY AND MATCH, DONE #
  127. END
  128. END
  129. END
  130. END
  131. END
  132.  
  133. #
  134. * HERE IF 1) DONE SERIAL SEARCH, OF
  135. * 2) ABORT (HOP/BRK OR HOP/END), OR
  136. * 3) DONE FILTER A DATA BLOCK.
  137. #
  138.  
  139. IF AVS$RSSCNT[0] EQ 0
  140. THEN
  141. BEGIN # NO READ BLOCKS OUTSTANDING #
  142. INVPSR = INVPSR + 1; # INCREMENT INTERRUPT TO TRIGGER *NVFVPSR*#
  143. END
  144.  
  145. END # NVFVFSD #
  146.  
  147. TERM
cdc/nos2.source/nam5871/nvfvfsd.txt ยท Last modified: 2023/08/05 17:23 by Site Administrator