Google
 

Trailing-Edge - PDP-10 Archives - TOPS-20_V6.1_DECnetSrc_7-23-85 - mcb/xpt/xptsel.lst
There is 1 other file named xptsel.lst in the archive. Click here to see a list.
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page   1
								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (1)

;	  0001	module XPTSEL	(
;	  0002			IDENT = 'X01730'
;	  0003			) =
;	  0004	begin
;	  0005	
;	  0006	!
;	  0007	!                    COPYRIGHT (c) 1980, 1981, 1982
;	  0008	!                    DIGITAL EQUIPMENT CORPORATION
;	  0009	!                        Maynard, Massachusetts
;	  0010	!
;	  0011	!     This software is furnished under a license and may  be  used
;	  0012	!     and copied only in accordance with the terms of such license
;	  0013	!     and with the inclusion of the above copyright notice.   This
;	  0014	!     software  or any other copies thereof may not be provided or
;	  0015	!     otherwise made available to any other person.  No  title  to
;	  0016	!     and ownership of the software is hereby transferred.
;	  0017	!
;	  0018	!     The information  in  this  software  is  subject  to  change
;	  0019	!     without  notice  and should not be construed as a commitment
;	  0020	!     by DIGITAL EQUIPMENT CORPORATION.
;	  0021	!
;	  0022	!     DIGITAL assumes no responsibility for the use or reliability
;	  0023	!     of  its  software  on  equipment  which  is  not supplied by
;	  0024	!     DIGITAL.
;	  0025	!
;	  0026	
;	  0027	!++
;	  0028	! FACILITY:	Transport
;	  0029	!
;	  0030	! ABSTRACT:
;	  0031	!
;	  0032	!	Transport Select module:  Determines what line to send
;	  0033	!	a forwarded message over.  Builds routing headers for
;	  0034	!	the messages.  Calls Forwarding to transmit the messages.
;	  0035	!
;	  0036	! ENVIRONMENT:	MCB
;	  0037	!
;	  0038	! AUTHOR: L. Webber , CREATION DATE:  2-Aug-79
;	  0039	!
;	  0040	! MODIFIED BY:
;	  0041	!
;	  0042	!	L. Webber, 2-Aug-79 : VERSION 01
;	  0043	!
;	  0044	! 1.01	L. Webber, 3-Oct-79
;	  0045	!	Replaced routines SELECTOR and HDR_BUILD, added RCVECL, RCVPH2,
;	  0046	!	BLDPH2, BLDPH3, and INTERCEPT
;	  0047	!
;	  0048	! 1.02	L. Webber, 3-Apr-80
;	  0049	!	Modified to support node and line sub-data-bases
;	  0050	!
;	  0051	! 1.03	L. Webber, 30-Jun-80
;	  0052	!	Modify to use MCBLIB macros
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page   2
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (1)

;	  0053	!
;	  0054	! 1.04	L. Webber, 3-Oct-80
;	  0055	!	Modify to recognize own node name in routing header
;	  0056	!
;	  0057	! 1.05	A. Peckham, 16-Oct-80
;	  0058	!	Do not translate C_LIN in CCB from ECL in RCVECL.
;	  0059	!
;	  0060	! 1.06	A. Peckham, 21-Oct-80
;	  0061	!	Change all CE_ERR returns into SIGNAL_STOPs.
;	  0062	!
;	  0063	! 1.07	A. Peckham, 22-Oct-80
;	  0064	!	Set adjustment factor to zero in BLDPH3 for ECL CCBs.
;	  0065	!
;	  0066	! 1.08	A. Peckham, 22-Oct-80
;	  0067	!	Fix adjustment factor problems once and for all....
;	  0068	!
;	  0069	! 1.09	A. Peckham, 24-Oct-80
;	  0070	!	Change some CE_ERRs back from SIGNAL_STOPs.
;	  0071	!
;	  0072	! 1.10  L. Webber, 31-Oct-80
;	  0073	!	Check source & dest addrs for 0 in RCVECL
;	  0074	!
;	  0075	! 1.11	L. Webber, 20-Nov-80
;	  0076	!	Modify to intercept DI's
;	  0077	!
;	  0078	! 1.12	L. Webber, 11-Dec-80
;	  0079	!	Modify to support MCB 3.1
;	  0080	!
;	  0081	! 1.13	L. Webber, 13-Jan-80
;	  0082	!	Replace "no link" DC with "bad routing header" DC
;	  0083	!
;	  0084	! 1.14	L. Webber, 23-Jan-81
;	  0085	!	Add counter and event-logging code
;	  0086	!
;	  0087	! 1.15	L. Webber, 9-Feb-81
;	  0088	!	Change references to Forwarding routines (ECLFWD, FORWARDER, TERMINATE)
;	  0089	!	to CALL$E
;	  0090	!
;	  0091	! 1.16	L. Webber, 9-Feb-81
;	  0092	!	Change references back (a interface module has been added)
;	  0093	!
;	  0094	! 1.17	L. Webber, 10-Feb-81
;	  0095	!	MAPBUF is now a macro
;	  0096	!
;	  0097	! 1.18	L. Webber, 11-Feb-81
;	  0098	!	Put the local node name in a Phase II routing header when the local
;	  0099	!	node is the source, instead of the number.
;	  0100	!
;	  0101	! 1.19	L. Webber, 20-Feb-81
;	  0102	!	Fix linkage in RCVDAT (C_LIX already translated from LIX)
;	  0103	!
;	  0104	! 1.20	L. Webber, 20-Feb-81
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page   3
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (1)

;	  0105	!	Don't flag a DC which can't be intercepted.
;	  0106	!
;	  0107	! 1.21	L. Webber, 23-Feb-81
;	  0108	!	Make the Event Buffer data an image field.
;	  0109	!
;	  0110	! 1.22	L. Webber, 25-Feb-81
;	  0111	!	Make calls to $CDBV and $CBDMG CALL$E's
;	  0112	!
;	  0113	! 1.23	L. Webber, 3-Mar-81
;	  0114	!	Change code for implementing local routing (ECL-ECL)
;	  0115	! 
;	  0116	! 1.24	L. Webber, 5-Mar-81
;	  0117	!	If a Phase II packet is received with a numeric destination
;	  0118	!	node name, the header is not useable and must be rebuilt if
;	  0119	!	the adjacent node is Phase II.
;	  0120	!
;	  0121	! 1.25	L. Webber, 5-Mar-81
;	  0122	!	Split INTERCEPT into its own XPESEL module.
;	  0123	!
;	  0124	! 1.26	L. Webber, 11-Mar-81
;	  0125	!	Take out "return-to-sender" processing for packets from the
;	  0126	!	ECL; NSP never uses the feature.
;	  0127	!
;	  0128	! 1.27	L. Webber, 12-Mar-81
;	  0129	!	Fix BLDPH2 so that if the source node is adjacent and Phase 2,
;	  0130	!	the ASCII source name is put into the routing header.
;	  0131	!
;	  0132	! 1.28	L. Webber, 16-Mar-81
;	  0133	!	Fix a couple of "cleanup" places so that they UNSPAWN the
;	  0134	!	spawned CCB, instead of just releasing it.
;	  0135	!
;	  0136	! 1.29	L. Webber, 16-Mar-81
;	  0137	!	Modify so that only links where at least one end is Phase II (not
;	  0138	!	II+) are intercepted.
;	  0139	!
;	  0140	! 1.30	L. Webber, 18-Mar-81
;	  0141	!	Fix bug in RCVPH2 that was inspecting the wrong line as the
;	  0142	!	output one.
;	  0143	!
;	  0144	! 1.31	L. Webber, 19-Mar-81
;	  0145	!	Fix the same bug in RCVDAT.
;	  0146	!
;	  0147	! 1.32	L. Webber, 20-Mar-81
;	  0148	!	Fix mistake in header-flag parameter in a call to BLDPH2.
;	  0149	!
;	  0150	! 1.33	L. Webber, 3-Apr-81
;	  0151	!	Put LIX for input line as entity into LOG_EVENT call (except
;	  0152	!	for the Aged Packet Loss event, which takes no entity).
;	  0153	!
;	  0154	! 1.34	L. Webber, 17-Apr-81
;	  0155	!	Fix RCVPH2 to map to input line data base when processing
;	  0156	!	a packet for self.
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page   4
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (1)

;	  0157	!
;	  0158	! 1.35	L. Webber, 1-May-81
;	  0159	!	Make sure no more than 60 bytes goes in the Event Buffer in
;	  0160	!	UNREACH in RCVPH2.
;	  0161	!
;	  0162	! 1.36	L. Webber, 6-May-81	*** TEMPORARY ***
;	  0163	!	Crash when an invalid format message is received from a Phase
;	  0164	!	II node.
;	  0165	!
;	  0166	! 1.37	L. Webber, 6-May-81
;	  0167	!	Set C.LIX (the input channel) to 0 when sending a packet to the
;	  0168	!	local node in RCVECL.
;	  0169	!
;	  0170	! 1.38	L. Webber, 6-May-81	*** TEMPORARY ***
;	  0171	!	Fix PH2HDR to call a mismatch between source name and adjacent
;	  0172	!	node name "unreachable" instead of "format error", so that the
;	  0173	!	event doesn't cause a crash while 1.36 is in.
;	  0174	!
;	  0175	! 1.39	L. Webber, 8-May-81
;	  0176	!	Fix local link code in RCVECL to do an LDBRT on resource failure.
;	  0177	!
;	  0178	! 1.40	L. Webber, 11-May-81
;	  0179	!	Take out 1.36 and 1.38.
;	  0180	!
;	  0181	! 1.41	L. Webber, 1-Jun-81
;	  0182	!	Modify all LOG_EVENT calls for a circuit entity to pass the NMXid.
;	  0183	!
;	  0184	! 1.42	L. Webber, 3-Jun-81
;	  0185	!	Allocate a specific buffer size instead of an SDB.
;	  0186	!
;	  0187	! 1.43	L. Webber, 4-Jun-81
;	  0188	!	Set C_LIN in Select, not Forwarding, when going to the ECL.
;	  0189	!
;	  0190	! 1.44	L. Webber, 25-Jun-81
;	  0191	!	Modify UNREACH subroutine of RCVPH2 to call SEND_DC (in XPESEL)
;	  0192	!	instead of constructing and sending the DC itself.
;	  0193	!
;	  0194	! 1.45	L. Webber, 7-Jul-81
;	  0195	!	Fix RCVDAT to handle congestion by UNSPAWNing before TOSSing.
;	  0196	!
;	  0197	! 1.46	L. Webber, 20-Jul-81
;	  0198	!	Decrement INPUTcount when sending a DC back to the source of a
;	  0199	!	buffer in RCVPH2, thus closing the books on the buffer.
;	  0200	!
;	  0201	! 1.47	L. Webber, 22-Jul-81
;	  0202	!	Enhance 1.46 to clear out a CCB's type code when it is allocated
;	  0203	!	in RCVPH2 and RCVDAT.  This assures that _TERMINATE (1.12) will do the
;	  0204	!	right thing with INPUTcount even when the CCB isn't actually forwarded
;	  0205	!	anywhere.
;	  0206	!
;	  0207	! 1.48	L. Webber, 24-Jul-81
;	  0208	!	Fix local link processing in RCVECL to get a CCB as well as a buffer.
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page   5
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (1)

