Google
 

Trailing-Edge - PDP-10 Archives - BB-P363B-SM_1985 - mcb/nml/nmlmrr.lst
There are no other files named nmlmrr.lst in the archive.
								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page   1
								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (1)

;	  0001	! <BRANDT.DEVELOPMENT>NMLMRR.BLI.1 28-Jul-82 16:30:47, Edit by BRANDT
;	  0002	!
;	  0003	!   Ident 05.
;	  0004	!     In WAIT_FOR_CONNECT, do not do access checking.
;	  0005	!
;	  0006	!NET:<PECKHAM.DEVELOPMENT>NMLMRR.BLI.4 26-Mar-82 17:00:47, Edit by PECKHAM
;	  0007	!
;	  0008	! Ident 04.
;	  0009	! Fix dot bug in WAIT_FOR_CONNECT.
;	  0010	! Error buffer no longer needed for NMU$NETWORK_OPEN.
;	  0011	! Optimize WAIT_FOR_CONNECT.
;	  0012	!
;	  0013	!NET:<DECNET20-V3P1.BASELEVEL-2.SOURCES>NMLMRR.BLI.12 20-Nov-81 13:32:46, Edit by WEBBER
;	  0014	!
;	  0015	! Ident 03.
;	  0016	! Fix get and return of the response buffer so that they use addresses only,
;	  0017	! instead of pointers.
;	  0018	!
;	  0019	!NET:<DECNET20-V3P1.NML>NMLMRR.BLI.3 21-Oct-81 09:32:00, Edit by WEBBER
;	  0020	!
;	  0021	! Ident 02.
;	  0022	! Add error response buffer and length as parameters to NETWORK_OPEN.
;	  0023	!
;	  0024	!NET:<DECNET20-V3P1.BASELEVEL-2.SOURCES>NMLMRR.BLI.10  9-Feb-81 12:42:42, Edit by GUNN
;	  0025	!
;	  0026	! Remove check for version skew. 
;	  0027	!
;	  0028	!NET:<DECNET20-V3P1.NMU>NMLMRR.BLI.5  3-Feb-81 09:58:30, Edit by JENNESS
;	  0029	!    Remove MIRROR_OBJECT literal definition ... now in NMARCH.
;	  0030	!    Change connect routine to properly reset connect block on reopen.
;	  0031	!    Rework access validation.
;	  0032	!    Add error code on reject for 'ACCESS NOT PERMITTED' (SC$_ANP).
;	  0033	!    Change so that disconnect is done only on unrecoverable errors.
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page   2
								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (2)

;	  0034	module NMLMRR (					! Loop back mirror task
;	  0035			ident = 'X00.05'
;	  0036			) =
;	  0037	begin
;	  0038	!
;	  0039	!                    COPYRIGHT (c) 1980, 1981, 1982
;	  0040	!                    DIGITAL EQUIPMENT CORPORATION
;	  0041	!                        Maynard, Massachusetts
;	  0042	!
;	  0043	!     This software is furnished under a license and may  be  used
;	  0044	!     and copied only in accordance with the terms of such license
;	  0045	!     and with the inclusion of the above copyright notice.   This
;	  0046	!     software  or any other copies thereof may not be provided or
;	  0047	!     otherwise made available to any other person.  No  title  to
;	  0048	!     and ownership of the software is hereby transferred.
;	  0049	!
;	  0050	!     The information  in  this  software  is  subject  to  change
;	  0051	!     without  notice  and should not be construed as a commitment
;	  0052	!     by DIGITAL EQUIPMENT CORPORATION.
;	  0053	!
;	  0054	!     DIGITAL assumes no responsibility for the use or reliability
;	  0055	!     of  its  software  on  equipment  which  is  not supplied by
;	  0056	!     DIGITAL.
;	  0057	!
;	  0058	
;	  0059	!++
;	  0060	! Facility: LSG DECnet Network Management
;	  0061	!
;	  0062	! Abstract:
;	  0063	!
;	  0064	!   	This task performs the Loopback Mirror function for
;	  0065	!	network management.   This mirror is used for loopback
;	  0066	!	testing through all layers of the architecture (SC, NSP, XPT,
;	  0067	!	DLL).
;	  0068	!
;	  0069	! Environment: TOPS-10/20 User mode, RSX task mode
;	  0070	!
;	  0071	! Author: Dale C. Gunn,  Steven M. Jenness, Creation date: 23-Oct-80
;	  0072	!
;	  0073	!--
;	  0074	
;	  0075	!
;	  0076	!<BLF/SYNONYM %unquote=>
;	  0077	!<BLF/SYNONYM $FIELD=FIELD>
;	  0078	!<BLF/PAGE>
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page   3
X00.05								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (3)

