*DECK MSETPTR
USETEXT NIPDEF
USETEXT PIT
USETEXT PRUBUFF
PRGM MSETPTR; # SET BACKWARD PTRS IN PRU CHAIN#
STARTIMS;
#
*1DC MSETPTR
*
* 1. PROC NAME AUTHOR DATE
* MSETPTR E. GEE 85/04/02
*
* 2. FUNCTIONAL DESCRIPTION
* SET UP BACKWARD POINTERS IN THE PRU BUFFERS FOR GARBAGE
* COLLECTION.
*
* 3. METHOD USED
* CALL MSETIL TO SET NIP/PIP INTERLOCK.
* LOOP TO PROCESS EACH PIT ENTRY.
* IF PIT ENTRY IN USE,
* LOOP TO PROCESS EACH PRU BUFFER SIZE,
* IF PRU BUFFERS EXISTS,
* SET UP BACKWARD POINTERS IN THE PRU BUFFER.
*
* 4. ENTRY PARAMETERS
* NONE
*
* 5. EXIT PARAMETERS
* NONE
*
* 6. COMDECKS CALLED
* NIPDEF NIP CONSTANT DEFINITIONS
* PIT PIP INTERFACE TABLE
* PRUBUFF PRU BUFFER TEMPLATE
*
* 7. ROUTINES AND OVERLAYS CALLED
* MSETIL SET NIP/PIP INTERLOCK
* XTRACE TRACE CALLS
*
* 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION
*
* 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
* OVERLAY BUFFER SIZE MINUS 5 (560B WORDS).
*
* THIS OVERLAY IS CALLED BY XEXEC.
*
#
STOPIMS;
XREF
BEGIN
PROC MSETIL; # SET NIP/PIP INTERLOCK #
PROC XTRACE; # RECORD TRACES #
LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL #
END
#
INTERNAL VARIABLES
#
ITEM I; # INDUCTION VARIABLE #
ITEM J; # INDUCTION VARIABLE #
ITEM BACKPRU; # ADDR OF PREV PRU BUF IN CHAIN #
ITEM PITIDX; # PIT ENTRY INDEX #
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 MSETPTR #
CONTROL IFEQ DEBUG,1;
XTRACE("MSETP");
CONTROL FI;
MSETIL(0); # SET NIP/PIP INTERLOCK #
FOR I = 1 STEP 1 UNTIL MAXPIP
DO # PROCESS EACH PIT ENTRY #
BEGIN
IF PITPUF[I]
THEN # PIT ENTRY IS IN USE #
BEGIN
P<PRUNIPWD> = LOC(PITFPB1[I]); # ADDR OF PRU BUF POINTER WORD#
FOR J = 0 STEP 1 UNTIL MAXPRU-1
DO # PROCESS EACH PRU BUFFER SIZE #
BEGIN
BACKPRU = LOC(PRUNIPFPB[J]); # ADDR OF PTR WORD IN PIT ENT#
P<PRUBUFF> = PRUNIPFPB[J]; # ADDR OF 1ST PRU BUF IN CHAIN #
FOR J=J WHILE P<PRUBUFF> NQ 0
DO # PROCESS EACH PRU BUF IN CHAIN #
BEGIN
PRUBBACK[0] = BACKPRU; # SET UP BACKWARD CHAIN PTR #
BACKPRU = P<PRUBUFF>; # ADDR OF THIS PRU BUFFER #
P<PRUBUFF> = PRUBDLFP[0]; # ADDR OF 1ST PRU BUF IN CHAIN#
END
END
END
END
GOTO RJMAIN; # RETURN TO CALLING PROGRAM #
END
TERM