;	  0209	!
;	  0210	! 1.49	L. Webber, 31-Jul-81
;	  0211	!	Fix RCVPH2 so that a bogus "Phase II" packet will not cause a
;	  0212	!	SIGNAL_STOP, but instead will cause a "packet format error" event
;	  0213	!	to be logged and the packet to be discarded.
;	  0214	!
;	  0215	! 1.50	L. Webber, 5-Aug-81
;	  0216	!	Fix the first call to TOSS in RCVDAT to pass information which has
;	  0217	!	not yet been determined, as 0.
;	  0218	!
;	  0219	! 1.51	L. Webber, 6-Aug-81
;	  0220	!	Zero out both adjustment factor and buffer type of a newly acquired
;	  0221	!	CCB in RCVECL.  (Cf. 1.47).
;	  0222	!
;	  0223	! 1.52	L. Webber, 12-Aug-81
;	  0224	!	Fix UNREACH in RCVPH2 to zero out the adjustment factor in the
;	  0225	!	spawned CCB before sending a DC.
;	  0226	!
;	  0227	! 1.53	L. Webber, 12-Aug-81
;	  0228	!	Fix 1.49 to refer to the right CCB (CCB_P) throughout.
;	  0229	!
;	  0230	! 1.54	L. Webber, 12-Aug-81
;	  0231	!	Fix 1.52 to un-adjust the pass-through CCB before zeroing out
;	  0232	!	the adjustment factor.  Also, un-chain the pass-through (i.e.,
;	  0233	!	zero out the spawned CCB's C_CHN).
;	  0234	!
;	  0235	! 1.55	L. Webber, 16-Sep-81
;	  0236	!	Fix all three main routines so that a line state for a selected
;	  0237	!	output circuit other than "running" will make a node unreachable over
;	  0238	!	that circuit.  This is to handle the window during which TLI has
;	  0239	!	brought the circuit down, but XPT hasn't processed the "line down"
;	  0240	!	CCB.
;	  0241	!
;	  0242	! 1.56	L. Webber, 16-Sep-81
;	  0243	!	Modify BLDPH2 so that, if the source node is a Phase II node, it
;	  0244	!	searches first the input circuit for the packet and then all circuits
;	  0245	!	for an matching adjacent Phase II node.  If it finds one, it converts
;	  0246	!	the address into an ASCII node name.  The change from the old way
;	  0247	!	of doing things is that all circuits and not just the input circuit
;	  0248	!	are checked.
;	  0249	!
;	  0250	! 1.57	L. Webber, 20-Sep-81
;	  0251	!	Fix 1.55 not to check the "output circuit" for a packet to the
;	  0252	!	local node.
;	  0253	!
;	  0254	! 1.58	A. Peckham, 23-Sep-81
;	  0255	!	Fix dot bug in RCVPH2.
;	  0256	!
;	  0257	! 1.59	L. Webber, 24-Sep-81
;	  0258	!	Modify event logging calls to use new macros for storing parameters
;	  0259	!	in the Event Buffer.
;	  0260	!
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page   6
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (1)

;	  0261	! 1.60	L. Webber, 16-Oct-81
;	  0262	!	Change UNREACH in RCVPH2 not to DC an unreachable packet if the
;	  0263	!	source node is 2+, but rather just to toss the packet.
;	  0264	!
;	  0265	! 1.61	L. Webber, 16-Nov-81
;	  0266	!	Fix RCVDAT when destination is unreachable, to address the input
;	  0267	!	circuit data base before incrementing the "transit packets in"
;	  0268	!	counter (currently the output data base for OL = -1 is being ad-
;	  0269	!	dressed).
;	  0270	!
;	  0271	! 1.62	L. Webber, 21-Dec-81
;	  0272	!	Fix UNREACH in RCVPH2 so that it exchanges the source and destination
;	  0273	!	node names, and recognizes a DC in a packet with a routing header.
;	  0274	!
;	  0275	! 1.63	L. Webber, 17-Feb-82
;	  0276	!	Fix UNREACH in RCVPH2 to log a packet header using a pointer to the
;	  0277	!	beginning of the header, not the pointer used to scan it.
;	  0278	!
;	  0279	! 1.64	L. Webber, 23-Feb-82
;	  0280	!	Add maintenance of DLLquota.
;	  0281	!
;	  0282	! 1.65	L. Webber, 24-Feb-82
;	  0283	!	Fix bug in RCVECL that lost routing header buffers when a packet
;	  0284	!	was discarded.
;	  0285	!
;	  0286	! 1.66	L. Webber, 3-Mar-82
;	  0287	!	Fix RCVPH2 to increment right circuit data base for Transit In's,
;	  0288	!	when the output circuit is Phase III.
;	  0289	!
;	  0290	! 1.67	L. Webber, 3-Mar-82
;	  0291	!	Streamline the whole module somewhat.  This mostly involves minor
;	  0292	!	rearranging of code, but the following features have been deleted:
;	  0293	!
;	  0294	!	1.  Validating the source node address in RCVECL (it is assumed that
;	  0295	!	    NSP is a good guy).
;	  0296	!	2.  Validating the output circuit in RCVECL (ditto).
;	  0297	!	3.  Taking out the scan of the Node Translate Table in PH2HDR.  This
;	  0298	!	    table is no longer generated anyway.  Just in case, the code is
;	  0299	!	    only commented out.
;	  0300	!
;	  0301	! 1.68	L. Webber, 19-Mar-82
;	  0302	!	Fix a bug in UNREACH in RCVPH2 that misused the buffer pointer to
;	  0303	!	packets received without routing headers, resulting in invalid DC's
;	  0304	!	being sent.
;	  0305	!	Change code in the same module that threw away a packet with an invalid
;	  0306	!	routing header.  The new code tries to DC the packet as best it can.
;	  0307	!	(It also takes less space.)
;	  0308	!
;	  0309	! 1.69	A. Peckham, 19-Apr-82
;	  0310	!	Eliminate calls to LOG_EVENT, GETNODE, GETLINE, PKTB_HDR.
;	  0311	!       PKTA_HDR has gone to XPE.
;	  0312	!	Make calls to $CDBV and $CBDMG regular linkages again
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page   7
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (1)

;	  0313	!       and rename them to CDTB and CBTD respectively.
;	  0314	!
;	  0315	! 1.70	A. Peckham, 14-Jun-82
;	  0316	!	Fix UNREACH in RCVPH2 to log PACKET HEADER parameter
;	  0317	!       for all errors except for $XPT$E_FMT.
;	  0318	!
;	  0319	! 1.71	A. Peckham, 2-Jul-82
;	  0320	!	Rename INTERCEPT to INTPH2.
;	  0321	!
;	  0322	! 1.72	D.Brannon, 22-Sep-83
;	  0323	!	Moved TERMINATE in the VISITS check in MAINLINE to
;	  0324	!	after the references to the CCB to avoid a race.
;	  0325	!
;	  0326	! 1.73  D.Brannon, 23-Sep-83
;	  0327	!	Add a check in PH2HDR for a zero length destination name.
;	  0328	!
;	  0329	!--
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page   8
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (2)

;	  0330	
;	  0331	!
;	  0332	! TABLE OF CONTENTS
;	  0333	!
;	  0334	
;	  0335	forward routine
;	  0336		RCVECL,
;	  0337		RCVDAT: novalue,
;	  0338		RCVPH2: novalue,
;	  0339		BLDPH2,
;	  0340		BLDPH3,
;	  0341		PH2HDR;
;	  0342	
;	  0343	!
;	  0344	! INCLUDE FILES:
;	  0345	!
;	  0346	
;	  0347	require 'XPTMAC';
;	  0445	
;	  0446	!
;	  0447	! MACROS:
;	  0448	!
;	  0449	
;	M 0450	macro GETBUF(len,ccb) =
;	M 0451	    BEGIN
;	M 0452	    MAP CCB: REF BLOCK FIELD (C_XPT_FIELDS);
;	M 0453	    IF $MCB_GET_BUFFER (len,ccb[C_ADDR]) THEN BEGIN
;	M 0454		SMAP$(ccb[C_BIAS]);
;	M 0455		ccb[C_XPT_ALLOCATION] = len;
;	M 0456		TRUE
;	M 0457		END
;	M 0458	    ELSE FALSE
;	  0459	    end%;
;	  0460	
;	  0461	!
;	  0462	! EQUATED SYMBOLS:
;	  0463	!
;	  0464	
;	  0465	!
;	  0466	! OWN STORAGE:
;	  0467	!
;	  0468	
;	  0469	!
;	  0470	! EXTERNAL REFERENCES:
;	  0471	!
;	  0472	
;	  0473	external routine
;	  0474	    FORWARDER,
;	  0475	    ECLFWD,
;	  0476	    CDTB,
;	  0477	    CBTD,
;	  0478	    RE_QUEUE: novalue,
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page   9
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (2)

;	  0479	    TERMINATE: novalue,
;	  0480	    UNSPAWN: novalue;
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  10
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (3)

;	  0481	
;	  0482	global
;	  0483	routine RCVECL (CCB_P) =
;	  0484	
;	  0485	!++
;	  0486	! FUNCTIONAL DESCRIPTION:
;	  0487	!
;	  0488	! This routine processes data packets received from a local Transport
;	  0489	! user.  It determines the output line (or local Transport user) corresponding
;	  0490	! to the specified destination, and attempts to forward the packet to that
;	  0491	! destination.  If the destination is unreachable, it will attempt to return
;	  0492	! the packet to the source Transport user.  If the packet is returned to
;	  0493	! sender, or if a congestion or resource error occurs during processing of the
;	  0494	! packet, the function CCB is returned to the caller with an error.
;	  0495	!
;	  0496	! FORMAL PARAMETERS
;	  0497	!
;	  0498	!	CCB_P - address of the function CCB, which points to the
;	  0499	!		packet to be transmitted.
;	  0500	!
;	  0501	! IMPLICIT INPUTS
;	  0502	!
;	  0503	!	CB[C_PRM1] - source address
;	  0504	!	CB[C_PRM2] - destination node address
;	  0505	!	CB[C_STS]  - bit 0, if on, specifies that "return to sender" be
;	  0506	!		     set in the header
;	  0507	!	CB[C_LIN]  - channel to send the packet on, or 0 if Select is to
;	  0508	!		     determine the channel
;	  0509	!
;	  0510	! ROUTINE VALUE: A "success" code, or one of several "failure" codes
;	  0511	! COMPLETION CODES:
;	  0512	!
;	  0513	!	CS_SUC - success
;	  0514	!	CE_DIS - destination unreachable; packet will be separately returned
;	  0515	!		 to sender if so requested
;	  0516	!	CE_RTE - packet rejected for because of congestion or resource failure
;	  0517	!	CE_NTE - source Transport user has not issued an OPEN to Transport
;	  0518	!	CE_ERR - invalid parameter specified
;	  0519	!
;	  0520	! SIDE EFFECTS:
;	  0521	!
;	  0522	!	On a success return, Select has taken control of the
;	  0523	!	CCB passed it; that CCB should not be used by the caller again.
;	  0524	!
;	  0525	!--
;	  0526	
;	  0527	begin
;	  0528	
;	  0529	local NODEb,LINEb;
;	  0530	require 'XPTSYM';
;	  0567	local CCB: ref block field (C_XPT_fields);
;	  0568	map CCB_P: ref block field(C_fields);
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  11
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (3)

;	  0569	local OTYPE,OLINE,SOURCE,DEST,CALLER,RET;
;	  0570	
;	  0571	!--------------------------------------------!
;	  0572	!					     !
;	  0573	!  Routine to do "unreachability" processing !
;	  0574	!					     !
;	  0575	!--------------------------------------------!
;	  0576	
;	  0577	routine UNREACH (CB,CALLER,SOURCE,DEST) =
;	  0578	begin
;	  0579	
;	  0580	literal NO_NODEb = 0;		! Make sure NODEb isn't mapped
;	  0581	literal NO_LINEb = 0;		! Ditto for LINEb
;	  0582	require 'XPTSYM';
;	  0619	map CB: ref block field(C_XPT_fields);
;	  0620	
;	  0621	COUNTER_INCREMENT(XPTDB,XPTunreach_loss);       ! Increment node counter
;	  0622	$NM_LOG_BEGIN();
;	  0623	PARAMETER_CM(0,4);		! Multiple fields, 4 of them
;	  0624	PARAMETER_H_1(,uplit(2));	! Hex field, 1 byte: (canned) routing flags
;	  0625	PARAMETER_DU_2(,DEST);		! Decimal unsigned, 2 bytes: dest. address
;	  0626	PARAMETER_DU_2(,SOURCE);	! Decimal unsigned, 2 bytes: source address
;	  0627	PARAMETER_H_1(,uplit(0));	! Hex field, 1 byte: (canned) forwarding flags
;	  0628	$NM_LOG_END(4^6+$XPT$E_UNR,-1); ! "unreachability packet loss" event
;	  0629	if .CB [C_XPT_ALLOCATION] neq 0 then    ! Get rid of our CCB
;	  0630	    $MCB_RETURN_CCB_AND_BUFFER(.CB [C_XPT_ALLOCATION],.CB)	!  (with or
;	  0631	else $MCB_RETURN_CCB(.CB);			!   without a buffer)
;	  0632	return(CE_DIS)					!   and return an error
;	  0633							
;	  0634	end;


						.TITLE	XPTSEL
						.IDENT	/X01730/


000000						.PSECT	$PLIT$,  RO ,  D  
000000	000002 				P.AAA:	.WORD	2
000002	000000 				P.AAB:	.WORD	0


						.GLOBL	FORWARDER, ECLFWD, CDTB, CBTD
						.GLOBL	RE.QUEUE, TERMINATE, UNSPAWN, .CRDAT
						.GLOBL	$NLBEG, $DPCM, $TPH1, $TPDU2, $NLEND
						.GLOBL	$CBBRT, $CCBRT


						.SBTTL	UNREACH
000000						.PSECT	$CODE$,  RO 

000000	004167  000000G			; UNREACH
					U.11:	JSR	R1,$SAVE4			;					0577
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  12
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (3)

000004	016700  000002G				MOV	U.9,R0				;					0621
000010	062700  000136 				ADD	#136,R0
000014	005210 					INC	(R0)
000016	001001 					BNE	1$
000020	005310 					DEC	(R0)
000022	004767  000000G			1$:	JSR	PC,$NLBEG			;					0622
000026	005046 					CLR	-(SP)				;					0623
000030	012700  000004 				MOV	#4,R0
000034	004767  000000G				JSR	PC,$DPCM
000040	116700  000000'				MOVB	P.AAA,R0			;					0624
000044	004767  000000G				JSR	PC,$TPH1
000050	016600  000016 				MOV	16(SP),R0			; DEST,*				0625
000054	004767  000000G				JSR	PC,$TPDU2
000060	016600  000020 				MOV	20(SP),R0			; SOURCE,*				0626
000064	004767  000000G				JSR	PC,$TPDU2
000070	116700  000002'				MOVB	P.AAB,R0			;					0627
000074	004767  000000G				JSR	PC,$TPH1
000100	012700  000401 				MOV	#401,R0				;					0628
000104	012701  177777 				MOV	#-1,R1
000110	004767  000000G				JSR	PC,$NLEND
000114	016604  000024 				MOV	24(SP),R4			; CB,*					0629
000120	016401  000034 				MOV	34(R4),R1
000124	001403 					BEQ	2$
000126	004767  000000G				JSR	PC,$CBBRT			;					0630
000132	000402 					BR	3$				;					0629
000134	004767  000000G			2$:	JSR	PC,$CCBRT			;					0631
000140	005726 				3$:	TST	(SP)+				;					0577
000142	012700  177520 				MOV	#-260,R0			;					0578
000146	000207 					RTS	PC				;					0577

; Routine Size:  52 words,	Routine Base:  $CODE$ + 0000
; Maximum stack depth per invocation:  7 words


;	  0635	
;	  0636	
;	  0637	!****************** START OF ROUTINE MAINLINE **************************!
;	  0638	
;	  0639	
;	  0640	!
;	  0641	!  Pick up the parameters and validate them
;	  0642	!
;	  0643	
;	  0644	CCB = .CCB_P;
;	  0645	DEST = .CCB[C_PRM2];                    ! Pick up the destination address
;	  0646	NODEb = $XPT_GET_NODE_DB(.DEST);	!  and address its data base entry
;	  0647	if .NODEb eql 0 then                    ! Invalid destination -
;	  0648	    return (CE_ERR);                    !  return "parameter error"
;	  0649	SOURCE = .CCB[C_PRM1];                  ! Pick up the source address
;	  0650	OLINE = .CCB[C_LIN];                    ! Pick up the output line
;	  0651	CALLER = .CCB[C_PIX];                   ! Pick up Transport user's PDV index
;	  0652	
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  13
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (3)

;	  0653	!
;	  0654	!  Determine the output line
;	  0655	!
;	  0656	
;	  0657	if .OLINE eql 0                         ! Line not specified - default
;	  0658	then if not .Local_node
;	  0659	     then OLINE = .OL;
;	  0660	
;	  0661	!
;	  0662	!  Spawn a CCB
;	  0663	!
;	  0664	
;	  0665	if not $MCB_GET_CCB (CCB)
;	  0666	then return (CE_RTE);
;	  0667	CCB [C_XPT_ALLOCATION] = 0;
;	  0668	
;	  0669	if .OLINE eql 0 then
;	  0670	    begin                               !   Local link:
;	  0671	    local TMPCCB: ref block field (C_FIELDS), BUFSIZE;
;	  0672	    TMPCCB = .CCB_P;                    !     Trace through the input CCB chain
;	  0673	    BUFSIZE = 0;
;	  0674	    do                                  !     and accumulate message length
;	  0675	        BUFSIZE = .BUFSIZE + .TMPCCB[C_CNT]
;	  0676	    while (TMPCCB = .TMPCCB[C_CHN]) neqa 0;
;	  0677	    if not GETBUF(.BUFSIZE,CCB)         !  Get a buffer that size      
;	  0678	    then begin                          !  and if failure
;	  0679	         $MCB_RETURN_CCB(.CCB);         !  then return CCB
;	  0680	         return (CE_RTE);               !  and "resource error"
;	  0681	         end;
;	  0682	    end;				!   Not local link - just get the CCB
;	  0683	
;	  0684	if .OLINE neq 0 then			!If the path isn't local,
;	  0685	    CCB[C_STK] = .CCB_P;		!  chain in the pass-through CCB
;	  0686	CCB[C_PRM4] = 0;
;	  0687	
;	  0688	!
;	  0689	!  Check destination for unreachability
;	  0690	!
;	  0691	
;	  0692	LINEb = $XPT_GET_LINE_DB(.OLINE);
;	  0693	if (not .Reach					!Destination
;	  0694	or ((.OLINE neq 0) and (.LINEstate neq RU))) then! unreachable:
;	  0695	    return (UNREACH(.CCB,.CALLER,.SOURCE,	!    do "unreachability"
;	  0696		.DEST));			!    processing
;	  0697	
;	  0698	!
;	  0699	!  Destination is local
;	  0700	!
;	  0701	
;	  0702	RET %(the return from Forwarding)% =
;	  0703	
;	  0704	(if .OLINE eql 0 then
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  14
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (3)

;	  0705	if .Local_node then begin
;	  0706	    OTYPE = 0;					!Set output type to "local"
;	  0707	    CCB[C_CNT] = 				!Copy the data
;	P 0708		$MCB_COPY_CHAIN_TO_BUFFER(.CCB_P,	!    into the single
;	  0709		    (.CCB[C_BIAS],.CCB[C_ADDR]));	!    data buffer
;	  0710	    CCB[C_LIX] = 0;				!Input channel is null
;	  0711	    if (ECLFWD(.CCB,.SOURCE,.DEST,0)            !Try to forward the packet
;	  0712	    neq CS_SUC) then				!  to the specified user
;	P 0713		return ($MCB_RETURN_CCB_AND_BUFFER	!Failed -
;	  0714		    (.CCB[C_PRM5],.CCB); CE_RTE)	!  set error code
;	  0715	    else begin					!Worked -
;	  0716		TERMINATE(.CCB_P,CS_SUC);		!  return the input
;	  0717		INPUTquota = .INPUTquota - 1;		!  buffer (but don't
;	  0718		CS_SUC					!  return the admission
;	  0719		end					!  permit)
;	  0720	    end
;	  0721	else SIGNAL_STOP (CE_ERR)		!Output line = 0, destination not Self
;	  0722	
;	  0723	!
;	  0724	!  Adjacent node is Phase II
;	  0725	!
;	  0726	
;	  0727	else begin
;	  0728	    LINEb = $XPT_GET_LINE_DB(.OLINE);
;	  0729	    if ((.Nty eql PhTwo) or (.Nty eql TOPS20)) then begin
;	  0730		if .Nty eql PhTwo then			!Set output type to
;	  0731		    OTYPE = 1				!  "Phase II" or
;	  0732		else OTYPE = 2;				!  "Phase II+/Phase III"
;	  0733		RET =
;	  0734		(if (.Nid neq .DEST) then		!Destination isn't adjacent -
;	  0735		    SIGNAL_STOP (CE_ERR)		!  bomb
;	  0736		else BLDPH2(.CCB,0,.DEST,		!Otherwise, build a
;	  0737		    .SOURCE,.OLINE,0));			!  Phase II header
;	  0738		end
;	  0739	
;	  0740	!
;	  0741	!  Adjacent node is Phase III - build a Phase III header
;	  0742	!
;	  0743	
;	  0744	    else begin
;	  0745		OTYPE = 2;			!Set output type to "Phase II+/III"
;	  0746		RET = BLDPH3 (.CCB,0,.DEST,.Tid,0); 
;	  0747		end;
;	  0748	
;	  0749	!
;	  0750	!  Error in building the header - return an error
;	  0751	!
;	  0752	
;	  0753	    if .RET neq CS_SUC then return (CCBRT$(.CCB); .RET)
;	  0754	
;	  0755	!
;	  0756	!  Message is ready to be sent - give it to Forwarding
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  15
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (3)

;	  0757	!
;	  0758	
;	  0759	    else begin
;	  0760		if ((RET = FORWARDER(.CCB,.OLINE))
;	  0761		eql CS_SUC) then			! If Forwarding accepts packet,
;	  0762		    COUNTER_INCREMENT(LINEb,XPTend_xmt);!   update packets counter
;	  0763		.RET
;	  0764		end
;	  0765	    end);
;	  0766	
;	  0767	!
;	  0768	!  Forwarding rejected packet as "unreachable"
;	  0769	!
;	  0770	
;	  0771	if .RET eql CE_DIS then
;	  0772	    UNREACH (.CCB,.CALLER,.SOURCE,.DEST)
;	  0773	
;	  0774	!
;	  0775	!  Forwarding rejected packet for congestion reasons
;	  0776	!
;	  0777	
;	  0778	else if .RET eql CE_RTE then begin
;	  0779	    if .CCB [C_XPT_ALLOCATION] neq 0 then
;	  0780		$MCB_RETURN_CCB_AND_BUFFER(.CCB [C_XPT_ALLOCATION],.CCB)
;	  0781	    else $MCB_RETURN_CCB(.CCB);
;	  0782	    CE_RTE
;	  0783	    end
;	  0784	
;	  0785	!
;	  0786	!  Forwarding accepted packet - return "success"
;	  0787	!
;	  0788	
;	  0789	else begin
;	  0790	    if .OTYPE eql 1 then			!Going to a Phase II node -
;	P 0791		CALL$E(INTPH2,PD_XPE,.CCB_P,1,          !  do intercept
;	  0792		    DEST,SOURCE);			!  processing
;	  0793	    CS_SUC
;	  0794	    end
;	  0795	
;	  0796	end;				!End of RCVECL


						.GLOBL	GTNODE, $CCBGT, $CORGT, KISAR6
						.GLOBL	GTLINE, $CPTBF, $IC32, INTPH2
						.GLOBL	$CALLE


						.SBTTL	RCVECL
000000	004167  000000G			RCVECL::
					U.1:	JSR	R1,$SAVE5			;					0483
000004	162706  000014 				SUB	#14,SP
000010	016646  000032 				MOV	32(SP),-(SP)			; CCB.P,*				0644
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  16
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (3)

000014	011646 					MOV	(SP),-(SP)			; *,CCB
000016	011600 					MOV	(SP),R0				; CCB,*					0645
000020	016066  000026  000014 			MOV	26(R0),14(SP)			; *(CCB),DEST
000026	016666  000014  000010 			MOV	14(SP),10(SP)			; DEST,*				0646
000034	016600  000010 				MOV	10(SP),R0
000040	004767  000000G				JSR	PC,GTNODE
000044	010002 					MOV	R0,R2				; *,NODEB
000046	001003 					BNE	1$				;					0647
000050	012700  177760 				MOV	#-20,R0				;					0648
000054	000534 					BR	8$
000056	011600 				1$:	MOV	(SP),R0				; CCB,*					0649
000060	016066  000024  000016 			MOV	24(R0),16(SP)			; *(CCB),SOURCE
000066	005003 					CLR	R3				; OLINE					0650
000070	156003  000010 				BISB	10(R0),R3			; *(CCB),OLINE
000074	116066  000011  000012 			MOVB	11(R0),12(SP)			; *(CCB),CALLER				0651
000102	105066  000013 				CLRB	13(SP)				; CALLER
000106	005703 					TST	R3				; OLINE					0657
000110	001004 					BNE	2$
000112	032712  000400 				BIT	#400,(R2)			; *,NODEB				0658
000116	001001 					BNE	2$
000120	111203 					MOVB	(R2),R3				; NODEB,OLINE				0659
000122	004767  000000G			2$:	JSR	PC,$CCBGT			;					0665
000126	103563 					BCS	10$
000130	010416 					MOV	R4,(SP)				; $MCB$R4,CCB
000132	012700  000034 				MOV	#34,R0				;					0667
000136	060400 					ADD	R4,R0				; CCB,*
000140	010066  000006 				MOV	R0,6(SP)
000144	005010 					CLR	(R0)
000146	005066  000004 				CLR	4(SP)				;					0669
000152	005703 					TST	R3				; OLINE
000154	001033 					BNE	5$
000156	005266  000004 				INC	4(SP)
000162	016600  000002 				MOV	2(SP),R0			; *,TMPCCB				0672
000166	005001 					CLR	R1				; BUFSIZE				0673
000170	066001  000022 			3$:	ADD	22(R0),R1			; *(TMPCCB),BUFSIZE			0675
000174	016000  000002 				MOV	2(R0),R0			; *(TMPCCB),TMPCCB			0676
000200	001373 					BNE	3$
000202	004767  000000G				JSR	PC,$CORGT			;					0677
000206	103412 					BCS	4$
000210	011604 					MOV	(SP),R4				; CCB,*
000212	010064  000020 				MOV	R0,20(R4)			; $MCB$R0,*(CCB)
000216	010400 					MOV	R4,R0				; CCB,*
000220	016760  000000G 000016 			MOV	KISAR6,16(R0)			; *,*(CCB)
000226	010176  000006 				MOV	R1,@6(SP)			; BUFSIZE,*
000232	000404 					BR	5$
000234	011604 				4$:	MOV	(SP),R4				; CCB,*					0679
000236	004767  000000G				JSR	PC,$CCBRT
000242	000515 					BR	10$				;					0678
000244	005001 				5$:	CLR	R1				;					0684
000246	005703 					TST	R3				; OLINE
000250	001405 					BEQ	6$
000252	005201 					INC	R1
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  17
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (3)

000254	011600 					MOV	(SP),R0				; CCB,*					0685
000256	016660  000002  000004 			MOV	2(SP),4(R0)			; *,*(CCB)
000264	011600 				6$:	MOV	(SP),R0				; CCB,*					0686
000266	005060  000032 				CLR	32(R0)				; *(CCB)
000272	010300 					MOV	R3,R0				; OLINE,*				0692
000274	004767  000000G				JSR	PC,GTLINE
000300	010005 					MOV	R0,R5				; *,LINEB
000302	005712 					TST	(R2)				; NODEB					0693
000304	100005 					BPL	7$
000306	006001 					ROR	R1				;					0694
000310	103017 					BCC	9$
000312	121527  000010 				CMPB	(R5),#10			; LINEB,*
000316	001414 					BEQ	9$
000320	011646 				7$:	MOV	(SP),-(SP)			; CCB,*					0695
000322	016646  000014 				MOV	14(SP),-(SP)			; CALLER,*
000326	016646  000022 				MOV	22(SP),-(SP)			; SOURCE,*
000332	016646  000016 				MOV	16(SP),-(SP)
000336	004767  177266 				JSR	PC,U.11
000342	062706  000010 				ADD	#10,SP
000346	000455 				8$:	BR	11$
000350	032766  000001  000004 		9$:	BIT	#1,4(SP)			;					0704
000356	001500 					BEQ	14$
000360	032712  000400 				BIT	#400,(R2)			; *,NODEB				0705
000364	001465 					BEQ	13$
000366	005002 					CLR	R2				; OTYPE					0706
000370	011600 					MOV	(SP),R0				; CCB,*					0709
000372	016046  000016 				MOV	16(R0),-(SP)			; *(CCB),*
000376	016046  000020 				MOV	20(R0),-(SP)			; *(CCB),*
000402	016604  000006 				MOV	6(SP),R4
000406	004767  000000G				JSR	PC,$CPTBF
000412	016601  000004 				MOV	4(SP),R1			; CCB,*					0707
000416	010061  000022 				MOV	R0,22(R1)			; *,*(CCB)
000422	010100 					MOV	R1,R0				; CCB,*					0710
000424	105060  000010 				CLRB	10(R0)				; *(CCB)
000430	010116 					MOV	R1,(SP)				; CCB,*					0711
000432	016646  000022 				MOV	22(SP),-(SP)			; SOURCE,*
000436	016646  000016 				MOV	16(SP),-(SP)
000442	005046 					CLR	-(SP)
000444	004767  000000G				JSR	PC,ECLFWD
000450	062706  000006 				ADD	#6,SP
000454	005300 					DEC	R0
000456	001412 					BEQ	12$
000460	017601  000012 				MOV	@12(SP),R1			;					0714
000464	016604  000004 				MOV	4(SP),R4			; CCB,*
000470	004767  000000G				JSR	PC,$CBBRT
000474	022626 					CMP	(SP)+,(SP)+			;					0713
000476	012700  177730 			10$:	MOV	#-50,R0
000502	000536 				11$:	BR	23$
000504	016616  000006 			12$:	MOV	6(SP),(SP)			;					0716
000510	012746  000001 				MOV	#1,-(SP)
000514	004767  000000G				JSR	PC,TERMINATE
000520	016700  000002G				MOV	.CRDAT+2,R0
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  18
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (3)

000524	105360  000104 				DECB	104(R0)				;					0717
000530	005726 					TST	(SP)+				;					0715
000532	012701  000001 				MOV	#1,R1				; *,RET					0711
000536	000537 					BR	25$				;					0705
000540	012746  177760 			13$:	MOV	#-20,-(SP)			;					0721
000544	012746  000001 				MOV	#1,-(SP)
000550	004767  000000G				JSR	PC,$STOP
000554	010001 					MOV	R0,R1				; *,RET					0705
000556	000527 					BR	25$				;					0704
000560	010300 				14$:	MOV	R3,R0				; OLINE,*				0728
000562	004767  000000G				JSR	PC,GTLINE
000566	010005 					MOV	R0,R5				; *,LINEB
000570	005000 					CLR	R0				;					0729
000572	126527  000002  000004 			CMPB	2(R5),#4			; *(LINEB),*
000600	001002 					BNE	15$
000602	005200 					INC	R0
000604	000404 					BR	16$
000606	126527  000002  000005 		15$:	CMPB	2(R5),#5			; *(LINEB),*
000614	001040 					BNE	21$
000616	006000 				16$:	ROR	R0				;					0730
000620	103003 					BCC	17$
000622	012702  000001 				MOV	#1,R2				; *,OTYPE				0731
000626	000402 					BR	18$				;					0730
000630	012702  000002 			17$:	MOV	#2,R2				; *,OTYPE				0732
000634	026566  000004  000010 		18$:	CMP	4(R5),10(SP)			; *(LINEB),*				0734
000642	001407 					BEQ	19$
000644	012746  177760 				MOV	#-20,-(SP)			;					0735
000650	012746  000001 				MOV	#1,-(SP)
000654	004767  000000G				JSR	PC,$STOP
000660	000414 					BR	20$				;					0734
000662	011646 				19$:	MOV	(SP),-(SP)			; CCB,*					0736
000664	005046 					CLR	-(SP)
000666	016646  000014 				MOV	14(SP),-(SP)
000672	016646  000024 				MOV	24(SP),-(SP)			; SOURCE,*
000676	010346 					MOV	R3,-(SP)			; OLINE,*
000700	005046 					CLR	-(SP)
000702	004767  000000V				JSR	PC,U.4
000706	062706  000010 				ADD	#10,SP
000712	010001 				20$:	MOV	R0,R1				; *,RET					0734
000714	000420 					BR	22$				;					0729
000716	012702  000002 			21$:	MOV	#2,R2				; *,OTYPE				0745
000722	011646 					MOV	(SP),-(SP)			; CCB,*					0746
000724	005046 					CLR	-(SP)
000726	016646  000014 				MOV	14(SP),-(SP)
000732	016700  000002G				MOV	.CRDAT+2,R0
000736	016046  000056 				MOV	56(R0),-(SP)
000742	005046 					CLR	-(SP)
000744	004767  000000V				JSR	PC,U.5
000750	010001 					MOV	R0,R1				; *,RET
000752	062706  000006 				ADD	#6,SP				;					0744
000756	020127  000001 			22$:	CMP	R1,#1				; RET,*					0753
000762	001407 					BEQ	24$
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  19
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (3)

000764	016604  000004 				MOV	4(SP),R4			; CCB,*
000770	004767  000000G				JSR	PC,$CCBRT
000774	022626 					CMP	(SP)+,(SP)+
000776	010100 					MOV	R1,R0				; RET,*
001000	000516 				23$:	BR	32$
001002	016616  000004 			24$:	MOV	4(SP),(SP)			; CCB,*					0760
001006	010346 					MOV	R3,-(SP)			; OLINE,*
001010	004767  000000G				JSR	PC,FORWARDER
001014	005726 					TST	(SP)+
001016	010001 					MOV	R0,R1				; *,RET
001020	005300 					DEC	R0
001022	001005 					BNE	25$
001024	010500 					MOV	R5,R0				; LINEB,*				0762
001026	062700  000062 				ADD	#62,R0
001032	004767  000000G				JSR	PC,$IC32
001036	020127  177520 			25$:	CMP	R1,#-260			; RET,*					0771
001042	001015 					BNE	26$
001044	016616  000004 				MOV	4(SP),(SP)			; CCB,*					0772
001050	016646  000016 				MOV	16(SP),-(SP)			; CALLER,*
001054	016646  000024 				MOV	24(SP),-(SP)			; SOURCE,*
001060	016646  000020 				MOV	20(SP),-(SP)
001064	004767  176540 				JSR	PC,U.11
001070	062706  000006 				ADD	#6,SP
001074	000457 					BR	31$				;					0771
001076	020127  177730 			26$:	CMP	R1,#-50				; RET,*					0778
001102	001021 					BNE	29$
001104	005776  000012 				TST	@12(SP)				;					0779
001110	001407 					BEQ	27$
001112	017601  000012 				MOV	@12(SP),R1			;					0780
001116	016604  000004 				MOV	4(SP),R4			; CCB,*
001122	004767  000000G				JSR	PC,$CBBRT
001126	000404 					BR	28$				;					0779
001130	016604  000004 			27$:	MOV	4(SP),R4			; CCB,*					0781
001134	004767  000000G				JSR	PC,$CCBRT
001140	012700  177730 			28$:	MOV	#-50,R0				;					0778
001144	000433 					BR	31$
001146	005302 				29$:	DEC	R2				; OTYPE					0790
001150	001027 					BNE	30$
001152	012716  000022 				MOV	#22,(SP)			;					0792
001156	060616 					ADD	SP,(SP)				; SOURCE,*
001160	012746  000022 				MOV	#22,-(SP)
001164	060616 					ADD	SP,(SP)				; DEST,*
001166	012746  000001 				MOV	#1,-(SP)
001172	016646  000012 				MOV	12(SP),-(SP)
001176	012746  000004 				MOV	#4,-(SP)
001202	012746  000000G				MOV	#INTPH2,-(SP)
001206	016700  000002G				MOV	.CRDAT+2,R0
001212	005046 					CLR	-(SP)
001214	116016  000002 				MOVB	2(R0),(SP)
001220	004767  000000G				JSR	PC,$CALLE
001224	062706  000014 				ADD	#14,SP
001230	012700  000001 			30$:	MOV	#1,R0				;					0778
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  20
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (3)

001234	022626 				31$:	CMP	(SP)+,(SP)+			;					0527
001236	062706  000020 			32$:	ADD	#20,SP				;					0483
001242	000207 					RTS	PC

; Routine Size:  338 words,	Routine Base:  $CODE$ + 0150
; Maximum stack depth per invocation:  23 words
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  21
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

;	  0797	
;	  0798	global
;	  0799	routine RCVDAT (CCB_P): novalue =
;	  0800	
;	  0801	!++
;	  0802	! FUNCTIONAL DESCRIPTION:
;	  0803	!
;	  0804	! This routine processes data packets received from the Data Link
;	  0805	! Link Layer which have Phase III routing headers. It determines
;	  0806	! the output line (or local Transport user) corresponding to the
;	  0807	! specified destination, and attempts to forward the packet to that
;	  0808	! destination.  If the destination is unreachable, the routine will
;	  0809	! try to return the packet to its source node. If the immediate
;	  0810	! destination (the adjacent node on the output line) is Phase II,
;	  0811	! BLDPH2 will be called to translate the routing header. If the
;	  0812	! destination is "standard" Phase II, the packet will not be thrown
;	  0813	! away on congestion or resource failure, but will be queued for
;	  0814	! eventual reprocessing.
;	  0815	!
;	  0816	! FORMAL PARAMETERS
;	  0817	!
;	  0818	!	CCB_P - CCB for the received packet - the "pass-through" CCB
;	  0819	!
;	  0820	! IMPLICIT INPUTS
;	  0821	!
;	  0822	!	Reach, OL, Nty, Nid, User
;	  0823	!
;	  0824	! ROUTINE VALUE: NONE
;	  0825	! COMPLETION CODES:
;	  0826	!
;	  0827	!	NONE.
;	  0828	!
;	  0829	! SIDE EFFECTS:
;	  0830	!
;	  0831	!	May modify the routing header in the pass-through buffer.
;	  0832	!
;	  0833	!--
;	  0834	
;	  0835	begin
;	  0836	
;	  0837	local NODEb,LINEb;
;	  0838	require 'XPTSYM';
;	  0875	local CCB: ref block field (C_XPT_fields);
;	  0876	map CCB_P: ref block field(C_fields);
;	  0877	local DEST,SOURCE,ILINE,OLINE,RET,RFLG,VISIT;
;	  0878	pointer PTR;
;	  0879	macro RTS = biton (.RFLG,RTSflg)%;
;	  0880	macro RQR = biton (.RFLG,RQRflg)%;
;	  0881	
;	  0882	
;	  0883	!-----------------------------------------------------!
;	  0884	!						      !
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  22
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

;	  0885	!  Routine to either throw away a packet or queue it  !
;	  0886	!  for eventual reprocessing			      !
;	  0887	!						      !
;	  0888	!-----------------------------------------------------!
;	  0889	
;	  0890	routine TOSS (CCB,OLINE,ILINE,DEST): novalue =
;	  0891	begin
;	  0892	
;	  0893	local LINEb;
;	  0894	literal NO_NODEb = 0;	!This is to get around a BLISS glitch
;	  0895	require 'XPTSYM';
;	  0932	
;	  0933	LINEb = $XPT_GET_LINE_DB(.OLINE);       ! Address line data base entry
;	  0934	if ((.OLINE neq 0)			! If the destination isn't local,
;	  0935	and (.Nty eql PhTwo)			!   and it's standard Phase II
;	  0936	and (.Nid eql .DEST))			!   and it's the adjacent node
;	  0937	    then RE_QUEUE(.CCB)			!   then requeue CCB for later
;	  0938	else begin				!
;	  0939	    if .OLINE neq 0 then		! Transit congestion -
;	  0940		COUNTER_INCREMENT(LINEb,XPTxit_cng)!   log that
;	  0941	    else begin				! Path-end congestion -
;	  0942		LINEb = $XPT_GET_LINE_DB(.ILINE);	!   Log that (on
;	  0943		COUNTER_INCREMENT(LINEb,XPTend_cng);	!     the input line)
;	  0944		end;
;	  0945	    TERMINATE(.CCB,CE_RTE);		!Otherwise, throw buffer away
;	  0946	    end;
;	  0947	
;	  0948	end;


						.SBTTL	TOSS
000000	010146 				; TOSS
					U.19:	MOV	R1,-(SP)			;					0890
000002	016600  000010 				MOV	10(SP),R0			; OLINE,*				0933
000006	004767  000000G				JSR	PC,GTLINE
000012	010001 					MOV	R0,R1				; *,LINEB
000014	005000 					CLR	R0				;					0934
000016	005766  000010 				TST	10(SP)				; OLINE
000022	001416 					BEQ	1$
000024	005200 					INC	R0
000026	126127  000002  000004 			CMPB	2(R1),#4			; *(LINEB),*				0935
000034	001011 					BNE	1$
000036	026166  000004  000004 			CMP	4(R1),4(SP)			; *(LINEB),DEST				0936
000044	001005 					BNE	1$
000046	016646  000012 				MOV	12(SP),-(SP)			; CCB,*					0937
000052	004767  000000G				JSR	PC,RE.QUEUE
000056	000432 					BR	5$				;					0934
000060	006000 				1$:	ROR	R0				;					0939
000062	103006 					BCC	2$
000064	012700  000100 				MOV	#100,R0				;					0940
000070	060100 					ADD	R1,R0				; LINEB,*
000072	005210 					INC	(R0)
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  23
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

000074	001014 					BNE	4$
000076	000412 					BR	3$
000100	016600  000006 			2$:	MOV	6(SP),R0			; ILINE,*				0942
000104	004767  000000G				JSR	PC,GTLINE
000110	010001 					MOV	R0,R1				; *,LINEB
000112	012700  000066 				MOV	#66,R0				;					0943
000116	060100 					ADD	R1,R0				; LINEB,*
000120	005210 					INC	(R0)
000122	001001 					BNE	4$
000124	005310 				3$:	DEC	(R0)
000126	016646  000012 			4$:	MOV	12(SP),-(SP)			; CCB,*					0945
000132	012746  177730 				MOV	#-50,-(SP)
000136	004767  000000G				JSR	PC,TERMINATE
000142	005726 					TST	(SP)+				;					0938
000144	005726 				5$:	TST	(SP)+				;					0891
000146	012601 					MOV	(SP)+,R1			;					0890
000150	000207 					RTS	PC

; Routine Size:  53 words,	Routine Base:  $CODE$ + 1414
; Maximum stack depth per invocation:  4 words


;	  0949	
;	  0950	
;	  0951	
;	  0952	!---------------------------------------------!
;	  0953	!					      !
;	  0954	!  Routine to do "unreachability" processing  !
;	  0955	!					      !
;	  0956	!---------------------------------------------!
;	  0957	
;	  0958	routine UNREACH (CCB,CCB_P,SOURCE,DEST,RFLG,CODE): novalue =
;	  0959	begin
;	  0960	
;	  0961	literal NO_NODEb = 0;		! To keep NODEb from being mapped
;	  0962	local LINEb;
;	  0963	require 'XPTSYM';
;	  1000	map CCB: ref block field(C_FIELDS);
;	  1001	map CCB_P: ref block field(C_FIELDS);
;	  1002	
;	  1003	pointer PTR;
;	  1004	
;	  1005	LINEb = $XPT_GET_LINE_DB(.CCB_P[C_LIX]);        ! Address input line data base
;	  1006	if .CODE eql $XPT$E_UNR then		! Increment
;	  1007	    COUNTER_INCREMENT(XPTDB,XPTunreach_loss)    !   appropriate
;	  1008	else COUNTER_INCREMENT(XPTDB,XPTrange_loss);    !   node counter
;	  1009	$NM_LOG_BEGIN();
;	  1010	CALL$E(PKTA_HDR,(PD_XPE),.CCB_P[C_ADDR]); ! Log an "unreachable node" or
;	  1011	$NM_LOG_END(4^6+.CODE,.NMXid);		!   "node out of range" event
;	  1012	if ((RQR) and (not (RTS))) then begin	! Valid "return to sender" -
;	  1013	    CCB[C_BIAS] = .CCB_P[C_BIAS];	!   Copy routing
;	  1014	    CCB[C_ADDR] = .CCB_P[C_ADDR];	!     header into
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  24
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

;	  1015	    CCB[C_CNT] = .CCB_P[C_CNT];		!     the spawned CCB
;	  1016	    PTR = .CCB[C_ADDR];                 !   Address the routing header
;	  1017	    putb (.RFLG or RTSflg, PTR);	!   Set the RTS flag
;	  1018	    putw (.SOURCE,PTR);                 !   Exchange the source
;	  1019	    putw (.DEST,PTR);                   !     and destination addresses
;	  1020	    if FORWARDER(.CCB,.CCB_P[C_LIN])	!   Send back over input line
;	  1021	    neq CS_SUC then			! Rejected -
;	  1022		TERMINATE(.CCB,CE_DIS);		!   throw away
;	  1023	    end
;	  1024	else TERMINATE(.CCB,CE_DIS);		! No "return to sender" - throw away
;	  1025	return;
;	  1026	end;


						.GLOBL	$IC8, PKTA.HDR


						.SBTTL	UNREACH
000000	004167  000000G			; UNREACH
					U.22:	JSR	R1,$SAVE4			;					0958
000004	005746 					TST	-(SP)
000006	016603  000026 				MOV	26(SP),R3			; CCB.P,*				1005
000012	005000 					CLR	R0
000014	156300  000010 				BISB	10(R3),R0
000020	004767  000000G				JSR	PC,GTLINE
000024	010002 					MOV	R0,R2				; *,LINEB
000026	026627  000016  000001 			CMP	16(SP),#1			; CODE,*				1006
000034	001010 					BNE	1$
000036	016700  000002G				MOV	.CRDAT+2,R0			;					1007
000042	062700  000136 				ADD	#136,R0
000046	005210 					INC	(R0)
000050	001010 					BNE	2$
000052	005310 					DEC	(R0)
000054	000406 					BR	2$				;					1006
000056	016700  000002G			1$:	MOV	.CRDAT+2,R0			;					1008
000062	062700  000131 				ADD	#131,R0
000066	004767  000000G				JSR	PC,$IC8
000072	004767  000000G			2$:	JSR	PC,$NLBEG			;					1009
000076	016346  000020 				MOV	20(R3),-(SP)			;					1010
000102	012746  000001 				MOV	#1,-(SP)
000106	012746  000000G				MOV	#PKTA.HDR,-(SP)
000112	016700  000002G				MOV	.CRDAT+2,R0
000116	005046 					CLR	-(SP)
000120	116016  000002 				MOVB	2(R0),(SP)
000124	004767  000000G				JSR	PC,$CALLE
000130	016600  000026 				MOV	26(SP),R0			; CODE,*				1011
000134	062700  000400 				ADD	#400,R0
000140	016201  000034 				MOV	34(R2),R1			; *(LINEB),*
000144	004767  000000G				JSR	PC,$NLEND
000150	016602  000040 				MOV	40(SP),R2			; CCB,*					1013
000154	016601  000030 				MOV	30(SP),R1			; RFLG,*				1012
000160	032701  000010 				BIT	#10,R1
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  25
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

000164	001451 					BEQ	3$
000166	032701  000020 				BIT	#20,R1
000172	001046 					BNE	3$
000174	016362  000016  000016 			MOV	16(R3),16(R2)			;					1013
000202	016362  000020  000020 			MOV	20(R3),20(R2)			;					1014
000210	016362  000022  000022 			MOV	22(R3),22(R2)			;					1015
000216	016200  000020 				MOV	20(R2),R0			; *,PTR					1016
000222	010104 					MOV	R1,R4				;					1017
000224	052704  000020 				BIS	#20,R4
000230	110420 					MOVB	R4,(R0)+			; *,PTR
000232	016666  000034  000010 			MOV	34(SP),10(SP)			; SOURCE,X				1018
000240	116620  000010 				MOVB	10(SP),(R0)+			; X,PTR
000244	116620  000011 				MOVB	11(SP),(R0)+			; X,PTR
000250	016666  000032  000010 			MOV	32(SP),10(SP)			; DEST,X				1019
000256	116620  000010 				MOVB	10(SP),(R0)+			; X,PTR
000262	116620  000011 				MOVB	11(SP),(R0)+			; X,PTR
000266	010216 					MOV	R2,(SP)				;					1020
000270	005046 					CLR	-(SP)
000272	116316  000010 				MOVB	10(R3),(SP)
000276	004767  000000G				JSR	PC,FORWARDER
000302	005726 					TST	(SP)+
000304	005300 					DEC	R0				;					1021
000306	001406 					BEQ	4$
000310	010216 				3$:	MOV	R2,(SP)				;					1024
000312	012746  177520 				MOV	#-260,-(SP)
000316	004767  000000G				JSR	PC,TERMINATE
000322	005726 					TST	(SP)+
000324	062706  000012 			4$:	ADD	#12,SP				;					0958
000330	000207 					RTS	PC

; Routine Size:  109 words,	Routine Base:  $CODE$ + 1566
; Maximum stack depth per invocation:  12 words


;	  1027	
;	  1028	
;	  1029	!******************** START OF ROUTINE MAINLINE *************************!
;	  1030	
;	  1031	!
;	  1032	!  Analyze the routing header
;	  1033	!
;	  1034	
;	  1035	MAPBUF (.CCB_P,PTR);			!Map in the buffer
;	  1036	RFLG = getb(PTR);			!Pick up the routing flags
;	  1037	DEST = getw(PTR);			!Pick up the destination address
;	  1038	SOURCE = getw(PTR);			!Pick up the source address
;	  1039	VISIT = ch$rchar(.PTR);			!Pick up the visits count
;	  1040	VISIT = .VISIT+1;
;	  1041	ch$wchar_a(.VISIT,PTR);
;	  1042	
;	  1043	!
;	  1044	!  Calculate the input and output lines
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  26
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

;	  1045	!
;	  1046	
;	  1047	NODEb = $XPT_GET_NODE_DB(.DEST);        ! Get destination data base address
;	  1048	OLINE = 0;
;	  1049	if not .Local_node then OLINE = .OL;
;	  1050	ILINE = .CCB_P[C_LIN];
;	  1051	LINEb = $XPT_GET_LINE_DB(.ILINE);       ! Address input line data base entry
;	  1052	
;	  1053	!
;	  1054	!  Check the VISITS field in the routing header
;	  1055	!
;	  1056	
;	  1057	if ((.VISIT gtru .MAXV)				!Too many
;	  1058	or ((RTS) and (.VISIT gtru (2*.MAXV)))) then	!  visits -
;	  1059	    begin					!  throw the
;	  1060	    						!  packet away,
;	  1061	    COUNTER_INCREMENT(XPTDB,XPTaged_loss);      !  bump "aged loss" and
;	  1062	    COUNTER_INCREMENT(LINEb,XPTxit_rcv);        !  "transit packet"
;	  1063	    $NM_LOG_BEGIN();				!  "aged packet loss"
;	  1064	    CALL$E(PKTA_HDR,(PD_XPE),.CCB_P[C_ADDR]);	!  event
;	  1065	    $NM_LOG_END(4^6+$XPT$E_AGE,-1);		! 
;	  1066	    TERMINATE(.CCB_P,CE_ERR);
;	  1067	    return;
;	  1068	    end;
;	  1069	
;	  1070	!
;	  1071	!  Spawn a CCB for the packet
;	  1072	!
;	  1073	
;	  1074	if not CCBGT$(CCB) then begin		!Couldn't get
;	  1075	    TOSS(.CCB_P,.OLINE,.ILINE,.DEST);	! a CCB - get
;	  1076	    return;				! rid of packet
;	  1077	    end;
;	  1078	CCB[C_STK] = .CCB_P;			!Chain pass-through to spawned CCB
;	  1079	CCB[C_PRM4] = 0;
;	  1080	
;	  1081	!
;	  1082	!  Destination is unreachable
;	  1083	!
;	  1084	
;	  1085	LINEb = $XPT_GET_LINE_DB(.OLINE);
;	  1086	if not begin
;	  1087	    if .DEST gtru NN then (RET = $XPT$E_RNG; FALSE)
;	  1088	    else if (not .Reach
;	  1089	    or ((.OLINE neq 0) and (.LINEstate neq RU))) then
;	  1090		(RET = $XPT$E_UNR; FALSE)
;	  1091	    else TRUE
;	  1092	    end
;	  1093	then begin
;	  1094	    UNREACH(.CCB,.CCB_P,.SOURCE,.DEST,.RFLG,.RET);
;	  1095	    LINEb = $XPT_GET_LINE_DB(.ILINE);
;	  1096	    COUNTER_INCREMENT(LINEb,XPTxit_rcv);
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  27
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

;	  1097	    return
;	  1098	    end;
;	  1099	
;	  1100	!
;	  1101	!  Destination is Self
;	  1102	!
;	  1103	
;	  1104	if .OLINE eql 0 then
;	  1105	if .Local_node then begin
;	  1106	    CCB[C_BIAS] = .CCB_P[C_BIAS];		!Copy buffer
;	  1107	    CCB[C_ADDR] = ch$plus(.CCB_P[C_ADDR],6);	! descriptor, incrementing
;	  1108	    CCB[C_CNT] = .CCB_P[C_CNT] - 6;		!  past the routing header
;	  1109	    CCB[C_LIN] = .CCB_P[C_LIN];			!Set the line number
;	  1110	    LINEb = $XPT_GET_LINE_DB(.ILINE);           ! Increment "arriving
;	  1111	    COUNTER_INCREMENT(LINEb,XPTend_rcv);        !  packets" ctr
;	  1112	    if ECLFWD(.CCB,.SOURCE,.DEST,0)		!Pass the buffer to Forwarding
;	  1113	    neq CS_SUC					!Rejected -
;	  1114		then TOSS(.CCB,.OLINE,.ILINE,.DEST);	!  throw it away
;	  1115	    end
;	  1116	else BPT(XPT$_DNS,.DEST)	!Destination is not Self, but output line is 0
;	  1117	
;	  1118	!
;	  1119	!  Next node in path is Phase III
;	  1120	!
;	  1121	
;	  1122	else if ((.Nty eql Full)
;	  1123	or (.Nty eql Small)) then begin
;	  1124	    CCB[C_BIAS] = .CCB_P[C_BIAS];	!Copy the
;	  1125	    CCB[C_ADDR] = .CCB_P[C_ADDR];	!  buffer descriptor
;	  1126	    CCB[C_CNT] = .CCB_P[C_CNT];		!  from the pass-through to the spawn
;	  1127	    LINEb = $XPT_GET_LINE_DB(.ILINE);	!Increment "transit packet
;	  1128	    COUNTER_INCREMENT(LINEb,XPTxit_rcv);!  received" counter
;	  1129	    LINEb = $XPT_GET_LINE_DB(.OLINE);	!Address output line data base again
;	  1130	    RET = FORWARDER(.CCB,.OLINE);	!Try to send the buffer out
;	  1131	    if .RET eql CE_DIS then		!Rejected for unreachability -
;	  1132		UNREACH(.CCB,.CCB_P,.SOURCE,	!  do unreachablility
;	  1133		    .DEST,.RFLG,$XPT$E_UNR)	!  processing
;	  1134	    else if .RET neq CS_SUC then	!Rejected for congestion -
;	  1135		TOSS(.CCB,.OLINE,.ILINE,.DEST)	!  throw buffer away
;	  1136	    else COUNTER_INCREMENT(LINEb,XPTxit_xmt) ! Accepted - update packet counter
;	  1137	    end
;	  1138	
;	  1139	!
;	  1140	!  Destination is Phase II
;	  1141	!
;	  1142	
;	  1143	else if ((.Nty eql PhTwo)
;	  1144	or (.Nty eql TOPS20)) then begin
;	  1145	    LINEb = $XPT_GET_LINE_DB(.ILINE);	!Increment "transit packet
;	  1146	    COUNTER_INCREMENT(LINEb,XPTxit_rcv);!  received" counter
;	  1147	    LINEb = $XPT_GET_LINE_DB(.OLINE);	!Address output line data base
;	  1148	    if .Nid neq .DEST then begin	!Destination is not adjacent -
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  28
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

;	  1149		TERMINATE(.CCB,CE_DIS);		!  throw buffer away
;	  1150		return;
;	  1151		end;
;	  1152	    RET = BLDPH2(.CCB,6,.DEST,		!Translate routing header
;	  1153		.SOURCE,.OLINE,.ILINE);		!  to Phase II
;	  1154	    if .RET eql CE_RTE then begin	!Resource failure -
;	  1155		UNSPAWN(.CCB);			!  get rid
;	  1156		TOSS(.CCB_P,.OLINE,.ILINE,.DEST)!  of buffer
;	  1157		end
;	  1158	    else if .RET eql CE_DIS then	!Unmappability -
;	  1159		UNREACH(.CCB,.CCB_P,SOURCE,	!  treat like
;	  1160		    .DEST,.RFLG,$XPT$E_UNR)	!  unreachability
;	  1161	    else begin				!Header built -
;	  1162		RET = FORWARDER(.CCB,.OLINE);	!  Try to forward the packet
;	  1163		if .RET eql CE_DIS then		!  Unreachable
;	  1164		    UNREACH(.CCB,.CCB_P,SOURCE,
;	  1165			.DEST,.RFLG,$XPT$E_UNR)
;	  1166		else if .RET neq CS_SUC then begin !  Congestion
;	  1167		    UNSPAWN(.CCB);
;	  1168		    TOSS(.CCB_P,.OLINE,.ILINE,.DEST);
;	  1169		    end
;	  1170		else begin
;	  1171		    COUNTER_INCREMENT(LINEb,XPTxit_xmt);! Update packet counter
;	  1172		    if .Nty eql PhTwo then
;	  1173			CALL$E(INTPH2,PD_XPE,.CCB_P,1,DEST,SOURCE)
;	  1174		    end
;	  1175		end
;	  1176	    end
;	  1177	
;	  1178	!
;	  1179	!  Invalid adjacent node type
;	  1180	!
;	  1181	
;	  1182	else BPT(XPT$_IANT,.Nty);
;	  1183	return;
;	  1184	end;					!End of RCVDAT


						.SBTTL	RCVDAT
000000	004167  000000G			RCVDAT::
					U.2:	JSR	R1,$SAVE5			;					0799
000004	162706  000022 				SUB	#22,SP
000010	016666  000040  000010 			MOV	40(SP),10(SP)			; CCB.P,*				1035
000016	012700  000016 				MOV	#16,R0
000022	066600  000010 				ADD	10(SP),R0
000026	010066  000006 				MOV	R0,6(SP)
000032	011067  000000G				MOV	(R0),KISAR6
000036	012700  000020 				MOV	#20,R0
000042	066600  000010 				ADD	10(SP),R0
000046	010066  000004 				MOV	R0,4(SP)
000052	011000 					MOV	(R0),R0				; *,PTR
000054	112066  000002 				MOVB	(R0)+,2(SP)			; PTR,RFLG				1036
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  29
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

000060	105066  000003 				CLRB	3(SP)				; RFLG
000064	112066  000020 				MOVB	(R0)+,20(SP)			; PTR,X					1037
000070	112066  000021 				MOVB	(R0)+,21(SP)			; PTR,X
000074	016666  000020  000014 			MOV	20(SP),14(SP)			; X,DEST
000102	112066  000020 				MOVB	(R0)+,20(SP)			; PTR,X					1038
000106	112066  000021 				MOVB	(R0)+,21(SP)			; PTR,X
000112	016666  000020  000016 			MOV	20(SP),16(SP)			; X,SOURCE
000120	005001 					CLR	R1				; VISIT					1039
000122	151001 					BISB	(R0),R1				; PTR,VISIT
000124	005201 					INC	R1				; VISIT					1040
000126	110110 					MOVB	R1,(R0)				; VISIT,PTR				1041
000130	016602  000014 				MOV	14(SP),R2			; DEST,*				1047
000134	010200 					MOV	R2,R0
000136	004767  000000G				JSR	PC,GTNODE
000142	010016 					MOV	R0,(SP)				; *,NODEB
000144	005003 					CLR	R3				; OLINE					1048
000146	032710  000400 				BIT	#400,(R0)			; *,NODEB				1049
000152	001001 					BNE	1$
000154	111003 					MOVB	(R0),R3				; NODEB,OLINE
000156	016600  000010 			1$:	MOV	10(SP),R0			;					1050
000162	116066  000010  000012 			MOVB	10(R0),12(SP)			; *,ILINE
000170	105066  000013 				CLRB	13(SP)				; ILINE
000174	016600  000012 				MOV	12(SP),R0			; ILINE,*				1051
000200	004767  000000G				JSR	PC,GTLINE
000204	010005 					MOV	R0,R5				; *,LINEB
000206	016700  000002G				MOV	.CRDAT+2,R0			;					1057
000212	020160  000050 				CMP	R1,50(R0)			; VISIT,*
000216	101011 					BHI	2$
000220	032766  000020  000002 			BIT	#20,2(SP)			; *,RFLG				1058
000226	001456 					BEQ	3$
000230	016000  000050 				MOV	50(R0),R0
000234	006300 					ASL	R0
000236	020100 					CMP	R1,R0				; VISIT,*
000240	101451 					BLOS	3$
000242	016700  000002G			2$:	MOV	.CRDAT+2,R0			;					1061
000246	062700  000130 				ADD	#130,R0
000252	004767  000000G				JSR	PC,$IC8
000256	010500 					MOV	R5,R0				; LINEB,*				1062
000260	062700  000070 				ADD	#70,R0
000264	004767  000000G				JSR	PC,$IC32
000270	004767  000000G				JSR	PC,$NLBEG			;					1063
000274	017646  000004 				MOV	@4(SP),-(SP)			;					1064
000300	012746  000001 				MOV	#1,-(SP)
000304	012746  000000G				MOV	#PKTA.HDR,-(SP)
000310	016700  000002G				MOV	.CRDAT+2,R0
000314	005046 					CLR	-(SP)
000316	116016  000002 				MOVB	2(R0),(SP)
000322	004767  000000G				JSR	PC,$CALLE
000326	012700  000400 				MOV	#400,R0				;					1065
000332	012701  177777 				MOV	#-1,R1
000336	004767  000000G				JSR	PC,$NLEND
000342	016616  000020 				MOV	20(SP),(SP)			;					1066
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  30
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

000346	012746  177760 				MOV	#-20,-(SP)
000352	004767  000000G				JSR	PC,TERMINATE
000356	062706  000012 				ADD	#12,SP				;					1057
000362	000571 					BR	12$				;					1059
000364	004767  000000G			3$:	JSR	PC,$CCBGT			;					1074
000370	103003 					BHIS	4$
000372	016646  000010 				MOV	10(SP),-(SP)			;					1075
000376	000541 					BR	10$
000400	016664  000010  000004 		4$:	MOV	10(SP),4(R4)			; *,*(CCB)				1078
000406	005064  000032 				CLR	32(R4)				; *(CCB)				1079
000412	010300 					MOV	R3,R0				; OLINE,*				1085
000414	004767  000000G				JSR	PC,GTLINE
000420	010005 					MOV	R0,R5				; *,LINEB
000422	016700  000002G				MOV	.CRDAT+2,R0			;					1087
000426	020260  000016 				CMP	R2,16(R0)
000432	101403 					BLOS	5$
000434	012701  000002 				MOV	#2,R1				; *,RET
000440	000412 					BR	7$
000442	005776  000000 			5$:	TST	@0(SP)				; NODEB					1088
000446	100005 					BPL	6$
000450	005703 					TST	R3				; OLINE					1089
000452	001436 					BEQ	9$
000454	121527  000010 				CMPB	(R5),#10			; LINEB,*
000460	001431 					BEQ	8$
000462	012701  000001 			6$:	MOV	#1,R1				; *,RET					1090
000466	010446 				7$:	MOV	R4,-(SP)			; CCB,*					1094
000470	016646  000012 				MOV	12(SP),-(SP)
000474	016646  000022 				MOV	22(SP),-(SP)			; SOURCE,*
000500	010246 					MOV	R2,-(SP)
000502	016646  000012 				MOV	12(SP),-(SP)			; RFLG,*
000506	010146 					MOV	R1,-(SP)			; RET,*
000510	004767  176732 				JSR	PC,U.22
000514	016600  000026 				MOV	26(SP),R0			; ILINE,*				1095
000520	004767  000000G				JSR	PC,GTLINE
000524	010005 					MOV	R0,R5				; *,LINEB
000526	062700  000070 				ADD	#70,R0				;					1096
000532	004767  000000G				JSR	PC,$IC32
000536	062706  000014 				ADD	#14,SP				;					1086
000542	000501 					BR	12$				;					1093
000544	005703 				8$:	TST	R3				; OLINE					1104
000546	001101 					BNE	13$
000550	032776  000400  000000 		9$:	BIT	#400,@0(SP)			; *,NODEB				1105
000556	001462 					BEQ	11$
000560	017664  000006  000016 			MOV	@6(SP),16(R4)			; *,*(CCB)				1106
000566	017664  000004  000020 			MOV	@4(SP),20(R4)			; *,*(CCB)				1107
000574	062764  000006  000020 			ADD	#6,20(R4)			; *,*(CCB)
000602	016600  000010 				MOV	10(SP),R0			;					1108
000606	016064  000022  000022 			MOV	22(R0),22(R4)			; *,*(CCB)
000614	162764  000006  000022 			SUB	#6,22(R4)			; *,*(CCB)
000622	116064  000010  000010 			MOVB	10(R0),10(R4)			; *,*(CCB)				1109
000630	016600  000012 				MOV	12(SP),R0			; ILINE,*				1110
000634	004767  000000G				JSR	PC,GTLINE
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  31
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

000640	010005 					MOV	R0,R5				; *,LINEB
000642	062700  000056 				ADD	#56,R0				;					1111
000646	004767  000000G				JSR	PC,$IC32
000652	010446 					MOV	R4,-(SP)			; CCB,*					1112
000654	016646  000020 				MOV	20(SP),-(SP)			; SOURCE,*
000660	010246 					MOV	R2,-(SP)
000662	005046 					CLR	-(SP)
000664	004767  000000G				JSR	PC,ECLFWD
000670	062706  000010 				ADD	#10,SP
000674	005300 					DEC	R0				;					1113
000676	001423 					BEQ	12$
000700	010446 					MOV	R4,-(SP)			; CCB,*					1114
000702	010346 				10$:	MOV	R3,-(SP)			; OLINE,*
000704	016646  000016 				MOV	16(SP),-(SP)			; ILINE,*
000710	010246 					MOV	R2,-(SP)
000712	004767  176356 				JSR	PC,U.19
000716	062706  000010 				ADD	#10,SP
000722	000411 					BR	12$				;					1105
000724	010246 				11$:	MOV	R2,-(SP)			;					1116
000726	012746  100032 				MOV	#-77746,-(SP)
000732	012746  000002 				MOV	#2,-(SP)
000736	004767  000000G				JSR	PC,$IGNAL
000742	062706  000006 				ADD	#6,SP
000746	000167  000730 			12$:	JMP	29$				;					1104
000752	116500  000002 			13$:	MOVB	2(R5),R0			; *(LINEB),*				1122
000756	020027  000002 				CMP	R0,#2
000762	001403 					BEQ	14$
000764	020027  000003 				CMP	R0,#3				;					1123
000770	001102 					BNE	17$
000772	017664  000006  000016 		14$:	MOV	@6(SP),16(R4)			; *,*(CCB)				1124
001000	017664  000004  000020 			MOV	@4(SP),20(R4)			; *,*(CCB)				1125
001006	016600  000010 				MOV	10(SP),R0			;					1126
001012	016064  000022  000022 			MOV	22(R0),22(R4)			; *,*(CCB)
001020	016600  000012 				MOV	12(SP),R0			; ILINE,*				1127
001024	004767  000000G				JSR	PC,GTLINE
001030	010005 					MOV	R0,R5				; *,LINEB
001032	062700  000070 				ADD	#70,R0				;					1128
001036	004767  000000G				JSR	PC,$IC32
001042	010300 					MOV	R3,R0				; OLINE,*				1129
001044	004767  000000G				JSR	PC,GTLINE
001050	010005 					MOV	R0,R5				; *,LINEB
001052	010446 					MOV	R4,-(SP)			; CCB,*					1130
001054	010346 					MOV	R3,-(SP)			; OLINE,*
001056	004767  000000G				JSR	PC,FORWARDER
001062	010001 					MOV	R0,R1				; *,RET
001064	020127  177520 				CMP	R1,#-260			; RET,*					1131
001070	001017 					BNE	15$
001072	010416 					MOV	R4,(SP)				; CCB,*					1132
001074	016646  000014 				MOV	14(SP),-(SP)
001100	016646  000024 				MOV	24(SP),-(SP)			; SOURCE,*
001104	010246 					MOV	R2,-(SP)
001106	016646  000014 				MOV	14(SP),-(SP)			; RFLG,*
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  32
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

001112	012746  000001 				MOV	#1,-(SP)
001116	004767  176324 				JSR	PC,U.22
001122	062706  000012 				ADD	#12,SP
001126	000460 					BR	19$				;					1131
001130	020127  000001 			15$:	CMP	R1,#1				; RET,*					1134
001134	001412 					BEQ	16$
001136	010416 					MOV	R4,(SP)				; CCB,*					1135
001140	010346 					MOV	R3,-(SP)			; OLINE,*
001142	016646  000020 				MOV	20(SP),-(SP)			; ILINE,*
001146	010246 					MOV	R2,-(SP)
001150	004767  176120 				JSR	PC,U.19
001154	062706  000006 				ADD	#6,SP
001160	000443 					BR	19$				;					1134
001162	010500 				16$:	MOV	R5,R0				; LINEB,*				1136
001164	062700  000074 				ADD	#74,R0
001170	004767  000000G				JSR	PC,$IC32
001174	000435 					BR	19$				;					1122
001176	020027  000004 			17$:	CMP	R0,#4				;					1143
001202	001405 					BEQ	18$
001204	020027  000005 				CMP	R0,#5				;					1144
001210	001402 					BEQ	18$
001212	000167  000442 				JMP	26$
001216	016600  000012 			18$:	MOV	12(SP),R0			; ILINE,*				1145
001222	004767  000000G				JSR	PC,GTLINE
001226	010005 					MOV	R0,R5				; *,LINEB
001230	062700  000070 				ADD	#70,R0				;					1146
001234	004767  000000G				JSR	PC,$IC32
001240	010300 					MOV	R3,R0				; OLINE,*				1147
001242	004767  000000G				JSR	PC,GTLINE
001246	010005 					MOV	R0,R5				; *,LINEB
001250	026502  000004 				CMP	4(R5),R2			; *(LINEB),*				1148
001254	001407 					BEQ	20$
001256	010446 					MOV	R4,-(SP)			; CCB,*					1149
001260	012746  177520 				MOV	#-260,-(SP)
001264	004767  000000G				JSR	PC,TERMINATE
001270	000167  000404 			19$:	JMP	28$				;					1148
001274	010446 				20$:	MOV	R4,-(SP)			; CCB,*					1152
001276	012746  000006 				MOV	#6,-(SP)
001302	010246 					MOV	R2,-(SP)
001304	016646  000024 				MOV	24(SP),-(SP)			; SOURCE,*
001310	010346 					MOV	R3,-(SP)			; OLINE,*
001312	016646  000024 				MOV	24(SP),-(SP)			; ILINE,*
001316	004767  000000V				JSR	PC,U.4
001322	010001 					MOV	R0,R1				; *,RET
001324	020127  177730 				CMP	R1,#-50				; RET,*					1154
001330	001015 					BNE	21$
001332	010416 					MOV	R4,(SP)				; CCB,*					1155
001334	004767  000000G				JSR	PC,UNSPAWN
001340	016616  000024 				MOV	24(SP),(SP)			;					1156
001344	010346 					MOV	R3,-(SP)			; OLINE,*
001346	016646  000030 				MOV	30(SP),-(SP)			; ILINE,*
001352	010246 					MOV	R2,-(SP)
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  33
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

001354	004767  175714 				JSR	PC,U.19
001360	022626 					CMP	(SP)+,(SP)+			;					1154
001362	000533 					BR	25$
001364	020127  177520 			21$:	CMP	R1,#-260			; RET,*					1158
001370	001020 					BNE	22$
001372	010416 					MOV	R4,(SP)				; CCB,*					1159
001374	016646  000024 				MOV	24(SP),-(SP)
001400	012746  000036 				MOV	#36,-(SP)
001404	060616 					ADD	SP,(SP)				; SOURCE,*
001406	010246 					MOV	R2,-(SP)
001410	016646  000024 				MOV	24(SP),-(SP)			; RFLG,*
001414	012746  000001 				MOV	#1,-(SP)
001420	004767  176022 				JSR	PC,U.22
001424	062706  000010 				ADD	#10,SP
001430	000510 					BR	25$				;					1158
001432	010416 				22$:	MOV	R4,(SP)				; CCB,*					1162
001434	010346 					MOV	R3,-(SP)			; OLINE,*
001436	004767  000000G				JSR	PC,FORWARDER
001442	010001 					MOV	R0,R1				; *,RET
001444	020127  177520 				CMP	R1,#-260			; RET,*					1163
001450	001020 					BNE	23$
001452	010416 					MOV	R4,(SP)				; CCB,*					1164
001454	016646  000026 				MOV	26(SP),-(SP)
001460	012746  000040 				MOV	#40,-(SP)
001464	060616 					ADD	SP,(SP)				; SOURCE,*
001466	010246 					MOV	R2,-(SP)
001470	016646  000026 				MOV	26(SP),-(SP)			; RFLG,*
001474	012746  000001 				MOV	#1,-(SP)
001500	004767  175742 				JSR	PC,U.22
001504	062706  000012 				ADD	#12,SP
001510	000460 					BR	25$				;					1163
001512	005301 				23$:	DEC	R1				; RET					1166
001514	001416 					BEQ	24$
001516	010416 					MOV	R4,(SP)				; CCB,*					1167
001520	004767  000000G				JSR	PC,UNSPAWN
001524	016616  000026 				MOV	26(SP),(SP)			;					1168
001530	010346 					MOV	R3,-(SP)			; OLINE,*
001532	016646  000032 				MOV	32(SP),-(SP)			; ILINE,*
001536	010246 					MOV	R2,-(SP)
001540	004767  175530 				JSR	PC,U.19
001544	062706  000006 				ADD	#6,SP				;					1166
001550	000440 					BR	25$
001552	010500 				24$:	MOV	R5,R0				; LINEB,*				1171
001554	062700  000074 				ADD	#74,R0
001560	004767  000000G				JSR	PC,$IC32
001564	126527  000002  000004 			CMPB	2(R5),#4			; *(LINEB),*				1172
001572	001027 					BNE	25$
001574	012716  000034 				MOV	#34,(SP)			;					1173
001600	060616 					ADD	SP,(SP)				; SOURCE,*
001602	012746  000034 				MOV	#34,-(SP)
001606	060616 					ADD	SP,(SP)				; DEST,*
001610	012746  000001 				MOV	#1,-(SP)
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  34
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (4)

001614	016646  000032 				MOV	32(SP),-(SP)
001620	012746  000004 				MOV	#4,-(SP)
001624	012746  000000G				MOV	#INTPH2,-(SP)
001630	016700  000002G				MOV	.CRDAT+2,R0
001634	005046 					CLR	-(SP)
001636	116016  000002 				MOVB	2(R0),(SP)
001642	004767  000000G				JSR	PC,$CALLE
001646	062706  000014 				ADD	#14,SP
001652	062706  000010 			25$:	ADD	#10,SP				;					1144
001656	000407 					BR	27$				;					1143
001660	010046 				26$:	MOV	R0,-(SP)			;					1182
001662	012746  100042 				MOV	#-77736,-(SP)
001666	012746  000002 				MOV	#2,-(SP)
001672	004767  000000G				JSR	PC,$IGNAL
001676	005726 				27$:	TST	(SP)+				;					1143
001700	022626 				28$:	CMP	(SP)+,(SP)+			;					1122
001702	062706  000022 			29$:	ADD	#22,SP				;					0799
001706	000207 					RTS	PC

; Routine Size:  484 words,	Routine Base:  $CODE$ + 2120
; Maximum stack depth per invocation:  29 words
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  35
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

;	  1185	
;	  1186	global
;	  1187	routine RCVPH2 (CCB_P): novalue =
;	  1188	
;	  1189	!++
;	  1190	! FUNCTIONAL DESCRIPTION:
;	  1191	!
;	  1192	!  This routine processes data packets received from the Data
;	  1193	! Link Layer which have Phase II routing headers.  It translates
;	  1194	! the routing header to determine the output line (or local
;	  1195	! Transport user) corresponding to the specified destination,
;	  1196	! and attempts to forward the packet to that destination.  If
;	  1197	! the destination is unreachable, the routine will return a DC to
;	  1198	! the caller.  If the packet is for Self  (a local Transport user),
;	  1199	! the spawned CCB is set up to point past the  routing header,
;	  1200	! and the packet is forwarded to the ECL.  If the destination node
;	  1201	! is also a Phase II node, the packet will be sent to the
;	  1202	! destination unchanged.  If the immediate next node over the
;	  1203	! output line is a Phase III node, routine BLDPH3 will be called
;	  1204	! to build a new routing header and point the spawned CCB to it.
;	  1205	! If the destination node address cannot be determined, the packet
;	  1206	! will always be discarded.  If, for congestion or resource reasons,
;	  1207	! the packet cannot be forwarded at the time, it will be queued for
;	  1208	! eventual reprocessing if either the source or destination is a
;	  1209	! standard Phase II node; otherwise, it will be discarded.
;	  1210	!
;	  1211	! FORMAL PARAMETERS
;	  1212	!
;	  1213	!	CCB_P - CCB for the received packet; the "pass-through" CCB
;	  1214	!
;	  1215	! IMPLICIT INPUTS
;	  1216	!
;	  1217	!	Reach, OL, Nty, Nid, User
;	  1218	!
;	  1219	! ROUTINE VALUE:
;	  1220	! COMPLETION CODES:
;	  1221	!
;	  1222	!	NONE.
;	  1223	!
;	  1224	! SIDE EFFECTS:
;	  1225	!
;	  1226	!	May temporarily modify the buffer descriptor for the pass-through CCB.
;	  1227	!
;	  1228	!--
;	  1229	
;	  1230	begin
;	  1231	
;	  1232	forward routine TOSS: novalue;
;	  1233	
;	  1234	
;	  1235	!***********************************************!
;	  1236	!						!
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  36
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

;	  1237	!  Routine to handle "unreachability" case	!
;	  1238	!						!
;	  1239	!***********************************************!
;	  1240	
;	  1241	routine UNREACH (CCB,CCB_P,ILINE,CODE): novalue =
;	  1242	begin
;	  1243	map CCB: ref block field (C_XPT_fields);
;	  1244	local LINEb;
;	  1245	require 'XPTSYM';
;	  1282	map CCB_P: ref block field(C_XPT_fields);
;	  1283	local LENS,LEND,LINKS,LINKD,RET;
;	  1284	local WORKD: vector[3], WORKS: vector[3];
;	  1285	pointer PTR;
;	  1286	
;	  1287	!
;	  1288	!  Map in the pass-through buffer; address input line data base
;	  1289	!
;	  1290	
;	  1291	MAPBUF(.CCB_P,PTR);
;	  1292	LINEb = $XPT_GET_LINE_DB(.ILINE);
;	  1293	
;	  1294	!
;	  1295	!  Update node counters and signal an event
;	  1296	!
;	  1297	
;	  1298	if .CODE eql $XPT$E_UNR then			! Update
;	  1299	    COUNTER_INCREMENT(XPTDB,XPTunreach_loss)    !   "unreachability"
;	  1300	else if .CODE eql $XPT$E_RNG then		!   or "node out of
;	  1301	    COUNTER_INCREMENT(XPTDB,XPTrange_loss)      !   range" or "header
;	  1302	else COUNTER_INCREMENT(XPTDB,XPTfmt_loss);      !   format error" counter
;	  1303	RET = getb(PTR);				! Pick up "routing flags"
;	  1304	if bitoff(.RET,2) then RET = 5			! No routing header
;	  1305	else begin					! Routing header -
;	  1306	    RET = getb(PTR);				!   pick up the first node lgth
;	  1307	    PTR = ch$plus(.PTR,.RET);			!   jump over the node name
;	  1308	    RET = .RET + getb(PTR) + 2 + 1 + 5;		!   add in second node lgth
;	  1309	    end;					!   and the rthdr & NSP hdr
;	  1310	RET = MINU(.RET,55);				!   (but don't overflow buffer)
;	  1311	MAPBUF(.CCB_P,PTR);
;	  1312	$NM_LOG_BEGIN();
;	P 1313	PARAMETER_HI((if .CODE eql $XPT$E_FMT then 1 else 0),
;	  1314	             .RET,.PTR);                        ! Move "packet beginning" into
;	  1315	$NM_LOG_END(4^6+.CODE,.NMXid);			! Log the event
;	  1316	
;	  1317	!
;	  1318	!  If the message came from a Phase II+ node, just toss it away
;	  1319	!
;	  1320	
;	  1321	if .Nty eql TOPS20 then begin
;	  1322	    TOSS(.CCB,0,0,.ILINE);
;	  1323	    return;
;	  1324	    end;
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  37
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

;	  1325	
;	  1326	!
;	  1327	!  If the incoming message had a routing header, build the DC routing header
;	  1328	!  by reversing the destination and source fields in the input routing header
;	  1329	!
;	  1330	
;	  1331	RET = getb(PTR);			!Pick up routing or message flags
;	  1332	if bitoff(.RET,2) then			!No routing header -
;	  1333	    LEND = 0				!  set "no header" indication
;	  1334	else begin				!  NOTE: source/dest names switched
;	  1335						!		***
;	  1336	    LENS = getb(PTR);			!Pick up destination node name length
;	  1337	    ch$move(MINU(.LENS,6),.PTR,		!Save destination
;	  1338		byt$ptr(WORKS,0));		!  name field
;	  1339	    PTR = ch$plus(.PTR,.LENS);		!Advance over name
;	  1340	    LEND = getb(PTR);			!Pick up source node name length
;	  1341	    ch$move(MINU(.LEND,6),.PTR,		!Save source
;	  1342		byt$ptr(WORKD,0));		!  name field
;	  1343	    PTR = ch$plus(.PTR,.LEND);		!Advance over name
;	  1344	    RET = getb(PTR);			!Pick up MSGFLGS
;	  1345	    end;
;	  1346	
;	  1347	LINKS = getw(PTR);			!Get destination and source link
;	  1348	LINKD = getw(PTR);			!  addresses, and switch them
;	  1349	
;	  1350	!
;	  1351	!  Build a DC message with the specified disconnect code
;	  1352	!
;	  1353	
;	  1354	if .RET eql DC_MSGflgs then begin	!If the message was a DC,
;	  1355	    TERMINATE(.CCB,CE_DIS);		!  ignore it
;	  1356	    return;
;	  1357	    end;
;	  1358	
;	  1359	if .CCB [C_XPT_ADJUST] neq 0 then begin	!Un-adjust the spawned CCB
;	  1360	    CCB_P[C_ADDR] = ch$plus(.CCB_P[C_ADDR],-.CCB[C_XPT_ADJUST]);
;	  1361	    CCB_P[C_CNT] = .CCB_P[C_CNT] + .CCB[C_XPT_ADJUST];
;	  1362	    end;
;	  1363	    
;	  1364	CCB[C_XPT_TYPE] = 0;
;	  1365	CCB[C_XPT_ADJUST] = 0;
;	  1366	CCB[C_BIAS] = .CCB_P[C_BIAS];		!Copy pass-through
;	  1367	CCB[C_ADDR] = .CCB_P[C_ADDR];		!  buffer descriptor into spawn
;	  1368	CCB[C_CHN] = 0;
;	  1369	
;	  1370	INPUTcount = .INPUTcount - 1;		!Finish up bookkeeping
;	  1371	DLLquota = .DLLquota + 1;		!  for the buffer
;	  1372	
;	P 1373	CALL$E(SEND_DC,(PD_XPE),.CCB,.LINEb,
;	P 1374	    .LEND,byt$ptr(WORKD,0),.LENS,byt$ptr(WORKS,0),.LINKD,.LINKS,
;	  1375	    (if .CODE eql $XPT$E_FMT then MISC_ERROR else NO_PATH_ERROR));
;	  1376	
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  38
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

;	  1377	end;


						.GLOBL	$DPHI, SEND.DC


						.SBTTL	UNREACH
000000	004167  000000G			; UNREACH
					U.28:	JSR	R1,$SAVE5			;					1241
000004	162706  000026 				SUB	#26,SP
000010	016605  000050 				MOV	50(SP),R5			; CCB.P,*				1291
000014	016567  000016  000000G			MOV	16(R5),KISAR6
000022	012766  000020  000002 			MOV	#20,2(SP)
000030	060566  000002 				ADD	R5,2(SP)
000034	017602  000002 				MOV	@2(SP),R2			; *,PTR
000040	016600  000046 				MOV	46(SP),R0			; ILINE,*				1292
000044	004767  000000G				JSR	PC,GTLINE
000050	010016 					MOV	R0,(SP)				; *,LINEB
000052	016700  000002G				MOV	.CRDAT+2,R0			;					1299
000056	016604  000044 				MOV	44(SP),R4			; CODE,*				1298
000062	020427  000001 				CMP	R4,#1
000066	001007 					BNE	1$
000070	012701  000136 				MOV	#136,R1				;					1299
000074	060001 					ADD	R0,R1
000076	005211 					INC	(R1)
000100	001014 					BNE	4$
000102	005311 					DEC	(R1)
000104	000412 					BR	4$				;					1298
000106	020427  000002 			1$:	CMP	R4,#2				;					1300
000112	001003 					BNE	2$
000114	062700  000131 				ADD	#131,R0				;					1301
000120	000402 					BR	3$
000122	062700  000133 			2$:	ADD	#133,R0				;					1302
000126	004767  000000G			3$:	JSR	PC,$IC8
000132	005003 				4$:	CLR	R3				; RET					1303
000134	152203 					BISB	(R2)+,R3			; PTR,RET
000136	032703  000002 				BIT	#2,R3				; *,RET					1304
000142	001003 					BNE	5$
000144	012703  000005 				MOV	#5,R3				; *,RET
000150	000411 					BR	6$
000152	005003 				5$:	CLR	R3				; RET					1306
000154	152203 					BISB	(R2)+,R3			; PTR,RET
000156	060302 					ADD	R3,R2				; RET,PTR				1307
000160	005000 					CLR	R0				;					1308
000162	152200 					BISB	(R2)+,R0			; PTR,*
000164	060300 					ADD	R3,R0				; RET,*
000166	010003 					MOV	R0,R3				; *,RET
000170	062703  000010 				ADD	#10,R3				; *,RET
000174	010300 				6$:	MOV	R3,R0				; RET,*					1310
000176	020027  000067 				CMP	R0,#67
000202	101402 					BLOS	7$
000204	012700  000067 				MOV	#67,R0
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  39
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

000210	010003 				7$:	MOV	R0,R3				; *,RET
000212	016567  000016  000000G			MOV	16(R5),KISAR6			;					1311
000220	017602  000002 				MOV	@2(SP),R2			; *,PTR
000224	004767  000000G				JSR	PC,$NLBEG			;					1312
000230	005066  000004 				CLR	4(SP)				;					1314
000234	020427  000004 				CMP	R4,#4
000240	001005 					BNE	8$
000242	005266  000004 				INC	4(SP)
000246	012746  000001 				MOV	#1,-(SP)
000252	000401 					BR	9$
000254	005046 				8$:	CLR	-(SP)
000256	010300 				9$:	MOV	R3,R0				; RET,*
000260	010201 					MOV	R2,R1				; PTR,*
000262	004767  000000G				JSR	PC,$DPHI
000266	062704  000400 				ADD	#400,R4				;					1315
000272	010400 					MOV	R4,R0
000274	016646  000002 				MOV	2(SP),-(SP)			; LINEB,*
000300	062716  000034 				ADD	#34,(SP)
000304	013601 					MOV	@(SP)+,R1
000306	004767  000000G				JSR	PC,$NLEND
000312	016600  000002 				MOV	2(SP),R0			; LINEB,*				1321
000316	126027  000002  000005 			CMPB	2(R0),#5			; *(LINEB),*
000324	001013 					BNE	10$
000326	016616  000054 				MOV	54(SP),(SP)			; CCB,*					1322
000332	005046 					CLR	-(SP)
000334	005046 					CLR	-(SP)
000336	016646  000054 				MOV	54(SP),-(SP)			; ILINE,*
000342	004767  000000V				JSR	PC,U.27
000346	062706  000010 				ADD	#10,SP				;					1321
000352	000500 					BR	15$
000354	005003 				10$:	CLR	R3				; RET					1331
000356	152203 					BISB	(R2)+,R3			; PTR,RET
000360	032703  000002 				BIT	#2,R3				; *,RET					1332
000364	001002 					BNE	11$
000366	005004 					CLR	R4				; LEND					1333
000370	000442 					BR	14$				;					1332
000372	005001 				11$:	CLR	R1				; LENS					1336
000374	152201 					BISB	(R2)+,R1			; PTR,LENS
000376	010116 					MOV	R1,(SP)				; LENS,*				1337
000400	020127  000006 				CMP	R1,#6
000404	101402 					BLOS	12$
000406	012716  000006 				MOV	#6,(SP)
000412	010246 				12$:	MOV	R2,-(SP)			; PTR,*					1338
000414	012746  000020 				MOV	#20,-(SP)
000420	060616 					ADD	SP,(SP)				; WORKS,*
000422	004767  000000G				JSR	PC,BL$MOV
000426	060102 					ADD	R1,R2				; LENS,PTR				1339
000430	005004 					CLR	R4				; LEND					1340
000432	152204 					BISB	(R2)+,R4			; PTR,LEND
000434	010416 					MOV	R4,(SP)				; LEND,*				1341
000436	020427  000006 				CMP	R4,#6
000442	101402 					BLOS	13$
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  40
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

000444	012716  000006 				MOV	#6,(SP)
000450	010246 				13$:	MOV	R2,-(SP)			; PTR,*					1342
000452	012746  000032 				MOV	#32,-(SP)
000456	060616 					ADD	SP,(SP)				; WORKD,*
000460	004767  000000G				JSR	PC,BL$MOV
000464	060402 					ADD	R4,R2				; LEND,PTR				1343
000466	005003 					CLR	R3				; RET					1344
000470	152203 					BISB	(R2)+,R3			; PTR,RET
000472	062706  000010 				ADD	#10,SP				;					1334
000476	112266  000012 			14$:	MOVB	(R2)+,12(SP)			; PTR,X					1347
000502	112266  000013 				MOVB	(R2)+,13(SP)			; PTR,X
000506	016666  000012  000010 			MOV	12(SP),10(SP)			; X,LINKS
000514	112266  000012 				MOVB	(R2)+,12(SP)			; PTR,X					1348
000520	112266  000013 				MOVB	(R2)+,13(SP)			; PTR,X
000524	016602  000012 				MOV	12(SP),R2			; X,LINKD
000530	020327  000110 				CMP	R3,#110				; RET,*					1354
000534	001010 					BNE	16$
000536	016616  000054 				MOV	54(SP),(SP)			; CCB,*					1355
000542	012746  177520 				MOV	#-260,-(SP)
000546	004767  000000G				JSR	PC,TERMINATE
000552	022626 					CMP	(SP)+,(SP)+			;					1354
000554	000522 				15$:	BR	20$
000556	016603  000054 			16$:	MOV	54(SP),R3			; CCB,*					1359
000562	012700  000032 				MOV	#32,R0
000566	060300 					ADD	R3,R0
000570	105760  000001 				TSTB	1(R0)
000574	001423 					BEQ	17$
000576	116046  000001 				MOVB	1(R0),-(SP)			;					1360
000602	105716 					TSTB	(SP)
000604	006746 					SXT	-(SP)
000606	116616  000002 				MOVB	2(SP),(SP)
000612	162676  000006 				SUB	(SP)+,@6(SP)
000616	116016  000001 				MOVB	1(R0),(SP)			;					1361
000622	105716 					TSTB	(SP)
000624	006746 					SXT	-(SP)
000626	116616  000002 				MOVB	2(SP),(SP)
000632	066516  000022 				ADD	22(R5),(SP)
000636	012665  000022 				MOV	(SP)+,22(R5)
000642	005726 					TST	(SP)+
000644	105010 				17$:	CLRB	(R0)				;					1364
000646	105060  000001 				CLRB	1(R0)				;					1365
000652	016563  000016  000016 			MOV	16(R5),16(R3)			;					1366
000660	017663  000004  000020 			MOV	@4(SP),20(R3)			;					1367
000666	005063  000002 				CLR	2(R3)				;					1368
000672	016605  000002 				MOV	2(SP),R5			; LINEB,*				1370
000676	105365  000043 				DECB	43(R5)				; *(LINEB)
000702	016705  000002G				MOV	.CRDAT+2,R5
000706	105265  000035 				INCB	35(R5)				;					1371
000712	032766  000001  000006 			BIT	#1,6(SP)			;					1375
000720	001403 					BEQ	18$
000722	012716  000007 				MOV	#7,(SP)
000726	000402 					BR	19$
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  41
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

000730	012716  000047 			18$:	MOV	#47,(SP)
000734	016646  000010 			19$:	MOV	10(SP),-(SP)			; LINKS,*
000740	010246 					MOV	R2,-(SP)			; LINKD,*
000742	012746  000022 				MOV	#22,-(SP)
000746	060616 					ADD	SP,(SP)				; WORKS,*
000750	010146 					MOV	R1,-(SP)			; LENS,*
000752	012746  000034 				MOV	#34,-(SP)
000756	060616 					ADD	SP,(SP)				; WORKD,*
000760	010446 					MOV	R4,-(SP)			; LEND,*
000762	016646  000016 				MOV	16(SP),-(SP)			; LINEB,*
000766	010346 					MOV	R3,-(SP)
000770	012746  000011 				MOV	#11,-(SP)
000774	012746  000000G				MOV	#SEND.DC,-(SP)
001000	016700  000002G				MOV	.CRDAT+2,R0
001004	005046 					CLR	-(SP)
001006	116016  000002 				MOVB	2(R0),(SP)
001012	004767  000000G				JSR	PC,$CALLE
001016	062706  000030 				ADD	#30,SP				;					1242
001022	062706  000026 			20$:	ADD	#26,SP				;					1241
001026	000207 					RTS	PC

; Routine Size:  268 words,	Routine Base:  $CODE$ + 4030
; Maximum stack depth per invocation:  30 words


;	  1378	
;	  1379	
;	  1380	
;	  1381	!*******************************************************!
;	  1382	!							!
;	  1383	!  Routine to either throw away a packet or queue it	!
;	  1384	!  for eventual reprocessing				!
;	  1385	!							!
;	  1386	!*******************************************************!
;	  1387	
;	  1388	routine TOSS (CCB,OLINE,DEST,ILINE): novalue =
;	  1389	begin
;	  1390	map CCB: ref block field (C_XPT_fields);
;	  1391	
;	  1392	local LINEb;
;	  1393	require 'XPTSYM';
;	  1430	local CCB_P;
;	  1431	
;	  1432	CCB_P = .CCB[C_STK];
;	  1433	
;	  1434	if
;	  1435	    (begin
;	  1436	    LINEb = $XPT_GET_LINE_DB(.OLINE);
;	  1437	    (.OLINE neq 0)
;	  1438	    and (.Nty eql PhTwo)
;	  1439	    and (.Nid eql .DEST)
;	  1440	    end
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  42
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

;	  1441	or
;	  1442	    begin
;	  1443	    LINEb = $XPT_GET_LINE_DB(.ILINE);
;	  1444	    (.ILINE neq 0)
;	  1445	    and (.Nty eql PhTwo)
;	  1446	    end)
;	  1447	then RE_QUEUE (if .CCB[C_OWN] eql PD_XPT then
;	  1448			(UNSPAWN(.CCB); .CCB_P)
;	  1449		      else .CCB)
;	  1450	else begin
;	  1451	    if .OLINE neq 0 then begin
;	  1452		LINEb = $XPT_GET_LINE_DB(.OLINE);
;	  1453		COUNTER_INCREMENT(LINEb,XPTxit_cng);
;	  1454		end
;	  1455	    else begin
;	  1456		LINEb = $XPT_GET_LINE_DB(.ILINE);
;	  1457		COUNTER_INCREMENT(LINEb,XPTend_cng);
;	  1458		end;
;	  1459	    TERMINATE(.CCB,CE_RTE);
;	  1460	    end;
;	  1461	end;


						.SBTTL	TOSS
000000	004167  000000G			; TOSS
					U.27:	JSR	R1,$SAVE5			;					1388
000004	016602  000024 				MOV	24(SP),R2			; CCB,*					1432
000010	016205  000004 				MOV	4(R2),R5			; *,CCB.P
000014	016604  000022 				MOV	22(SP),R4			; OLINE,*				1436
000020	010400 					MOV	R4,R0
000022	004767  000000G				JSR	PC,GTLINE
000026	010001 					MOV	R0,R1				; *,LINEB
000030	005003 					CLR	R3				;					1437
000032	005704 					TST	R4
000034	001411 					BEQ	1$
000036	005203 					INC	R3
000040	126127  000002  000004 			CMPB	2(R1),#4			; *(LINEB),*				1438
000046	001004 					BNE	1$
000050	026166  000004  000020 			CMP	4(R1),20(SP)			; *(LINEB),DEST				1439
000056	001414 					BEQ	2$
000060	016600  000016 			1$:	MOV	16(SP),R0			; ILINE,*				1443
000064	004767  000000G				JSR	PC,GTLINE
000070	010001 					MOV	R0,R1				; *,LINEB
000072	005766  000016 				TST	16(SP)				; ILINE					1444
000076	001423 					BEQ	5$
000100	126127  000002  000004 			CMPB	2(R1),#4			; *(LINEB),*				1445
000106	001017 					BNE	5$
000110	016700  000002G			2$:	MOV	.CRDAT+2,R0			;					1447
000114	126260  000006  000004 			CMPB	6(R2),4(R0)
000122	001005 					BNE	3$
000124	010246 					MOV	R2,-(SP)			;					1448
000126	004767  000000G				JSR	PC,UNSPAWN
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  43
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

000132	010516 					MOV	R5,(SP)				; CCB.P,*				1447
000134	000401 					BR	4$
000136	010246 				3$:	MOV	R2,-(SP)
000140	004767  000000G			4$:	JSR	PC,RE.QUEUE
000144	000435 					BR	9$				;					1434
000146	006003 				5$:	ROR	R3				;					1451
000150	103012 					BCC	6$
000152	010400 					MOV	R4,R0				;					1452
000154	004767  000000G				JSR	PC,GTLINE
000160	010001 					MOV	R0,R1				; *,LINEB
000162	012700  000100 				MOV	#100,R0				;					1453
000166	060100 					ADD	R1,R0				; LINEB,*
000170	005210 					INC	(R0)
000172	001014 					BNE	8$
000174	000412 					BR	7$
000176	016600  000016 			6$:	MOV	16(SP),R0			; ILINE,*				1456
000202	004767  000000G				JSR	PC,GTLINE
000206	010001 					MOV	R0,R1				; *,LINEB
000210	012700  000066 				MOV	#66,R0				;					1457
000214	060100 					ADD	R1,R0				; LINEB,*
000216	005210 					INC	(R0)
000220	001001 					BNE	8$
000222	005310 				7$:	DEC	(R0)
000224	010246 				8$:	MOV	R2,-(SP)			;					1459
000226	012746  177730 				MOV	#-50,-(SP)
000232	004767  000000G				JSR	PC,TERMINATE
000236	005726 					TST	(SP)+				;					1450
000240	005726 				9$:	TST	(SP)+				;					1389
000242	000207 					RTS	PC				;					1388

; Routine Size:  82 words,	Routine Base:  $CODE$ + 5060
; Maximum stack depth per invocation:  9 words


;	  1462	
;	  1463	!*********************** START OF MAIN ROUTINE ************************!
;	  1464	
;	  1465	
;	  1466	local NODEb,LINEb;
;	  1467	require 'XPTSYM';
;	  1504	local CCB: ref block field (C_XPT_fields);
;	  1505	map CCB_P: ref block field(C_FIELDS);
;	  1506	pointer PTR;
;	  1507	local BUFLEN,DEST,SOURCE,OLINE,ILINE,RET,ISHDR,ICPTD;
;	  1508	literal NO_PATH_ERROR = 39;		!"No path" disconnect code
;	  1509	literal BAD_ROUT_HDR = 7;		!Disconnect code for invalid/no RTHDR
;	  1510	
;	  1511	!
;	  1512	!  Determine and validate the input line
;	  1513	!
;	  1514	
;	  1515	ILINE = .CCB_P[C_LIN];
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  44
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

;	  1516	LINEb = $XPT_GET_LINE_DB(.ILINE);
;	  1517	if ((.Nty neq TOPS20)				!Input line is
;	  1518	and (.Nty neq PhTwo)) then begin		!  not Phase II:
;	  1519	    local RET;					!
;	  1520	    RET = MIN(19,.CCB_P[C_CNT]);		!
;	  1521	    $NM_LOG_BEGIN();				!
;	  1522	    PARAMETER_HI(1,.RET,.CCB_P[C_ADDR]);	!    log a "packet
;	  1523	    $NM_LOG_END(4^6+$XPT$E_FMT,.NMXid);		!    format error" event
;	  1524	    TERMINATE(.CCB_P,CE_ERR);			!    and toss
;	  1525	    return;					!    the packet
;	  1526	    end;
;	  1527	
;	  1528	ICPTD = 0;
;	  1529	if .Nty eql PhTwo then ICPTD = .ICPTD + 1;      ! Not Phase II+ - flag that
;	  1530	
;	  1531	!
;	  1532	!  Spawn a CCB
;	  1533	!
;	  1534	
;	  1535	if not CCBGT$(CCB) then			!No CCB available - get rid of packet
;	  1536	    (TOSS(.CCB_P,0,0,.ILINE); return);
;	  1537	CCB[C_STK] = .CCB_P;			!Chain pass-through to spawned CCB
;	  1538	CCB[C_XPT_TYPE] = 0;                    !Initialize type code
;	  1539	CCB[C_XPT_ADJUST] = 0;			!  and adjustment factor
;	  1540	
;	  1541	!
;	  1542	!  Parse the routing header
;	  1543	!
;	  1544	
;	  1545	MAPBUF(.CCB_P,PTR);			! Map in the packet buffer
;	  1546	if biton (getb(PTR),2) then begin	! Routing header is present -
;	  1547	    RET = PH2HDR (ch$plus(.PTR,-1),.ILINE, !  map to source and
;	  1548		SOURCE,DEST);			!  destination addresses
;	  1549	    ISHDR = TRUE;			!  and indicate header is present
;	  1550	    end
;	  1551	else begin				!No routing header -
;	P 1552	    RET = CALL$E(INTPH2,PD_XPE,         !  "intercept"
;	  1553		.CCB_P,0,DEST,SOURCE);		!  the packet
;	  1554	    ISHDR = FALSE;			!  and indicate no header
;	  1555	    ICPTD = 0;				!  and that packet's already interceptd
;	  1556	    end;
;	  1557	if .RET leq 0 then			!Could not get destination -
;	  1558	    (UNREACH(.CCB,.CCB_P,.ILINE,-.RET); return); !throw away packet
;	  1559	
;	  1560	NODEb = $XPT_GET_NODE_DB(.DEST);        ! Address destination data base entry
;	  1561	
;	  1562	!
;	  1563	!  Determine the output line
;	  1564	!
;	  1565	
;	  1566	OLINE = 0;
;	  1567	if not .Local_node then OLINE = .OL;
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  45
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

;	  1568	LINEb = $XPT_GET_LINE_DB(.OLINE);
;	  1569	
;	  1570	!
;	  1571	!  Destination is unreachable
;	  1572	!
;	  1573	
;	  1574	if (not .Reach
;	  1575	or ((.OLINE neq 0) and (.LINEstate neq RU))) then begin
;	  1576	    LINEb = $XPT_GET_LINE_DB(.ILINE);
;	  1577	    COUNTER_INCREMENT(LINEb,XPTxit_rcv);
;	  1578	    UNREACH(.CCB,.CCB_P,.ILINE,$XPT$E_UNR);
;	  1579	    return;
;	  1580	    end;
;	  1581	
;	  1582	!
;	  1583	!  Destination is Self
;	  1584	!
;	  1585	
;	  1586	if .OLINE eql 0 then
;	  1587	if .Local_node then begin
;	  1588	    CCB[C_BIAS] = .CCB_P[C_BIAS];	!Copy buffer
;	  1589	    CCB[C_ADDR] = .CCB_P[C_ADDR];	!  descriptor into
;	  1590	    CCB[C_CNT] = .CCB_P[C_CNT];		!  spawned CCB
;	  1591	    CCB[C_LIN] = .CCB_P[C_LIN];		!Put in line number
;	  1592	    if .ISHDR then begin		!If packet has a header,
;	  1593		RET = getb(PTR);		!  pick up the destination name length
;	  1594		BUFLEN = 1 + 1 + .RET;		!  add it into header length
;	  1595		PTR = ch$plus(.PTR,.RET);	!  bump pointer past node name field
;	  1596		BUFLEN = .BUFLEN + 1+getb(PTR);	!  add source name length
;	  1597		CCB[C_ADDR] = ch$plus(.CCB[C_ADDR],.BUFLEN);
;	  1598		CCB[C_CNT] = .CCB[C_CNT] - .BUFLEN;
;	  1599		end;
;	  1600	    LINEb = $XPT_GET_LINE_DB(.ILINE);	!Map to input line data base
;	  1601	    COUNTER_INCREMENT(LINEb,XPTend_rcv);! Increment packets counter
;	  1602	    if ECLFWD(.CCB,			!Try to pass the buffer
;	  1603		.SOURCE,.DEST,0)		!  to the user process
;	  1604	    neq CS_SUC then			!If Forwarding rejected the packet,
;	  1605		TOSS(.CCB,0,0,.ILINE)		!  get rid of it
;	  1606	    else if .ICPTD then			!Otherwise, if there was
;	P 1607		CALL$E(INTPH2,PD_XPE,.CCB_P,	!  a header, intercept
;	  1608		    1,DEST,SOURCE)		!  the packet
;	  1609	    end
;	  1610	
;	  1611	else BPT(XPT$_DNS,.DEST)		!Invalid "self" destination
;	  1612	
;	  1613	!
;	  1614	!  Next node in path is Phase III
;	  1615	!
;	  1616	
;	  1617	else if ((.Nty eql Full)
;	  1618	or (.Nty eql Small)) then begin
;	  1619	    LINEb = $XPT_GET_LINE_DB(.ILINE);		!Address input line DB entry
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  46
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

;	  1620	    RET = BLDPH3(.CCB,.ISHDR,.DEST,.SOURCE,0);	!Build a Phase III header
;	  1621	    COUNTER_INCREMENT(LINEb,XPTxit_rcv);        ! Increment packets counter
;	  1622	    LINEb = $XPT_GET_LINE_DB(.OLINE);		!Address output line DB entry
;	  1623	    RET = FORWARDER(.CCB,.OLINE);		!Try to forward packet
;	  1624	    if .RET eql CE_DIS then			!If destination is unreachable,
;	  1625		UNREACH(.CCB,.CCB_P,.ILINE,		!  perform unreachablilty code
;	  1626		    $XPT$E_UNR)				!
;	  1627	    else if .RET neq CS_SUC then		!Congestion problem -
;	  1628		TOSS(.CCB,.OLINE,.DEST,.ILINE)		!  get rid of packet
;	  1629	    else begin
;	  1630		COUNTER_INCREMENT(LINEb,XPTxit_xmt);    ! Success - increment pkts ctr
;	  1631		if .ICPTD then				!  Packet had Ph. 2 hdr:
;	P 1632		    CALL$E(INTPH2,PD_XPE,.CCB_P,1,	!    intercept
;	  1633			DEST,SOURCE)			!    packet
;	  1634		end
;	  1635	    end
;	  1636	
;	  1637	!
;	  1638	!  Next node in path is Phase II
;	  1639	!
;	  1640	
;	  1641	else if ((.Nty eql PhTwo)
;	  1642	or (.Nty eql TOPS20)) then begin
;	  1643	    COUNTER_INCREMENT(LINEb,XPTxit_rcv);        ! Increment packet counter
;	  1644	    if .RET eql 2 then begin			!Header is not useable:
;	  1645		RET = getb(PTR);			!  Calculate
;	  1646		BUFLEN = 1 + 1 + .RET;			!    the length
;	  1647		PTR = ch$plus(.PTR,.RET);		!    of the
;	  1648		BUFLEN = .BUFLEN + 1 + getb(PTR);	!    old header
;	  1649		RET = BLDPH2(.CCB,.BUFLEN,.DEST,.SOURCE,!  Build a
;	  1650		    .OLINE,.ILINE);			!    new one
;	  1651		if .RET eql CE_RTE then begin		!  Resource failure -
;	  1652		    TOSS(.CCB,.OLINE,.DEST,.ILINE);	!    reschedule
;	  1653		    return;				!    the CCB
;	  1654		    end
;	  1655		else if .RET neq CS_SUC then begin	!  Other failure -
;	  1656		    UNREACH(.CCB,.CCB_P,.ILINE,		!    terminate
;	  1657			$XPT$E_UNR);			!    the packet
;	  1658		    return;				!    as unreachable
;	  1659		    end
;	  1660		end
;	  1661	    else begin					!Header is useable:
;	  1662		CCB[C_BIAS] = .CCB_P[C_BIAS];		!  Copy buffer
;	  1663		CCB[C_ADDR] = .CCB_P[C_ADDR];		!    descriptor into
;	  1664		CCB[C_CNT] = .CCB_P[C_CNT];		!    spawned CCB
;	  1665		end;
;	  1666	    LINEb = $XPT_GET_LINE_DB(.OLINE);		!Address output line DB entry
;	  1667	    if .Nid neq .DEST then			!Destination not adjacent -
;	  1668		TOSS(.CCB,.OLINE,.DEST,.ILINE)		!  get rid of message
;	  1669	    else begin
;	  1670		RET = FORWARDER(.CCB,.OLINE);		!Try to send packet out
;	  1671		if .RET eql CE_DIS then			!Unreachable destination -
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  47
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

;	  1672		    UNREACH(.CCB,.CCB_P,.ILINE,		!  perform unreachability code
;	  1673			$XPT$E_UNR)			!
;	  1674		else if .RET neq CS_SUC then		!Congestion problem -
;	  1675		    TOSS(.CCB,.OLINE,.DEST,.ILINE)	!  get rid of packet
;	  1676		else begin				!Success -
;	  1677		    COUNTER_INCREMENT(LINEb,XPTxit_xmt);!  Increment packets counter
;	  1678		    if (.ICPTD or (.Nty eql PhTwo))	!  Packet had Ph. 2 hdr:
;	P 1679		        then CALL$E(INTPH2,PD_XPE,	!    intercept
;	  1680			    .CCB_P,1,DEST,SOURCE)	!    packet
;	  1681		    end
;	  1682		end
;	  1683	    end
;	  1684	
;	  1685	!
;	  1686	!  Invalid destination node type
;	  1687	!
;	  1688	
;	  1689	else BPT(XPT$_IANT,.Nty);
;	  1690	return;
;	  1691	end;				!End of RCVPH2


						.SBTTL	RCVPH2
000000	004167  000000G			RCVPH2::
					U.3:	JSR	R1,$SAVE5			;					1187
000004	162706  000024 				SUB	#24,SP
000010	016666  000042  000002 			MOV	42(SP),2(SP)			; CCB.P,*				1515
000016	016600  000002 				MOV	2(SP),R0
000022	116066  000010  000010 			MOVB	10(R0),10(SP)			; *,ILINE
000030	105066  000011 				CLRB	11(SP)				; ILINE
000034	016600  000010 				MOV	10(SP),R0			; ILINE,*				1516
000040	004767  000000G				JSR	PC,GTLINE
000044	010066  000006 				MOV	R0,6(SP)			; *,LINEB
000050	116002  000002 				MOVB	2(R0),R2			; *(LINEB),*				1517
000054	020227  000005 				CMP	R2,#5
000060	001451 					BEQ	2$
000062	020227  000004 				CMP	R2,#4				;					1518
000066	001446 					BEQ	2$
000070	016601  000002 				MOV	2(SP),R1			;					1520
000074	016100  000022 				MOV	22(R1),R0
000100	020027  000023 				CMP	R0,#23
000104	003402 					BLE	1$
000106	012700  000023 				MOV	#23,R0
000112	010003 				1$:	MOV	R0,R3				; *,RET
000114	004767  000000G				JSR	PC,$NLBEG			;					1521
000120	012746  000001 				MOV	#1,-(SP)			;					1522
000124	010300 					MOV	R3,R0				; RET,*
000126	016604  000004 				MOV	4(SP),R4
000132	016401  000020 				MOV	20(R4),R1
000136	004767  000000G				JSR	PC,$DPHI
000142	012700  000404 				MOV	#404,R0				;					1523
000146	016603  000010 				MOV	10(SP),R3			; LINEB,*
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  48
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

000152	016301  000034 				MOV	34(R3),R1			; *(LINEB),*
000156	004767  000000G				JSR	PC,$NLEND
000162	016616  000004 				MOV	4(SP),(SP)			;					1524
000166	012746  177760 				MOV	#-20,-(SP)
000172	004767  000000G				JSR	PC,TERMINATE
000176	022626 					CMP	(SP)+,(SP)+			;					1517
000200	000167  002146 				JMP	40$				;					1518
000204	005005 				2$:	CLR	R5				; ICPTD					1528
000206	020227  000004 				CMP	R2,#4				;					1529
000212	001001 					BNE	3$
000214	005205 					INC	R5				; ICPTD
000216	004767  000000G			3$:	JSR	PC,$CCBGT			;					1535
000222	103403 					BCS	4$
000224	010466  000004 				MOV	R4,4(SP)			; $MCB$R4,CCB
000230	000412 					BR	5$
000232	016646  000002 			4$:	MOV	2(SP),-(SP)			;					1536
000236	005046 					CLR	-(SP)
000240	005046 					CLR	-(SP)
000242	016646  000016 				MOV	16(SP),-(SP)			; ILINE,*
000246	004767  177262 				JSR	PC,U.27
000252	000167  002070 				JMP	39$				;					1535
000256	016600  000004 			5$:	MOV	4(SP),R0			; CCB,*					1537
000262	016660  000002  000004 			MOV	2(SP),4(R0)			; *,*(CCB)
000270	105060  000032 				CLRB	32(R0)				; *(CCB)				1538
000274	105060  000033 				CLRB	33(R0)				; *(CCB)				1539
000300	012700  000016 				MOV	#16,R0				;					1545
000304	066600  000002 				ADD	2(SP),R0
000310	010066  000016 				MOV	R0,16(SP)
000314	011067  000000G				MOV	(R0),KISAR6
000320	012700  000020 				MOV	#20,R0
000324	066600  000002 				ADD	2(SP),R0
000330	010066  000014 				MOV	R0,14(SP)
000334	011001 					MOV	(R0),R1				; *,PTR
000336	132721  000002 				BITB	#2,(R1)+			; *,PTR					1546
000342	001421 					BEQ	6$
000344	010146 					MOV	R1,-(SP)			; PTR,*					1547
000346	005316 					DEC	(SP)
000350	016646  000012 				MOV	12(SP),-(SP)			; ILINE,*
000354	012746  000030 				MOV	#30,-(SP)
000360	060616 					ADD	SP,(SP)				; SOURCE,*
000362	012746  000030 				MOV	#30,-(SP)
000366	060616 					ADD	SP,(SP)				; DEST,*
000370	004767  000000V				JSR	PC,U.6
000374	010003 					MOV	R0,R3				; *,RET
000376	012766  000001  000010 			MOV	#1,10(SP)			; *,ISHDR				1549
000404	000432 					BR	7$				;					1546
000406	012746  000024 			6$:	MOV	#24,-(SP)			;					1553
000412	060616 					ADD	SP,(SP)				; SOURCE,*
000414	012746  000024 				MOV	#24,-(SP)
000420	060616 					ADD	SP,(SP)				; DEST,*
000422	005046 					CLR	-(SP)
000424	016646  000010 				MOV	10(SP),-(SP)
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  49
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

000430	012746  000004 				MOV	#4,-(SP)
000434	012746  000000G				MOV	#INTPH2,-(SP)
000440	016700  000002G				MOV	.CRDAT+2,R0
000444	005046 					CLR	-(SP)
000446	116016  000002 				MOVB	2(R0),(SP)
000452	004767  000000G				JSR	PC,$CALLE
000456	010003 					MOV	R0,R3				; *,RET					1552
000460	005066  000016 				CLR	16(SP)				; ISHDR					1554
000464	005005 					CLR	R5				; ICPTD					1555
000466	062706  000006 				ADD	#6,SP				;					1551
000472	005703 				7$:	TST	R3				; RET					1557
000474	003011 					BGT	8$
000476	016616  000014 				MOV	14(SP),(SP)			; CCB,*					1558
000502	016646  000012 				MOV	12(SP),-(SP)
000506	016646  000022 				MOV	22(SP),-(SP)			; ILINE,*
000512	010346 					MOV	R3,-(SP)			; RET,*
000514	005416 					NEG	(SP)
000516	000453 					BR	11$
000520	016666  000030  000022 		8$:	MOV	30(SP),22(SP)			; DEST,*				1560
000526	016600  000022 				MOV	22(SP),R0
000532	004767  000000G				JSR	PC,GTNODE
000536	010002 					MOV	R0,R2				; *,NODEB
000540	005004 					CLR	R4				; OLINE					1566
000542	032712  000400 				BIT	#400,(R2)			; *,NODEB				1567
000546	001001 					BNE	9$
000550	111204 					MOVB	(R2),R4				; NODEB,OLINE
000552	010400 				9$:	MOV	R4,R0				; OLINE,*				1568
000554	004767  000000G				JSR	PC,GTLINE
000560	010066  000016 				MOV	R0,16(SP)			; *,LINEB
000564	005712 					TST	(R2)				; NODEB					1574
000566	100005 					BPL	10$
000570	005704 					TST	R4				; OLINE					1575
000572	001435 					BEQ	13$
000574	121027  000010 				CMPB	(R0),#10			; LINEB,*
000600	001430 					BEQ	12$
000602	016600  000020 			10$:	MOV	20(SP),R0			; ILINE,*				1576
000606	004767  000000G				JSR	PC,GTLINE
000612	010066  000016 				MOV	R0,16(SP)			; *,LINEB
000616	062700  000070 				ADD	#70,R0				;					1577
000622	004767  000000G				JSR	PC,$IC32
000626	016616  000014 				MOV	14(SP),(SP)			; CCB,*					1578
000632	016646  000012 				MOV	12(SP),-(SP)
000636	016646  000022 				MOV	22(SP),-(SP)			; ILINE,*
000642	012746  000001 				MOV	#1,-(SP)
000646	004767  175632 			11$:	JSR	PC,U.28
000652	062706  000016 				ADD	#16,SP				;					1574
000656	000167  001470 				JMP	40$				;					1575
000662	005704 				12$:	TST	R4				; OLINE					1586
000664	001160 					BNE	18$
000666	032712  000400 			13$:	BIT	#400,(R2)			; *,NODEB				1587
000672	001542 					BEQ	16$
000674	016600  000014 				MOV	14(SP),R0			; CCB,*					1588
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  50
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

000700	017660  000026  000016 			MOV	@26(SP),16(R0)			; *,*(CCB)
000706	017660  000024  000020 			MOV	@24(SP),20(R0)			; *,*(CCB)				1589
000714	016602  000012 				MOV	12(SP),R2			;					1590
000720	016260  000022  000022 			MOV	22(R2),22(R0)			; *,*(CCB)
000726	116260  000010  000010 			MOVB	10(R2),10(R0)			; *,*(CCB)				1591
000734	032766  000001  000010 			BIT	#1,10(SP)			; *,ISHDR				1592
000742	001421 					BEQ	14$
000744	005003 					CLR	R3				; RET					1593
000746	152103 					BISB	(R1)+,R3			; PTR,RET
000750	010302 					MOV	R3,R2				; RET,BUFLEN				1594
000752	062702  000002 				ADD	#2,R2				; *,BUFLEN
000756	060301 					ADD	R3,R1				; RET,PTR				1595
000760	005000 					CLR	R0				;					1592
000762	152100 					BISB	(R1)+,R0			; PTR,*
000764	060200 					ADD	R2,R0				; BUFLEN,*
000766	010002 					MOV	R0,R2				; *,BUFLEN				1596
000770	005202 					INC	R2				; BUFLEN
000772	016600  000014 				MOV	14(SP),R0			; CCB,*					1597
000776	060260  000020 				ADD	R2,20(R0)			; BUFLEN,*(CCB)
001002	160260  000022 				SUB	R2,22(R0)			; BUFLEN,*(CCB)				1598
001006	016600  000020 			14$:	MOV	20(SP),R0			; ILINE,*				1600
001012	004767  000000G				JSR	PC,GTLINE
001016	010066  000016 				MOV	R0,16(SP)			; *,LINEB
001022	062700  000056 				ADD	#56,R0				;					1601
001026	004767  000000G				JSR	PC,$IC32
001032	016616  000014 				MOV	14(SP),(SP)			; CCB,*					1602
001036	016646  000032 				MOV	32(SP),-(SP)			; SOURCE,*
001042	016646  000024 				MOV	24(SP),-(SP)
001046	005046 					CLR	-(SP)
001050	004767  000000G				JSR	PC,ECLFWD
001054	062706  000006 				ADD	#6,SP
001060	005300 					DEC	R0				;					1604
001062	001413 					BEQ	15$
001064	016616  000014 				MOV	14(SP),(SP)			; CCB,*					1605
001070	005046 					CLR	-(SP)
001072	005046 					CLR	-(SP)
001074	016646  000024 				MOV	24(SP),-(SP)			; ILINE,*
001100	004767  176430 				JSR	PC,U.27
001104	062706  000006 				ADD	#6,SP
001110	000444 					BR	17$				;					1602
001112	032705  000001 			15$:	BIT	#1,R5				; *,ICPTD				1606
001116	001441 					BEQ	17$
001120	012716  000032 				MOV	#32,(SP)			;					1608
001124	060616 					ADD	SP,(SP)				; SOURCE,*
001126	012746  000032 				MOV	#32,-(SP)
001132	060616 					ADD	SP,(SP)				; DEST,*
001134	012746  000001 				MOV	#1,-(SP)
001140	016646  000016 				MOV	16(SP),-(SP)
001144	012746  000004 				MOV	#4,-(SP)
001150	012746  000000G				MOV	#INTPH2,-(SP)
001154	016700  000002G				MOV	.CRDAT+2,R0
001160	005046 					CLR	-(SP)
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  51
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

001162	116016  000002 				MOVB	2(R0),(SP)
001166	004767  000000G				JSR	PC,$CALLE
001172	062706  000014 				ADD	#14,SP
001176	000411 					BR	17$				;					1587
001200	016616  000022 			16$:	MOV	22(SP),(SP)			;					1611
001204	012746  100032 				MOV	#-77746,-(SP)
001210	012746  000002 				MOV	#2,-(SP)
001214	004767  000000G				JSR	PC,$IGNAL
001220	022626 					CMP	(SP)+,(SP)+
001222	000167  001120 			17$:	JMP	39$				;					1586
001226	016600  000016 			18$:	MOV	16(SP),R0			; LINEB,*				1617
001232	116002  000002 				MOVB	2(R0),R2			; *(LINEB),*
001236	020227  000002 				CMP	R2,#2
001242	001403 					BEQ	19$
001244	020227  000003 				CMP	R2,#3				;					1618
001250	001143 					BNE	24$
001252	016600  000020 			19$:	MOV	20(SP),R0			; ILINE,*				1619
001256	004767  000000G				JSR	PC,GTLINE
001262	010066  000016 				MOV	R0,16(SP)			; *,LINEB
001266	016616  000014 				MOV	14(SP),(SP)			; CCB,*					1620
001272	016646  000010 				MOV	10(SP),-(SP)			; ISHDR,*
001276	016646  000024 				MOV	24(SP),-(SP)
001302	016646  000036 				MOV	36(SP),-(SP)			; SOURCE,*
001306	005046 					CLR	-(SP)
001310	004767  000000V				JSR	PC,U.5
001314	010003 					MOV	R0,R3				; *,RET
001316	016600  000026 				MOV	26(SP),R0			; LINEB,*				1621
001322	062700  000070 				ADD	#70,R0
001326	004767  000000G				JSR	PC,$IC32
001332	010400 					MOV	R4,R0				; OLINE,*				1622
001334	004767  000000G				JSR	PC,GTLINE
001340	010066  000026 				MOV	R0,26(SP)			; *,LINEB
001344	016616  000024 				MOV	24(SP),(SP)			; CCB,*					1623
001350	010446 					MOV	R4,-(SP)			; OLINE,*
001352	004767  000000G				JSR	PC,FORWARDER
001356	010003 					MOV	R0,R3				; *,RET
001360	020327  177520 				CMP	R3,#-260			; RET,*					1624
001364	001013 					BNE	20$
001366	016616  000026 				MOV	26(SP),(SP)			; CCB,*					1625
001372	016646  000024 				MOV	24(SP),-(SP)
001376	016646  000034 				MOV	34(SP),-(SP)			; ILINE,*
001402	012746  000001 				MOV	#1,-(SP)
001406	004767  175072 				JSR	PC,U.28
001412	000414 					BR	21$
001414	020327  000001 			20$:	CMP	R3,#1				; RET,*					1627
001420	001414 					BEQ	22$
001422	016616  000026 				MOV	26(SP),(SP)			; CCB,*					1628
001426	010446 					MOV	R4,-(SP)			; OLINE,*
001430	016646  000036 				MOV	36(SP),-(SP)
001434	016646  000036 				MOV	36(SP),-(SP)			; ILINE,*
001440	004767  176070 				JSR	PC,U.27
001444	062706  000006 			21$:	ADD	#6,SP
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  52
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

001450	000440 					BR	23$				;					1627
001452	016600  000030 			22$:	MOV	30(SP),R0			; LINEB,*				1630
001456	062700  000074 				ADD	#74,R0
001462	004767  000000G				JSR	PC,$IC32
001466	032705  000001 				BIT	#1,R5				; *,ICPTD				1631
001472	001427 					BEQ	23$
001474	012716  000044 				MOV	#44,(SP)			;					1633
001500	060616 					ADD	SP,(SP)				; SOURCE,*
001502	012746  000044 				MOV	#44,-(SP)
001506	060616 					ADD	SP,(SP)				; DEST,*
001510	012746  000001 				MOV	#1,-(SP)
001514	016646  000030 				MOV	30(SP),-(SP)
001520	012746  000004 				MOV	#4,-(SP)
001524	012746  000000G				MOV	#INTPH2,-(SP)
001530	016700  000002G				MOV	.CRDAT+2,R0
001534	005046 					CLR	-(SP)
001536	116016  000002 				MOVB	2(R0),(SP)
001542	004767  000000G				JSR	PC,$CALLE
001546	062706  000014 				ADD	#14,SP
001552	062706  000010 			23$:	ADD	#10,SP				;					1618
001556	000551 					BR	31$				;					1617
001560	020227  000004 			24$:	CMP	R2,#4				;					1641
001564	001405 					BEQ	25$
001566	020227  000005 				CMP	R2,#5				;					1642
001572	001402 					BEQ	25$
001574	000167  000524 				JMP	37$
001600	016600  000016 			25$:	MOV	16(SP),R0			; LINEB,*				1643
001604	062700  000070 				ADD	#70,R0
001610	004767  000000G				JSR	PC,$IC32
001614	020327  000002 				CMP	R3,#2				; RET,*					1644
001620	001070 					BNE	29$
001622	005003 					CLR	R3				; RET					1645
001624	152103 					BISB	(R1)+,R3			; PTR,RET
001626	010302 					MOV	R3,R2				; RET,BUFLEN				1646
001630	062702  000002 				ADD	#2,R2				; *,BUFLEN
001634	060301 					ADD	R3,R1				; RET,PTR				1647
001636	005000 					CLR	R0				;					1644
001640	152100 					BISB	(R1)+,R0			; PTR,*
001642	060200 					ADD	R2,R0				; BUFLEN,*
001644	010002 					MOV	R0,R2				; *,BUFLEN				1648
001646	005202 					INC	R2				; BUFLEN
001650	016616  000014 				MOV	14(SP),(SP)			; CCB,*					1649
001654	010246 					MOV	R2,-(SP)			; BUFLEN,*
001656	016646  000024 				MOV	24(SP),-(SP)
001662	016646  000036 				MOV	36(SP),-(SP)			; SOURCE,*
001666	010446 					MOV	R4,-(SP)			; OLINE,*
001670	016646  000030 				MOV	30(SP),-(SP)			; ILINE,*
001674	004767  000000V				JSR	PC,U.4
001700	010003 					MOV	R0,R3				; *,RET
001702	020327  177730 				CMP	R3,#-50				; RET,*					1651
001706	001012 					BNE	26$
001710	016616  000026 				MOV	26(SP),(SP)			; CCB,*					1652
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  53
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

001714	010446 					MOV	R4,-(SP)			; OLINE,*
001716	016646  000036 				MOV	36(SP),-(SP)
001722	016646  000036 				MOV	36(SP),-(SP)			; ILINE,*
001726	004767  175602 				JSR	PC,U.27
001732	000415 					BR	27$				;					1651
001734	020327  000001 			26$:	CMP	R3,#1				; RET,*					1655
001740	001415 					BEQ	28$
001742	016616  000026 				MOV	26(SP),(SP)			; CCB,*					1656
001746	016646  000024 				MOV	24(SP),-(SP)
001752	016646  000034 				MOV	34(SP),-(SP)			; ILINE,*
001756	012746  000001 				MOV	#1,-(SP)
001762	004767  174516 				JSR	PC,U.28
001766	062706  000030 			27$:	ADD	#30,SP				;					1655
001772	000567 					BR	40$
001774	062706  000012 			28$:	ADD	#12,SP				;					1644
002000	000415 					BR	30$
002002	016600  000014 			29$:	MOV	14(SP),R0			; CCB,*					1662
002006	017660  000026  000016 			MOV	@26(SP),16(R0)			; *,*(CCB)
002014	017660  000024  000020 			MOV	@24(SP),20(R0)			; *,*(CCB)				1663
002022	016601  000012 				MOV	12(SP),R1			;					1664
002026	016160  000022  000022 			MOV	22(R1),22(R0)			; *,*(CCB)
002034	010400 				30$:	MOV	R4,R0				; OLINE,*				1666
002036	004767  000000G				JSR	PC,GTLINE
002042	010066  000016 				MOV	R0,16(SP)			; *,LINEB
002046	026066  000004  000022 			CMP	4(R0),22(SP)			; *(LINEB),*				1667
002054	001413 					BEQ	32$
002056	016616  000014 				MOV	14(SP),(SP)			; CCB,*					1668
002062	010446 					MOV	R4,-(SP)			; OLINE,*
002064	016646  000024 				MOV	24(SP),-(SP)
002070	016646  000024 				MOV	24(SP),-(SP)			; ILINE,*
002074	004767  175434 				JSR	PC,U.27
002100	022626 					CMP	(SP)+,(SP)+
002102	000520 				31$:	BR	38$				;					1667
002104	016616  000014 			32$:	MOV	14(SP),(SP)			; CCB,*					1670
002110	010446 					MOV	R4,-(SP)			; OLINE,*
002112	004767  000000G				JSR	PC,FORWARDER
002116	010003 					MOV	R0,R3				; *,RET
002120	020327  177520 				CMP	R3,#-260			; RET,*					1671
002124	001013 					BNE	33$
002126	016616  000016 				MOV	16(SP),(SP)			; CCB,*					1672
002132	016646  000014 				MOV	14(SP),-(SP)
002136	016646  000024 				MOV	24(SP),-(SP)			; ILINE,*
002142	012746  000001 				MOV	#1,-(SP)
002146	004767  174332 				JSR	PC,U.28
002152	000413 					BR	34$
002154	005303 				33$:	DEC	R3				; RET					1674
002156	001414 					BEQ	35$
002160	016616  000016 				MOV	16(SP),(SP)			; CCB,*					1675
002164	010446 					MOV	R4,-(SP)			; OLINE,*
002166	016646  000026 				MOV	26(SP),-(SP)
002172	016646  000026 				MOV	26(SP),-(SP)			; ILINE,*
002176	004767  175332 				JSR	PC,U.27
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  54
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (5)

002202	062706  000006 			34$:	ADD	#6,SP
002206	000456 					BR	38$				;					1674
002210	016600  000020 			35$:	MOV	20(SP),R0			; LINEB,*				1677
002214	062700  000074 				ADD	#74,R0
002220	004767  000000G				JSR	PC,$IC32
002224	006005 					ROR	R5				; ICPTD					1678
002226	103406 					BLO	36$
002230	016600  000020 				MOV	20(SP),R0			; LINEB,*
002234	126027  000002  000004 			CMPB	2(R0),#4			; *(LINEB),*
002242	001040 					BNE	38$
002244	012716  000034 			36$:	MOV	#34,(SP)			;					1680
002250	060616 					ADD	SP,(SP)				; SOURCE,*
002252	012746  000034 				MOV	#34,-(SP)
002256	060616 					ADD	SP,(SP)				; DEST,*
002260	012746  000001 				MOV	#1,-(SP)
002264	016646  000020 				MOV	20(SP),-(SP)
002270	012746  000004 				MOV	#4,-(SP)
002274	012746  000000G				MOV	#INTPH2,-(SP)
002300	016700  000002G				MOV	.CRDAT+2,R0
002304	005046 					CLR	-(SP)
002306	116016  000002 				MOVB	2(R0),(SP)
002312	004767  000000G				JSR	PC,$CALLE
002316	062706  000014 				ADD	#14,SP
002322	000410 					BR	38$				;					1641
002324	010216 				37$:	MOV	R2,(SP)				;					1689
002326	012746  100042 				MOV	#-77736,-(SP)
002332	012746  000002 				MOV	#2,-(SP)
002336	004767  000000G				JSR	PC,$IGNAL
002342	005726 					TST	(SP)+
002344	005726 				38$:	TST	(SP)+				;					1617
002346	062706  000010 			39$:	ADD	#10,SP				;					1187
002352	062706  000024 			40$:	ADD	#24,SP
002356	000207 					RTS	PC

; Routine Size:  632 words,	Routine Base:  $CODE$ + 5324
; Maximum stack depth per invocation:  32 words
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  55
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (6)

;	  1692	
;	  1693	routine PH2HDR (BUFPTR,ILINE,SRCAD,DESTAD) =
;	  1694	
;	  1695	!++
;	  1696	! FUNCTIONAL DESCRIPTION:
;	  1697	!
;	  1698	! Analyzes a Phase II routing header and returns the source and
;	  1699	! destination node addresses.  It also makes sure that the source
;	  1700	! node name is the same as the adjacent node over the input line.
;	  1701	!
;	  1702	! FORMAL PARAMETERS
;	  1703	!
;	  1704	!	PTR - Character pointer to routing header to analyze
;	  1705	!	ILINE - Channel number of input line
;	  1706	!	SRCAD - Address of location to return source address
;	  1707	!	DESTAD - Address of location to return destination address
;	  1708	!
;	  1709	! IMPLICIT INPUTS
;	  1710	!
;	  1711	!	NONE.
;	  1712	!
;	  1713	! ROUTINE VALUE: "Success" or "failure"
;	  1714	! COMPLETION CODES:
;	  1715	!
;	  1716	!	1		Success; addresses returned.  Header is useable.
;	  1717	!	2		Success; addresses returned.  Header is not useable.
;	  1718	!     - $XPT$E_UNR	Failure; node is unreachable or unknown
;	  1719	!     - $XPT$E_RNG	Failure; numeric name is out of range
;	  1720	!     - $XPT$E_FMT	Failure; packet format error
;	  1721	!
;	  1722	! SIDE EFFECTS:
;	  1723	!
;	  1724	!	If "failure" is returned, the source and destination address
;	  1725	!	parameters will be set to 0.
;	  1726	!
;	  1727	!--
;	  1728	
;	  1729	begin
;	  1730	
;	  1731	local LINEb;
;	  1732	require 'XPTSYM';
;	  1769	
;	  1770	pointer PTR;
;	  1771	local RET,LEN;
;	  1772	!local NTT: ref block field(NTTfields);	!Addresses Node Translation Table entry
;	  1773	
;	  1774	!
;	  1775	!  Try to directly translate destination name into binary
;	  1776	!
;	  1777	
;	  1778	.DESTAD = .SRCAD = 0;			!Clear out address parameters
;	  1779	PTR = ch$plus(.BUFPTR,1);		!Address destination name in header
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  56
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (6)

;	  1780	LEN = getb(PTR);			!Pick up destination name length
;	  1781	if .LEN gtru 6 or .LEN eql 0 then	!Invalid dest. name length -
;	  1782	    return (-$XPT$E_FMT);		!  return an error
;	  1783	RET = CDTB(.PTR,.LEN);                  ! Call conversion routine
;	  1784	if .RET eql 0 or .RET gtr NN then	!Invalid node number -
;	  1785	    return (-$XPT$E_RNG)		!  return an error
;	  1786	else if .RET gtr 0 then begin		!Valid node number obtained -
;	  1787	    .DESTAD = .RET;			!  save it
;	  1788	    RET = 2				!  and continue
;	  1789	    end
;	  1790	
;	  1791	!
;	  1792	!  If the conversion didn't go, check our own node name
;	  1793	!
;	  1794	
;	  1795	else if not begin
;	  1796	    RET = 1;
;	  1797	    .DESTAD = .Tid;
;	  1798	    ((.LEN eql .NODEname_length) and
;	  1799	    ch$eql(.LEN,.PTR,.NODEname_length,byt$ptr(NODEname,0)))
;	  1800	    end
;	  1801	
;	  1802	!
;	  1803	!  If that didn't work, scan node ID blocks for destination name
;	  1804	!
;	  1805	
;	  1806	then begin
;	  1807	    RET = 0;				!Scan through
;	  1808	    (incr I from 1 to NLN do begin	!  all the lines
;	  1809		LINEb = $XPT_GET_LINE_DB(.I);	!  which have
;	  1810		if ((.Nty eql PhTwo)		!  adjacent Phase
;	  1811		or (.Nty eql TOPS20))		!  II nodes
;	  1812		then begin
;	  1813		    if ((.LEN eql .Nnml) and    ! Unequal name lengths disqualify
;	  1814		    ch$eql(.LEN,.PTR,.LEN,	!  Compare node names
;	  1815		    byt$ptr(Nnm)))
;	  1816		    then begin			!  Hit:
;	  1817			.DESTAD = .Nid;         !       map to node address
;	  1818			exitloop(RET=1)		!       and stop search
;	  1819			end
;	  1820		    end
;	  1821		end);
;	  1822	    end;
;	  1823	
;	C 1824	%(!
;	C 1825	!  If we didn't find anything, try the Node Translate Table
;	C 1826	!
;	C 1827	
;	C 1828	if .RET leq 0 then begin
;	C 1829	    NTT = VECTOR[NODExlate,1];			!Address first table entry
;	C 1830	    RET =					!Scan through each
;	C 1831	    (incr I from 1 to .NODExlate do		!  table entry
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  57
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (6)

;	C 1832		if ch$eql(.LEN,.PTR,.LEN,NTT[NTTname])
;	C 1833		then begin				!  Hit:
;	C 1834		    .DESTAD = .NTT[NTTaddr];		!	map to address
;	C 1835		    exitloop (1)			!	stop looking
;	C 1836		    end
;	C 1837		else NTT = NTT[NTTlen])			!  Otherwise, try next entry
;	C 1838	    end;
;	  1839	)%
;	  1840	
;	  1841	!
;	  1842	!  Node name not found anywhere - give up
;	  1843	!
;	  1844	
;	  1845	if .RET leq 0 then return -$XPT$E_UNR
;	  1846	
;	  1847	!
;	  1848	!  Validate source name and pick up source address
;	  1849	!
;	  1850	
;	  1851	else begin
;	  1852	    LINEb = $XPT_GET_LINE_DB(.ILINE);	!Address line data base entry
;	  1853	    PTR = ch$plus(.PTR,.LEN);		!Skip past destination name
;	  1854	    LEN = getb(PTR);			!Pick up source node name length
;	  1855	    if ((.LEN neq .Nnml)		!Name lengths don't
;	  1856	    or ch$neq(.LEN,.PTR,.LEN,		!  match or names
;	  1857		byt$ptr(Nnm)))                  !  don't compare -
;	  1858	    then begin				!  clear out
;	  1859		.DESTAD = 0;			!  destination address
;	  1860		return (-$XPT$E_FMT)		!  and return an error
;	  1861		end
;	  1862	    else begin				!Source name is OK -
;	  1863		.SRCAD = .Nid;                  !  pick up source address
;	  1864		return (.RET)			!  and return "success"
;	  1865		end
;	  1866	    end
;	  1867	
;	  1868	end;				!End of PH2HDR


						.SBTTL	PH2HDR
000000	004167  000000G			; PH2HDR
					U.6:	JSR	R1,$SAVE5			;					1693
000004	024646 					CMP	-(SP),-(SP)
000006	016666  000022  000002 			MOV	22(SP),2(SP)			; DESTAD,*				1778
000014	005076  000024 				CLR	@24(SP)				; SRCAD
000020	005076  000002 				CLR	@2(SP)
000024	016601  000030 				MOV	30(SP),R1			; BUFPTR,PTR				1779
000030	005201 					INC	R1				; PTR					1780
000032	005004 					CLR	R4				; LEN
000034	152104 					BISB	(R1)+,R4			; PTR,LEN
000036	020427  000006 				CMP	R4,#6				; LEN,*					1781
000042	101002 					BHI	1$
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  58
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (6)

000044	005704 					TST	R4				; LEN
000046	001003 					BNE	2$
000050	012700  177774 			1$:	MOV	#-4,R0				;					1782
000054	000416 					BR	4$
000056	010146 				2$:	MOV	R1,-(SP)			; PTR,*					1783
000060	010446 					MOV	R4,-(SP)			; LEN,*
000062	004767  000000G				JSR	PC,CDTB
000066	010002 					MOV	R0,R2				; *,RET
000070	001405 					BEQ	3$				;					1784
000072	016700  000002G				MOV	.CRDAT+2,R0
000076	020260  000016 				CMP	R2,16(R0)			; RET,*
000102	003405 					BLE	5$
000104	022626 				3$:	CMP	(SP)+,(SP)+			;					1785
000106	012700  177776 				MOV	#-2,R0
000112	000167  000400 			4$:	JMP	17$
000116	005702 				5$:	TST	R2				; RET					1786
000120	003405 					BLE	6$
000122	010276  000006 				MOV	R2,@6(SP)			; RET,*					1787
000126	012702  000002 				MOV	#2,R2				; *,RET					1788
000132	000515 					BR	12$				;					1786
000134	012702  000001 			6$:	MOV	#1,R2				; *,RET					1796
000140	016700  000002G				MOV	.CRDAT+2,R0			;					1797
000144	016076  000056  000006 			MOV	56(R0),@6(SP)
000152	020460  000114 				CMP	R4,114(R0)			; LEN,*					1798
000156	001016 					BNE	7$
000160	010416 					MOV	R4,(SP)				; LEN,*					1799
000162	010146 					MOV	R1,-(SP)			; PTR,*
000164	016046  000114 				MOV	114(R0),-(SP)
000170	012746  000116 				MOV	#116,-(SP)
000174	060016 					ADD	R0,(SP)
000176	005046 					CLR	-(SP)
000200	004767  000000G				JSR	PC,BL$EQL
000204	062706  000010 				ADD	#10,SP
000210	006000 					ROR	R0
000212	103464 					BLO	11$
000214	005002 				7$:	CLR	R2				; RET					1807
000216	016700  000002G				MOV	.CRDAT+2,R0			;					1808
000222	016005  000022 				MOV	22(R0),R5
000226	005003 					CLR	R3				; I
000230	000452 					BR	10$
000232	010300 				8$:	MOV	R3,R0				; I,*					1809
000234	004767  000000G				JSR	PC,GTLINE
000240	010066  000004 				MOV	R0,4(SP)			; *,LINEB
000244	126027  000002  000004 			CMPB	2(R0),#4			; *(LINEB),*				1810
000252	001404 					BEQ	9$
000254	126027  000002  000005 			CMPB	2(R0),#5			; *(LINEB),*				1811
000262	001035 					BNE	10$
000264	016646  000004 			9$:	MOV	4(SP),-(SP)			; LINEB,*				1813
000270	062716  000007 				ADD	#7,(SP)
000274	113600 					MOVB	@(SP)+,R0
000276	020400 					CMP	R4,R0				; LEN,*
000300	001026 					BNE	10$
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  59
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (6)

000302	010416 					MOV	R4,(SP)				; LEN,*					1815
000304	010146 					MOV	R1,-(SP)			; PTR,*
000306	010446 					MOV	R4,-(SP)			; LEN,*
000310	016646  000010 				MOV	10(SP),-(SP)			; LINEB,*
000314	062716  000010 				ADD	#10,(SP)
000320	005046 					CLR	-(SP)
000322	004767  000000G				JSR	PC,BL$EQL
000326	062706  000010 				ADD	#10,SP
000332	006000 					ROR	R0
000334	103010 					BCC	10$
000336	016600  000004 				MOV	4(SP),R0			; LINEB,*				1817
000342	016076  000004  000006 			MOV	4(R0),@6(SP)			; *(LINEB),*
000350	012702  000001 				MOV	#1,R2				; *,RET					1818
000354	000404 					BR	12$
000356	005203 				10$:	INC	R3				; I					1808
000360	020305 					CMP	R3,R5				; I,*
000362	003723 					BLE	8$
000364	005702 				11$:	TST	R2				; RET					1845
000366	003003 				12$:	BGT	13$
000370	012700  177777 				MOV	#-1,R0
000374	000447 					BR	16$
000376	016600  000032 			13$:	MOV	32(SP),R0			; ILINE,*				1852
000402	004767  000000G				JSR	PC,GTLINE
000406	010066  000004 				MOV	R0,4(SP)			; *,LINEB
000412	060401 					ADD	R4,R1				; LEN,PTR				1853
000414	005004 					CLR	R4				; LEN					1854
000416	152104 					BISB	(R1)+,R4			; PTR,LEN
000420	010003 					MOV	R0,R3				; LINEB,*				1855
000422	116300  000007 				MOVB	7(R3),R0			; *(LINEB),*
000426	020400 					CMP	R4,R0				; LEN,*
000430	001016 					BNE	14$
000432	010416 					MOV	R4,(SP)				; LEN,*					1857
000434	010146 					MOV	R1,-(SP)			; PTR,*
000436	010446 					MOV	R4,-(SP)			; LEN,*
000440	016646  000010 				MOV	10(SP),-(SP)			; LINEB,*
000444	062716  000010 				ADD	#10,(SP)
000450	005046 					CLR	-(SP)
000452	004767  000000G				JSR	PC,BL$NEQ
000456	062706  000010 				ADD	#10,SP
000462	006000 					ROR	R0
000464	103005 					BCC	15$
000466	005076  000006 			14$:	CLR	@6(SP)				;					1859
000472	012700  177774 				MOV	#-4,R0				;					1855
000476	000406 					BR	16$
000500	016600  000004 			15$:	MOV	4(SP),R0			; LINEB,*				1863
000504	016076  000004  000030 			MOV	4(R0),@30(SP)			; *(LINEB),SRCAD
000512	010200 					MOV	R2,R0				; RET,*					1855
000514	022626 				16$:	CMP	(SP)+,(SP)+			;					1693
000516	022626 				17$:	CMP	(SP)+,(SP)+
000520	000207 					RTS	PC

; Routine Size:  169 words,	Routine Base:  $CODE$ + 7704
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  60
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (6)

; Maximum stack depth per invocation:  15 words
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  61
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (7)

;	  1869	
;	  1870	routine BLDPH3 (CCB,HDRFLG,DEST,SOURCE,RQR) =
;	  1871	
;	  1872	!++
;	  1873	! FUNCTIONAL DESCRIPTION:
;	  1874	!
;	  1875	! This routine builds a Phase III routing header in the spawned CCB.
;	  1876	! All of the information for the header is passed as parameters.  If
;	  1877	! HDRFLG is on, the buffer descriptor for the pass-through CCB will be
;	  1878	! adjusted to point past the Phase II routing header in the buffer.
;	  1879	!
;	  1880	! FORMAL PARAMETERS
;	  1881	!
;	  1882	!	CCB - Spawned CCB for the packet for which a header is
;	  1883	!	      to be built.
;	  1884	!	HDRFLG - If this flag is 1, the pass-through CCB will be
;	  1885	!	         adjusted to point past the Phase II routing header.
;	  1886	!	DEST - The destination node address.
;	  1887	!	SOURCE - The source node address.
;	  1888	!	RQRFLG - The "Rqr" bit in the routing header flags will be set
;	  1889	!		 to this value.
;	  1890	!
;	  1891	! IMPLICIT INPUTS
;	  1892	!
;	  1893	!	C_STK in the spawned CCB points to the pass-through CCB.
;	  1894	!
;	  1895	! ROUTINE VALUE: "Success" only
;	  1896	! COMPLETION CODES:
;	  1897	!
;	  1898	!	CS_SUC - Success; routing header built.
;	  1899	!
;	  1900	! SIDE EFFECTS:
;	  1901	!
;	  1902	!	The pass-through buffer descriptor may be adjusted. If
;	  1903	!	it is, the high-order byte of C_PRM4 in the spawned CCB
;	  1904	!	will contain the "adjustment factor" for the descriptor.
;	  1905	!
;	  1906	!--
;	  1907	
;	  1908	begin
;	  1909	map CCB: ref block field (C_XPT_fields);
;	  1910	pointer PTR;
;	  1911	local BUFPTR,CCB_P,HDRLEN,LEN;
;	  1912	map CCB_P: ref block field(C_FIELDS);
;	  1913	
;	  1914	!
;	  1915	!  Set up the spawned CCB fields
;	  1916	!
;	  1917	
;	  1918	CCB_P = .CCB[C_STK];			!Address the pass-through CCB
;	  1919	PTR = byt$ptr(CCB[C_PRM1],0);		!Address data area in spawned CCB
;	  1920	CCB[C_BIAS] = 0;			!Set up the buffer
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  62
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (7)

;	  1921	CCB[C_ADDR] = .PTR;			!  descriptor to point
;	  1922	CCB[C_CNT] = 6;				!  to the data area
;	  1923	CCB[C_CHN] = .CCB_P;			!Chain pass-through off
;	  1924	
;	  1925	!
;	  1926	!  Build the routing header
;	  1927	!
;	  1928	
;	  1929	putb(if .RQR then 10 else 2,PTR);	!Put in the routing flags
;	  1930	putw(.DEST,PTR);			!  and the destination address
;	  1931	putw(.SOURCE,PTR);			!  and the source address
;	  1932	putb(1,PTR);				!  and the Visits field
;	  1933	
;	  1934	!
;	  1935	!  If specified, adjust the pass-through descriptor to
;	  1936	!  point past the old routing header
;	  1937	!
;	  1938	
;	  1939	if .HDRFLG then begin
;	  1940	    MAPBUF(.CCB_P,BUFPTR,LEN);		!Map in pass-through buffer
;	  1941	    PTR = ch$plus(.BUFPTR,1);		!Point to destination name field
;	  1942	    LEN = getb(PTR);			!Pick up name length
;	  1943	    PTR = ch$plus(.PTR,.LEN);		!Skip past field
;	  1944	    HDRLEN = 1 + 1 + .LEN;
;	  1945	    LEN = getb(PTR);			!Pick up source name length
;	  1946	    PTR = ch$plus(.PTR,.LEN);		!Skip past name field
;	  1947	    HDRLEN = .HDRLEN + 1 + .LEN;
;	  1948	    CCB[C_XPT_ADJUST] = .HDRLEN;	!Save "adjustment factor"
;	  1949	    CCB_P[C_ADDR] = .PTR;		!Adjust the buffer descriptor
;	  1950	    CCB_P[C_CNT] = .CCB_P[C_CNT] - .HDRLEN; !for the pass-through
;	  1951	    end;
;	  1952	
;	  1953	!
;	  1954	!  Return a "success" code
;	  1955	!
;	  1956	
;	  1957	return (CS_SUC)
;	  1958	end;				!End of BLDPH3


						.SBTTL	BLDPH3
000000	004167  000000G			; BLDPH3
					U.5:	JSR	R1,$SAVE5			;					1870
000004	005746 					TST	-(SP)
000006	016605  000030 				MOV	30(SP),R5			; CCB,*					1918
000012	016504  000004 				MOV	4(R5),R4			; *,CCB.P
000016	012700  000024 				MOV	#24,R0				; *,PTR					1919
000022	060500 					ADD	R5,R0				; *,PTR
000024	005065  000016 				CLR	16(R5)				;					1920
000030	010065  000020 				MOV	R0,20(R5)			; PTR,*					1921
000034	012765  000006  000022 			MOV	#6,22(R5)			;					1922
000042	010465  000002 				MOV	R4,2(R5)			; CCB.P,*				1923
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  63
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (7)

000046	032766  000001  000020 			BIT	#1,20(SP)			; *,RQR					1929
000054	001403 					BEQ	1$
000056	012701  000012 				MOV	#12,R1
000062	000402 					BR	2$
000064	012701  000002 			1$:	MOV	#2,R1
000070	110120 				2$:	MOVB	R1,(R0)+			; *,PTR
000072	016616  000024 				MOV	24(SP),(SP)			; DEST,X				1930
000076	111620 					MOVB	(SP),(R0)+			; X,PTR
000100	116620  000001 				MOVB	1(SP),(R0)+			; X,PTR
000104	016616  000022 				MOV	22(SP),(SP)			; SOURCE,X				1931
000110	111620 					MOVB	(SP),(R0)+			; X,PTR
000112	116620  000001 				MOVB	1(SP),(R0)+			; X,PTR
000116	112720  000001 				MOVB	#1,(R0)+			; *,PTR					1932
000122	032766  000001  000026 			BIT	#1,26(SP)			; *,HDRFLG				1939
000130	001432 					BEQ	3$
000132	016467  000016  000000G			MOV	16(R4),KISAR6			; *(CCB.P),*				1940
000140	016402  000020 				MOV	20(R4),R2			; *(CCB.P),BUFPTR
000144	010200 					MOV	R2,R0				; BUFPTR,PTR				1941
000146	005200 					INC	R0				; PTR					1942
000150	005001 					CLR	R1				; LEN
000152	152001 					BISB	(R0)+,R1			; PTR,LEN
000154	060100 					ADD	R1,R0				; LEN,PTR				1943
000156	010102 					MOV	R1,R2				; LEN,HDRLEN				1944
000160	062702  000002 				ADD	#2,R2				; *,HDRLEN
000164	005001 					CLR	R1				; LEN					1945
000166	152001 					BISB	(R0)+,R1			; PTR,LEN
000170	060100 					ADD	R1,R0				; LEN,PTR				1946
000172	010103 					MOV	R1,R3				; LEN,*					1939
000174	060203 					ADD	R2,R3				; HDRLEN,*
000176	010302 					MOV	R3,R2				; *,HDRLEN				1947
000200	005202 					INC	R2				; HDRLEN
000202	110265  000033 				MOVB	R2,33(R5)			; HDRLEN,*				1948
000206	010064  000020 				MOV	R0,20(R4)			; PTR,*(CCB.P)				1949
000212	160264  000022 				SUB	R2,22(R4)			; HDRLEN,*(CCB.P)			1950
000216	012700  000001 			3$:	MOV	#1,R0				;					1908
000222	005726 					TST	(SP)+				;					1870
000224	000207 					RTS	PC

; Routine Size:  75 words,	Routine Base:  $CODE$ + 10426
; Maximum stack depth per invocation:  8 words
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  64
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (8)

;	  1959	
;	  1960	routine BLDPH2 (CCB,PT_HDR,DEST,SOURCE,OLINE,ILINE) =
;	  1961	
;	  1962	!++
;	  1963	! FUNCTIONAL DESCRIPTION:
;	  1964	!
;	  1965	! This routine builds a Phase II routing header for a data packet.  The
;	  1966	! source node name will always be a decimal ASCII representation of the
;	  1967	! specified source node address.  The destination node name will be the
;	  1968	! adjacent node over the output line.
;	  1969	!
;	  1970	! FORMAL PARAMETERS
;	  1971	!
;	  1972	!	CCB	Spawned CCB for the packet for which a header is to be
;	  1973	!		built.
;	  1974	!	PT_HDR	Flag which, if non-zero, indicates that the pass-through
;	  1975	!		buffer contains a routing header which the descriptor
;	  1976	!		must be adjusted to point past.  The value of PT_HDR is
;	  1977	!		the number of bytes to skip over.
;	  1978	!	DEST	Destination node address
;	  1979	!	SOURCE	Source node address
;	  1980	!	OLINE	Channel number of output line
;	  1981	!	ILINE	Channel number of input line
;	  1982	!
;	  1983	! IMPLICIT INPUTS
;	  1984	!
;	  1985	!	Nty, Nid
;	  1986	!
;	  1987	! ROUTINE VALUE: "Success", "unreachable destination", or "resource failure"
;	  1988	! COMPLETION CODES:
;	  1989	!
;	  1990	!	CS_SUC	Success: header built and pointed to by spawned CCB
;	  1991	!	CE_DIS	Destination is unreachable (it is not the adjacent node)
;	  1992	!	CE_RTE	Resource failure: could not get an SDB
;	  1993	!
;	  1994	! SIDE EFFECTS:
;	  1995	!
;	  1996	!	The pass-through buffer descriptor may be adjusted. If it is,
;	  1997	!	the high-order byte of C_PRM4 in the spawned CCB will contain
;	  1998	!	the "adjustment factor" for the descriptor.
;	  1999	!
;	  2000	!--
;	  2001	
;	  2002	begin
;	  2003	
;	  2004	!-----------------------------------------------!
;	  2005	!						!
;	  2006	!	Routine to scan for a node as an	!
;	  2007	!	adjacent Phase II node and, if found,	!
;	  2008	!	convert it into a ASCII node name.	!
;	  2009	!						!
;	  2010	!-----------------------------------------------!
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  65
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (8)

;	  2011	
;	  2012	linkage CONVERT_LINKAGE = JSR (REGISTER=4,REGISTER=5);
;	  2013	routine CONVERT (NODE,LINE,PTRAD): CONVERT_LINKAGE =
;	  2014	begin
;	  2015	
;	  2016	local LINEb;
;	  2017	require 'XPTSYM';
;	  2054	
;	  2055	LINEb = $XPT_GET_LINE_DB(.LINE);        ! Address circuit data base
;	  2056	
;	  2057	if ((.Nty eql PhTwo) or (.Nty eql TOPS20))	! If adjacent node is Phase
;	  2058	then if .Nid eql .NODE then begin		!   2 and is the right one,
;	  2059	    putb(.Nnml,.PTRAD);                         !   adjacent node
;	  2060	    .PTRAD = ch$move(.Nnml,			!   name into the
;	  2061		byt$ptr(Nnm),..PTRAD);			!   specified area,
;	  2062	    return TRUE					!   and say we hit
;	  2063	    end;
;	  2064	
;	  2065	FALSE						! No hit - say so
;	  2066	
;	  2067	end;


						.SBTTL	CONVERT
000000	004167  000000G			; CONVERT
					U.44:	JSR	R1,$SAVE5			;					2013
000004	010500 					MOV	R5,R0				; LINE,*				2055
000006	004767  000000G				JSR	PC,GTLINE
000012	126027  000002  000004 			CMPB	2(R0),#4			; *(LINEB),*				2057
000020	001404 					BEQ	1$
000022	126027  000002  000005 			CMPB	2(R0),#5			; *(LINEB),*
000030	001030 					BNE	2$
000032	026004  000004 			1$:	CMP	4(R0),R4			; *(LINEB),NODE				2058
000036	001025 					BNE	2$
000040	016604  000016 				MOV	16(SP),R4			; PTRAD,*				2059
000044	116074  000007  000000 			MOVB	7(R0),@0(R4)			; *(LINEB),*
000052	005214 					INC	(R4)
000054	116005  000007 				MOVB	7(R0),R5			; *(LINEB),*				2061
000060	010546 					MOV	R5,-(SP)
000062	010046 					MOV	R0,-(SP)			; LINEB,*
000064	062716  000010 				ADD	#10,(SP)
000070	011446 					MOV	(R4),-(SP)
000072	004767  000000G				JSR	PC,BL$MOV
000076	010014 					MOV	R0,(R4)				;					2060
000100	062706  000006 				ADD	#6,SP				;					2058
000104	012700  000001 				MOV	#1,R0
000110	000207 					RTS	PC
000112	005000 				2$:	CLR	R0				;					2013
000114	000207 					RTS	PC

; Routine Size:  39 words,	Routine Base:  $CODE$ + 10654
; Maximum stack depth per invocation:  10 words
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  66
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (8)

;	  2068	map CCB: ref block field (C_XPT_fields);
;	  2069	local NODEb,LINEb;
;	  2070	require 'XPTSYM';
;	  2107	local RET,SDB_ADDR,LEN,PTRA;
;	  2108	local CCB_P: ref block field(C_XPT_fields);
;	  2109	pointer PTR;
;	  2110	
;	  2111	!
;	  2112	!  Check destination address for validity
;	  2113	!
;	  2114	
;	  2115	LINEb = $XPT_GET_LINE_DB(.OLINE);	!Address output line data base entry
;	  2116	if (.Nid neq .DEST) then		!Destination is not adjacent over
;	  2117	    return (CE_DIS);			!  output line - return "unreachable"
;	  2118	
;	  2119	!
;	  2120	!  Get an SDB
;	  2121	!
;	  2122	
;	  2123	if not GETBUF(15,CCB) then		 !Couldn't get one -
;	  2124	    return (CE_RTE);			 !  return "resource failure"
;	  2125	CCB[C_CHN] = CCB_P = .CCB[C_STK];	 !Chain the CCBs
;	  2126	
;	  2127	!
;	  2128	!  Build the header
;	  2129	!
;	  2130	
;	  2131	MAPBUF(.CCB,SDB_ADDR,LEN);		!Map in the SDB
;	  2132	PTR = .SDB_ADDR;
;	  2133	putb(PH2_RTflgs,PTR);			!Put in the RTFLGS
;	  2134	putb(.Nnml,PTR);			!Move in the destination name length
;	  2135	PTR = ch$move(.Nnml,			!Move in the destination
;	  2136	    byt$ptr(Nnm),.PTR);			!  node name from the ID block
;	  2137	PTRA = ch$plus(.PTR,1);			!Point to source name field
;	  2138	LINEb = $XPT_GET_LINE_DB(.ILINE);
;	  2139	NODEb = $XPT_GET_NODE_DB(.SOURCE);      ! Address source node data base entry
;	  2140	if .SOURCE eql .Tid                     ! Source is local node -
;	  2141	then begin
;	  2142	     putb(.NODEname_length,PTR);        !  move in
;	  2143	     PTRA = ch$move(.NODEname_length,	!  the local
;	  2144	         byt$ptr(NODEname,0),.PTRA);	!  node name
;	  2145	     end
;	  2146	else if not (.Phase2_node and
;	  2147	             begin
;	  2148	             PTRA = .PTR;
;	  2149	             if CONVERT(.SOURCE,.ILINE,PTRA) then TRUE
;	  2150	             else if (decr J from NLN to 1 do
;	  2151	                      (if CONVERT(.SOURCE,.J,PTRA) then exitloop(0))) eql 0
;	  2152	                  then TRUE
;	  2153	                  else FALSE
;	  2154	             end)
;	  2155	     then if  ((.ILINE neq 0)
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  67
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (8)

;	  2156	               and  ((.Nty eql PhTwo)   ! Source is
;	  2157	               or (.Nty eql TOPS20))    !  adjacent and
;	  2158	               and  (.Nid eql .SOURCE)) !  Phase II:
;	  2159	          then begin                    !      
;	  2160	               putb(.Nnml,PTR);         !    adjacent
;	  2161	               PTRA = ch$move(.Nnml,    !    node name
;	  2162	                   byt$ptr(Nnm),.PTRA); !    into the header
;	  2163	               end
;	  2164	          else begin                    ! Otherwise -
;	  2165	               RET = CBTD(PTRA,.SOURCE);!  translate the source address
;	  2166	               putb(.RET,PTR);          !  to ASCII and move in the
;	  2167	               end;                     !  translated name length
;	  2168	CCB[C_CNT] = ch$diff(.PTRA,.SDB_ADDR);	!Calculate length of header
;	  2169	
;	  2170	
;	  2171	!
;	  2172	!  If requested to do so, adjust the buffer descriptor of the
;	  2173	!  pass-through CCB to point past an old header
;	  2174	!
;	  2175	
;	  2176	if .PT_HDR neq 0 then begin
;	  2177	    CCB[C_XPT_ADJUST] = .PT_HDR;		!Set up adjustment factor
;	  2178	    CCB_P[C_ADDR] = ch$plus			!Bump buffer address
;	  2179		(.CCB_P[C_ADDR],.PT_HDR);		!  past Phase III header
;	  2180	    CCB_P[C_CNT] = .CCB_P[C_CNT] - .PT_HDR;	!Also adjust count
;	  2181	    end;
;	  2182	
;	  2183	!
;	  2184	!  Return "success"
;	  2185	!
;	  2186	
;	  2187	return (CS_SUC)
;	  2188	end;				!End of BLDPH2


						.SBTTL	BLDPH2
000000	004167  000000G			; BLDPH2
					U.4:	JSR	R1,$SAVE5			;					1960
000004	162706  000010 				SUB	#10,SP
000010	016600  000030 				MOV	30(SP),R0			; OLINE,*				2115
000014	004767  000000G				JSR	PC,GTLINE
000020	010066  000004 				MOV	R0,4(SP)			; *,LINEB
000024	026066  000004  000034 			CMP	4(R0),34(SP)			; *(LINEB),DEST				2116
000032	001403 					BEQ	1$
000034	012700  177520 				MOV	#-260,R0			;					2117
000040	000423 					BR	3$
000042	012701  000017 			1$:	MOV	#17,R1				;					2123
000046	004767  000000G				JSR	PC,$CORGT
000052	103414 					BCS	2$
000054	016601  000040 				MOV	40(SP),R1			; CCB,*
000060	010061  000020 				MOV	R0,20(R1)			; $MCB$R0,*
000064	010100 					MOV	R1,R0				; CCB,*
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  68
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (8)

000066	016760  000000G 000016 			MOV	KISAR6,16(R0)
000074	012760  000017  000034 			MOV	#17,34(R0)
000102	000404 					BR	4$
000104	012700  177730 			2$:	MOV	#-50,R0				;					2124
000110	000167  000512 			3$:	JMP	16$
000114	016666  000040  000002 		4$:	MOV	40(SP),2(SP)			; CCB,*					2125
000122	016600  000002 				MOV	2(SP),R0
000126	016003  000004 				MOV	4(R0),R3			; *,CCB.P
000132	010360  000002 				MOV	R3,2(R0)			; CCB.P,*
000136	016067  000016  000000G			MOV	16(R0),KISAR6			;					2131
000144	016016  000020 				MOV	20(R0),(SP)			; *,SDB.ADDR
000150	011601 					MOV	(SP),R1				; SDB.ADDR,PTR				2132
000152	112721  000106 				MOVB	#106,(R1)+			; *,PTR					2133
000156	016600  000004 				MOV	4(SP),R0			; LINEB,*				2134
000162	116021  000007 				MOVB	7(R0),(R1)+			; *(LINEB),PTR
000166	010002 					MOV	R0,R2				; LINEB,*				2136
000170	116200  000007 				MOVB	7(R2),R0			; *(LINEB),*
000174	010046 					MOV	R0,-(SP)
000176	016646  000006 				MOV	6(SP),-(SP)			; LINEB,*
000202	062716  000010 				ADD	#10,(SP)
000206	010146 					MOV	R1,-(SP)			; PTR,*
000210	004767  000000G				JSR	PC,BL$MOV
000214	010001 					MOV	R0,R1				; *,PTR					2135
000216	012766  000001  000014 			MOV	#1,14(SP)			; *,PTRA				2137
000224	060166  000014 				ADD	R1,14(SP)			; PTR,PTRA
000230	016602  000034 				MOV	34(SP),R2			; ILINE,*				2138
000234	010200 					MOV	R2,R0
000236	004767  000000G				JSR	PC,GTLINE
000242	010066  000012 				MOV	R0,12(SP)			; *,LINEB
000246	016604  000040 				MOV	40(SP),R4			; SOURCE,*				2139
000252	010400 					MOV	R4,R0
000254	004767  000000G				JSR	PC,GTNODE
000260	010005 					MOV	R0,R5				; *,NODEB
000262	016700  000002G				MOV	.CRDAT+2,R0			;					2140
000266	020460  000056 				CMP	R4,56(R0)
000272	001017 					BNE	5$
000274	116021  000114 				MOVB	114(R0),(R1)+			; *,PTR					2142
000300	016016  000114 				MOV	114(R0),(SP)			;					2144
000304	012746  000116 				MOV	#116,-(SP)
000310	060016 					ADD	R0,(SP)
000312	016646  000016 				MOV	16(SP),-(SP)			; PTRA,*
000316	004767  000000G				JSR	PC,BL$MOV
000322	010066  000020 				MOV	R0,20(SP)			; *,PTRA				2143
000326	022626 					CMP	(SP)+,(SP)+			;					2141
000330	000511 					BR	14$				;					2140
000332	032715  001000 			5$:	BIT	#1000,(R5)			; *,NODEB				2146
000336	001434 					BEQ	10$
000340	010166  000014 				MOV	R1,14(SP)			; PTR,PTRA				2148
000344	012716  000014 				MOV	#14,(SP)			;					2149
000350	060616 					ADD	SP,(SP)				; PTRA,*
000352	010205 					MOV	R2,R5
000354	004767  177302 				JSR	PC,U.44
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  69
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (8)

000360	006000 					ROR	R0
000362	103474 					BLO	14$
000364	016705  000002G				MOV	.CRDAT+2,R5			;					2150
000370	016505  000022 				MOV	22(R5),R5			; *,J
000374	003412 					BLE	8$
000376	012716  000014 			6$:	MOV	#14,(SP)			;					2151
000402	060616 					ADD	SP,(SP)				; PTRA,*
000404	004767  177252 				JSR	PC,U.44
000410	006000 					ROR	R0
000412	103002 					BCC	7$
000414	005000 					CLR	R0
000416	000403 					BR	9$
000420	077512 				7$:	SOB	R5,6$				; J,*					0000
000422	012700  177777 			8$:	MOV	#-1,R0				;					2150
000426	001452 				9$:	BEQ	14$
000430	005702 				10$:	TST	R2				;					2155
000432	001440 					BEQ	12$
000434	016600  000012 				MOV	12(SP),R0			; LINEB,*				2156
000440	126027  000002  000004 			CMPB	2(R0),#4			; *(LINEB),*
000446	001404 					BEQ	11$
000450	126027  000002  000005 			CMPB	2(R0),#5			; *(LINEB),*				2157
000456	001026 					BNE	12$
000460	016600  000012 			11$:	MOV	12(SP),R0			; LINEB,*				2158
000464	026004  000004 				CMP	4(R0),R4			; *(LINEB),*
000470	001021 					BNE	12$
000472	116011  000007 				MOVB	7(R0),(R1)			; *(LINEB),PTR				2160
000476	010002 					MOV	R0,R2				; LINEB,*				2162
000500	116200  000007 				MOVB	7(R2),R0			; *(LINEB),*
000504	010016 					MOV	R0,(SP)
000506	010246 					MOV	R2,-(SP)			; LINEB,*
000510	062716  000010 				ADD	#10,(SP)
000514	016646  000016 				MOV	16(SP),-(SP)			; PTRA,*
000520	004767  000000G				JSR	PC,BL$MOV
000524	010066  000020 				MOV	R0,20(SP)			; *,PTRA				2161
000530	005726 					TST	(SP)+				;					2159
000532	000407 					BR	13$				;					2155
000534	012716  000014 			12$:	MOV	#14,(SP)			;					2165
000540	060616 					ADD	SP,(SP)				; PTRA,*
000542	010446 					MOV	R4,-(SP)
000544	004767  000000G				JSR	PC,CBTD
000550	110011 					MOVB	R0,(R1)				; RET,PTR				2166
000552	005726 				13$:	TST	(SP)+				;					2155
000554	016600  000014 			14$:	MOV	14(SP),R0			; PTRA,*				2168
000560	166600  000006 				SUB	6(SP),R0			; SDB.ADDR,*
000564	016601  000010 				MOV	10(SP),R1
000570	010061  000022 				MOV	R0,22(R1)
000574	016600  000044 				MOV	44(SP),R0			; PT.HDR,*				2176
000600	001406 					BEQ	15$
000602	110061  000033 				MOVB	R0,33(R1)			;					2177
000606	060063  000020 				ADD	R0,20(R3)			; *,*(CCB.P)				2179
000612	160063  000022 				SUB	R0,22(R3)			; *,*(CCB.P)				2180
000616	062706  000006 			15$:	ADD	#6,SP				;					1960
XPTSEL								15-Nov-1984 10:31:04	TOPS-20 Bliss-16 2A(530)	    Page  70
X01730								23-Sep-1983 09:35:45	RATS:<BANKS.MCB.XPT>XPTSEL.BLI.1 (8)

000622	012700  000001 				MOV	#1,R0				;					2002
000626	062706  000010 			16$:	ADD	#10,SP				;					1960
000632	000207 					RTS	PC

; Routine Size:  206 words,	Routine Base:  $CODE$ + 10772
; Maximum stack depth per invocation:  16 words


;	  2189	
;	  2190	end				!End of module XPTSEL
;	  2191	eludom



;					OTS external references
						.GLOBL	$SAVE5, $SAVE4, $STOP, $IGNAL
						.GLOBL	BL$NEQ, BL$EQL, BL$MOV


;					PSECT SUMMARY
;
;	Psect Name			Words	  Attributes
;	 $PLIT$				    2	    RO ,  D  ,  LCL,  REL,  CON
;	 $CODE$				 2507	    RO ,  I  ,  LCL,  REL,  CON




;				LIBRARY STATISTICS
;
;					     -------- Symbols --------    Blocks
;	File				     Total    Loaded   Percent      Read
;
;  RATS:<BANKS.MCB.MCB>XPORTX.L16.10	       599         2         0         0
;  RATS:<BANKS.MCB.MCB>MCBLIB.L16.6	       372        44        11         0
;  RATS:<BANKS.MCB.MCB>NMXLIB.L16.5	       200        11         5         0
;  RATS:<BANKS.MCB.XPT>XPTLIB.L16.3	       510       196        38         0





; Size:		2507 code + 2 data words
; Run Time:	00:46.4
; Elapsed Time:	03:58.5
; Memory Used:	94 pages
; Compilation Complete
ADDRESS				 399+	 401+	 402+	 404+	 405+	 407+	 408+	 414+	 415+	 418+	 419+	 420+
BAD_ROUT_HDR			1509#
BITOFF				1304	1332
BITON				 879	 880	1546
BLDPH2				 339	 736	1152	1649	1960*
BLDPH3				 340	 746	1620	1870*
BPT				 428+#	 440+#	1116	1182	1611	1689
BUFCHK				 432+	 433+#	 442+	 443+#
BUFLEN				1507	1594#	1596#	1597	1598	1646#	1648#	1649
BUFPTR				1693	1779	1911	1940	1941
BUFSIZE				 671	 673#	 675#	 677
BYT$PTR				1338	1342	1374	1799	1815	1857	1919	2061	2136	2144	2162
CALL$E				 791	1010	1064	1173	1373	1552	1607	1632	1679
CALLER				 569	 577	 651#	 695	 772
CB				 577	 619	 629	 630	 631
CBTD				 477	2165
CCB				 450	 452	 453	 454	 455#	 567	 644#	 645	 649	 650	 651	 665
				 667#	 677	 679	 685#	 686#	 695	 707#	 709	 710#	 711	 714	 736
				 746	 753	 760	 772	 779	 780	 781	 875	 890	 937	 945	 958
				1000	1013#	1014#	1015#	1016	1020	1022	1024	1074	1078#	1079#	1094
				1106#	1107#	1108#	1109#	1112	1114	1124#	1125#	1126#	1130	1132	1135
				1149	1152	1155	1159	1162	1164	1167	1241	1243	1322	1355	1359
				1360	1361	1364#	1365#	1366#	1367#	1368#	1373	1388	1390	1432	1447
				1448	1449	1459	1504	1535	1537#	1538#	1539#	1558	1578	1588#	1589#
				1590#	1591#	1597#	1598#	1602	1605	1620	1623	1625	1628	1649	1652
				1656	1662#	1663#	1664#	1668	1670	1672	1675	1870	1909	1918	1919
				1920#	1921#	1922#	1923#	1948#	1960	2068	2123	2125#	2131	2168#	2177#
CCBGT$				1074	1535
CCBRT$				 753
CCB_P				 483	 568	 644	 672	 685	 708	 716	 791	 799	 876	 958	1001
				1005	1010	1013	1014	1015	1020	1035	1050	1064	1066	1075	1078
				1094	1106	1107	1108	1109	1124	1125	1126	1132	1156	1159	1164
				1168	1173	1187	1241	1282	1291	1311	1360#	1361#	1366	1367	1430
				1432#	1448	1505	1515	1520	1522	1524	1536	1537	1545	1553	1558
				1578	1588	1589	1590	1591	1607	1625	1632	1656	1662	1663	1664
				1672	1680	1911	1912	1918#	1923	1940	1949#	1950#	2108	2125#	2178#
				2179	2180#
CDTB				 476	1783
CE_DIS				 632	 771	1022	1024	1131	1149	1158	1163	1355	1624	1671	2117
CE_ERR				 648	 721	 735	1066	1524
CE_RTE				 666	 680	 714	 778	 782	 945	1154	1459	1651	2124
CHKBUF				 435+*	 436+
CONVERT				2013*	2149	2151
CONVERT_LINKAGE			2012#	2013#
COUNTER_INCREMENT		 621	 762	 940	 943	1007	1008	1061	1062	1096	1111	1128	1136
				1146	1171	1299	1301	1302	1453	1457	1577	1601	1621	1630	1643
				1677
CS_SUC				 712	 716	 718	 753	 761	 793	1021	1113	1134	1166	1604	1627
				1655	1674	1957	2187
C_ADDR				 453	 709	1010	1014	1016	1064	1107	1125	1360	1367	1522	1589
				1597	1663	1921	1949	2178	2179
C_BIAS				 454	 709	1013	1106	1124	1366	1588	1662	1920
C_CHN				 676	1368	1923	2125
C_CNT				 675	 707	1015	1108	1126	1361	1520	1590	1598	1664	1922	1950
				2168	2180
C_FIELDS			 568	 671	 876	1000	1001	1505	1912
C_LIN				 650	1020	1050	1109	1515	1591
C_LIX				 710	1005
C_OWN				1447
C_PIX				 651
C_PRM1				 649	1919
C_PRM2				 645
C_PRM4				 686	1079
C_PRM5				 714
C_STK				 685	1078	1432	1537	1918	2125
C_XPT_ADJUST			1359	1360	1361	1365	1539	1948	2177
C_XPT_ALLOCATION		 455	 629	 630	 667	 779	 780
C_XPT_FIELDS			 452	 567	 619	 875	1243	1282	1390	1504	1909	2068	2108
C_XPT_TYPE			1364	1538
DC_MSGFLGS			1354
DEST				 569	 577	 625	 645#	 646	 696	 711	 734	 736	 746	 772	 792
				 877	 890	 936	 958	1019	1037#	1047	1075	1087	1094	1112	1114
				1116	1133	1135	1148	1152	1156	1160	1165	1168	1173	1388	1439
				1507	1548	1553	1560	1603	1608	1611	1620	1628	1633	1649	1652
				1667	1668	1675	1680	1870	1930	1960	2116
DESTAD				1693	1778#	1787#	1797#	1817#	1859#
DLLQUOTA			1371#
ECLFWD				 475	 711	1112	1602
FALSE				 458	1087	1090	1554	2065	2153
FORWARDER			 474*	 760	1020	1130	1162	1623	1670
FULL				1122	1617
GETB				1036	1303	1306	1308	1331	1336	1340	1344	1546	1593	1596	1645
				1648	1780	1854	1942	1945
GETBUF				 450#	 677	2123
GETQ				 399+#
GETW				 378+#	 401+	 402+	1037#	1038	1347	1348
HDRFLG				1870	1939
HDRLEN				1911	1944#	1947#	1948	1950
I				 423+	 425+	1808	1809
ICPTD				1507	1528#	1529#	1555#	1606	1631	1678
ILINE				 877	 890	 942	1050#	1051	1075	1095	1110	1114	1127	1135	1145
				1153	1156	1168	1241	1292	1322	1388	1443	1444	1456	1507	1515#
				1516	1536	1547	1558	1576	1578	1600	1605	1619	1625	1628	1650
				1652	1656	1668	1672	1675	1693	1852	1960	2138	2149	2155
INPUTCOUNT			1370#
INPUTQUOTA			 717#
INTPH2				 791	1173	1552	1607	1632	1679
ISHDR				1507	1549#	1554#	1592	1620
J				 423+	 425+	2150	2151
LEN				 450	 453	 455	1771	1780#	1781	1783	1798	1799	1813	1814	1853
				1854#	1855	1856	1911	1940	1942#	1943	1944	1945#	1946	1947	2107
				2131
LEND				1283	1333#	1340#	1341	1343	1374
LENS				1283	1336#	1337	1339	1374
LINE				2013	2055
LINEBLOCK			 557+	 609+	 865+	 922+	 990+	1272+	1420+	1494+	1759+	2044+	2097+
LINEB				 529	 555+	 557+	 607+	 609+	 692#	 728#	 762	 837	 863+	 865+	 893
				 920+	 922+	 933#	 940	 942#	 943	 962	 988+	 990+	1005#	1051#	1062
				1085#	1095#	1096	1110#	1111	1127#	1128	1129#	1136	1145#	1146	1147#
				1171	1244	1270+	1272+	1292#	1373	1392	1418+	1420+	1436#	1443#	1452#
				1453	1456#	1457	1466	1492+	1494+	1516#	1568#	1576#	1577	1600#	1601
				1619#	1621	1622#	1630	1643	1666#	1677	1731	1757+	1759+	1809#	1852#
				2016	2042+	2044+	2055#	2069	2095+	2097+	2115#	2138#
LINESTATE			 694	1089	1575
LINKD				1283	1348#	1374
LINKS				1283	1347#	1374
LOCAL_NODE			 658	 705	1049	1105	1567	1587
M				 423+	 424+
MAPBUF				1035	1291	1311	1545	1940	2131
MATRIX				 423+#	 425+
MAXV				1057	1058
MCB$GAW_PROCESS_DATA_BASE	 560+	 561+	 564+	 612+	 613+	 616+	 868+	 869+	 872+	 925+	 926+	 929+
				 993+	 994+	 997+	1275+	1276+	1279+	1423+	1424+	1427+	1497+	1498+	1501+
				1762+	1763+	1766+	2047+	2048+	2051+	2100+	2101+	2104+
MISC_ERROR			1375
N				 423+	 424+
NID				 734	 936	1148	1439	1667	1817	1863	2058	2116	2158
NL				 423+	 425+
NLN				1808	2150
NMXID				1011	1315	1523
NN				1087	1784
NNM				1815	1857	2061	2136	2162
NNML				1813	1855	2059	2060	2134	2135	2160	2161
NODE				2013	2058
NODEBLOCK			 552+	 604+	 860+	 917+	 985+	1267+	1415+	1489+	1754+	2039+	2092+
NODEB				 529	 550+	 552+	 602+	 604+	 646#	 647#	 837	 858+	 860+	 915+	 917+
				 983+	 985+	1047#	1265+	1267+	1413+	1415+	1466	1487+	1489+	1560#	1752+
				1754+	2037+	2039+	2069	2090+	2092+	2139#
NODENAME			1799	2144
NODENAME_LENGTH			1798	1799	2142	2143
NOP				 440+	 441+	 443+
NO_LINEB			 556+	 581#	 608+	 864+	 921+	 989+	1271+	1419+	1493+	1758+	2043+	2096+
NO_NODEB			 551+	 580#	 603+	 859+	 894#	 916+	 961#	 984+	1266+	1414+	1488+	1753+
				2038+	2091+
NO_PATH_ERROR			1375	1508#
NTY				 729	 730	 935	1122	1123	1143	1144	1172	1182	1321	1438	1445
				1517	1518	1529	1617	1618	1641	1642	1678	1689	1810	1811	2057
				2156	2157
OL				 659	1049	1567
OLINE				 569	 650#	 657	 659#	 669	 684	 692	 694	 704	 728	 737	 760
				 877	 890	 933	 934	 939	1048#	1049#	1075	1085	1089	1104	1114
				1129	1130	1135	1147	1153	1156	1162	1168	1388	1436	1437	1451
				1452	1507	1566#	1567#	1568	1575	1586	1622	1623	1628	1650	1652
				1666	1668	1670	1675	1960	2115
OTYPE				 569	 706#	 731#	 732#	 745#	 790
PARAMETER_CM			 623
PARAMETER_DU_2			 625	 626
PARAMETER_HI			1313	1522
PARAMETER_H_1			 624	 627
PD_XPE				 791	1010	1064	1173	1373	1552	1607	1632	1679
PD_XPT				1447
PH2HDR				 341	1547	1693*
PH2_RTFLGS			2133
PHASE2_NODE			2146
PHTWO				 729	 730	 935	1143	1172	1438	1445	1518	1529	1641	1678	1810
				2057	2156
PKTA_HDR			1010	1064
POINTER				 878	1003	1285	1506	1770	1910	2109
PTR				 378+	 381+	 382+	 385+	 388+	 389+	 395+	 396+	 399+	 401+	 402+	 404+
				 407+	 408+	 409+	 410+	 414+	 415+	 878	1003	1016#	1017	1018	1019
				1035	1036	1037	1038	1039	1041	1285	1291	1303	1306	1307#	1308
				1311	1314	1331	1336	1337	1339#	1340	1341	1343#	1344	1347	1348
				1506	1545	1546	1547	1593	1595#	1596	1645	1647#	1648	1770	1779#
				1780	1783	1799	1814	1853#	1854	1856	1910	1919#	1921	1929	1930
				1931	1932	1941#	1942	1943#	1945	1946#	1949	2109	2132#	2133	2134
				2135#	2136	2137	2142	2148	2160	2166
PTRA				2107	2137#	2143#	2144	2148#	2149	2151	2161#	2162	2165	2168
PTRAD				2013	2059	2060#	2061
PT_HDR				1960	2176	2177	2179	2180
PUTB				1017	1929	1932	2059	2133	2134	2142	2160	2166
PUTQ				 404+#
PUTW				 385+#	 414+	 415+	1018	1019	1930	1931
RCVDAT				 337	 799*
RCVECL				 336	 483*
RCVPH2				 338	1187*
REACH				 693	1088	1574
RET				 569	 702	 733#	 746#	 753	 760#	 763	 771	 778	 877	1087#	1090#
				1094	1130#	1131	1134	1152#	1154	1158	1162#	1163	1166	1283	1303#
				1304#	1306#	1307	1308#	1310#	1314	1331#	1332	1344#	1354	1507	1519
				1520#	1522	1547#	1552#	1557	1558	1593#	1594	1595	1620#	1623#	1624
				1627	1644	1645#	1646	1647	1649#	1651	1655	1670#	1671	1674	1771
				1783#	1784	1786	1787	1788#	1796#	1807#	1818#	1845	1864	2107	2165#
				2166
RE_QUEUE			 478	 937	1447
RFLG				 877	 879	 880	 958	1017	1036#	1094	1133	1160	1165
RQR				 880#	1012	1870	1929
RQRFLG				 880
RTS				 879#	1012	1058
RTSFLG				 879	1017
RU				 694	1089	1575
SDB_ADDR			2107	2131	2132	2168
SEND_DC				1373
SMALL				1123	1618
SMAP$				 454
SRCAD				1693	1778#	1863#
TERMINATE			 479	 716	 945	1022	1024	1066	1149	1355	1459	1524
TID				 746	1797	2140
TMPCCB				 671	 672#	 675	 676#
TOSS				 890*	1075	1114	1135	1156	1168	1232	1322	1388*	1536	1605	1628
				1652	1668	1675
TRUE				 456	1091	1549	2062	2149	2152
UNIT				 423+#	 424+	 425+
UNREACH				 577*	 695	 772	 958*	1094	1132	1159	1164	1241*	1558	1578	1625
				1656	1672
UNSPAWN				 480	1155	1167	1448
VALUE				 385+	 386+	 388+	 389+	 394+
VISIT				 877	1039#	1040#	1041	1057	1058
WORKD				1284	1342	1374
WORKS				1284	1338	1374
X				 380+	 381+#	 382+#	 383+	 393+	 394+#	 395+	 396+
XPT$_DNS			1116	1611
XPT$_IANT			1182	1689
XPTAGED_LOSS			1061
XPTDBBLOCK			 566+	 618+	 874+	 931+	 999+	1281+	1429+	1503+	1768+	2053+	2106+
XPTDB				 563+	 564+#	 565+	 615+	 616+#	 617+	 621	 871+	 872+#	 873+	 928+	 929+#
				 930+	 996+	 997+#	 998+	1007	1008	1061	1278+	1279+#	1280+	1299	1301
				1302	1426+	1427+#	1428+	1500+	1501+#	1502+	1765+	1766+#	1767+	2050+	2051+#
				2052+	2103+	2104+#	2105+
XPTEND_CNG			 943	1457
XPTEND_RCV			1111	1601
XPTEND_XMT			 762
XPTFMT_LOSS			1302
XPTRANGE_LOSS			1008	1301
XPTSEL				   1#
XPTUNREACH_LOSS			 621	1007	1299
XPTXIT_CNG			 940	1453
XPTXIT_RCV			1062	1096	1128	1146	1577	1621	1643
XPTXIT_XMT			1136	1171	1630	1677
ZEROQ				 418+#
$MCB_COPY_CHAIN_TO_BUFFER	 708
$MCB_GET_BUFFER			 453
$MCB_GET_CCB			 665
$MCB_RETURN_CCB_AND_BUFFER	 630	 713	 780
$MCB_RETURN_CCB			 631	 679	 781
$NM_LOG_BEGIN			 622	1009	1063	1312	1521
$NM_LOG_END			 628	1011	1065	1315	1523
$XPT$E_AGE			1065
$XPT$E_FMT			1313	1375	1523	1782	1860
$XPT$E_RNG			1087	1300	1785
$XPT$E_UNR			 628	1006	1090	1133	1160	1165	1298	1578	1626	1657	1673	1845
$XPT_GET_LINE_DB		 692	 728	 933	 942	1005	1051	1085	1095	1110	1127	1129	1145
				1147	1292	1436	1443	1452	1456	1516	1568	1576	1600	1619	1622
				1666	1809	1852	2055	2115	2138
$XPT_GET_NODE_DB		 646	1047	1560	2139
%CTCE				 386+	 405+
%REMAINING			 430+