;	  0079	!
;	  0080	! Include files
;	  0081	!
;	  0082	
;	  0083	library 'NMLLIB';				! All required definitions
;	  0084	
;	  0085	!
;	  0086	! Global routines
;	  0087	!
;	  0088	
;	  0089	forward routine
;	  0090	    NML$MIRROR : novalue;			! Mirror task code
;	  0091	
;	  0092	!
;	  0093	! Local routines
;	  0094	!
;	  0095	
;	  0096	forward routine
;	  0097	    WAIT_FOR_CONNECT,				! Wait for connection to target task
;	  0098	    CHECK_VERSION,				! Validate network management version
;	  0099	    LOOP_DATA : novalue;			! Loop data on a connected link
;	  0100	
;	  0101	!
;	  0102	! Equated symbols
;	  0103	!
;	  0104	
;	  0105	literal
;	  0106	    LOOP_BUFFER_LENGTH = 500;			! Length of loop back buffer in bytes
;	  0107	
;	  0108	!
;	  0109	! External references
;	  0110	!
;	  0111	
;	  0112	external routine
;	  0113	    NMU$MEMORY_GET,				! Routines for getting
;	  0114	    NMU$MEMORY_RELEASE,				!   and giving back memory
;	  0115	    NMU$NETWORK_UTILITIES;			! Network task-to-task interface
;	  0116	
;	  0117	external
;	  0118	    NMLVER,			! Network Managment version number
;	  0119	    DECECO,			! Digital ECO number
;	  0120	    USRECO;			! User ECO number
;	  0121	
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page   4
X00.05								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (4)

;	  0122	
;	  0123	global routine %unquote NML$MIRROR (TASK, RESOURCE) : novalue =
;	  0124	
;	  0125	!++
;	  0126	! Functional description:
;	  0127	!
;	  0128	!	This routine is the top level of the Network Management
;	  0129	!	loopback mirror.  This mirror provides a task to task
;	  0130	!	loop back.  By doing the loopback at network task level
;	  0131	!	all the lower layers can be checked for operability.
;	  0132	!
;	  0133	! Formal parameters:
;	  0134	!
;	  0135	!	.TASK		Address of task block for this task
;	  0136	!	.RESOURCE	Address of cell for this task to use as
;	  0137	!			 a resource variable.
;	  0138	!
;	  0139	! Routine value: none
;	  0140	! Side effects: none
;	  0141	!
;	  0142	!--
;	  0143	
;	  0144	    begin
;	  0145	
;	  0146	    local
;	  0147		BUFFER_PTR,				! Pointer to acceptance data buffer
;	  0148		BUFFER : ch$sequence (2, 8),		! Acceptance data buffer
;	  0149		LINK_ID;				! Open logical link identifier
;	  0150	
;	  0151	!
;	  0152	! Put the loopback buffer length (in bytes) into the buffer
;	  0153	! to send as the optional data on a link connect acceptance.
;	  0154	!
;	  0155	    BUFFER_PTR = ch$ptr (BUFFER,, 8);
;	  0156	    PUTW (uplit (LOOP_BUFFER_LENGTH - 1), BUFFER_PTR);
;	  0157	!
;	  0158	! Loop forever, wait for link connected, loop data until disconnected.
;	  0159	!
;	  0160	
;	  0161	    while $true do
;	  0162		begin
;	  0163		LINK_ID = WAIT_FOR_CONNECT (MIRROR_OBJECT, 2, ch$ptr (BUFFER,, 8));
;	  0164		LOOP_DATA (.LINK_ID);
;	  0165		NMU$NETWORK_CLOSE (.LINK_ID, 0, 0);
;	  0166		end;
;	  0167	
;	  0168	    end;					! End of NML$MIRROR


						.TITLE	NMLMRR
						.IDENT	/X00.05/
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page   5
X00.05								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (4)


