*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
