*DECK CSCPNQ
USETEXT TEXTCS
USETEXT TXTAPSS
PROC CSCPNQ ((NACN), MSGFLAG);
# TITLE CSCPNQ - PURGE NOP QUEUE. #
BEGIN # CSCPNQ #
#
** CSCPNQ - PURGE NOP QUEUE.
*
* D. G. DEPEW. 82/05/28.
*
* THIS PROCEDURE DELETES ALL WAITING BLOCK QUEUE (*WBQ*) ENTRIES
* FOR THE SPECIFIED NOP (IF THERE ARE ANY).
*
* PROC CSCPNQ (NACN, MSGFLAG)
*
* ENTRY 1. NACN = ACN FOR THE NOP IN QUESTION.
* (THIS IS ALSO THE ORDINAL OF THE ACN LIST ENTRY
* FOR THIS NOP. THE ACN LIST ENTRY CONTAINS ALL
* REQUIRED INFORMATION - NAMELY, THE COUNT OF
* *WBQ* ENTRIES.)
* 2. THE *WBQ* CONTAINS ZERO OR MORE ENTRIES FOR THE GIVEN
* NOP.
*
* EXIT 1. ALL *WBQ* ENTRIES FOR THIS NOP HAVE BEEN DELETED.
* 2. THE COUNT OF *WBQ* ENTRIES IN THE ACN LIST ENTRY FOR
* THE GIVEN NOP HAS BEEN CLEARED.
* 3. MSGFLAG = TRUE, IF AN *MSG* BLOCK WAS QUEUED.
* = FALSE, IF ONLY *BLK* OR NO BLOCKS WERE
* QUEUED.
#
#
**** PROC CSCPNQ - XREF LIST.
#
XREF
PROC SSTRTS; # REMOVE TABLE SPACE #
#
****
#
ITEM NACN; # NOP"S ACN #
ITEM MSGFLAG B; # RETURN PARAMETER, TRUE=MSG, FALSE=BLK #
ITEM I, J; # LOOP INDUCTION VARIABLES AND ORDINALS #
#
* DELETE THE ENTRIES. IN ORDER TO DELETE AN ENTRY, WE MUST FIRST
* LOCATE IT. CLEAR THE WAITING BLOCK COUNT IN THE ACN LIST ENTRY.
#
MSGFLAG = FALSE;
J = 0;
FOR I=1 STEP 1 UNTIL ACN$WBCNT[NACN]
DO # FIND AND DEL NOP'S *WBQ* NTRYS, ZERO OK #
BEGIN
FOR J=J STEP WBQ$ESIZE[J]
WHILE WBQ$ABHACN[J] NQ NACN
DO # FIND NOP"S *WBQ* ENTRY #
BEGIN END
IF WBQ$ABT[J] EQ APMSG
THEN
MSGFLAG = TRUE;
SSTRTS (P<WBQ>, J, WBQ$ESIZE[J]); # DELETE WAITING BLOCK #
END
ACN$WBCNT[NACN] = 0; # UPDATE ACN LIST ENTRY #
END # CSCPNQ #
TERM