*DECK NPRLB
USETEXT NIPDEF
USETEXT PARAMS
USETEXT PIT
USETEXT PRUBUFF
PRGM NPRLB;
STARTIMS ;
#
*1DC
* 1. PROC NAME AUTHOR DATE
* NPRLB E. GEE 85/05/04
*
* 2. FUNCTIONAL DISCRIPTION.
* RELEASE ALL FREE PRU BUFFERS BELONGING TO A PARTICULAR PIP
* AND OF A PARTICULAR SIZE.
*
* 3. METHOD USED.
* LOOP THROUGH PRU BUFFER FREE CHAIN RELEASING EACH PRU
* BUFFER.
*
* 4. INPUT PARAMS.
* PARAMS1 PRU BUFFER SIZE
* PARAMS2 PIT ENTRY INDEX
*
* 5. EXIT PARAMS.
* NONE.
*
* 6. COMMON DECKS AND SYMPL TEXTS USED.
* NIPDEF CONSTANT DEFINITIONS
* PARAMS BUFFER FOR PASSING PARAMS TO PRIMARY OVLS
* PIT PIP INTERFACE TABLE TEMPLATE
* PRUBUFF PRU BUFFER TEMPLATE
*
* 7. ROUTINES CALLED:
* ABORT ABORT NIP
* MRELS RETURN BUFFER TO FREE CHAIN
* OMSG ISSUE DAYFILE MESSAGE
* XTRACE TRACE PROCEDURE CALL.
*
* 8. DAYFILE MESSAGES OR OTHER IMPORTANT INFORMATION.
*
* * NPRLB - PRU BUFFERS NOT IN CHAIN. *
*
* THIS PROGRAM IS A SECONDARY 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 SECONDARY
* OVERLAY BUFFER SIZE MINUS 5 (360B WORDS).
*
* THIS OVERLAY IS CALLED BY XCHKCET.
#
STOPIMS;
XREF
BEGIN
PROC ABORT; # ABORT NIP #
PROC MRELS; # RETURN BUFFER #
PROC OMSG; # ISSUE DAYFILE MESSAGE #
PROC XTRACE; # TRACE PROCEDURE CALL #
LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL #
END
#
INTERNAL VARIABLES
#
ITEM I; # INDUCTION VARIABLE #
ITEM TEMP1; # ADDR OF NEXT PRU BUF IN CHAIN #
ARRAY ABTMSG S(4); # ABORT NIP DAYFILE MESSAGE #
BEGIN
ITEM ABTMSG1 C(0,00,34)=[" NPRLB - PRU BUFFERS NOT IN CHAIN."];
ITEM ABTMSGE U(3,24,36)=[0];
END
BASED ARRAY PRUNIPWD S(1); # TEMPLATE FOR NIP WORD IN PIT #
BEGIN
ITEM PRUNIPMFB U(0,00,06); # MINIMUM NO OF PRU BUFS #
ITEM PRUNIPMAB U(0,06,06); # MAXIMUM NO OF PRU BUFS #
ITEM PRUNIPNCA U(0,12,12); # CURRENT NO OF BUFFERS ASSIGNED#
ITEM PRUNIPNC U(0,24,12); # CURRENT NO OF PRU CONNECTIONS #
ITEM PRUNIPFPB U(0,42,18); # ADR OF FIRST BUF IN FREE CHAIN#
END
#**********************************************************************#
CONTROL EJECT;
BEGIN # BEGIN NPRLB #
CONTROL IFEQ DEBUG,1;
XTRACE("NPRLB");
CONTROL FI;
P<PRUNIPWD> = LOC(PITW5[PARAMS2]) - 1;
#
RELEASE ALL BUFFERS OF SIZE PARAMS1 AND LARGER
#
FOR I = PARAMS1 STEP 1 UNTIL MAXPRU
DO # RELEASE ALL PRU BUFS IN CHAIN #
BEGIN
P<PRUBUFF> = PRUNIPFPB[I]; # FIRST BUFFER IN CHAIN #
TEMP1 = PRUBDLFP[0]; # ADDR OF NEXT BUFFER IN CHAIN #
#
RELEASE ALL BUFFERS IN FREE CHAIN
#
FOR I=I WHILE P<PRUBUFF> NQ 0
DO # RELEASE UNTIL END OF CHAIN #
BEGIN
MRELS(P<PRUBUFF>); # RELEASE THIS BUFFER #
PRUNIPNCA[I] = PRUNIPNCA[I] - 1; # DECRE NO OF PRU BUFFERS #
P<PRUBUFF> = TEMP1; # ADDR OF NEXT BUFFER IN CHAIN #
TEMP1 = PRUBDLFP[0]; # ADDR OF NEW NEXT BUF IN CHAIN #
END
IF PRUNIPNCA[I] EQ 0
THEN # RELEASED LAST BUFFER #
BEGIN
PRUNIPFPB[I] = 0; # CLEAR BUFFER POINTER #
END
ELSE # NOT ALL PRU BUFFERS IN CHAIN #
BEGIN
OMSG(ABTMSG,0); # ISSUE DAYFILE MESSAGE #
ABORT(0,0); # ABORT NIP #
END
END
GOTO RJMAIN; # RETURN TO CALLING PROGRAM #
END # END NPRLB #
TERM