*DECK NRPWL
USETEXT NIPDEF
USETEXT OVERLAY
USETEXT PARAMP
USETEXT PCNB
USETEXT PWL
PRGM NRPWL; # RELEASE A PROCESSED WORKLIST #
STARTIMS;
#
*1DC NRPWL
*
* 1. PROC NAME AUTHOR DATE
* NRPWL J.C. LEE 80/04/01
*
* 2. FUNCTIONAL DESCRIPTION.
* RELEASE A PROCESSED PRU WORKLIST
*
* 3. METHOD USED
* CHECK IF THE SPECIFIED WORKLIST PRIORITY LEVEL IS VALID
* CHECK IF CURRENT WORKLIST HAS BEEN PROCESSED BY PIP
* RELEASE CURRENT PRU WORKLIST QUEUED TO QCB
* CLEAR PWL-PROCESSED BIT IN QCB
* RELEASE PRU WORKLIST IN INBOUND BUFFER
*
* 4. ENTRY PARAMETERS.
* PARAMP1 PWL ADDRESS
* PARAMP2 PRU-QCB ADDRESS
*
* 5. EXIT PARAMETERS.
* PARAMP4 NONZERO IF WORKLIST RELEASE REQUEST IS BAD
*
* 6. COMDECKS CALLED AND SYMPL TEXTS USED.
* NIPDEF OPSIZE PARAMP
* PCNB PWL
*
* 7. ROUTINES AND OVERLAYS CALLED.
* MRELS RELEASE BUFFER
* XTRACE TRACE CALLS
*
* 8. DAYFILE MESSAGES.
* NONE
*
* THIS PROGRAM IS A PRIMARY OVERLAY LOADED BY SUBROUTINE OVLCALL.
* WHEN EXECUTION HAS COMPLETED, A JUMP IS MADE TO LOCATION RJMAIN
* TO RETURN TO THE CALLING PROGRAM.
*
* W A R N I N G - THIS PROGRAM CANNOT EXCEED THE PRIMARY
*CALL OPSIZE
*
* THIS OVERLAY IS CALLED BY NPPWL.
*
#
STOPIMS;
#
EXTERNAL VARIABLES
#
XREF
BEGIN
PROC MRELS; # RELEASE BUFFER #
PROC XTRACE; # TRACE CALLS #
LABEL RJMAIN; # RETURN ADDRESS #
END
#
LOCAL VARIABLES
#
ITEM PWLADDR; # PWL ADDRESS #
ITEM WLPRI; # WORKLIST PRIORITY LEVEL #
BASED ARRAY PWLQWORD P(1);
BEGIN
ITEM PWLQDONE B(0,0,1); # WORKLIST PROCESSED BIT #
ITEM PWLQNEXT I(0,42,AL); # NEXT WORKLIST ADDRESS #
END
# ******************************************************************** #
BEGIN
CONTROL IFEQ DEBUG,1;
XTRACE("NRPWL") ;
CONTROL FI;
PWLADDR = PARAMP1; # PWL ADDRESS #
P<PWLHDR> = PWLADDR; # PWL ADDRESS IN INBOUND BUFFER #
P<PCNB> = PARAMP2; # PCNB ADDRESS #
WLPRI = PWLPRI[0]; # WORKLIST PRIORITY LEVEL #
#
CHECK IF A VALID WORKLIST PRIORITY LEVEL
#
IF WLPRI GR CMDQP
THEN # ILLEGAL WORKLIST PRIORITY LEV #
BEGIN
PARAMP4 = DMCBPL; # BAD PRIORITY LEVEL IN REL REQ #
END
ELSE # VALID WORKLIST PRIORITY #
BEGIN
P<PWLQWORD> = LOC(PCNBIMMO[0]) + WLPRI;
IF NOT PWLQDONE[0] OR # CURRENT PWL NOT PROCESSED #
PWLQNEXT[0] EQ 0 # NO WORKLIST EXISTS #
THEN # ILLEGAL REQUEST FROM PIP #
BEGIN
PARAMP4 = DMCBRR; # UNEXPECTED WRKLST RELEASE REQ #
END
ELSE # RELEASE PROCESSED WORKLIST #
BEGIN
P<PWLHDR> = PWLQNEXT[0]; # ADDRESS OF PWL TO RELEASE #
PWLQNEXT[0] = PWLNEXT[0]; # UPDATE PWL QUEUE PTR IN PQCB #
MRELS(P<PWLHDR>); # RELEASE CURRENT WORKLIST #
IF WLPRI NQ IMMQP
THEN # NOT RELEASING IMMQ PWL #
PWLQDONE[0] = FALSE; # CLEAR PWL PROCESSED BIT #
PARAMP3 = 0 ;
END
END
GOTO RJMAIN;
END
TERM