*DECK NTOTBTS
USETEXT NIPDEF
USETEXT AHEADER
USETEXT NHEADER
USETEXT PARAMP
USETEXT PT
USETEXT MSGIDX
USETEXT AT
USETEXT DRHDR
USETEXT ACB
USETEXT SUPMSG
PRGM NTOTBTS;
#
*1DC NTOTBTS
*
* 1. PROC NAME AUTHOR DATE
* NTOTBTS C. BITTNER 82/09/01
*
* 2. FUNCTIONAL DESCRIPTION
* PROCESS TIMEOUT BOOTSTRAP MESSAGE
*
* 3. METHOD USED
* SEND MESSAGE TO DAYFILE
* DISCARD DUMP/LOAD MESSAGES QUEUED FOR NS.
*
* 4. ENTRY PARAMETERS
* NONE
*
* 5. EXIT PARAMETERS
* NONE
*
* 6. COMDECKS CALLED AND SYMPL TEXTS USED
* NIPDEF PT MSGIDX
* AT DRHDR ACB
* SUPMSG
*
* 7. ROUTINES CALLED
* OMSG - ISSUE DAYFILE MESSAGE
* MRELS - RELEASE BUFFER
* XTRACE - TRACE PROCEDURE CALL
*
* 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION
* "NS NOT RESPONDING TO NPU INIT REQUEST"
* THIS IS A PRIMARY OVERLAY CALLED BY NPNIPSM.
* W A R N I N G - THIS PROGRAM CANNOT EXCEED THE PRIMARY
*CALL OPSIZE
#
#
EXTERNAL VARIABLES
#
XREF
BEGIN
PROC OMSG; # DAYFILE MESSAGE #
PROC MRELS; # RELEASE BUFFER #
PROC XTRACE; # TRACE PROCEDURE CALL #
LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL #
END
#
INTERNAL VARIABLES
#
ITEM CURR; # TEMPORARY VARIABLE #
ITEM NEXT;
ITEM PREVIOUS;
BEGIN
CONTROL IFEQ DEBUG,1;
XTRACE("TOTBT");
CONTROL FI;
OMSG(DFMSG17,0); # NS NOT RESPONDING TO NPU INIT REQ #
IF PROCAN[NSORD] NQ 0
THEN
BEGIN
P<ACB> = ATACBA[PROCAN[NSORD]];
IF P<ACB> NQ 0
THEN # ACB EXISTS FOR NS #
BEGIN # DISCARD DATA ON ACB #
P<DRHDRWD> = 0;
P<NHEADER> = PARAMP1; # FWA OF NETWORK HEADER FOR TOT/BS/R #
CURR = ACBDRFP[0]; # FIRST ENTRY #
FOR CURR = CURR WHILE CURR NQ 0
AND CURR NQ LOC(ACBDRFP[0])
DO
BEGIN
NEXT = NEXTPTR[CURR];
PREVIOUS = BACKPTR[CURR];
P<AHEADER> = CURR + BLKHSIZE; # FWA OF ABH #
P<SUPMSG> = P<AHEADER> + ABHSIZE;
IF PFCSFC[0] EQ NPUIN
AND DN[0] EQ ABHDN[0]
THEN # DISCARD NPU/IN/R QUEUED FOR THIS HOST NODE #
BEGIN # DISCARD MESSAGE #
IF PREVIOUS EQ LOC(ACBDRFP[0])
THEN
BEGIN # CURR IS FIRST ENTRY IN RING #
IF NEXT EQ LOC(ACBDRFP[0])
THEN
BEGIN # LAST AND ONLY ENTRY IN RING #
ACBDRFP[0] = 0;
ACBDRBP[0] = 0;
END
ELSE
BEGIN
ACBDRFP[0] = NEXT;
BACKPTR[NEXT] = PREVIOUS;
END
END
ELSE
BEGIN # CURR IS NOT FIRST ENTRY IN RING #
IF NEXT EQ LOC(ACBDRFP[0])
THEN
BEGIN # CURR IS LAST ENTRY #
ACBDRBP[0] = PREVIOUS;
NEXTPTR[PREVIOUS] = NEXT;
END
ELSE
BEGIN # CURR IS NOT LAST ENTRY #
NEXTPTR[PREVIOUS] = NEXT;
BACKPTR[NEXT] = PREVIOUS;
END
END
MRELS(CURR);
END
CURR = NEXT;
END
END
END
GOTO RJMAIN; # RETURN TO CALLING PROGRAM #
END
TERM