000000						.PSECT	$PLIT$,  RO ,  D  
000000	000763 				P.AAA:	.WORD	763
000002	000763 				P.AAB:	.WORD	763


						.GLOBL	UM.GET, UM.RELEASE, UN.INIT, UN.LOCAL
						.GLOBL	UN.OPEN, UN.ACCEPT, UN.REJECT
						.GLOBL	UN.READ, UN.WRITE, UN.ABORT, UN.CLOSE
						.GLOBL	UN.STATUS, UN.VALIDATE, NMLVER
						.GLOBL	DECECO, USRECO


						.SBTTL	NX.MIRROR
000000						.PSECT	$CODE$,  RO 

000000	010146 				NX.MIRROR::
						MOV	R1,-(SP)			;					0123
000002	005746 					TST	-(SP)
000004	010600 					MOV	SP,R0				; BUFFER,BUFFER.PTR			0155
000006	116720  000000'				MOVB	P.AAA,(R0)+			; *,BUFFER.PTR				0156
000012	116720  000003'				MOVB	P.AAB+1,(R0)+			; *,BUFFER.PTR
000016	012746  000031 			1$:	MOV	#31,-(SP)			;					0163
000022	012746  000002 				MOV	#2,-(SP)
000026	012746  000006 				MOV	#6,-(SP)
000032	060616 					ADD	SP,(SP)				; BUFFER,*
000034	004767  000000V				JSR	PC,WAIT.FOR.CONNECT
000040	010001 					MOV	R0,R1				; *,LINK.ID
000042	010116 					MOV	R1,(SP)				; LINK.ID,*				0164
000044	004767  000000V				JSR	PC,LOOP.DATA
000050	010116 					MOV	R1,(SP)				; LINK.ID,*				0165
000052	005046 					CLR	-(SP)
000054	005046 					CLR	-(SP)
000056	004767  000000G				JSR	PC,UN.CLOSE
000062	062706  000012 				ADD	#12,SP				;					0162
000066	000753 					BR	1$				;					0161
; Routine Size:  28 words,	Routine Base:  $CODE$ + 0000
; Maximum stack depth per invocation:  8 words


;	  0169	
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page   6
X00.05								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (5)

;	  0170	routine WAIT_FOR_CONNECT (OBJECT, DATA_LENGTH, DATA_PTR) =
;	  0171	
;	  0172	!++
;	  0173	! Functional description:
;	  0174	!
;	  0175	!	This routine opens a target link for connection by
;	  0176	!	another task.  When a connect is attempted the user
;	  0177	!	access rights are check and the source task's version
;	  0178	!	number is checked.  If all checks are ok, then the
;	  0179	!	link is accepted (sending the optional acceptance data)
;	  0180	!	and the LINK_ID is returned.  If any check fails,
;	  0181	!	a reject is sent with the appropriate error code.
;	  0182	!
;	  0183	! Formal parameters:
;	  0184	!
;	  0185	!	.OBJECT		DECnet object code
;	  0186	!	.DATA_LENGTH	Number of bytes in optional accept data
;	  0187	!	.DATA_PTR	Pointer to optional acceptance data
;	  0188	!
;	  0189	! Routine value:
;	  0190	!
;	  0191	!	The LINK_ID of the opened link.
;	  0192	!
;	  0193	! Side effects: none
;	  0194	!
;	  0195	!--
;	  0196	
;	  0197	    begin
;	  0198	
;	  0199	    local
;	  0200		CBLK : CONNECT_BLOCK;			! Link connection block
;	  0201	
;	  0202	!
;	  0203	! Set the object code and clear the task name and descriptor.
;	  0204	!
;	  0205		CBLK [CB_OBJECT] = .OBJECT;
;	  0206		CBLK [CB_TASK_LENGTH] = 0;
;	  0207		CBLK [CB_DESCRIPTOR_LENGTH] = 0;
;	  0208	!
;	  0209	! Loop until the link is connected
;	  0210	!
;	  0211	
;	  0212	    while $true do
;	  0213		begin
;	  0214	
;	  0215	        local
;	  0216	            LINK_HANDLE,                ! Handle of link
;	  0217	            REASON;                     ! Link rejection reason
;	  0218	
;	  0219	!
;	  0220	! Wait for a connect to this target task
;	  0221	!
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page   7
X00.05								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (5)

