*DECK NPESTOF USETEXT NIPDEF USETEXT BACKBUF USETEXT CET USETEXT NBT USETEXT PIT USETEXT PT USETEXT PARAMP USETEXT KDIS USETEXT NHEADER USETEXT DRHDR USETEXT KSTTAB PRGM NPESTOF; STARTIMS; # *1DC NPESTOF * * * 1. PROC NAME AUTHOR DATE * NPESTOF C. BITTNER 82/06/18 * * 2. FUNCTIONAL DESCRIPTION * PROCESS EST/OFF * * 3. METHOD USED * UPDATE NUMBER OF ON AND OFF ENTRIES IN CET * UPDATE NUMBER OF ACTIVE AND FREE ENTRIES IN NBT * CLEAR NBTE ENTRY IN PIT * * 4. ENTRY PARAMETERS * PARAMP1 - SM BUFFER (EST/OFF) * * 5. EXIT PARAMETERS * PARAMP2 - IF NON-ZERO THEN BAD BLOCK * * 6. SYMPL TEXTS USED * BACKBUF SPECIAL BUFFER FOR DOWNLINE BACKS * NIPDEF CET * NBT PIT * PT PARAMP * KDIS * NHEADER DRHDR * * 7. ROUTINES CALLED * KDEL - UPDATE K-DISPLAY * XTRACE - TRACE PROCEDURE CALL * MRELS - RELEASE BUFFER * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION * THIS PROGRAM IS CALLED BY NPNIPSM * W A R N I N G - THIS PROGRAM CANNOT EXCEED THE PRIMARY *CALL OPSIZE * # STOPIMS; # PARAMP1 - SM BUFFER (EST/OFF) EXIT PARAMETER PARAMP2 - IF NON-ZERO THEN BAD BLK # # EXTERNAL VARIABLES # XREF BEGIN PROC BLDKWL; # FORMAT KWL TO DELETE EST ENTRY FROM ST # PROC XTRACE; # TRACE PROCEDURE CALL # PROC MRELS ; LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL # END # INTERNAL VARIABLES # ITEM NBTIND; # CURRENT INDEX INTO NBT INPUT FET # ITEM PITIND; # CURRENT INDEX INTO PIT # ITEM FOUND B; # CET ENTRY FOUND FLAG # ITEM IDXCET; # CET ENTRY INDEX # ITEM PIPNO; # PIP NUMBER TO MATCH # ITEM I; # LOOP VARIABLE # ITEM TEMP ; # LOOP VARIABLE # BASED ARRAY PITNBTW S(1); # TEMPLATE FOR NBT ENTRY WD IN PIT # BEGIN ITEM PITNBTWH B(00,00,01); # HALT NPU FLAG # ITEM PITNBTWE U(00,30,06); # NBT TABLE ENTRY INDEX # ITEM PITNBTWA I(00,42,18); # NBT ENTRY ADDRESS # END #**********************************************************************# BEGIN CONTROL IFEQ DEBUG,1; XTRACE("ESTOF"); CONTROL FI; P = PARAMP1 + BLKHSIZE; FOUND = FALSE; FOR I = 0 STEP NBTFETNO WHILE NOT FOUND AND I LQ NBTMAXID DO # SEARCH NBT FOR MATCHING COUPLER NODE # BEGIN IF NBTIUF[I] AND NBTHN[I] EQ DN[0] THEN BEGIN # FOUND NBT ENTRY # FOUND = TRUE; NBTIND = I; # SAVE NBT INDEX # END END IF FOUND THEN BEGIN # NBT FOUND # # UPDATE CET # FOUND = FALSE; FOR IDXCET = CETHSIZE WHILE NOT FOUND AND IDXCET LS CETBS[0] DO BEGIN IF CETEST[IDXCET] EQ NBTEST[NBTIND] THEN FOUND = TRUE; ELSE IDXCET = IDXCET + 1; END IF FOUND AND NOT CETOFF[IDXCET] THEN BEGIN # CET ENTRY FOUND # CETNON[0] = CETNON[0] - 1; # DECREM NO. OF ON ENTRIES # CETNOFF[0] = CETNOFF[0] + 1; # INCREM NO. OF OFF ENTRIES # # CORRECT CET ENTRY WAS FOUND # CETOFF[IDXCET] = TRUE; # SET OFF COUPLER FLAG # PIPNO = CETPIP[IDXCET]; # UPDATE NBT # NBTNAE[0] = NBTNAE[0] - 1; # UPDATE NO. ACTIVE ENTRIES # NBTNFE[0] = NBTNFE[0] + 1; # UPDATE NO. FREE ENTRIES # # RELEASE ACTIVE INBOUND BUFFER(S) ASSOCIATED WITH THE OFF NPU ENTRY # FOR I=NBTIND STEP 1 UNTIL NBTIND+1 DO BEGIN IF NBTBFS[I] # BUFFER AVAILABLE OR ACTIVE OR RELEASABLE # AND NBTOUT[I] NQ 0 # INBOUND BUFFER EXISTS # THEN # RELEASE THE INBOUND BUFFER # BEGIN P = NBTOUT[I]; NBTBFS[I] = FALSE; # CLEAR ACTIVE BUFFER FLAGS # IF P EQ PARAMP1 THEN # CURRENT INBOUND BUFFER, CANNOT RELEASE EST/OFF # BEGIN # FAKE IN=OUT TO TERMINATE NEIB PROCESSING # NBTIN[I] = P + BLKBS[0]; NBTBRF[I] = TRUE; # SET BUFFER RELEASE FLAG # END ELSE BEGIN # RELEASE INBOUND BUFFER # BLKBS[0] = NBTLIMIT[I] - P; # BUFFER SIZE # MRELS(P); # RELEASE BUFFER # NBTIN[I] = NBTLIMIT[I]; NBTOUT[I] = NBTLIMIT[I]; END END END # RELEASE ALL DOWN LINE MESSAGES (ALWAYS AT LEAST ONE) # FOR I = NBTIND+2 STEP 1 UNTIL NBTIND+4 DO BEGIN P = NBTFIRST[I]; FOR TEMP = TEMP WHILE P NQ 0 # WE DID NOT PASS # DO BEGIN TEMP = NEXTPTR[0] ; # NEXT DOWN-LINE MESSAGE # IF (P LS BACKBLWA) AND (P GQ BACKBFWA) THEN # THIS IS BACK ENTRY IN BACK BUFFER # BEGIN P = P - 1; # 1ST WD OF BCK BUF ENTRY# CMWORD[0] = BACKFFREE; # PTR TO NEXT FREE ENTRY # BACKFFREE = P; # NEW FIRST FREE ENTRY # END ELSE # THIS IS REGULAR DYNAMIC BUFFER # BEGIN MRELS(P); # RELEASE BUFFER # END P = TEMP ; END NBTFIRST[I] = 0 ; NBTIN [I] = 0 ; NBTOUT [I] = 0 ; END # RELEASE PIP TRACE BUFFER IF ONE EXISTS # I=NBTIND+5; # PIP TRACE FET INDEX # IF NBTFIRST[I] NQ 0 THEN # PIP TRACE BUFFER EXISTS # BEGIN MRELS(NBTFIRST[I]-BLKHSIZE); NBTWD1[I] = 0; # CLEAR TRACE NBT BUFFER INCLUDING FLAGS # NBTWD2[I] = 0; NBTWD3[I] = 0; NBTWD4[I] = 0; END IF KDST[0] THEN # STATUS DISPLAY ON, DELETE EST ENTRY FROM DISPLAY # BLDKWL(KST"EST",NBTKNDX[NBTIND],0,KDELIDVALUE); # UPDATE PIT ENTRY # P = LOC(PITNBTE1[PIPNO]); # ADR OF 1ST NBTE ENTRY # FOR I = 0 STEP 1 UNTIL MAXNPU-1 DO # CHECK ALL NBTE SLOTS IN PIT ENTRY # BEGIN IF PITNBTWE[I] EQ (NBTINDX[NBTIND] + 1) THEN # FOUND NBTE ENTRY # BEGIN PITNBTWH[I] = FALSE; # CLEAR HALT NPU FLAG # PITNBTWE[I] = 0; # CLEAR NBT TABLE ENTRY INDEX # PITNBTWA[I] = 0; # CLEAR NBT TABLE ENTRY ADDRESS # END END END NBTIUF[NBTIND] = FALSE; # CLEAR NBT IN USE FLAG # END GOTO RJMAIN; END TERM