;	  0222		LINK_HANDLE = NMU$NETWORK_OPEN (TARGET_LINK, CBLK, 0, 0, 0);
;	  0223	!
;	  0224	! Check for user access and version number ok
;	  0225	!
;	  0226	
;	  0227		REASON = 0;
;	  0228	
;	  0229		if ((.LINK_HANDLE gtr 0)
;	C 0230	%( N.B. - Don't try to validate
;	C 0231		and NMU$NETWORK_VALIDATE (CBLK)
;	  0232	)%
;	C 0233	%( N.B. - Nope! Guess we don't have to check for version skew here.
;	C 0234		and
;	C 0235		   ((REASON = CHECK_VERSION (CBLK)) eql 0)
;	  0236	)%)
;	  0237		then
;	  0238		    begin
;	  0239		    NMU$NETWORK_ACCEPT (.LINK_HANDLE, .DATA_LENGTH, .DATA_PTR);
;	  0240		    return .LINK_HANDLE;
;	  0241		    end
;	  0242		else
;	  0243		    begin
;	  0244		    local REJECT_BUFFER, REJECT_PTR;
;	  0245		    REJECT_PTR = ch$ptr (REJECT_BUFFER,, 8);
;	  0246		    ch$wchar_a (.REASON, REJECT_PTR);
;	  0247		    NMU$NETWORK_REJECT (.LINK_HANDLE, SC$_ANP, 1, ch$ptr (REJECT_BUFFER,, 8));
;	  0248		    NMU$NETWORK_CLOSE (.LINK_HANDLE, 0, 0);
;	  0249		    end;
;	  0250		end;
;	  0251	
;	  0252	!
;	  0253	! We will never get here, as a success returns within the loop.
;	  0254	!
;	  0255	    0
;	  0256	    end;					! End of WAIT_FOR_CONNECT


						.SBTTL	WAIT.FOR.CONNECT
000000	004167  000000G			WAIT.FOR.CONNECT:
						JSR	R1,$SAVE2			;					0170
000004	162706  000230 				SUB	#230,SP
000010	016666  000244  000006 			MOV	244(SP),6(SP)			; OBJECT,CBLK+4				0205
000016	005066  000012 				CLR	12(SP)				; CBLK+10				0206
000022	005066  000036 				CLR	36(SP)				; CBLK+34				0207
000026	012746  000001 			1$:	MOV	#1,-(SP)			;					0222
000032	012746  000006 				MOV	#6,-(SP)
000036	060616 					ADD	SP,(SP)				; CBLK,*
000040	005046 					CLR	-(SP)
000042	005046 					CLR	-(SP)
000044	005046 					CLR	-(SP)
000046	004767  000000G				JSR	PC,UN.OPEN
000052	010002 					MOV	R0,R2				; *,LINK.HANDLE
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page   8
X00.05								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (5)

000054	005001 					CLR	R1				; REASON				0227
000056	005702 					TST	R2				; LINK.HANDLE				0229
000060	003413 					BLE	2$
000062	010216 					MOV	R2,(SP)				; LINK.HANDLE,*				0239
000064	016646  000254 				MOV	254(SP),-(SP)			; DATA.LENGTH,*
000070	016646  000254 				MOV	254(SP),-(SP)			; DATA.PTR,*
000074	004767  000000G				JSR	PC,UN.ACCEPT
000100	062706  000016 				ADD	#16,SP				;					0229
000104	010200 					MOV	R2,R0				; LINK.HANDLE,*				0238
000106	000426 					BR	3$
000110	012700  000012 			2$:	MOV	#12,R0				; *,REJECT.PTR				0245
000114	060600 					ADD	SP,R0				; REJECT.BUFFER,REJECT.PTR
000116	110120 					MOVB	R1,(R0)+			; REASON,REJECT.PTR			0246
000120	010216 					MOV	R2,(SP)				; LINK.HANDLE,*				0247
000122	012746  000042 				MOV	#42,-(SP)
000126	012746  000001 				MOV	#1,-(SP)
000132	012746  000020 				MOV	#20,-(SP)
000136	060616 					ADD	SP,(SP)				; REJECT.BUFFER,*
000140	004767  000000G				JSR	PC,UN.REJECT
000144	010216 					MOV	R2,(SP)				; LINK.HANDLE,*				0248
000146	005046 					CLR	-(SP)
000150	005046 					CLR	-(SP)
000152	004767  000000G				JSR	PC,UN.CLOSE
000156	062706  000024 				ADD	#24,SP				;					0213
000162	000721 					BR	1$				;					0212
000164	062706  000230 			3$:	ADD	#230,SP				;					0170
000170	000207 					RTS	PC
; Routine Size:  61 words,	Routine Base:  $CODE$ + 0070
; Maximum stack depth per invocation:  90 words
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page   9
X00.05								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (6)

;	  0257	routine CHECK_VERSION (CBLK) =
;	  0258	
;	  0259	!++
;	  0260	! Functional description:
;	  0261	!
;	  0262	!	This routine checks to see if the Network Management
;	  0263	!	version match.  If they don't, an error code is returned.
;	  0264	!
;	  0265	! Formal parameters:
;	  0266	!
;	  0267	!	.CBLK	Address of connect block
;	  0268	!
;	  0269	! Routine value:
;	  0270	!
;	  0271	!	Zero if ok, a non-zero error code if failed test
;	  0272	!
;	  0273	! Side effects: none
;	  0274	!
;	  0275	!--
;	  0276	
;	  0277	    begin
;	  0278	
;	  0279	    map
;	  0280		CBLK : ref CONNECT_BLOCK;
;	  0281	
;	  0282	    local
;	  0283		DATA_PTR,
;	  0284		VERSION;
;	  0285	
;	  0286	!
;	  0287	! Create pointer to data supplied with connect request
;	  0288	!
;	  0289	    DATA_PTR = .CBLK [CB_DATA];
;	  0290	!
;	  0291	! Check for enough data available.  If not, return
;	  0292	! Invalid Identification error.
;	  0293	!
;	  0294	
;	  0295	    if (.CBLK [CB_DATA_LENGTH] lss 3)
;	  0296	    then
;	  0297		NICE$_IID
;	  0298	    else
;	  0299		begin
;	  0300	!
;	  0301	! Check version number against ours, if it is older
;	  0302	! it is incompatible with us.
;	  0303	!
;	  0304		VERSION = GETB (DATA_PTR);
;	  0305	
;	  0306		if .VERSION lss .NMLVER
;	  0307		then
;	  0308		    NICE$_IMV
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page  10
X00.05								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (6)

;	  0309		else
;	  0310		    begin
;	  0311	!
;	  0312	! Check the Digital ECO number, if it is non-zero,
;	  0313	! it is incompatible with us.
;	  0314	!
;	  0315	!	    VERSION = GETB (DATA_PTR);
;	  0316	!
;	  0317	!	    if .VERSION gtr 0 then NICE$_IMV else 0
;	  0318	!
;	  0319	! For now accept any 2.x.y version of Network Management
;	  0320	!
;	  0321		    0
;	  0322		    end
;	  0323	
;	  0324		end
;	  0325	
;	  0326	    end;					! End of CHECK_VERSION


						.SBTTL	CHECK.VERSION
000000	010146 				CHECK.VERSION:
						MOV	R1,-(SP)			;					0257
000002	016600  000004 				MOV	4(SP),R0			; CBLK,*				0289
000006	016001  000016 				MOV	16(R0),R1			; *,DATA.PTR
000012	026027  000020  000003 			CMP	20(R0),#3			;					0295
000020	002003 					BGE	1$
000022	012700  177767 				MOV	#-11,R0
000026	000411 					BR	3$
000030	005000 				1$:	CLR	R0				; VERSION				0304
000032	152100 					BISB	(R1)+,R0			; DATA.PTR,VERSION
000034	020067  000000G				CMP	R0,NMLVER			; VERSION,*				0306
000040	002003 					BGE	2$
000042	012700  177771 				MOV	#-7,R0
000046	000401 					BR	3$
000050	005000 				2$:	CLR	R0
000052	012601 				3$:	MOV	(SP)+,R1			;					0257
000054	000207 					RTS	PC
; Routine Size:  23 words,	Routine Base:  $CODE$ + 0262
; Maximum stack depth per invocation:  2 words
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page  11
X00.05								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (7)

;	  0327	routine LOOP_DATA (LINK_ID) : novalue =
;	  0328	
;	  0329	!++
;	  0330	! Functional description:
;	  0331	!
;	  0332	!	This routine performs the loop back function on a logical
;	  0333	!	link that has already been opened.   The looping continues
;	  0334	!	until the task at the other end of the link closes it (or
;	  0335	!	some other nefarious glitch takes it down).
;	  0336	!
;	  0337	! Formal parameters:
;	  0338	!
;	  0339	!	.LINK_ID	Identifier for logical link to do looping on
;	  0340	!
;	  0341	! Routine value: none
;	  0342	! Side effects: none
;	  0343	!
;	  0344	!--
;	  0345	
;	  0346	    begin
;	  0347	
;	  0348	    literal
;	  0349		LOOP_OK = 1,				! Loop back message received ok
;	  0350		LOOP_FAILED = -1;			! Error during loop back
;	  0351	
;	  0352	    local
;	  0353		CONNECTED,
;	  0354		CHAR_COUNT,
;	  0355		LOOP_BUFFER : ch$sequence (LOOP_BUFFER_LENGTH),
;	  0356		BUFFER_PTR,
;	  0357		FUNC_CODE;
;	  0358	
;	  0359	    CONNECTED = $true;
;	  0360	
;	  0361	    while .CONNECTED do
;	  0362		begin
;	  0363		BUFFER_PTR = ch$ptr (LOOP_BUFFER,, 8);
;	  0364	
;	  0365		if (CHAR_COUNT = NMU$NETWORK_READ (.LINK_ID, LOOP_BUFFER_LENGTH, ch$ptr (LOOP_BUFFER,, 8))) gtr 0
;	  0366		then
;	  0367		    begin
;	  0368		    FUNC_CODE = GETB (BUFFER_PTR);
;	  0369		    BUFFER_PTR = ch$ptr (LOOP_BUFFER,, 8);
;	  0370	
;	  0371		    if .FUNC_CODE eql 0
;	  0372		    then PUTB (LOOP_OK, BUFFER_PTR)
;	  0373		    else
;	  0374			begin
;	  0375			PUTB (LOOP_FAILED, BUFFER_PTR);
;	  0376			CHAR_COUNT = 1;
;	  0377			end
;	  0378	
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page  12
X00.05								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (7)

;	  0379		    end
;	  0380		else
;	  0381		    begin
;	  0382		    PUTB (LOOP_FAILED, BUFFER_PTR);
;	  0383		    CHAR_COUNT = 1;
;	  0384		    CONNECTED = $false;
;	  0385		    end;
;	  0386	
;	  0387		NMU$NETWORK_WRITE (.LINK_ID, $true, .CHAR_COUNT, ch$ptr (LOOP_BUFFER,, 8));
;	  0388		end;
;	  0389	
;	  0390	    end;					! End of LOOP_DATA


						.SBTTL	LOOP.DATA
000000	004167  000000G			LOOP.DATA:
						JSR	R1,$SAVE4			;					0327
000004	162706  000764 				SUB	#764,SP
000010	012703  000001 				MOV	#1,R3				; *,CONNECTED				0359
000014	032703  000001 			1$:	BIT	#1,R3				; *,CONNECTED				0361
000020	001456 					BEQ	5$
000022	010601 					MOV	SP,R1				; LOOP.BUFFER,BUFFER.PTR		0363
000024	016646  001000 				MOV	1000(SP),-(SP)			; LINK.ID,*				0365
000030	012746  000764 				MOV	#764,-(SP)
000034	012746  000006 				MOV	#6,-(SP)
000040	060616 					ADD	SP,(SP)				; LOOP.BUFFER,*
000042	004767  000000G				JSR	PC,UN.READ
000046	062706  000006 				ADD	#6,SP
000052	010002 					MOV	R0,R2				; *,CHAR.COUNT
000054	003415 					BLE	3$
000056	005004 					CLR	R4				; FUNC.CODE				0368
000060	152104 					BISB	(R1)+,R4			; BUFFER.PTR,FUNC.CODE
000062	010601 					MOV	SP,R1				; LOOP.BUFFER,BUFFER.PTR		0369
000064	005704 					TST	R4				; FUNC.CODE				0371
000066	001003 					BNE	2$
000070	112711  000001 				MOVB	#1,(R1)				; *,BUFFER.PTR				0372
000074	000412 					BR	4$				;					0371
000076	112711  000377 			2$:	MOVB	#377,(R1)			; *,BUFFER.PTR				0375
000102	012702  000001 				MOV	#1,R2				; *,CHAR.COUNT				0376
000106	000405 					BR	4$				;					0365
000110	112711  000377 			3$:	MOVB	#377,(R1)			; *,BUFFER.PTR				0382
000114	012702  000001 				MOV	#1,R2				; *,CHAR.COUNT				0383
000120	005003 					CLR	R3				; CONNECTED				0384
000122	005201 				4$:	INC	R1				; BUFFER.PTR				0372
000124	016646  001000 				MOV	1000(SP),-(SP)			; LINK.ID,*				0387
000130	012746  000001 				MOV	#1,-(SP)
000134	010246 					MOV	R2,-(SP)			; CHAR.COUNT,*
000136	012746  000010 				MOV	#10,-(SP)
000142	060616 					ADD	SP,(SP)				; LOOP.BUFFER,*
000144	004767  000000G				JSR	PC,UN.WRITE
000150	062706  000010 				ADD	#10,SP				;					0362
000154	000717 					BR	1$				;					0361
NMLMRR								24-May-1985 13:22:42	TOPS-20 Bliss-16 2A(530)	    Page  13
X00.05								 3-Jan-1983 01:26:43	DNET61:<MCB.NML>NMLMRR.BLI.1 (7)

000156	062706  000764 			5$:	ADD	#764,SP				;					0327
000162	000207 					RTS	PC
; Routine Size:  58 words,	Routine Base:  $CODE$ + 0340
; Maximum stack depth per invocation:  260 words


;	  0391	end						! End of module NMLMRR
;	  0392	
;	  0393	eludom



;					OTS external references
						.GLOBL	$SAVE4, $SAVE2


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




;				LIBRARY STATISTICS
;
;					     -------- Symbols --------    Blocks
;	File				     Total    Loaded   Percent      Read
;
;  DNET61:<MCB.NML>NMLLIB.L16.2		      2718        53         1         0





;	  0394	! Local Modes:
;	  0395	! Mode:Bliss
;	  0396	! Comment Start:!
;	  0397	! Comment Column:40
;	  0398	! Comment Rounding:+1
;	  0399	! Auto Save Mode:2
;	  0400	! End:
; Size:		170 code + 2 data words
; Run Time:	00:03.7
; Elapsed Time:	00:06.8
; Memory Used:	32 pages
; Compilation Complete
BUFFER				 148	 155	 163
BUFFER_PTR			 147	 155#	 156	 356	 363#	 368	 369#	 372	 375	 382
CBLK				 200	 205#	 206#	 207#	 222	 257	 280	 289	 295
CB_DATA				 289
CB_DATA_LENGTH			 295
CB_DESCRIPTOR_LENGTH		 207
CB_OBJECT			 205
CB_TASK_LENGTH			 206
CH$SEQUENCE			 148	 355
CHAR_COUNT			 354	 365#	 376#	 383#	 387
CHECK_VERSION			  98	 257*
CONNECTED			 353	 359#	 361	 384#
CONNECT_BLOCK			 200	 280
DATA_LENGTH			 170	 239
DATA_PTR			 170	 239	 283	 289#	 304
DECECO				 119
FUNC_CODE			 357	 368#	 371
GETB				 304	 368
LINK_HANDLE			 216	 222#	 229	 239	 240	 247	 248
LINK_ID				 149	 163#	 164	 165	 327	 365	 387
LOOP_BUFFER			 355	 363	 365	 369	 387
LOOP_BUFFER_LENGTH		 106#	 156	 355	 365
LOOP_DATA			  99	 164	 327*
LOOP_FAILED			 350#	 375	 382
LOOP_OK				 349#	 372
MIRROR_OBJECT			 163
NICE$_IID			 297
NICE$_IMV			 308
NML$MIRROR			  90	 123#
NMLMRR				  34#
NMLVER				 118	 306
NMU$MEMORY_GET			 113*
NMU$MEMORY_RELEASE		 114
NMU$NETWORK_ACCEPT		 239
NMU$NETWORK_CLOSE		 165	 248
NMU$NETWORK_OPEN		 222
NMU$NETWORK_READ		 365
NMU$NETWORK_REJECT		 247
NMU$NETWORK_UTILITIES		 115
NMU$NETWORK_WRITE		 387
PUTB				 372	 375	 382
PUTW				 156
REASON				 217	 227#	 246
REJECT_BUFFER			 244	 245	 247
REJECT_PTR			 244	 245#	 246
RESOURCE			 123
SC$_ANP				 247
TARGET_LINK			 222
TASK				 123
USRECO				 120
VERSION				 284	 304#	 306
WAIT_FOR_CONNECT		  97	 163	 170*
$FALSE				 384
$TRUE				 161	 212	 359	 387