Google
 

Trailing-Edge - PDP-10 Archives - BB-H348C-RM_1982 - swskit-v21/listings/mcb/topol.list
There are no other files named topol.list in the archive.
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10
TABLE OF CONTENTS

     3-  100	Topology Protocol Description
     4-  100	Declarations
     5-  100	Dynamic Data Block Definitions
     6-  100	Main Program
     7-  100	GETNOD - Get node information
     8-  100	FNDNOD - Try to find node block
     9-  100	ADDNOD - Add a new entry to node list
    10-  100	INVLID - Invalidate node/notice list
    11-  100	UPNODE - Update Node Information
    12-  100	RMINVN - Remove Invalid Node Blocks
    13-  100	GETSTS - Get node status
    14-  100	GETLIN - Update Line Status for Nodes
    15-  100	CRETOP - Create Topology Protocol Message
    16-  100	SNDTOP - Send the topology change message
    17-  100	CHGAST - AST service for topology change connect
    18-  100	RELNOT - Release notice block
    19-  100	UPNOTI - Update notice list data items
    20-  100	SNDAST - SND$ AST service
    21-  100	DSCAST - DSC$ AST service
    22-  100	SPAAST and SPDAST - SPA$ AST processing
    23-  100	CNFAST - AST service for ACC$ connect
    24-  100	RECAST - AST service for REC$ on noticer
    25-  100	FNDNOT - Find an existing notice block
    26-  100	ADDNOT - Add a notice block to the notice list
    27-  100	ABTAST - AST service for ABT$ call
    28-  100	RMVAST - AST service for ABT$ with list element
    29-  100	DSWERR - Process $DSW errors
    30-  100	INIDM - Initialize Dynamic memory
    31-  100	CLKSRV - Process Background Timing
    32-  100	TEMPLATE_EXAMPLE -
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 2


    100						.TITLE	TOPOL - MCB TOPOLOGY SERVICES
    200						.IDENT	/X01.02/
    300						.ENABLE	LC		;LOWER CASE PLEASE!!
    400
    500					;
    600					; COPYRIGHT (C) 1978
    700					; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS 01754
    800					;
    900					; THIS SOFTWARE IS  FURNISHED UNDER A LICENSE FOR USE ONLY ON A SINGLE
   1000					; COMPUTER  SYSTEM AND  MAY BE  COPIED ONLY  WITH THE INCLUSION OF THE
   1100					; ABOVE COPYRIGHT NOTICE. THIS  SOFTWARE, OR ANY OTHER COPIES THEREOF,
   1200					; MAY NOT BE PROVIDED OR OTHERWISE  MADE AVAILABLE TO ANY OTHER PERSON
   1300					; EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE
   1400					; TERMS. TITLE  TO AND  OWNERSHIP OF THE  SOFTWARE  SHALL AT ALL TIMES
   1500					; REMAIN IN DEC.
   1600					;
   1700					; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
   1800					; AND  SHOULD NOT BE  CONSTRUED AS A COMMITMENT BY  DIGITAL  EQUIPMENT
   1900					; CORPORATION.
   2000					;
   2100					; DEC ASSUMES  NO  RESPONSIBILITY  FOR THE USE OR  RELIABILITY OF ITS
   2200					; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
   2300					;
   2400
   2500					;++
   2600					; FACILITY: DN2x MCB Frontend
   2700					;
   2800					; ABSTRACT:
   2900					;
   3000					;	This program handles topology services for an INTERCEPT
   3100					;	node within a DECNET network. This task is connected to
   3200					;	by interested programs to obtain the network as known at
   3300					;	this node. The interested programs will be automatically
   3400					;	notified upon network topology changes.
   3500					;
   3600					; APPLE PIE:
   3700					;
   3800					;	There are three requirements that affect the design, coding,
   3900					;	and testing of any program:
   4000					;
   4100					;		1) The program must work and it must be readily
   4200					;		   apparent that it works.
   4300					;
   4400					;		2) The program must be maintainable by someone
   4500					;		   other than a "heavy hacker" or the implementor.
   4600					;
   4700					;		3) The program must be efficient as required to
   4800					;		   meet requirement 1 but not so efficient as to
   4900					;		   violate requirement 2.
   5000					;
   5100					;	The author stressed requirements 1 and 2 ignoring
   5200					;	requirement 3 because it really has no effect on 1
   5300					;	for this application. (e.g. Notice the inefficient way of
   5400					;	handling carry set/clear in subroutines).
   5500					;
   5600					; ENVIRONMENT: This module does not require privileges.
   5700					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 2-1


   5800					; AUTHOR: Scott G. Robinson, CREATION DATE: 26-AUG-78
   5900					;	  LCG Comm/Nets Engr
   6000					;
   6100					; MODIFIED BY:
   6200					;
   6300					;	Scott G. Robinson, 27-DEC-78 : VERSION X01.01
   6400					;	- Add Background timing to recover from hung states
   6500					;	   while processing topology requests.
   6600					;
   6700					;	Scott G. Robinson, 17-APR-79 : VERSION X01.02
   6800					;	- Correct Race condition due to timeout code introduced
   6900					;	   by X01.01 above.
   7000					;
   7100					; 			,	: VERSION
   7200					; 01	-
   7300					;--
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 3
TOPOLOGY PROTOCOL DESCRIPTION

    100						.SBTTL	Topology Protocol Description
    200					;
    300					; Topology Protocol Descriptions for V01.0.0
    400		000001 			T$$VER=1
    500		000000 			T$$ECO=0
    600		000000 			T$$CUS=0
    700					;
    800					; The topology protocol messages are contained in the following
    900					; format:
   1000					;	Message-type,Message-data
   1100					;
   1200					; 	   Message-type			Message-data
   1300					;	1 (Service Request)	Minimum-Version of protocol acceptable
   1400					;	2 (Request Accepted)	Protocol-Version available, Topology information
   1500					;	3 (Topology Change)	Topology information
   1600					;
   1700					;
   1800					; Message Data can consist of multiple fields formatted as:
   1900					;		Field Type, Field Data
   2000					;
   2100					;	Field Type			Field Data
   2200					;	0 (Illegal)
   2300					;	1 (Node Name)		Node name in (I-6):A format
   2400					;	2 (Node Number)		Node number in (EX-2):B format
   2500					;	3 (Node State)		Node state consisting of:
   2600					;				(1):B Node state =
   2700					;						0 - On
   2800					;						1 - Off
   2900					;				(1):BM Node Type =
   3000					;						1 - Local
   3100					;						2 - Adjacent
   3200					;					        3 - Intercept node
   3300					;						4 - Remote (ignored)
   3400					;	4 (Line ID)		Line identifier in format(from NICE spec):
   3500					;				(1):B = 1
   3600					;				(1):B = Line device type (from MOP Spec)
   3700					;				(1):B = Controller number
   3800					;				(1):B = Line number
   3900					;				(1):B = Line station address (0)
   4000					;	5 (Line State)		Line state (1):B meaning:
   4100					;				0 - On
   4200					;				1 - Off
   4300					;				3 - Loopback
   4400					;				4 - Maintenance
   4500					;	6 (Version ID)		Protocol Version (3):B meaning
   4600					;				Version number
   4700					;				ECO Number
   4800					;				Customer change number
   4900					;	7 (Node Count)		Number of node units to follow in (1):B
   5000					;
   5100					; Topology Information consists of one field 7 followed by
   5200					; possibly multiple node units.
   5300					; A node unit is defined as a set of information consisting of fields
   5400					; 1,2,3,4,5 in that order, with any field (except field 1) missing.
   5500					; In other words, If you receive a field type less than or equal to
   5600					; the last field type received it is a new node unit.
   5700					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 3-1
TOPOLOGY PROTOCOL DESCRIPTION

   5800					; Field  6 occurs only in message types 1 and 2. Other fields
   5900					; occur only in message types 2 and 3.
   6000					;
   6100		000001 			TY$SRQ==1		;Service request message
   6200		000002 			TY$ACC==2		;Service request accepted
   6300		000003 			TY$TOP==3		;Topology change message
   6400					;
   6500		000001 			FT$NNM=1		;Node name
   6600		000002 			FT$NUM=2		;Node number
   6700		000003 			FT$STA=3		;Node State
   6800		000004 			FT$LID=4		;Line ID
   6900		000005 			FT$LST=5		;Line State
   7000		000006 			FT$VER=6		;Protocol version
   7100		000007 			FT$NCT=7		;Node unit count
   7200					;
   7300		000000 			NS$ON=0			;Node State = ON
   7400		000001 			NS$OFF=1		;Node State = OFF
   7500					;
   7600		000001 			NT$LOC=1		;Local node
   7700		000002 			NT$ADJ=2		;Adjacent node
   7800		000003 			NT$INT=3		;Intercept node
   7900		000004 			NT$REM=4		;Remote node
   8000					;
   8100		000000 			LS$ON=0			;Line State = ON
   8200		000001 			LS$OFF=1		;Line State = OFF
   8300		000003 			LS$LBK=3		;Line State = Loopback
   8400		000004 			LS$MAI=4		;Line State = Maintenance
   8500					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 4
DECLARATIONS

    100						.SBTTL	Declarations
    200					;
    300					; INCLUDE FILES:
    400					;
    500
    600					;
    700					; MACROS:
    800					;
    900						.MCALL	ALUN$S,QIOW$S,QIO$S,SPAW$S,GNDW$S,ACC$S,REC$S
   1000						.MCALL	OPNW$S,CON$S,REJW$S,SND$S,DSC$S,NETDF$,DLXDF
   1100						.MCALL	MRKT$S,WTSE$S,ENAR$S,DSAR$S,ASTX$S,ABT$S
   1200						.MCALL	CLEF$S,SETF$S
   1300
   1400					;
   1500					;	Local Macro Definitions
   1600					;
   1700
   1800
   1900					; EDIOUT is used to format and output a message on the CTY lun.
   2000					; This would normally be an error message.
   2100					;
   2200					;	use:	EDIOUT	input string,argument list,output buffer
   2300					;
   2400					;	Refer to the IAS/RSX System Library Routines Reference
   2500					;		Manual for a description of the support routine.
   2600					;
   2700						.MACRO	EDIOUT	STRING,ARGBLK,OUTBUF
   2800					.IIF NB,OUTBUF, MOV	OUTBUF,R0	;Output Block Buffer
   2900					.IIF NB,STRING, MOV	STRING,R1	;Input Editing String
   3000					.IIF NB,ARGBLK, MOV	ARGBLK,R2	;Argument Block
   3100						CALL	$EDMSG		;Generate Message
   3200						SUB	R1,R0		;Get Buffer Address
   3300						CTYWLB	R0,R1		;Output Message to CTY
   3400						.ENDM	EDIOUT
   3500
   3600					; CTYWLB is used to write a message to the CTY without breaking through
   3700					; all conditions.
   3800					;
   3900					;	use:	CTYWLB	start of message, length of message
   4000					;
   4100						.MACRO	CTYWLB	START,LEN
   4200						QIOW$S	#IO.WLB,#LUNERO,#EROEFN,,#EROSB,,<START,LEN,#0>
   4300						.ENDM	CTYWLB
   4400
   4500					; ERJUMP and ERCALL are used to handle carry condition code errors
   4600					; in a more reasonable manner than straight coding.
   4700					;
   4800						.MACRO	ERJUMP	ADDR,?A
   4900						BCC	A
   5000						JMP	ADDR
   5100					A:
   5200						.ENDM	ERJUMP
   5300
   5400						.MACRO	ERCALL	ADDR,?A
   5500						BCC	A
   5600						CALL	ADDR
   5700					A:
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 4-1
DECLARATIONS

   5800						.ENDM	ERCALL
   5900
   6000					; PUSH and POP macros are used to manipulate elements onto and
   6100					; offof the stack.
   6200					;
   6300						.MACRO	PUSH	ARG
   6400						.IRP	A,<ARG>
   6500						.IF NB A
   6600						MOV	A,-(SP)		;Push A onto stack
   6700						.IFF
   6800						CLR	-(SP)		;Allocate a 0 word
   6900						.ENDC
   7000						.ENDM
   7100						.ENDM	PUSH
   7200
   7300						.MACRO	POP	ARG
   7400						.IRP	A,<ARG>
   7500						.IF NB A
   7600						MOV	(SP)+,A		;Pop A off stack
   7700						.IFF
   7800						TST	(SP)+		;Remove word from stack
   7900						.ENDC
   8000						.ENDM
   8100						.ENDM	POP
   8200
   8300					;
   8400					; EQUATED SYMBOLS:
   8500					;
   8600	000000					NETDF$				;Define Network symbols
   8700	000000					DLXDF				;DLX definitions
   8800					;
   8900		000010 			NETEFN==10				;Event flag for Network Activities
   9000		000011 			DLXEFN==11				;Event flag for DLX operations
   9100		000012 			GNDEFN==12				;Event flag for network data usage
   9200		000013 			EROEFN==13				;Event flag for error output
   9300		000014 			CLKEFN==14				;Event flag for clock
   9400		000015 			MAIEFN==15				;Event flag that advances main loop
   9500					;
   9600		000001 			LUNDLX==1				;Lun for DLX Device
   9700		000002 			LUNERO==2				;Lun for Error Messages
   9800		000003 			LUNNT==3				;Network Communication Lun
   9900		000004 			LUNLL0==4				;Lun for logical link #0
  10000		000005 			LUNLL1==5				;Lun for logical link #1
  10100		000006 			LUNLL2==6				;Lun for logical link #2
  10200		000007 			LUNLL3==7				;Lun for logical link #3
  10300		000010 			LUNLL4==10				;Lun for logical link #4
  10400					;
  10500		000006 			MINNDS==^D6				;Minimum number of Nodes in Network
  10600		000003 			MINNTS==^D3				;Minimum Notice points in Network
  10700		000006 			MAXNLN==^D6				;Maximum node-name length
  10800					;
  10900		000005 			TIMBUP==^D5				;Time between updates in seconds
  11000		000007 			NOTLMT==^D7				;After (7*TIMBUP) seconds we
  11100										;  clean house
  11200					;
  11300					; OWN STORAGE:
  11400					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 4-2
DECLARATIONS

  11500
  11600	000000					.PSECT	DATA,D
  11700	000000				NODLST:: .BLKW	2			;Node listhead
  11800	000004				DYMLST:: .BLKW	2			;Dynamic memory listhead
  11900	000010				NOTLST:: .BLKW	2			;Notice listhead
  12000					;
  12100	000014	000000 			NODCHG:: .WORD	0			;Node list has changed flag
  12200					;
  12300	000016				NETSB::	.BLKW	2			;Network Status Block
  12400	000022				DLXSB::	.BLKW	2			;Status for DLX operations
  12500	000026				GNDSB::	.BLKW	2			;GND Status Block
  12600	000032				EROSB::	.BLKW	2			;Error Output Status Block
  12700					;
  12800					;	Status blocks for logical links actually make up a data structure
  12900					;	referenced for transfer of information about the network topology.
  13000					;
  13100					;	LL?SB:	.BLKW	2		;Actual I/O status block
  13200					;		.BLKW	1		;Lun number for this LL
  13300					;		.BLKW	1		;Pointer to notice block
  13400					;					; if in processing otherwise 0
  13500					;
  13600		000004 			LL.LUN==4				;LUN offset
  13700		000006 			LL.NTB==6				;Notice Block address offset
  13800		000010 			LL.LEN==^D8				;Displacement to next LL?SB
  13900	000036				LL0SB::	.BLKW	2			;Status for logical link #0
  14000	000042	000004 	000000 			.WORD	LUNLL0,0
  14100	000046				LL1SB::	.BLKW	2			;Status for logical link #1
  14200	000052	000005 	000000 			.WORD	LUNLL1,0
  14300	000056				LL2SB::	.BLKW	2			;Status for logical link #2
  14400	000062	000006 	000000 			.WORD	LUNLL2,0
  14500					; LL3 and LL4 are used for Confirming a notice request
  14600	000066				LL3SB::	.BLKW	2			;Status for logical link #3
  14700	000072	000007 	000000 			.WORD	LUNLL3,0
  14800	000076				LL4SB::	.BLKW	2			;Status for logical link #4
  14900	000102	000010 	000000 			.WORD	LUNLL4,0
  15000					;
  15100	000106				OUTBLK:: .BLKB	150.			;Area for error messages
  15200						.EVEN
  15300					;
  15400		000400 			DLXLEN==^D256				;Length of DLX Buffer
  15500	000334				DLXBUF:: .BLKB	DLXLEN			;DLX Buffer
  15600						.EVEN
  15700					;
  15800	000734	000000 			ARGDYM:: .WORD	0			;Dynamic memory amount on error
  15900	000736	000000 			ARGDUM:: .WORD	0			;Dummy Argument list
  16000					;
  16100		000400 			TOPLEN==^D256				;Maximum length topology message
  16200	000740	000000 			CNFLEN:: .WORD	0			;Length of Accept message
  16300	000742	   002 	   006 	   001 	CNFMSG:: .BYTE	TY$ACC,FT$VER,T$$VER,T$$ECO,T$$CUS
	000745	   000 	   000
  16400	000747	   007 				 .BYTE	FT$NCT
  16500	000750				CNFTOP:: .BLKB	TOPLEN
  16600						.EVEN
  16700	001350	000000 			CHGLEN:: .WORD	0			;Length of Topology Change message
  16800	001352	   003 	   007 		CHGMSG:: .BYTE	TY$TOP,FT$NCT
  16900	001354				CHGTOP:: .BLKB	TOPLEN
  17000						.EVEN
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 4-3
DECLARATIONS

  17100					;
  17200	001754	000000 			NOTFLG:	.WORD	0			;Notification necessary flag
  17300	001756	000000 			NOTIP:	.WORD	0			;Notification in progress flag
  17400	001760	000000 			CLKTIM:	.WORD	0			;CLKSRV timing cell
  17500					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 5
DYNAMIC DATA BLOCK DEFINITIONS

    100						.SBTTL	Dynamic Data Block Definitions
    200					;++
    300					;	This program uses two list structures to keep information
    400					;	about the topology and the processes requesting the topology.
    500					;
    600					;	The storage for these lists are dynamically allocated from a
    700					;	EXTSCT by support routines $INIDM, $RQCB, and $RLCB. These
    800					;	routines are documented in "IAS/RSX-11 System Library
    900					;	Reference Manual".
   1000					;--
   1100
   1200					;
   1300					;	Node data block definition:
   1400					;
   1500	000000					.ASECT				;Node Data Block
   1600		000000 			.=0					;Start a absolute offset 0
   1700	000000				NB.PTR::	.BLKW	1		;(W) List pointer
   1800	000002				NB.CNT::	.BLKB	1		;(B) Length of allocated block
   1900	000003				NB.FLG::	.BLKB	1		;(B) Flag byte
   2000		000001 				NB$VAL==1			;Node block is valid if set to 1
   2100	000004				NB.NLN::	.BLKB	1		;(B) Length of node name
   2200	000005				NB.NNM::	.BLKB	MAXNLN		;MAXNLN(B) Node name
   2300	000013				NB.NST::	.BLKB	1		;(B) Node State
   2400	000014				NB.NTP::	.BLKB	1		;(B) Node Type
   2500	000015				NB.LTP::	.BLKB	1		;(B) Line Type
   2600	000016				NB.LCT::	.BLKB	1		;(B) Controller number
   2700	000017				NB.LNM::	.BLKB	1		;(B) Line number
   2800	000020				NB.LSA::	.BLKB	1		;(B) Line Station Address
   2900	000021				NB.LST::	.BLKB	1		;(B) Line State
   3000	000022				NB.LEN::				;Length of node block
   3100
   3200					;
   3300					;	Notice Data Block Definition:
   3400					;
   3500	000022					.ASECT				;Notice Data Block
   3600		000000 			.=0					;Starting at abs offset 0
   3700	000000				AB.FPT::	.BLKW	1		;(W) Forward list pointer
   3800	000002				AB.CNT::	.BLKB	1		;(B) Length of allocated block
   3900	000003				AB.FLG::	.BLKB	1		;(B) Flag byte
   4000		000004 				NT$AIP	== 4			;Abort in progress flag
   4100		000002 				NT$NIP	== 2			;Notice in progress flag
   4200		000001 				NB$VAL	== 1			;Notice block valid
   4300	000004				AB.BPT::	.BLKW	1		;(W) Backward list pointer
   4400	000006				AB.TIM::	.BLKW	1		;(W) A word used for timing things
   4500	000010				AB.ACC::	.BLKB	N.CBL+20	;N.CBL+20(B) GND Mail Buffer
   4600	000172				AB.LEN::				;Length of notice block
   4700
   4800					;
   4900					; Minimum Dynamic Memory Calculation
   5000					;
   5100						.MACRO	 MOD	M,A,B
   5200					$$$=A
   5300					$$=B
   5400					$$$$=$$$/$$
   5500					$$$$=$$$$*$$
   5600					M=$$$+$$$-$$$$
   5700						.ENDM
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 5-1
DYNAMIC DATA BLOCK DEFINITIONS

   5800
   5900		000004 			ALLBND==4				;Allocation boundary(need not
   6000										; be power of 2)
   6100	000172					MOD	LENNDB,NB.LEN,ALLBND	;Calculate allocated length
   6200	000172					MOD	LENNTB,AB.LEN,ALLBND	;Calculate allocated length
   6300		000754 			MINDYM==<MINNDS*LENNDB>+<MINNTS*LENNTB>	;Minimum Dynamic memory
   6400					;
   6500	000000					.PSECT	DYNMIK,D,RW
   6600	000000				DYMBLK:: .BLKB	MINDYM+<LENNTB*2>	;Dynamic memory area
   6700		001342'			DYMEND==.-2
   6800	001344					.BLKB	4			;Spare bytes
   6900						.EVEN
   7000					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 6
MAIN PROGRAM

    100						.SBTTL	Main Program
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	The main processing of this program is done here. Initialization
    600					;	of dynamic data structures and protocol messages is accomplished
    700					;	plus setup for non-AST CoRoutine capabilities.
    800					;
    900					; CALLING SEQUENCE:
   1000					;
   1100					;	NONE
   1200					;
   1300					; INPUT PARAMETERS:
   1400					;
   1500					;	NONE
   1600					;
   1700					; IMPLICIT INPUTS:
   1800					;
   1900					;	NONE
   2000					;
   2100					; OUTPUT PARAMETERS:
   2200					;
   2300					;	NONE
   2400					;
   2500					; IMPLICIT OUTPUTS:
   2600					;
   2700					;	NONE
   2800					;
   2900					; COMPLETION CODES:
   3000					;
   3100					;	NONE
   3200					;
   3300					; SIDE EFFECTS:
   3400					;
   3500					;	NONE
   3600					;
   3700					;--
   3800
   3900	000000					.PSECT	MAIN,I,RO
   4000	000000				MAIN::					;Beginning of program
   4100	000000	005067 	000000'			CLR	NODLST			;Initialize Lists
   4200	000004	005067 	000010'			CLR	NOTLST			;
   4300	000010	012700 	000004'			MOV	#DYMLST,R0		;Initialize Dynamic memory
   4400	000014	004767 	004702 			CALL	INIDM			;
   4500	000020					ALUN$S	#LUNERO,#"TI,#0		;Assign for error messages
   4600	000040					ALUN$S	#LUNDLX,#"NX,#0		;Assign NX0:
   4700	000060					ALUN$S	#LUNNT,#"NS,#0		;Assign NS0: to all network
   4800	000100					ALUN$S	#LUNLL0,#"NS,#0		; luns
   4900	000120					ALUN$S	#LUNLL1,#"NS,#0		;
   5000	000140					ALUN$S	#LUNLL2,#"NS,#0		;
   5100	000160					ALUN$S	#LUNLL3,#"NS,#0		;
   5200	000200					ALUN$S	#LUNLL4,#"NS,#0		;
   5300	000220	004767 	001004 			CALL	UPNODE			;Create node list
   5400	000224	004767 	001344 			CALL	CRETOP			;Create topology message
   5500	000230					OPNW$S	#LUNNT,#NETEFN,#NETSB,,<#3> ;Open Network Channel
   5600	000300					ERCALL	DSWERR
   5700	000306	122767 	000000G	000016'		CMPB	#IS.SUC,NETSB		;Success?
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 6-1
MAIN PROGRAM

   5800	000314	001401 				BEQ	20$			;Yes, Enable Network data
   5900	000316	000003 				BPT				;No, Crash us to get reload
   6000	000320				20$:	SPAW$S	#LUNNT,#NETEFN,#NETSB,#SPDAST,<#SPAAST>
   6100	000372					ERCALL	DSWERR
   6200	000400					MRKT$S	#CLKEFN,#1,#2,#CLKSRV	;Start clock service
   6300	000426				TOP:	WTSE$S	#MAIEFN			;Wait for unblocking
   6400	000440					CLEF$S	#MAIEFN			;Clear flag
   6500	000452	004767 	000552 			CALL	UPNODE			;Keep node list current
   6600	000456	005767 	001754'			TST	NOTFLG			;Suspended topology change?
   6700	000462	001003 				BNE	10$			;Yes, try to process now
   6800	000464	005767 	000014'			TST	NODCHG			;Node data base change?
   6900	000470	001356 				BNE	TOP			;No, so no notification necessary
   7000	000472				10$:	DSAR$S				;Disable interrupts
   7100	000500	005767 	001756'			TST	NOTIP			;;Notification in progress?
   7200	000504	001406 				BEQ	20$			;;No, so start it up
   7300	000506					ENAR$S				;;Enable interrupts
   7400	000514	005267 	001754'			INC	NOTFLG			;Indicate suspended topology change
   7500	000520	000742 				BR	TOP			;Wait some more
   7600					;
   7700	000522	005067 	001754'		20$:	CLR	NOTFLG			;;Don't need another round
   7800	000526	004767 	001042 			CALL	CRETOP			;;Recreate the topology message
   7900	000532	012700 	000010'			MOV	#NOTLST,R0		;;Invalidate notice list
   8000	000536	004767 	000442 			CALL	INVLID			;;
   8100	000542	011000 				MOV	(R0),R0			;;Any entry in list?
   8200	000544	001402 				BEQ	25$			;;No, so wait some more
   8300	000546	004767 	001762 			CALL	UPNOTI			;;Try sending topology change to
   8400										;; all concerned parties
   8500										;;All other members of the list
   8600										;; are notified automatically by
   8700										;; magical means.
   8800	000552				25$:	ENAR$S				;;Reenable interrupts
   8900	000560	000722 				BR	TOP			;Wait some more
   9000					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 7
GETNOD - GET NODE INFORMATION

    100						.SBTTL	GETNOD - Get node information
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	GETNOD gets the node-names from the NX0:
    600					;	device, and  adds them to the node list if not there.
    700					;	If the node was there (or added) the valid node bit
    800					;	is set in the flag byte of the node block.
    900					;
   1000					; CALLING SEQUENCE:
   1100					;
   1200					;	CALL GETNOD
   1300					;
   1400					; INPUT PARAMETERS:
   1500					;
   1600					;	NONE
   1700					;
   1800					; IMPLICIT INPUTS:
   1900					;
   2000					;	NODLST - node block listhead
   2100					;
   2200					; OUTPUT PARAMETERS:
   2300					;
   2400					;	NONE
   2500					;
   2600					; IMPLICIT OUTPUTS:
   2700					;
   2800					;	NODCHG - node list has changed flag, 1 if no change, 0 if change
   2900					;
   3000					; COMPLETION CODES:
   3100					;
   3200					;	NONE
   3300					;
   3400					; SIDE EFFECTS:
   3500					;
   3600					;	Dynamic memory and listheads can be changed.
   3700					;
   3800					;--
   3900
   4000	000562				GETNOD::				;Here to setup the node list
   4100	000562	004767 	000000G			CALL	$SAVAL			;Save all registers
   4200	000566					QIOW$S	#NX.NIC,#LUNDLX,#DLXEFN,,#DLXSB,,<#ARGDUM,#1,#NX$RNN,#DLXBUF,#DLXLEN>
   4300										;Get node names into DLXBUF
   4400	000646					ERCALL	DSWERR			;If $DSW error , OOPS
   4500	000654	122767 	000000G	000022'		CMPB	#IS.SUC,DLXSB		;Success?
   4600	000662	001406 				BEQ	10$			;Yes, process nodes
   4700	000664	122767 	000000G	000022'		CMPB	#IE.DAO,DLXSB		;Almost Success?
   4800	000672	001402 				BEQ	10$			;Yes, well process it anyway
   4900	000674	000261 				SEC				;Show failure
   5000	000676	000446 				BR	90$			;Exit
   5100					;
   5200	000700	012701 	000334'		10$:	MOV	#DLXBUF,R1		;Point at buffer
   5300	000704	016702 	000024'			MOV	DLXSB+2,R2		;Length of buffer
   5400	000710	060102 				ADD	R1,R2			;Point at end of buffer
   5500	000712	020102 			15$:	CMP	R1,R2			;End reached?
   5600	000714	002036 				BGE	80$			;Yes, so exit
   5700	000716	112103 				MOVB	(R1)+,R3		;Get node type
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 7-1
GETNOD - GET NODE INFORMATION

   5800	000720	122703 	000004 			CMPB	#N$XRMT,R3		;Is node remote?
   5900	000724	001003 				BNE	20$			;No, so process it
   6000										;Yes, so skip node
   6100	000726	112103 			17$:	MOVB	(R1)+,R3		;Skip over node-name
   6200	000730	060301 				ADD	R3,R1			;
   6300	000732	000767 				BR	15$			;Get another node
   6400					;
   6500	000734	121127 	000006 		20$:	CMPB	(R1),#MAXNLN		;Length of name too long?
   6600	000740	003372 				BGT	17$			;Yes, so ignore node
   6700	000742	004767 	000050 			CALL	FNDNOD			;See if we have a winner
   6800	000746	103413 				BCS	30$			;No, new node
   6900	000750	152760 	000001 	000003 	23$:	BISB	#NB$VAL,NB.FLG(R0)	;Set node valid flag
   7000	000756	120360 	000014 			CMPB	R3,NB.NTP(R0)		;Node type still the same?
   7100	000762	001761 				BEQ	17$			;Yes, get next node name
   7200	000764	110360 	000014 			MOVB	R3,NB.NTP(R0)		;No, store it and show
   7300	000770	005067 	000014'			CLR	NODCHG			; node list changed
   7400	000774	000754 				BR	17$			;Skip over name
   7500					;
   7600	000776	004767 	000070 		30$:	CALL	ADDNOD			;Add a new node
   7700	001002	103751 				BCS	17$			;If couldn't, ignore it
   7800	001004	005067 	000014'			CLR	NODCHG			;Show node list changed
   7900	001010	000757 				BR	23$			;Make new node valid
   8000					;
   8100	001012	000241 			80$:	CLC				;Successful completion
   8200	001014	000207 			90$:	RETURN				;Exit
   8300					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 8
FNDNOD - TRY TO FIND NODE BLOCK

    100						.SBTTL	FNDNOD - Try to find node block
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	FNDNOD returns the pointer to a node block which matches
    600					;	the node-name passed by the caller.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	CALL FNDNOD
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	R1 = pointer to nodename in (I) format
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NODLST - Node listhead
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	R0 = pointer to node block that matched node-name
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NONE
   2700					;
   2800					; CONDITION CODES:
   2900					;
   3000					;	Carry Set if a matching node block was not found
   3100					;	Carry Clear if matching block found
   3200					;
   3300					; SIDE EFFECTS:
   3400					;
   3500					;	NONE
   3600					;
   3700					;--
   3800
   3900	001016				FNDNOD::				;Here to find node in list
   4000	001016	004567 	000000G			JSR	R5,.SAVR1		;Save R1-R5
   4100	001022	012700 	000000'			MOV	#NODLST,R0		;Get listhead
   4200	001026	112102 				MOVB	(R1)+,R2		;R2 = length of node-name
   4300	001030	011000 			10$:	MOV	(R0),R0			;Get next node block
   4400	001032	001415 				BEQ	80$			;Guess we can't match any
   4500	001034	126002 	000004 			CMPB	NB.NLN(R0),R2		;node-name lengths match?
   4600	001040	001373 				BNE	10$			;No, try another block
   4700	001042	010103 				MOV	R1,R3			;Move pointer to node-name
   4800	001044	010004 				MOV	R0,R4			;Copy pointer to node block
   4900	001046	010205 				MOV	R2,R5			;Copy length of name
   5000	001050	122364 	000005 		20$:	CMPB	(R3)+,NB.NNM(R4)	;Character match?
   5100	001054	001365 				BNE	10$			;No, so try another block
   5200	001056	005204 				INC	R4			;Next character
   5300	001060	077505 				SOB	R5,20$			;Loop over other characters
   5400	001062	000241 				CLC				;Success! so exit
   5500	001064	000401 				BR	90$			;
   5600					;
   5700	001066	000261 			80$:	SEC				;Unsuccessful!
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 8-1
FNDNOD - TRY TO FIND NODE BLOCK

   5800					;
   5900	001070	000207 			90$:	RETURN				;Exit
   6000					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 9
ADDNOD - ADD A NEW ENTRY TO NODE LIST

    100						.SBTTL	ADDNOD - Add a new entry to node list
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	ADDNOD adds a new node block into the nodelist filling
    600					;	various locations within the block with default information.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	CALL ADDNOD
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	R1 = pointer to node name in (I) format
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NODLST - node block listhead
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	R0 = pointer to new node block
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NODLST - node block listhead is updated
   2700					;
   2800					; CONDITION CODES:
   2900					;
   3000					;	Carry Set if another node block can't be allocated
   3100					;	Carry Clear if successful allocation
   3200					;
   3300					; SIDE EFFECTS:
   3400					;
   3500					;	NONE
   3600					;
   3700					;--
   3800
   3900	001072				ADDNOD::				;Here to add node to list
   4000	001072	004567 	000000G			JSR	R5,.SAVR1		;Save R1-R5
   4100	001076	010146 				MOV	R1,-(SP)		;Hold onto node-name pointer
   4200	001100	012701 	000022 			MOV	#NB.LEN,R1		;Try to get this much
   4300	001104	012700 	000004'			MOV	#DYMLST,R0		;Dynamic listhead
   4400	001110	004767 	000000G			CALL	$RQCB			;Request core block
   4500	001114	012602 				MOV	(SP)+,R2		;Restore node-name pointer
   4600	001116	103431 				BCS	90$			;Couldn't allocate block so exit
   4700	001120	010003 				MOV	R0,R3			;Copy address of block
   4800	001122	010104 				MOV	R1,R4			;Copy length of block
   4900	001124	105023 			10$:	CLRB	(R3)+			;Clean block
   5000	001126	077402 				SOB	R4,10$			;
   5100	001130	110160 	000002 			MOVB	R1,NB.CNT(R0)		;Save allocated length
   5200	001134	112203 				MOVB	(R2)+,R3		;Get length of node-name
   5300	001136	010360 	000004 			MOV	R3,NB.NLN(R0)		; and save in node block
   5400	001142	010004 				MOV	R0,R4			;Copy block pointer
   5500	001144	062704 	000005 			ADD	#NB.NNM,R4		;Point to where node name resides
   5600	001150	112224 			20$:	MOVB	(R2)+,(R4)+		;Copy name
   5700	001152	077302 				SOB	R3,20$			;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 9-1
ADDNOD - ADD A NEW ENTRY TO NODE LIST

   5800	001154	012701 	000000'			MOV	#NODLST,R1		;Update listhead
   5900	001160	005711 				TST	(R1)			;Anything in list
   6000	001162	001002 				BNE	25$			;Yes, add to end
   6100	001164	010011 				MOV	R0,(R1)			;No, show as first element
   6200	001166	000402 				BR	27$			;Join common code
   6300	001170	010071 	000002 		25$:	MOV	R0,@2(R1)		;Add to current end of list
   6400	001174	010061 	000002 		27$:	MOV	R0,2(R1)		;New block is end of list
   6500	001200	000241 				CLC				;Success!!
   6600	001202	000207 			90$:	RETURN				;Exit
   6700					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 10
INVLID - INVALIDATE NODE/NOTICE LIST

    100						.SBTTL	INVLID - Invalidate node/notice list
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	INVLID is called to clear the valid node bit in all node blocks
    600					;	in the node list.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	CALL INVLID
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	R0 - points at appropriate listhead whose elements are invalidated
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NONE
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	NONE
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NONE
   2700					;
   2800					; COMPLETION CODES:
   2900					;
   3000					;	NONE
   3100					;
   3200					; SIDE EFFECTS:
   3300					;
   3400					;	NONE
   3500					;
   3600					;--
   3700
   3800	001204				INVLID::				;Here to invalidate node blocks
   3900	001204	004567 	000000G			JSR	R5,$SAVRG		;Save R3-R5
   4000	001210	010003 				MOV	R0,R3			;Get listhead address
   4100	001212	011303 			10$:	MOV	(R3),R3			;Get next node block
   4200	001214	001404 				BEQ	90$			;None left exit
   4300	001216	142763 	000001 	000003 		BICB	#NB$VAL,NB.FLG(R3)	;Clear valid flag
   4400	001224	000772 				BR	10$			;Loop on
   4500					;
   4600	001226	000207 			90$:	RETURN				;Exit
   4700					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 11
UPNODE - UPDATE NODE INFORMATION

    100						.SBTTL	UPNODE - Update Node Information
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	UPNODE maintains the node information list from which the
    600					;	topology information is generated.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	CALL UPNODE
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	NONE
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NONE
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	NONE
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NODCHG - is set to 1 indicating no changes in the data base
   2700					;		 is 0 to indicate the data base has changed
   2800					;
   2900					; COMPLETION CODES:
   3000					;
   3100					;	NONE
   3200					;
   3300					; SIDE EFFECTS:
   3400					;
   3500					;	Complete data base is checked and possibly updated
   3600					;
   3700					;--
   3800
   3900	001230				UPNODE::				;Here to update node information
   4000	001230	012700 	000000'			MOV	#NODLST,R0		;Invalidate node data base
   4100	001234	004767 	177744 			CALL	INVLID			;
   4200	001240	012767 	000001 	000014'		MOV	#1,NODCHG		;Assume no changes in data base
   4300	001246	004767 	177310 			CALL	GETNOD			;Update valid nodes
   4400	001252	004767 	000012 			CALL	RMINVN			;Remove Invalid nodes
   4500	001256	004767 	000074 			CALL	GETSTS			;Update node status
   4600	001262	004767 	000304 			CALL	GETLIN			;Find Line Information
   4700	001266	000207 				RETURN				;Exit
   4800					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 12
RMINVN - REMOVE INVALID NODE BLOCKS

    100						.SBTTL	RMINVN - Remove Invalid Node Blocks
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	RMINVN removes node blocks that do not contain valid
    600					;	node information from the node list. If RMINVN finds
    700					;	an invalid block it sets NODCHG to reflect a change in
    800					;	the node data base.
    900					;
   1000					; CALLING SEQUENCE:
   1100					;
   1200					;	CALL RMINVN
   1300					;
   1400					; INPUT PARAMETERS:
   1500					;
   1600					;	NONE
   1700					;
   1800					; IMPLICIT INPUTS:
   1900					;
   2000					;	NODLST - Node listhead
   2100					;
   2200					; OUTPUT PARAMETERS:
   2300					;
   2400					;	NONE
   2500					;
   2600					; IMPLICIT OUTPUTS:
   2700					;
   2800					;	NODCHG may be changed to reflect a change in the data base
   2900					;	NODLST may be updated to reflect removal of a node block
   3000					;
   3100					; COMPLETION CODES:
   3200					;
   3300					;	NONE
   3400					;
   3500					; SIDE EFFECTS:
   3600					;
   3700					;	NONE
   3800					;
   3900					;--
   4000
   4100	001270				RMINVN::				;Here to remove invalid node blocks
   4200	001270	004767 	000000G			CALL	$SAVAL			;Save all registers
   4300	001274	012703 	000000'			MOV	#NODLST,R3		;R3 = previous node (currently
   4400										; the node listhead)
   4500	001300	011304 			10$:	MOV	(R3),R4			;R4 = current node block
   4600	001302	001424 				BEQ	90$			;Guess we are done, so exit
   4700	001304	132764 	000001 	000003 		BITB	#NB$VAL,NB.FLG(R4)	;Is node block valid?
   4800	001312	001402 				BEQ	20$			;No, so remove it
   4900	001314	010403 				MOV	R4,R3			;Continue chain
   5000	001316	000770 				BR	10$			; to get another node block
   5100					;
   5200	001320	011413 			20$:	MOV	(R4),(R3)		;Remove current node block from
   5300										; chain
   5400	001322	001002 				BNE	25$			;Not end of chain if NE
   5500	001324	010367 	000002'			MOV	R3,NODLST+2		;Update current end of chain
   5600	001330	012700 	000004'		25$:	MOV	#DYMLST,R0		;Setup to release core block
   5700	001334	116401 	000002 			MOVB	NB.CNT(R4),R1		;Allocated length of block
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 12-1
RMINVN - REMOVE INVALID NODE BLOCKS

   5800	001340	010402 				MOV	R4,R2			;Address of block
   5900	001342	004767 	000000G			CALL	$RLCB			;Release the block
   6000	001346	005067 	000014'			CLR	NODCHG			;Flag node list has changed
   6100	001352	000752 				BR	10$			;Get another node block
   6200					;
   6300	001354	000207 			90$:	RETURN				;Exit
   6400					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 13
GETSTS - GET NODE STATUS

    100						.SBTTL	GETSTS - Get node status
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	GETSTS goes through the node list and updates the current
    600					;	node status for nodes found there.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	CALL GETSTS
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	NONE
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NODLST - Node listhead
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	NONE
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NODCHG may be updated to reflect a change in the node data base
   2700					;
   2800					; COMPLETION CODES:
   2900					;
   3000					;	NONE
   3100					;
   3200					; SIDE EFFECTS:
   3300					;
   3400					;	NONE
   3500					;
   3600					;--
   3700
   3800	001356				GETSTS::				;Come here to update node status
   3900	001356	004767 	000000G			CALL	$SAVAL			;Save all registers
   4000	001362	012700 	000000'			MOV	#NODLST,R0		;Get listhead
   4100	001366	011000 			10$:	MOV	(R0),R0			;R0 = current node block
   4200	001370	001477 				BEQ	90$			;Done if EQ
   4300	001372	122760 	000001 	000014 		CMPB	#N$XLCL,NB.NTP(R0)	;Local node?
   4400	001400	001003 				BNE	15$			;No, so process normally
   4500	001402	105060 	000013 			CLRB	NB.NST(R0)		;Yes, local node is always on
   4600	001406	000767 				BR	10$			;Get next node block
   4700					;
   4800	001410	010001 			15$:	MOV	R0,R1			;Make pointer to node name
   4900	001412	062701 	000004 			ADD	#NB.NLN,R1		; in (I) format
   5000	001416				   QIOW$S #NX.NIC,#LUNDLX,#DLXEFN,,#DLXSB,,<R1,#MAXNLN+1,#NX$RNS,#DLXBUF,#DLXLEN>
   5100										;Get node status
   5200	001474					ERCALL	DSWERR			;Bad directive, FOOOOOO!
   5300	001502	122767 	000000G	000022'		CMPB	#IS.SUC,DLXSB		;Success?
   5400	001510	001412 				BEQ	20$			;Yes, process status
   5500	001512	122767 	000000G	000022'		CMPB	#IE.DAO,DLXSB		;Almost Success?
   5600	001520	001406 				BEQ	20$			;Yes, process anyway
   5700	001522	142760 	000001 	000003 		BICB	#NB$VAL,NB.FLG(R0)	;Clear valid node
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 13-1
GETSTS - GET NODE STATUS

   5800	001530	005067 	000014'			CLR	NODCHG			;Flag node list change
   5900	001534	000714 				BR	10$			;Get next node block
   6000					;
   6100	001536	012703 	000334'		20$:	MOV	#DLXBUF,R3		;Point at response
   6200	001542	105723 				TSTB	(R3)+			;Skip node number
   6300	001544	100001 				BPL	21$			;
   6400	001546	105723 				TSTB	(R3)+			;Only 2 bytes
   6500	001550	121360 	000013 		21$:	CMPB	(R3),NB.NST(R0)		;See if Status change
   6600	001554	001704 				BEQ	10$			;No, so get next node block
   6700	001556	111360 	000013 			MOVB	(R3),NB.NST(R0)		;Yes, so update
   6800	001562	005067 	000014'			CLR	NODCHG			;Flag node list change
   6900	001566	000677 				BR	10$			;
   7000					;
   7100	001570	000207 			90$:	RETURN				;Exit
   7200					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 14
GETLIN - UPDATE LINE STATUS FOR NODES

    100						.SBTTL	GETLIN - Update Line Status for Nodes
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	GETLIN updates line information for all nodes in the
    600					;	node list.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	CALL GETLIN
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	NONE
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NONE
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	NONE
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NONE
   2700					;
   2800					; COMPLETION CODES:
   2900					;
   3000					;	NONE
   3100					;
   3200					; SIDE EFFECTS:
   3300					;
   3400					;	NONE
   3500					;
   3600					;--
   3700
   3800	001572				GETLIN::				;Here to update line status
   3900	001572	000207 				RETURN				;Exit
   4000					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 15
CRETOP - CREATE TOPOLOGY PROTOCOL MESSAGE

    100						.SBTTL	CRETOP - Create Topology Protocol Message
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	CRETOP creates a Topology Protocol message based upon the
    600					;	node data base.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	CALL CRETOP
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	NONE
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NODLST - Node data base listhead
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	NONE
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	TOPMSG - is build reflecting the data base
   2700					;
   2800					; COMPLETION CODES:
   2900					;
   3000					;	NONE
   3100					;
   3200					; SIDE EFFECTS:
   3300					;
   3400					;	ASTs should be disabled during the build of the message.
   3500					;
   3600					;--
   3700
   3800	001574				CRETOP::				;Here to create a topology message
   3900	001574	004767 	000000G			CALL	$SAVAL			;Save all registers
   4000	001600	012700 	000000'			MOV	#NODLST,R0		;Get node listhead
   4100	001604	012703 	000751'			MOV	#CNFTOP+1,R3		;Building message here
   4200	001610	005005 				CLR	R5			;Count of node units
   4300	001612	011000 			10$:	MOV	(R0),R0			;R0 = current node block
   4400	001614	001426 				BEQ	80$			;Done, finish off message
   4500	001616	132760 	000001 	000003 		BITB	#NB$VAL,NB.FLG(R0)	;Is block valid?
   4600	001624	001772 				BEQ	10$			;No, so ignore it
   4700	001626	112723 	000001 			MOVB	#FT$NNM,(R3)+		;Field type = node name
   4800	001632	116004 	000004 			MOVB	NB.NLN(R0),R4		;Get length of name
   4900	001636	110423 				MOVB	R4,(R3)+		;Store length
   5000	001640	012702 	000005 			MOV	#NB.NNM,R2		;Offset to node name
   5100	001644	060002 				ADD	R0,R2			;
   5200	001646	112223 			15$:	MOVB	(R2)+,(R3)+		;Copy name
   5300	001650	077402 				SOB	R4,15$			;
   5400	001652	112723 	000003 			MOVB	#FT$STA,(R3)+		;Field type = node state
   5500	001656	116023 	000013 			MOVB	NB.NST(R0),(R3)+	;Store state
   5600	001662	116023 	000014 			MOVB	NB.NTP(R0),(R3)+	;Store type of node
   5700
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 15-1
CRETOP - CREATE TOPOLOGY PROTOCOL MESSAGE

   5800
   5900	001666	005205 			50$:	INC	R5			;Done with a node unit, reflect
   6000										; that in count of node units
   6100	001670	000750 				BR	10$			;Get another node block
   6200					;
   6300	001672	110567 	000750'		80$:	MOVB	R5,CNFTOP		;Store number of node units
   6400	001676	162703 	000750'			SUB	#CNFTOP,R3		;Length of topology message
   6500	001702	010367 	000740'			MOV	R3,CNFLEN		;Store partial length
   6600	001706	010367 	001350'			MOV	R3,CHGLEN		;
   6700	001712	062767 	000006 	000740'		ADD	#CNFTOP-CNFMSG,CNFLEN	;Include header in counts
   6800	001720	062767 	000002 	001350'		ADD	#CHGTOP-CHGMSG,CHGLEN	;
   6900	001726	012702 	001354'			MOV	#CHGTOP,R2		;Prepare for copy
   7000	001732	012701 	000750'			MOV	#CNFTOP,R1		;
   7100	001736	112122 			85$:	MOVB	(R1)+,(R2)+		;Copy message
   7200	001740	077302 				SOB	R3,85$			;
   7300	001742	000207 				RETURN				;Done
   7400					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 16
SNDTOP - SEND THE TOPOLOGY CHANGE MESSAGE

    100						.SBTTL	SNDTOP - Send the topology change message
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	SNDTOP begins the process of sending the topology change message
    600					;	to a member of the notification list.
    700					;
    800					;	Processing is completed by various AST routines.
    900					;
   1000					; CALLING SEQUENCE:
   1100					;
   1200					;	CALL SNDTOP
   1300					;
   1400					; INPUT PARAMETERS:
   1500					;
   1600					;	R0 = pointer to notice data block
   1700					;
   1800					; IMPLICIT INPUTS:
   1900					;
   2000					;	LL?SB - various logical link data structures
   2100					;
   2200					; OUTPUT PARAMETERS:
   2300					;
   2400					;	NONE
   2500					;
   2600					; IMPLICIT OUTPUTS:
   2700					;
   2800					;	LL?SB - may be chosen to be the logical link for the transfer
   2900					;
   3000					; CONDITION CODES:
   3100					;
   3200					;	Carry Set if no LLs are available
   3300					;	Carry Clear if message process started OK
   3400					;
   3500					; SIDE EFFECTS:
   3600					;
   3700					;	Various ASTs are triggered.
   3800					;
   3900					;--
   4000
   4100	001744				SNDTOP::				;Here to send topology change message
   4200	001744	004767 	000000G			CALL	$SAVAL			;Save all registers
   4300	001750	012703 	000040 			MOV	#AB.ACC+N.SND,R3	;Form offset to connect block
   4400	001754	060003 				ADD	R0,R3			;Form real address
   4500	001756	012704 	000110 			MOV	#N.RQL,R4		;Length of connect block
   4600	001762	012705 	000036'			MOV	#LL0SB,R5		;Get LL address
   4700	001766	022705 	000056'		10$:	CMP	#LL2SB,R5		;In range?
   4800	001772	002474 				BLT	50$			;No, error
   4900	001774	005765 	000006 			TST	LL.NTB(R5)		;Assigned?
   5000	002000	001403 				BEQ	20$			;No, so assign and use
   5100	002002	062705 	000010 			ADD	#LL.LEN,R5		;Point at next LLSB
   5200	002006	000767 				BR	10$			;Loop again
   5300					;
   5400	002010	010065 	000006 		20$:	MOV	R0,LL.NTB(R5)		;Show assigned
   5500	002014	012760 	000043 	000006 		MOV	#TIMBUP*NOTLMT,AB.TIM(R0) ;Nominal time to finish
   5600	002022	152760 	000002 	000003 		BISB	#NT$NIP,AB.FLG(R0)	;Notice In Progress on this block
   5700	002030	012701 	000152 			MOV	#AB.ACC+N.CDA,R1	;Offset of optional data
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 16-1
SNDTOP - SEND THE TOPOLOGY CHANGE MESSAGE

   5800	002034	060001 				ADD	R0,R1			;Address of optional data
   5900	002036	016002 	000150 			MOV	AB.ACC+N.CDAC(R0),R2	;Length of optional data
   6000	002042	001422 				BEQ	30$			;If zero use different CON$
   6100	002044					CON$S	LL.LUN(R5),,R5,#CHGAST,<R3,R4,R1,R2> ;Try connect
   6200	002106	000421 				BR	40$			;Continue along
   6300	002110				30$:	CON$S	LL.LUN(R5),,R5,#CHGAST,<R3,R4> ;Try connect with no args
   6400	002152				40$:	ERCALL	DSWERR			;OOPs!
   6500	002160	000241 				CLC				;Show success
   6600	002162	000401 				BR	90$			;Continue to exit
   6700	002164	000261 			50$:	SEC				;Show error
   6800	002166	000207 			90$:	RETURN				;Exit
   6900					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 17
CHGAST - AST SERVICE FOR TOPOLOGY CHANGE CONNECT

    100						.SBTTL	CHGAST - AST service for topology change connect
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	CHGAST is entered as an AST on the CON$ to a node in the
    600					;	notice list. If the logical link is established, the topology
    700					;	change message is issued thus continuing the cycle of
    800					;	CON$, SND$, DSC$.
    900					;
   1000					; CALLING SEQUENCE:
   1100					;
   1200					;	Entered as an AST with the LL?SB address on the stack
   1300					;
   1400					; INPUT PARAMETERS:
   1500					;
   1600					;	NONE
   1700					;
   1800					; IMPLICIT INPUTS:
   1900					;
   2000					;	NONE
   2100					;
   2200					; OUTPUT PARAMETERS:
   2300					;
   2400					;	NONE
   2500					;
   2600					; IMPLICIT OUTPUTS:
   2700					;
   2800					;	NONE
   2900					;
   3000					; COMPLETION CODES:
   3100					;
   3200					;	NONE
   3300					;
   3400					; SIDE EFFECTS:
   3500					;
   3600					;	Potentially issues a topology message to some program.
   3700					;
   3800					;--
   3900
   4000	002170				CHGAST::				;Here to process CON$ complete
   4100	002170					PUSH	<R0,R1,R2,R3,R4,R5>	;Save a few registers
   4200	002204	016600 	000014 			MOV	^D12(SP),R0		;R0 = LL?SB address
   4300	002210	122710 	000000G			CMPB	#IS.SUC,(R0)		;Success?
   4400	002214	001407 				BEQ	50$			;Yes, send message
   4500	002216	122710 	000002 			CMPB	#IS.DAO,(R0)		;Almost success?
   4600	002222	001404 				BEQ	50$			;Yes, process anyway
   4700	002224	122710 	177666 			CMPB	#IE.NRJ,(R0)		;Network reject?
   4800	002230	001443 				BEQ	100$			;Yes, figure out what to do
   4900					;	CMPB	#IE.URJ,(R0)		;User didn't like us?
   5000					;	BEQ	200$			;Yes, we know what to do here
   5100	002232	000462 				BR	200$			;Remove notice block on any other
   5200										; error
   5300					;
   5400	002234				50$:					;Here to send topology change message
   5500	002234	005267 	001756'			INC	NOTIP			;Flag notice in progress
   5600	002240					SND$S	LL.LUN(R0),,R0,#SNDAST,<#CHGMSG,CHGLEN> ;Send message
   5700	002306					ERCALL	DSWERR			;OOPs
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 17-1
CHGAST - AST SERVICE FOR TOPOLOGY CHANGE CONNECT

   5800	002314				90$:	POP	<R5,R4,R3,R2,R1,R0>	;Restore registers
   5900	002330	005726 				TST	(SP)+			;Pop Status block address
   6000	002332					ASTX$S				; and exit
   6100					;
   6200	002340				100$:					;Come here to analyze network rejects
   6300	002340	122760 	000001 	000002 		CMPB	#NE$RES,2(R0)		;Network Resource error?
   6400	002346	001425 				BEQ	300$			;Requeue for transmission
   6500	002350	122760 	000006 	000002 		CMPB	#NE$MLB,2(R0)		;Destination queue overflow?
   6600	002356	001421 				BEQ	300$			;Requeue for transmission
   6700	002360	122760 	000040 	000002 		CMPB	#NE$TCN,2(R0)		;Too many connects to node?
   6800	002366	001415 				BEQ	300$			;Requeue for transmission
   6900	002370	122760 	000041 	000002 		CMPB	#NE$TCO,2(R0)		;Too many connects to process?
   7000	002376	001411 				BEQ	300$			;Requeue for transmission
   7100	002400				200$:					;Come here to remove notice block
   7200	002400	016001 	000006 			MOV	LL.NTB(R0),R1		;Get address of notice block
   7300	002404	004767 	000036 			CALL	RELNOT			;Release notice block
   7400	002410	005060 	000006 			CLR	LL.NTB(R0)		;Show this LL free
   7500	002414	004767 	000114 			CALL	UPNOTI			;Update notice list information
   7600	002420	000735 				BR	90$			;Exit
   7700					;
   7800	002422				300$:					;Come here to cause reconnect of
   7900										; notice block sometime later
   8000	002422	016001 	000006 			MOV	LL.NTB(R0),R1		;Get address of notice block
   8100	002426	005060 	000006 			CLR	LL.NTB(R0)		;Show this LL free
   8200					;+
   8300					; The following two lines need to be in the order specified to eliminate
   8400					; a race condition under which other noticers would not be notified.
   8500	002432	004767 	000076 			CALL	UPNOTI			;(1)Update notice list
   8600	002436	142761 	000003 	000003 		BICB	#NB$VAL!NT$NIP,AB.FLG(R1) ;(2)Put in virgin state
   8700					;-
   8800	002444	000723 				BR	90$			;Exit and either let timeout or
   8900										; another UPNOTI send topology to
   9000										; this program
   9100					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 18
RELNOT - RELEASE NOTICE BLOCK

    100						.SBTTL	RELNOT - Release notice block
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	RELNOT releases a notice block from the notice list and
    600					;	updates the appropriate data structures to reflect removal.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	CALL RELNOT
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	R1 = pointer to notice block
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	DYMLST - Dynamic Memory listhead
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	NONE
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NOTLST - Notice listhead could be updated
   2700					;
   2800					; COMPLETION CODES:
   2900					;
   3000					;	NONE
   3100					;
   3200					; SIDE EFFECTS:
   3300					;
   3400					;	NONE
   3500					;
   3600					;--
   3700
   3800	002446				RELNOT::				;Release notice block
   3900	002446					PUSH	<R0,R1,R2,R3>		;Save destroyed registers
   4000	002456	016102 	000000 			MOV	AB.FPT(R1),R2		;Address of next notice block
   4100	002462	016103 	000004 			MOV	AB.BPT(R1),R3		;Address of previous notice block
   4200	002466	010213 				MOV	R2,(R3)			;Link next to previous
   4300	002470	001003 				BNE	10$			;There is a forward node
   4400	002472	010367 	000012'			MOV	R3,NOTLST+2		;Update end of list
   4500	002476	000402 				BR	20$			;Continue
   4600	002500	010362 	000004 		10$:	MOV	R3,AB.BPT(R2)		;Backwards link
   4700	002504	010102 			20$:	MOV	R1,R2			;Address of block
   4800	002506	012700 	000004'			MOV	#DYMLST,R0		;Address of listhead
   4900	002512	116101 	000002 			MOVB	AB.CNT(R1),R1		;Length of block
   5000	002516	004767 	000000G			CALL	$RLCB			;Release core block
   5100	002522					POP	<R3,R2,R1,R0>		;Restore registers
   5200	002532	000207 				RETURN				;Exit
   5300					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 19
UPNOTI - UPDATE NOTICE LIST DATA ITEMS

    100						.SBTTL	UPNOTI - Update notice list data items
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	UPNOTI is called to update notice list data items such as
    600					;	notification in progress (NOTIP), etc. This routine is called
    700					;	when any nodes notification is complete to determine whether to
    800					;	clear NOTIP or start another notice cycle.
    900					;
   1000					; CALLING SEQUENCE:
   1100					;
   1200					;	CALL UPNOTI
   1300					;
   1400					; INPUT PARAMETERS:
   1500					;
   1600					;	NONE
   1700					;
   1800					; IMPLICIT INPUTS:
   1900					;
   2000					;	NOTLST - notification listhead
   2100					;
   2200					; OUTPUT PARAMETERS:
   2300					;
   2400					;	NONE
   2500					;
   2600					; IMPLICIT OUTPUTS:
   2700					;
   2800					;	NOTIP is updated to reflect whether notification is in progress
   2900					;	LL?SB is updated to send a notification message
   3000					;
   3100					; COMPLETION CODES:
   3200					;
   3300					;	NONE
   3400					;
   3500					; SIDE EFFECTS:
   3600					;
   3700					;	This routine should be called with either ASTs disabled or
   3800					;	at AST level.
   3900					;
   4000					;--
   4100
   4200	002534				UPNOTI::				;Here to see if we clear NOTIP
   4300	002534	004767 	000000G			CALL	$SAVAL			;Save all registers
   4400	002540	005067 	001756'			CLR	NOTIP			;Assume not in progress
   4500	002544	012703 	000010'			MOV	#NOTLST,R3		;Notification listhead
   4600	002550	011303 			10$:	MOV	(R3),R3			;Get next notice block
   4700	002552	001417 				BEQ	90$			;Done
   4800	002554	132763 	000002 	000003 		BITB	#NT$NIP,AB.FLG(R3)	;Notice in progress
   4900	002562	001403 				BEQ	20$			;No, check if needs notice
   5000	002564	005267 	001756'			INC	NOTIP			;Show notification in progress
   5100	002570	000767 				BR	10$			;Loop for another notice block
   5200					;
   5300	002572	132763 	000001 	000003 	20$:	BITB	#NB$VAL,AB.FLG(R3)	;Already notified?
   5400	002600	001363 				BNE	10$			;Yes, get another notice block
   5500	002602	010300 				MOV	R3,R0			;Copy notice block address
   5600	002604	004767 	177134 			CALL	SNDTOP			;Send topology
   5700	002610	000757 				BR	10$			;Don't care if can't send now
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 19-1
UPNOTI - UPDATE NOTICE LIST DATA ITEMS

   5800										; we are sure to try again later.
   5900					;
   6000	002612	000207 			90$:	RETURN				;Exit
   6100					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 20
SNDAST - SND$ AST SERVICE

    100						.SBTTL	SNDAST - SND$ AST service
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	SNDAST is entered whenever a SND$ is complete. If the SND$
    600					;	was successful then a DSC$ is performed, terminating this
    700					;	notification cycle. If the SND$ is unsuccessful the notice
    800					;	block that was used in the connect is removed from the notice
    900					;	list.
   1000					;
   1100					; CALLING SEQUENCE:
   1200					;
   1300					;	Entered on SND$ complete AST
   1400					;
   1500					; INPUT PARAMETERS:
   1600					;
   1700					;	NONE
   1800					;
   1900					; IMPLICIT INPUTS:
   2000					;
   2100					;	NONE
   2200					;
   2300					; OUTPUT PARAMETERS:
   2400					;
   2500					;	NONE
   2600					;
   2700					; IMPLICIT OUTPUTS:
   2800					;
   2900					;	NONE
   3000					;
   3100					; COMPLETION CODES:
   3200					;
   3300					;	NONE
   3400					;
   3500					; SIDE EFFECTS:
   3600					;
   3700					;	NONE
   3800					;
   3900					;--
   4000
   4100	002614				SNDAST::				;Here to service SND$ ASTs
   4200	002614					PUSH	<R0,R1,R2,R3,R4,R5>	;Save all registers
   4300	002630	016600 	000014 			MOV	^D12(SP),R0		;Get status block address
   4400	002634	122710 	000000G			CMPB	#IS.SUC,(R0)		;Success?
   4500	002640	001025 				BNE	20$			;No, so process error
   4600	002642					DSC$S	LL.LUN(R0),,R0,#DSCAST,	;Disconnect the link
   4700	002704					ERCALL	DSWERR			;OOPs!
   4800	002712	000415 				BR	50$			;Exit
   4900					;
   5000	002714	016001 	000006 		20$:	MOV	LL.NTB(R0),R1		;Notice block address
   5100	002720	001410 				BEQ	45$			;If 0 then already processed
   5200	002722	132761 	000004 	000003 		BITB	#NT$AIP,AB.FLG(R1)	;Abort-in-progress?
   5300	002730	001006 				BNE	50$			;Yes, another routine will remove
   5400	002732	004767 	177510 			CALL	RELNOT			;Release this notice block
   5500	002736	005060 	000006 			CLR	LL.NTB(R0)		;Release LL reservation
   5600	002742	004767 	177566 		45$:	CALL	UPNOTI			;Update notice flag
   5700					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 20-1
SNDAST - SND$ AST SERVICE

   5800	002746				50$:	POP	<R5,R4,R3,R2,R1,R0>	;Restore registers
   5900	002762	005726 				TST	(SP)+			;Remove status block address
   6000	002764					ASTX$S				;Exit
   6100					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 21
DSCAST - DSC$ AST SERVICE

    100						.SBTTL	DSCAST - DSC$ AST service
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	DSCAST is entered whenever a DSC$ is complete. Release the
    600					;	reservation on a LL.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	Entered as an AST
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	NONE
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NONE
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	NONE
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	LL?SB's reservation is released.
   2700					;
   2800					; COMPLETION CODES:
   2900					;
   3000					;	NONE
   3100					;
   3200					; SIDE EFFECTS:
   3300					;
   3400					;	NONE
   3500					;
   3600					;--
   3700
   3800	002772				DSCAST::				;Here to process DSC$ complete
   3900	002772					PUSH	<R0,R1,R2>		;Save a few
   4000	003000	016600 	000006 			MOV	6(SP),R0		;R0 = status block address
   4100					;	CMPB	#IS.SUC,(R0)		;Success?
   4200					;	BNE	20$			;No, process error
   4300	003004	016001 	000006 			MOV	LL.NTB(R0),R1		;Address of notice block
   4400	003010	001410 				BEQ	10$			;If 0 then already processed
   4500	003012	142761 	000002 	000003 		BICB	#NT$NIP,AB.FLG(R1)	;Clear notice in progress
   4600	003020	152761 	000001 	000003 		BISB	#NB$VAL,AB.FLG(R1)	;Set valid notice complete
   4700	003026	005060 	000006 			CLR	LL.NTB(R0)		;Show LL available
   4800	003032	004767 	177476 		10$:	CALL	UPNOTI			;Update NOTIP
   4900	003036					POP	<R2,R1,R0>		;Restore registers
   5000	003044	005726 				TST	(SP)+			;Remove status block address
   5100	003046					ASTX$S				;Exit
   5200					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 22
SPAAST AND SPDAST - SPA$ AST PROCESSING

    100						.SBTTL	SPAAST and SPDAST - SPA$ AST processing
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	SPDAST is entered upon completion of SPA$ and removes entries
    600					;	from the network mailbox that were there at the time of the
    700					;	SPA$ call.
    800					;
    900					;	SPAAST is entered whenever new entries are added to the
   1000					;	mailbox after the SPA$ call completes.
   1100					;
   1200					; CALLING SEQUENCE:
   1300					;
   1400					;	Entered by AST
   1500					;
   1600					; INPUT PARAMETERS:
   1700					;
   1800					;	NONE
   1900					;
   2000					; IMPLICIT INPUTS:
   2100					;
   2200					;	DYMLST - Dynamic memory listhead
   2300					;
   2400					; OUTPUT PARAMETERS:
   2500					;
   2600					;	NONE
   2700					;
   2800					; IMPLICIT OUTPUTS:
   2900					;
   3000					;	NONE
   3100					;
   3200					; COMPLETION CODES:
   3300					;
   3400					;	NONE
   3500					;
   3600					; SIDE EFFECTS:
   3700					;
   3800					;	New entries could be added to the notice list.
   3900					;	Old entries could be removed from the notice list
   4000					;
   4100					;--
   4200
   4300						.ENABL	LSB			;Save local symbols
   4400	003054				SPDAST::				;Here to process SPA$ completion
   4500	003054					PUSH	<R0,R1,R2,R3,R4,R5>	;Save all registers
   4600	003070	016600 	000014 			MOV	^D12(SP),R0		;R0 = status block address
   4700	003074	122710 	000000G			CMPB	#IS.SUC,(R0)		;Success?
   4800	003100	001003 				BNE	10$			;No, so exit
   4900	003102	016005 	000002 			MOV	2(R0),R5		;Number of previous mailbox entries
   5000	003106	001023 				BNE	20$			;Process them
   5100	003110				10$:	POP	<R5,R4,R3,R2,R1,R0>	;Restore registers
   5200	003124	005726 				TST	(SP)+			;Remove status block or dummy
   5300	003126					ASTX$S				;Exit
   5400					;
   5500	003134				SPAAST::				;Here on new mailbox entry
   5600	003134	005046 				CLR	-(SP)			;Dummy status block address
   5700	003136					PUSH	<R0,R1,R2,R3,R4,R5>	;Save registers
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 22-1
SPAAST AND SPDAST - SPA$ AST PROCESSING

   5800	003152	012705 	000001 			MOV	#1,R5			;Process a single message at a time
   5900	003156	012700 	000004'		20$:	MOV	#DYMLST,R0		;Get a potential notice block
   6000	003162	012701 	000172 			MOV	#AB.LEN,R1		;
   6100	003166	004767 	000000G			CALL	$RQCB			;
   6200	003172	103746 				BCS	10$			;Exit if can't get one
   6300	003174	010002 				MOV	R0,R2			;Copy address of block
   6400	003176	010103 				MOV	R1,R3			;Copy length of block
   6500	003200	105022 			22$:	CLRB	(R2)+			;Clear block
   6600	003202	077302 				SOB	R3,22$			;
   6700	003204	110160 	000002 			MOVB	R1,AB.CNT(R0)		;Store alocated length
   6800	003210	010002 			30$:	MOV	R0,R2			;Copy address of block
   6900	003212	062702 	000010 			ADD	#AB.ACC,R2		;Point at window
   7000	003216	012703 	000162 			MOV	#N.CBL+20,R3		;Length of window
   7100	003222					GNDW$S	#LUNNT,#GNDEFN,#GNDSB,,<R2,R3> ;Get network data
   7200	003270					ERCALL	DSWERR			;OOPS!
   7300	003276	122767 	000000G	000026'		CMPB	#IS.SUC,GNDSB		;Success?
   7400	003304	001416 				BEQ	100$			;Yes, process network data
   7500	003306	122767 	000000G	000026'		CMPB	#IE.DAO,GNDSB		;Almost Success?
   7600	003314	001412 				BEQ	100$			;Yes, process anyway
   7700	003316	077544 			80$:	SOB	R5,30$			;Get some more mail
   7800	003320	116001 	000002 			MOVB	AB.CNT(R0),R1		;Release core block
   7900	003324	010002 				MOV	R0,R2			;
   8000	003326	012700 	000004'			MOV	#DYMLST,R0		;Dynamic memory listhead
   8100	003332	004767 	000000G			CALL	$RLCB			;Release it
   8200	003336	000167 	177546 		90$:	JMP	10$			;Exit
   8300					;
   8400	003342				100$:					;Here to dispatch on message
   8500	003342	122767 	000001 	000027'		CMPB	#NT.CON,GNDSB+1		;Connect?
   8600	003350	001440 				BEQ	120$			;Yes, process it
   8700	003352	122767 	000002 	000027'		CMPB	#NT.INT,GNDSB+1		;Interrupt?
   8800	003360	001756 				BEQ	80$			;Yes, ignore the message
   8900					;					;No, must be some sort of abort
   9000	003362	012701 	000036'			MOV	#LL0SB,R1		;See if valid member being notified
   9100	003366	012702 	000056'			MOV	#LL2SB,R2		;Last LL
   9200	003372	020102 			110$:	CMP	R1,R2			;Finished?
   9300	003374	003350 				BGT	80$			;Yes, no entry found, just ignore
   9400	003376	126167 	000004 	000030'		CMPB	LL.LUN(R1),GNDSB+2	;No, LUNs match?
   9500	003404	001403 				BEQ	112$			;Yes, see if block is valid
   9600	003406	062701 	000010 			ADD	#LL.LEN,R1		;Skip on to next LL
   9700	003412	000767 				BR	110$			;
   9800					;
   9900	003414	016102 	000006 		112$:	MOV	LL.NTB(R1),R2		;Get notice block
  10000	003420	001736 				BEQ	80$			;Not valid if zero
  10100	003422	132762 	000002 	000003 		BITB	#NT$NIP,AB.FLG(R2)	;Notice in progress?
  10200	003430	001732 				BEQ	80$			;No, just ignore
  10300	003432	005061 	000006 			CLR	LL.NTB(R1)		;Show not in use
  10400	003436	010201 				MOV	R2,R1			;Release this notice block
  10500	003440	004767 	177002 			CALL	RELNOT			;
  10600	003444	004767 	177064 			CALL	UPNOTI			;Update notice list information
  10700	003450	000722 				BR	80$			;Continue processing
  10800					;
  10900	003452				120$:					;Here to process connects to task
  11000	003452	012701 	000066'			MOV	#LL3SB,R1		;Search these LLs
  11100	003456	012702 	000076'			MOV	#LL4SB,R2		;Terminate here
  11200	003462	020102 			122$:	CMP	R1,R2			;Done?
  11300	003464	001447 				BEQ	130$			;Yes, no entry found so reject
  11400	003466	005761 	000006 			TST	LL.NTB(R1)		;Reserved?
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 22-2
SPAAST AND SPDAST - SPA$ AST PROCESSING

  11500	003472	001403 				BEQ	125$			;No, so reserve it
  11600	003474	062701 	000010 			ADD	#LL.LEN,R1		;Advance to next one
  11700	003500	000770 				BR	122$			;Loop on
  11800					;
  11900	003502	010061 	000006 		125$:	MOV	R0,LL.NTB(R1)		;Show reserved
  12000	003506	012760 	000043 	000006 		MOV	#TIMBUP*NOTLMT,AB.TIM(R0) ;Nominal time to respond
  12100	003514	012702 	000010 			MOV	#AB.ACC,R2		;Setup for accept
  12200	003520	060002 				ADD	R0,R2			;Form real address
  12300	003522					ACC$S	LL.LUN(R1),,R1,#CNFAST,<R2> ;Accept the connection
  12400	003566					ERCALL	DSWERR			;OOPs!
  12500	003574	005305 				DEC	R5			;Fake an SOB
  12600	003576	001657 				BEQ	90$			;No more to process so exit
  12700	003600	000167 	177352 			JMP	20$			;More to process, get another
  12800										; block first
  12900					;
  13000	003604	012702 	000010 		130$:	MOV	#AB.ACC,R2		;Offset for connect block
  13100	003610	060002 				ADD	R0,R2			;Setup for reject
  13200	003612					REJW$S	#LUNNT,#GNDEFN,,,<R2>	;Reject connection
  13300	003660					ERCALL	DSWERR			;OOPS!
  13400	003666	000613 				BR	80$			;Reuse core block
  13500					;
  13600						.DSABL	LSB
  13700					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 23
CNFAST - AST SERVICE FOR ACC$ CONNECT

    100						.SBTTL	CNFAST - AST service for ACC$ connect
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	CNFAST is entered on an AST on the ACC$ complete to a node that
    600					;	connected to it wanting to be placed in the notice list.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	Entered as an AST with the LL?SB address on the stack
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	NONE
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NONE
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	NONE
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NONE
   2700					;
   2800					; COMPLETION CODES:
   2900					;
   3000					;	NONE
   3100					;
   3200					; SIDE EFFECTS:
   3300					;
   3400					;	Potentially issues a topology message to some program.
   3500					;
   3600					;--
   3700
   3800						.ENABL	LSB
   3900	003670				CNFAST::				;Here to process ACC$ complete
   4000	003670					PUSH	<R0,R1,R2,R3,R4,R5>	;Save a few registers
   4100	003704	016600 	000014 			MOV	^D12(SP),R0		;R0 = LL?SB address
   4200	003710	122710 	000000G			CMPB	#IS.SUC,(R0)		;Success?
   4300	003714	001403 				BEQ	50$			;Yes, process it
   4400	003716	122710 	000000G			CMPB	#IE.DAO,(R0)		;Almost success?
   4500	003722	001044 				BNE	95$			;Try to remove notice block not
   4600										; in notice list
   4700	003724	016001 	000006 		50$:	MOV	LL.NTB(R0),R1		;Receive a message from noticer
   4800	003730	062701 	000020 			ADD	#AB.ACC+N.DDE,R1	;Where to put it
   4900	003734	012702 	000020 			MOV	#N.SND-N.DDE,R2		;Length of area
   5000	003740					REC$S	LL.LUN(R0),,R0,#RECAST,<R1,R2> ;Receive a message
   5100	004002					ERCALL	DSWERR
   5200	004010				90$:	POP	<R5,R4,R3,R2,R1,R0>	;Restore registers
   5300	004024	005726 				TST	(SP)+			;Pop Status block address
   5400	004026					ASTX$S				; and exit
   5500					;
   5600	004034	016002 	000006 		95$:	MOV	LL.NTB(R0),R2		;See if abort-in-progress
   5700	004040	001763 				BEQ	90$			;If 0 already removed
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 23-1
CNFAST - AST SERVICE FOR ACC$ CONNECT

   5800	004042	132762 	000004 	000003 		BITB	#NT$AIP,AB.FLG(R2)	;Abort-in-progress?
   5900	004050	001357 				BNE	90$			;Yes, another routine will remove
   6000										; the block
   6100										;No, we get to remove the block
   6200										; ourselves
   6300					;
   6400	004052				REMNOT::				;Come here to remove notice block
   6500										; not in notice list
   6600	004052	016002 	000006 			MOV	LL.NTB(R0),R2		;Get address of notice block
   6700	004056	005060 	000006 			CLR	LL.NTB(R0)		;Show this LL free
   6800	004062	116201 	000002 			MOVB	AB.CNT(R2),R1		;Get amount of data in block
   6900	004066	012700 	000004'			MOV	#DYMLST,R0		;Dynamic memory listhead
   7000	004072	004767 	000000G			CALL	$RLCB			;Release the core block
   7100	004076	000744 				BR	90$			;Exit
   7200					;
   7300						.DSABL	LSB
   7400					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 24
RECAST - AST SERVICE FOR REC$ ON NOTICER

    100						.SBTTL	RECAST - AST service for REC$ on noticer
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	RECAST processes a continuation of the confirmation process
    600					;	for a task wanting to be placed in the noticer list. It
    700					;	validates the contents of the received message and either
    800					;	aborts the LL if invalid or sends the service request accepted
    900					;	topology protocol message.
   1000					;
   1100					; CALLING SEQUENCE:
   1200					;
   1300					;	Entered by an AST
   1400					;
   1500					; INPUT PARAMETERS:
   1600					;
   1700					;	NONE
   1800					;
   1900					; IMPLICIT INPUTS:
   2000					;
   2100					;	NONE
   2200					;
   2300					; OUTPUT PARAMETERS:
   2400					;
   2500					;	NONE
   2600					;
   2700					; IMPLICIT OUTPUTS:
   2800					;
   2900					;	NONE
   3000					;
   3100					; COMPLETION CODES:
   3200					;
   3300					;	NONE
   3400					;
   3500					; SIDE EFFECTS:
   3600					;
   3700					;	A notice block will be added to the notice list if
   3800					;	a valid received message is processed.
   3900					;
   4000					;--
   4100
   4200	004100				RECAST::				;Here to process REC$ complete
   4300	004100					PUSH	<R0,R1,R2,R3,R4,R5>	;Save all
   4400	004114	016600 	000014 			MOV	^D12(SP),R0		;R0 = LL?SB address
   4500	004120	122710 	000000G			CMPB	#IS.SUC,(R0)		;Success?
   4600	004124	001403 				BEQ	20$			;Yes, send this character a message
   4700	004126	122710 	000000G			CMPB	#IE.DAO,(R0)		;Almost success?
   4800	004132	001130 				BNE	50$			;No, see what is to be done
   4900	004134	016001 	000006 		20$:	MOV	LL.NTB(R0),R1		;Get notice block address
   5000	004140	122761 	000001 	000020 		CMPB	#TY$SRQ,AB.ACC+N.DDE(R1) ;Did we get service request?
   5100	004146	001075 				BNE	40$			;No, so abort link
   5200	004150	122761 	000006 	000021 		CMPB	#FT$VER,AB.ACC+N.DDE+1(R1) ; How about protocol version?
   5300	004156	001071 				BNE	40$			;No, so abort link
   5400										;Yes, so assume valid
   5500	004160					PUSH	R0			;Save LL?SB pointer
   5600	004162	004767 	000274 			CALL	FNDNOT			;Find if noticer already in list
   5700	004166	010003 				MOV	R0,R3			;Move address of found block,
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 24-1
RECAST - AST SERVICE FOR REC$ ON NOTICER

   5800										; if any
   5900	004170					POP	R0			;Restore pointer
   6000	004172	103423 				BCS	25$			;No, add to notice list
   6100	004174	016002 	000006 			MOV	LL.NTB(R0),R2		;Copy address of current block
   6200	004200	010360 	000006 			MOV	R3,LL.NTB(R0)		;Use old block
   6300	004204	142761 	000001 	000003 		BICB	#NB$VAL,AB.FLG(R1)	;Show not valid
   6400	004212	152761 	000002 	000003 		BISB	#NT$NIP,AB.FLG(R1)	;Show notice in progress
   6500	004220	116201 	000002 			MOVB	AB.CNT(R2),R1		;Setup for release of core block
   6600	004224					PUSH	R0			;Save pointer to LL?SB
   6700	004226	012700 	000004'			MOV	#DYMLST,R0		;Dynamic memory listhead
   6800	004232	004767 	000000G			CALL	$RLCB			;Release the block
   6900	004236					POP	R0			;Restore pointer
   7000	004240	000407 				BR	30$			;Send the message
   7100	004242	016001 	000006 		25$:	MOV	LL.NTB(R0),R1		;Pass address of notice block
   7200	004246	004767 	000260 			CALL	ADDNOT			;Add new notice block
   7300	004252	152761 	000002 	000003 		BISB	#NT$NIP,AB.FLG(R1)	;Show notice in progress with
   7400										; entry in notice list. NB$VAL
   7500										; is already cleared at allocation
   7600										; in SPDAST
   7700	004260	005267 	001756'		30$:	INC	NOTIP			;Flag notice in progress
   7800	004264					SND$S	LL.LUN(R0),,R0,#SNDAST,<#CNFMSG,CNFLEN> ;Send message
   7900	004332					ERCALL	DSWERR			;OOPs
   8000	004340	000436 				BR	90$			;Exit
   8100					;
   8200	004342				40$:	ABT$S	LL.LUN(R0),,R0,#ABTAST
   8300	004404					ERCALL	DSWERR			;OOPs!
   8400	004412	000411 				BR	90$			;Exit
   8500					;
   8600	004414	016002 	000006 		50$:	MOV	LL.NTB(R0),R2		;See if we get to remove block
   8700	004420	001406 				BEQ	90$			;If 0 already removed
   8800	004422	132762 	000004 	000003 		BITB	#NT$AIP,AB.FLG(R2)	;Abort-in-progress?
   8900	004430	001002 				BNE	90$			;Yes, another routine will remove
   9000	004432	000167 	177414 			JMP	REMNOT			;No, we remove it ourself
   9100					;
   9200	004436				90$:	POP	<R5,R4,R3,R2,R1,R0>	;Restore registers
   9300	004452	005726 				TST	(SP)+			;Remove status block address
   9400	004454					ASTX$S				;Exit
   9500					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 25
FNDNOT - FIND AN EXISTING NOTICE BLOCK

    100						.SBTTL	FNDNOT - Find an existing notice block
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	FNDNOT finds a notice block that appears similar to one
    600					;	passed to it as a parameter.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	CALL FNDNOT
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	R1 - points to notice block attempting to be matched
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NOTLST - notice blocks listhead
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	R0 contains pointer to found block if any
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NONE
   2700					;
   2800					; CONDITION CODES:
   2900					;
   3000					;	Carry Set if matching block not found
   3100					;	Carry Clear if matching block found
   3200					;
   3300					; SIDE EFFECTS:
   3400					;
   3500					;	NONE
   3600					;
   3700					;--
   3800
   3900	004462				FNDNOT::				;Here to find matching notice block
   4000	004462	004567 	000000G			JSR	R5,.SAVR1		;Save R1-R5
   4100	004466	012700 	000010'			MOV	#NOTLST,R0		;Get notice listhead
   4200	004472	011000 			10$:	MOV	(R0),R0			;Get next notice block
   4300	004474	001414 				BEQ	80$			;No matching entries found
   4400	004476	012702 	000040 			MOV	#AB.ACC+N.SND,R2	;Comparing source descriptors
   4500	004502	010203 				MOV	R2,R3			;
   4600	004504	060102 				ADD	R1,R2			;Look in parameter notice block
   4700	004506	060003 				ADD	R0,R3			; and in list notice block
   4800	004510	012704 	000130 			MOV	#N.CDAC-N.SND+20,R4	;Look at complete source descriptor
   4900	004514	122223 			20$:	CMPB	(R2)+,(R3)+		;Compare notice blocks
   5000	004516	001365 				BNE	10$			;Get another if no match
   5100	004520	077403 				SOB	R4,20$			;Loop on!
   5200	004522	000241 				CLC				;Success
   5300	004524	000401 				BR	90$			;Exit
   5400	004526	000261 			80$:	SEC				;Failure
   5500	004530	000207 			90$:	RETURN				;Exit
   5600					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 26
ADDNOT - ADD A NOTICE BLOCK TO THE NOTICE LIST

    100						.SBTTL	ADDNOT - Add a notice block to the notice list
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	ADDNOT adds a notice block to the end of the notice list
    600					;	via the notice listhead.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	CALL ADDNOT
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	R1 points at the notice block to add
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NOTLST - the notice listhead
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	NONE
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NOTLST is updated to reflect added node
   2700					;
   2800					; COMPLETION CODES:
   2900					;
   3000					;	NONE
   3100					;
   3200					; SIDE EFFECTS:
   3300					;
   3400					;	The notice list has an entry added to it.
   3500					;
   3600					;--
   3700
   3800	004532				ADDNOT::				;Here to add a notice block to list
   3900	004532	004567 	000000G			JSR	R5,.SAVR1		;Save R1 - R5
   4000	004536	005767 	000010'			TST	NOTLST			;Anything in list
   4100	004542	001006 				BNE	20$			;Yes, add to end
   4200	004544	010167 	000010'			MOV	R1,NOTLST		;No, begin list
   4300	004550	012761 	000010'	000004 		MOV	#NOTLST,AB.BPT(R1)	;Plug in backwards pointer
   4400	004556	000406 				BR	50$			;Join common code
   4500	004560	016702 	000012'		20$:	MOV	NOTLST+2,R2		;Get end of list
   4600	004564	010162 	000000 			MOV	R1,AB.FPT(R2)		;Update forward pointer
   4700	004570	010261 	000004 			MOV	R2,AB.BPT(R1)		;Update backward pointer
   4800	004574	005061 	000000 		50$:	CLR	AB.FPT(R1)		;Show end of list
   4900	004600	010167 	000012'			MOV	R1,NOTLST+2		;Update listhead
   5000	004604	000207 				RETURN				;Exit
   5100					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 27
ABTAST - AST SERVICE FOR ABT$ CALL

    100						.SBTTL	ABTAST - AST service for ABT$ call
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	ABTAST removes the notice block not in the notice list after
    600					;	an abort has occured.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	Entered on AST
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	NONE
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NONE
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	NONE
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NONE
   2700					;
   2800					; COMPLETION CODES:
   2900					;
   3000					;	NONE
   3100					;
   3200					; SIDE EFFECTS:
   3300					;
   3400					;	NONE
   3500					;
   3600					;--
   3700
   3800	004606				ABTAST::				;Here to process ABT$ completion
   3900	004606					PUSH	<R0,R1,R2,R3,R4,R5>	;Save all
   4000	004622	016600 	000014 			MOV	^D12(SP),R0		;Get LL?SB address
   4100	004626	000167 	177220 			JMP	REMNOT			;Remove the notice block
   4200					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 28
RMVAST - AST SERVICE FOR ABT$ WITH LIST ELEMENT

    100						.SBTTL	RMVAST - AST service for ABT$ with list element
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	RMVAST removes the notice block in the notice list after
    600					;	an abort has occured.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	Entered on AST
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	NONE
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	NONE
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	NONE
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NONE
   2700					;
   2800					; COMPLETION CODES:
   2900					;
   3000					;	NONE
   3100					;
   3200					; SIDE EFFECTS:
   3300					;
   3400					;	NONE
   3500					;
   3600					;--
   3700
   3800	004632				RMVAST::				;Here to process ABT$ completion
   3900	004632					PUSH	<R0,R1,R2,R3,R4,R5>	;Save all
   4000	004646	016600 	000014 			MOV	^D12(SP),R0		;Get LL?SB address
   4100	004652	016001 	000006 			MOV	LL.NTB(R0),R1		;Remove notice block from list
   4200	004656	001404 				BEQ	10$			;If 0 then already processed
   4300	004660	004767 	175562 			CALL	RELNOT			;Release it
   4400	004664	005060 	000006 			CLR	LL.NTB(R0)		;Free LL?SB
   4500	004670	004767 	175640 		10$:	CALL	UPNOTI			;Update notice-in-progress
   4600	004674					POP	<R5,R4,R3,R2,R1,R0>	;Restore all
   4700	004710	005726 				TST	(SP)+			;Remove address of LL?SB
   4800	004712					ASTX$S				;Exit
   4900					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 29
DSWERR - PROCESS $DSW ERRORS

    100						.SBTTL	DSWERR - Process $DSW errors
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	DSWERR is called upon a Carry Set from any EMT call.
    600					;	This normally means the system has its thumbs in its
    700					;	ears, so BPT for a dump.
    800					;
    900					; CALLING SEQUENCE:
   1000					;
   1100					;	CALL DSWERR
   1200					;
   1300					; INPUT PARAMETERS:
   1400					;
   1500					;	NONE
   1600					;
   1700					; IMPLICIT INPUTS:
   1800					;
   1900					;	NONE
   2000					;
   2100					; OUTPUT PARAMETERS:
   2200					;
   2300					;	NONE
   2400					;
   2500					; IMPLICIT OUTPUTS:
   2600					;
   2700					;	NONE
   2800					;
   2900					; COMPLETION CODES:
   3000					;
   3100					;	NONE
   3200					;
   3300					; SIDE EFFECTS:
   3400					;
   3500					;	The DN2x is killed due to a BPT instruction so we can get a
   3600					;	dump.
   3700					;
   3800					;--
   3900
   4000	004720				DSWERR::				;Here on $DSW errors
   4100	004720	000003 				BPT				;Detonate the MCB!!!!
   4200					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 30
INIDM - INITIALIZE DYNAMIC MEMORY

    100						.SBTTL	INIDM - Initialize Dynamic memory
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	INIDM is called to setup the dynamic memory allocation
    600					;	necessary to support the NOD and NOT lists.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	CALL INIDM
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	R0 points at dynamic memory listhead
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	DYMBLK - start of dynamic memory
   1900					;	DYMEND - end of dynamic memory
   2000					;
   2100					; OUTPUT PARAMETERS:
   2200					;
   2300					;	NONE
   2400					;
   2500					; IMPLICIT OUTPUTS:
   2600					;
   2700					;	DYMBLK is setup to be one block
   2800					;
   2900					; COMPLETION CODES:
   3000					;
   3100					;	NONE
   3200					;
   3300					; SIDE EFFECTS:
   3400					;
   3500					;	R0, R1, and R2 are destroyed
   3600					;
   3700					;--
   3800
   3900	004722				INIDM::					;Here to initialize dynamic memory
   4000	004722	012702 	000000'			MOV	#DYMBLK,R2		;Round to next 4-byte boundary
   4100	004726	062702 	000003 			ADD	#3,R2			;
   4200	004732	042702 	000003 			BIC	#3,R2			;
   4300	004736	010220 				MOV	R2,(R0)+		;Address of pool to listhead
   4400	004740	005010 				CLR	(R0)			;Clear allocation word
   4500	004742	012701 	001342'			MOV	#DYMEND,R1		;Calculate length of dynamic area
   4600	004746	160201 				SUB	R2,R1			;Length to R1
   4700	004750	005022 				CLR	(R2)+			;Clear pointer to next block
   4800	004752	010112 				MOV	R1,(R2)			;Save length
   4900	004754	000207 				RETURN				;Exit
   5000					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 31
CLKSRV - PROCESS BACKGROUND TIMING

    100						.SBTTL	CLKSRV - Process Background Timing
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;	CLKSRV does once/second timing functions such as unhanging
    600					;	hung noticers and unblocking the main loop.
    700					;
    800					; CALLING SEQUENCE:
    900					;
   1000					;	Entered as an AST with the EFN at the top of the stack.
   1100					;
   1200					; INPUT PARAMETERS:
   1300					;
   1400					;	NONE
   1500					;
   1600					; IMPLICIT INPUTS:
   1700					;
   1800					;	CLKTIM - the incrementing timer
   1900					;
   2000					; OUTPUT PARAMETERS:
   2100					;
   2200					;	CLKTIM - the incrementing timer
   2300					;
   2400					; IMPLICIT OUTPUTS:
   2500					;
   2600					;	NONE
   2700					;
   2800					; COMPLETION CODES:
   2900					;
   3000					;	NONE
   3100					;
   3200					; SIDE EFFECTS:
   3300					;
   3400					;	The main loop may be started or noticiers shut down.
   3500					;
   3600					;--
   3700
   3800	004756				CLKSRV:	PUSH	<R0,R1,R2,R3,R4,R5>		;Save all registers
   3900	004772	005267 	001760'			INC	CLKTIM				;Update timer
   4000	004776	022767 	000005 	001760'		CMP	#TIMBUP,CLKTIM			;Main loop time?
   4100	005004	003007 				BGT	10$				;No, don't advance loop
   4200	005006					SETF$S	#MAIEFN				;Yes, start main loop
   4300	005020	005067 	001760'			CLR	CLKTIM				;Reset timer
   4400					;
   4500					; Now check all the LL?SBs for being hung (or worse)
   4600					;
   4700	005024	012700 	000036'		10$:	MOV	#LL0SB,R0			;Where to start
   4800	005030	012701 	000076'			MOV	#LL4SB,R1			;Where to end
   4900	005034	016002 	000006 		20$:	MOV	LL.NTB(R0),R2			;Any noticer assigned?
   5000	005040	001031 				BNE	40$				;Yes, process timer
   5100	005042	062700 	000010 		30$:	ADD	#LL.LEN,R0			;Advance to next noticer
   5200	005046	020100 				CMP	R1,R0				;Done?
   5300	005050	002371 				BGE	20$				;No, not if last <= current
   5400	005052					MRKT$S	#CLKEFN,#1,#2,#CLKSRV		;Reissue clock request
   5500	005100					POP	<R5,R4,R3,R2,R1,R0>		;Restore registers
   5600	005114	005726 				TST	(SP)+				;Pop off EFN
   5700	005116					ASTX$S					;Exit AST
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 31-1
CLKSRV - PROCESS BACKGROUND TIMING

   5800					;
   5900					; Here to process timer cell in notice block
   6000					;
   6100	005124	132762 	000001 	000003 	40$:	BITB	#NB$VAL,AB.FLG(R2)		;Already notified?
   6200	005132	001343 				BNE	30$				;Yes, ignore
   6300	005134	005362 	000006 			DEC	AB.TIM(R2)			;No, decrement timer
   6400	005140	003340 				BGT	30$				;If haven't expired,
   6500											; try again next second
   6600					;
   6700					; Here when timer has expired
   6800					;
   6900	005142	012704 	004606'			MOV	#ABTAST,R4			;Default servicer
   7000	005146	132762 	000002 	000003 		BITB	#NT$NIP,AB.FLG(R2)		;Notice in progress?
   7100	005154	001402 				BEQ	60$				;No, so can just remove
   7200											; notice block on ABT
   7300	005156	012704 	004632'			MOV	#RMVAST,R4			;Yes, so must be removed
   7400											; from notice list also
   7500	005162	152762 	000005 	000003 	60$:	BISB	#NB$VAL!NT$AIP,AB.FLG(R2)	;Set notified so that
   7600											; everyone keeps their
   7700											; hands off.
   7800	005170	016003 	000004 			MOV	LL.LUN(R0),R3			;Get Lun to abort
   7900	005174					ABT$S	R3,,R0,R4			;Abort the link
   8000	005232					 ERCALL	DSWERR				;OOPs!
   8100	005240	000700 				BR	30$				;Continue on
   8200					;
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 32
TEMPLATE_EXAMPLE -

    100						.SBTTL	TEMPLATE_EXAMPLE -
    200					;++
    300					; FUNCTIONAL DESCRIPTION:
    400					;
    500					;
    600					; CALLING SEQUENCE:
    700					;
    800					;	NONE
    900					;
   1000					; INPUT PARAMETERS:
   1100					;
   1200					;	NONE
   1300					;
   1400					; IMPLICIT INPUTS:
   1500					;
   1600					;	NONE
   1700					;
   1800					; OUTPUT PARAMETERS:
   1900					;
   2000					;	NONE
   2100					;
   2200					; IMPLICIT OUTPUTS:
   2300					;
   2400					;	NONE
   2500					;
   2600					; COMPLETION CODES:
   2700					;
   2800					;	NONE
   2900					;
   3000					; SIDE EFFECTS:
   3100					;
   3200					;	NONE
   3300					;
   3400					;--
   3500
   3600
   3700
   3800		000000'				.END	MAIN
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 32-1
SYMBOL TABLE

ABTAST  004606RG    004	IE.NNT= 177660   	NE$ABO= 000046   	NT.LOG= 000011   	N.RID   000034
AB.ACC  000010 G 	IE.NRJ= 177666   	NE$ABT= 000011   	NT.MOP= 000010   	N.RIDC  000032
AB.BPT  000004 G 	IE.URJ= 177667   	NE$ACC= 000042   	NX$DEP= 000046   	N.RND   000000
AB.CNT  000002 G 	INIDM   004722RG    004	NE$ACT= 000044   	NX$EXM= 000050   	N.RNM   000016
AB.FLG  000003 G 	INVLID  001204RG    004	NE$CDI= 000052   	NX$RCV= 000032   	N.RNMC  000014
AB.FPT  000000 G 	IS.DAO= 000002   	NE$COM= 000047   	NX$RLC= 000016   	N.ROT   000007
AB.LEN  000172 G 	IS.SUC= ****** GX	NE$FCF= 000050   	NX$RLN= 000012   	N.RPS   000056
AB.TIM  000006 G 	LENNDB= 000024   	NE$FMT= 000005   	NX$RLS= 000014   	N.RPSC  000054
ADDNOD  001072RG    004	LENNTB= 000174   	NE$GEN= 000007   	NX$RNC= 000004   	N.RQL = 000110
ADDNOT  004532RG    004	LL.LEN= 000010 G 	NE$ILS= 000043   	NX$RNN= 000000   	N.RUS   000012
ALLBND= 000004 G 	LL.LUN= 000004 G 	NE$IMG= 000053   	NX$RNS= 000002   	N.SDE   000042
ARGDUM  000736RG    002	LL.NTB= 000006 G 	NE$MLB= 000006   	NX$SLH= 000026   	N.SDEC  000040
ARGDYM  000734RG    002	LL0SB   000036RG    002	NE$NOD= 000002   	NX$SLM= 000042   	N.SEGZ  000002
CHGAST  002170RG    004	LL1SB   000046RG    002	NE$NSD= 000003   	NX$SLO= 000040   	N.SFM   000036
CHGLEN  001350RG    002	LL2SB   000056RG    002	NE$RES= 000001   	NX$SLS= 000022   	N.SGP   000040
CHGMSG  001352RG    002	LL3SB   000066RG    002	NE$SSR= 000000   	NX$SNH= 000024   	N.SND   000030
CHGTOP  001354RG    002	LL4SB   000076RG    002	NE$SSS= 000045   	NX$SNM= 000036   	N.SNM   000046
CLKEFN= 000014 G 	LS$LBK= 000003   	NE$STA= 000051   	NX$SNO= 000034   	N.SNMC  000044
CLKSRV  004756R     004	LS$MAI= 000004   	NE$TCN= 000040   	NX$SNS= 000010   	N.SOT   000037
CLKTIM  001760R     002	LS$OFF= 000001   	NE$TCO= 000041   	NX$XMT= 000030   	N.SUS   000042
CNFAST  003670RG    004	LS$ON = 000000   	NE$TPA= 000010   	NX$ZLC= 000020   	OUTBLK  000106RG    002
CNFLEN  000740RG    002	LUNDLX= 000001 G 	NE$UOB= 000004   	NX$ZNC= 000006   	RECAST  004100RG    004
CNFMSG  000742RG    002	LUNERO= 000002 G 	NODCHG  000014RG    002	NX.NIC= 017050   	RELNOT  002446RG    004
CNFTOP  000750RG    002	LUNLL0= 000004 G 	NODLST  000000RG    002	N$XADJ= 000002   	REMNOT  004052RG    004
CRETOP  001574RG    004	LUNLL1= 000005 G 	NOTFLG  001754R     002	N$XINT= 000003   	RMINVN  001270RG    004
DLXBUF  000334RG    002	LUNLL2= 000006 G 	NOTIP   001756R     002	N$XLCL= 000001   	RMVAST  004632RG    004
DLXEFN= 000011 G 	LUNLL3= 000007 G 	NOTLMT= 000007 G 	N$XRMT= 000004   	SNDAST  002614RG    004
DLXLEN= 000400 G 	LUNLL4= 000010 G 	NOTLST  000010RG    002	N.CAC   000120   	SNDTOP  001744RG    004
DLXSB   000022RG    002	LUNNT = 000003 G 	NO.DTR= 000077   	N.CACC  000116   	SPAAST  003134RG    004
DSCAST  002772RG    004	MAIEFN= 000015 G 	NO.FAL= 000021   	N.CBL = 000142   	SPDAST  003054RG    004
DSWERR  004720RG    004	MAIN    000000RG    004	NO.FA1= 000001   	N.CDA   000142   	TIMBUP= 000005 G
DYMBLK  000000RG    003	MAXNLN= 000006 G 	NO.NCU= 000023   	N.CDAC  000140   	TOP     000426R     004
DYMEND= 001342RG    003	MINDYM= 000754 G 	NO.RTL= 000022   	N.CID   000064   	TOPLEN= 000400 G
DYMLST  000004RG    002	MINNDS= 000006 G 	NO.TAS= 000000   	N.CIDC  000062   	TY$ACC= 000002 G
EROEFN= 000013 G 	MINNTS= 000003 G 	NO.TCL= 000017   	N.CPS   000106   	TY$SRQ= 000001 G
EROSB   000032RG    002	NB$VAL= 000001 G 	NO.TC1= 000005   	N.CPSC  000104   	TY$TOP= 000003 G
FNDNOD  001016RG    004	NB.CNT  000002 G 	NO.TLK= 000020   	N.CTL   000000   	T$$CUS= 000000
FNDNOT  004462RG    004	NB.FLG  000003 G 	NR$IFC= 000030   	N.DDE   000010   	T$$ECO= 000000
FT$LID= 000004   	NB.LCT  000016 G 	NS$OFF= 000001   	N.DDEC  000006   	T$$VER= 000001
FT$LST= 000005   	NB.LEN  000022 G 	NS$ON = 000000   	N.DFM   000004   	UPNODE  001230RG    004
FT$NCT= 000007   	NB.LNM  000017 G 	NT$ADJ= 000002   	N.DGP   000006   	UPNOTI  002534RG    004
FT$NNM= 000001   	NB.LSA  000020 G 	NT$AIP= 000004 G 	N.DNM   000014   	$RLCB = ****** GX
FT$NUM= 000002   	NB.LST  000021 G 	NT$INT= 000003   	N.DNMC  000012   	$RQCB = ****** GX
FT$STA= 000003   	NB.LTP  000015 G 	NT$LOC= 000001   	N.DOT   000005   	$SAVAL= ****** GX
FT$VER= 000006   	NB.NLN  000004 G 	NT$NIP= 000002 G 	N.DUS   000010   	$SAVRG= ****** GX
GETLIN  001572RG    004	NB.NNM  000005 G 	NT$REM= 000004   	N.RAC   000070   	$$    = 000004
GETNOD  000562RG    004	NB.NST  000013 G 	NT.ABO= 000005   	N.RACC  000066   	$$$   = 000172
GETSTS  001356RG    004	NB.NTP  000014 G 	NT.ABT= 000004   	N.RDE   000012   	$$$ARG= 000002
GNDEFN= 000012 G 	NB.PTR  000000 G 	NT.CON= 000001   	N.RDEC  000010   	$$$FLG= 016630
GNDSB   000026RG    002	NETEFN= 000010 G 	NT.DSC= 000003   	N.RFM   000006   	$$$$  = 000170
IE.DAO= ****** GX	NETSB   000016RG    002	NT.INT= 000002   	N.RGP   000010   	.SAVR1= ****** GX
IE.NDA= 177662

. ABS.	000172	   000
      	000000	   001
DATA  	001762	   002
DYNMIK	001350	   003
TOPOL - MCB TOPOLOGY SERVICES	MACRO M1110  13-OCT-79 13:10  PAGE 32-2
SYMBOL TABLE

MAIN  	005242	   004
ERRORS DETECTED:  0

VIRTUAL MEMORY USED:  5591 WORDS  ( 22 PAGES)
DYNAMIC MEMORY:  6892 WORDS  ( 26 PAGES)
ELAPSED TIME:  00:02:03
TOPOL,[135,30]TOPOL/CR/-SP=[130,10]NETLIB/ML,[135,10]TOPOL
TOPOL      CREATED BY  MACRO  ON 13-OCT-79 AT 13:11	PAGE 1

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

ABTAST	  004606 RG	 24-8200   #27-3800    31-6900   
AB.ACC	  000010  G	#5-4500     16-4300    16-5700    16-5900    22-6900    22-12100   22-13000   23-4800    24-5000   
                         24-5200    25-4400   
AB.BPT	  000004  G	#5-4300     18-4100   *18-4600   *26-4300   *26-4700   
AB.CNT	  000002  G	#5-3800     18-4900   *22-6700    22-7800    23-6800    24-6500   
AB.FLG	  000003  G	#5-3900    *16-5600   *17-8600    19-4800    19-5300    20-5200   *21-4500   *21-4600    22-10100  
                         23-5800   *24-6300   *24-6400   *24-7300    24-8800    31-6100    31-7000   *31-7500   
AB.FPT	  000000  G	#5-3700     18-4000   *26-4600   *26-4800   
AB.LEN	  000172  G	#5-4600     5-6200     22-6000   
AB.TIM	  000006  G	#5-4400    *16-5500   *22-12000  *31-6300   
ADDNOD	  001072 RG	 7-7600    #9-3900    
ADDNOT	  004532 RG	 24-7200   #26-3800   
ALLBND	= 000004  G	#5-5900     5-6100     5-6200    
ARGDUM	  000736 RG	#4-15900    7-4200    
ARGDYM	  000734 RG	#4-15800   
CHGAST	  002170 RG	 16-6100    16-6300   #17-4000   
CHGLEN	  001350 RG	#4-16700   *15-6600   *15-6800    17-5600   
CHGMSG	  001352 RG	#4-16800    15-6800    17-5600   
CHGTOP	  001354 RG	#4-16900    15-6800    15-6900   
CLKEFN	= 000014  G	#4-9300     6-6200     31-5400   
CLKSRV	  004756 R	 6-6200    #31-3800    31-5400   
CLKTIM	  001760 R	#4-17400   *31-3900    31-4000   *31-4300   
CNFAST	  003670 RG	 22-12300  #23-3900   
CNFLEN	  000740 RG	#4-16200   *15-6500   *15-6700    24-7800   
CNFMSG	  000742 RG	#4-16300    15-6700    24-7800   
CNFTOP	  000750 RG	#4-16500    15-4100   *15-6300    15-6400    15-6700    15-7000   
CRETOP	  001574 RG	 6-5400     6-7800    #15-3800   
DLXBUF	  000334 RG	#4-15500    7-4200     7-5200     13-5000    13-6100   
DLXEFN	= 000011  G	#4-9000     7-4200     13-5000   
DLXLEN	= 000400  G	#4-15400    4-15500    7-4200     13-5000   
DLXSB 	  000022 RG	#4-12400    7-4200     7-4500     7-4700     7-5300     13-5000    13-5300    13-5500   
DSCAST	  002772 RG	 20-4600   #21-3800   
DSWERR	  004720 RG	 6-5600     6-6100     7-4400     13-5200    16-6400    17-5700    20-4700    22-7200    22-12400  
                         22-13300   23-5100    24-7900    24-8300   #29-4000    31-8000   
DYMBLK	  000000 RG	#5-6600     30-4000   
DYMEND	= 001342 RG	#5-6700     30-4500   
DYMLST	  000004 RG	#4-11800    6-4300     9-4300     12-5600    18-4800    22-5900    22-8000    23-6900    24-6700   
EROEFN	= 000013  G	#4-9200    
EROSB 	  000032 RG	#4-12600   
FNDNOD	  001016 RG	 7-6700    #8-3900    
FNDNOT	  004462 RG	 24-5600   #25-3900   
FT$LID	= 000004	#3-6800    
FT$LST	= 000005	#3-6900    
FT$NCT	= 000007	#3-7100     4-16400    4-16800   
FT$NNM	= 000001	#3-6500     15-4700   
FT$NUM	= 000002	#3-6600    
FT$STA	= 000003	#3-6700     15-5400   
FT$VER	= 000006	#3-7000     4-16300    24-5200   
GETLIN	  001572 RG	 11-4600   #14-3800   
GETNOD	  000562 RG	#7-4000     11-4300   
GETSTS	  001356 RG	 11-4500   #13-3800   
GNDEFN	= 000012  G	#4-9100     22-7100    22-13200  
TOPOL      CREATED BY  MACRO  ON 13-OCT-79 AT 13:11	PAGE 2

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

GNDSB 	  000026 RG	#4-12500    22-7100    22-7300    22-7500    22-8500    22-8700    22-9400   
IE.DAO	= ******  GX	 7-4700     13-5500    22-7500    23-4400    24-4700   
IE.NRJ	= 177666	 17-4700   
INIDM 	  004722 RG	 6-4400    #30-3900   
INVLID	  001204 RG	 6-8000    #10-3800    11-4100   
IS.DAO	= 000002	 17-4500   
IS.SUC	= ******  GX	 6-5700     7-4500     13-5300    17-4300    20-4400    22-4700    22-7300    23-4200    24-4500   
LENNDB	= 000024	#5-6100     5-6300    
LENNTB	= 000174	#5-6200     5-6300     5-6600    
LL.LEN	= 000010  G	#4-13800    16-5100    22-9600    22-11600   31-5100   
LL.LUN	= 000004  G	#4-13600    16-6100    16-6300    17-5600    20-4600    22-9400    22-12300   23-5000    24-7800   
                         24-8200    31-7800   
LL.NTB	= 000006  G	#4-13700    16-4900   *16-5400    17-7200   *17-7400    17-8000   *17-8100    20-5000   *20-5500   
                         21-4300   *21-4700    22-9900   *22-10300   22-11400  *22-11900   23-4700    23-5600    23-6600   
                        *23-6700    24-4900    24-6100   *24-6200    24-7100    24-8600    28-4100   *28-4400    31-4900   
LL0SB 	  000036 RG	#4-13900    16-4600    22-9000    31-4700   
LL1SB 	  000046 RG	#4-14100   
LL2SB 	  000056 RG	#4-14300    16-4700    22-9100   
LL3SB 	  000066 RG	#4-14600    22-11000  
LL4SB 	  000076 RG	#4-14800    22-11100   31-4800   
LS$LBK	= 000003	#3-8300    
LS$MAI	= 000004	#3-8400    
LS$OFF	= 000001	#3-8200    
LS$ON 	= 000000	#3-8100    
LUNDLX	= 000001  G	#4-9600     6-4600     7-4200     13-5000   
LUNERO	= 000002  G	#4-9700     6-4500    
LUNLL0	= 000004  G	#4-9900     4-14000    6-4800    
LUNLL1	= 000005  G	#4-10000    4-14200    6-4900    
LUNLL2	= 000006  G	#4-10100    4-14400    6-5000    
LUNLL3	= 000007  G	#4-10200    4-14700    6-5100    
LUNLL4	= 000010  G	#4-10300    4-14900    6-5200    
LUNNT 	= 000003  G	#4-9800     6-4700     6-5500     6-6000     22-7100    22-13200  
MAIEFN	= 000015  G	#4-9400     6-6300     6-6400     31-4200   
MAIN  	  000000 RG	#6-4000     32-3800   
MAXNLN	= 000006  G	#4-10700    5-2200     7-6500     13-5000   
MINDYM	= 000754  G	#5-6300     5-6600    
MINNDS	= 000006  G	#4-10500    5-6300    
MINNTS	= 000003  G	#4-10600    5-6300    
NB$VAL	= 000001  G	#5-2000    #5-4200     7-6900     10-4300    12-4700    13-5700    15-4500    17-8600    19-5300   
                         21-4600    24-6300    31-6100    31-7500   
NB.CNT	  000002  G	#5-1800    *9-5100     12-5700   
NB.FLG	  000003  G	#5-1900    *7-6900    *10-4300    12-4700   *13-5700    15-4500   
NB.LCT	  000016  G	#5-2600    
NB.LEN	  000022  G	#5-3000     5-6100     9-4200    
NB.LNM	  000017  G	#5-2700    
NB.LSA	  000020  G	#5-2800    
NB.LST	  000021  G	#5-2900    
NB.LTP	  000015  G	#5-2500    
NB.NLN	  000004  G	#5-2100     8-4500    *9-5300     13-4900    15-4800   
NB.NNM	  000005  G	#5-2200     8-5000     9-5500     15-5000   
NB.NST	  000013  G	#5-2300    *13-4500    13-6500   *13-6700    15-5500   
NB.NTP	  000014  G	#5-2400     7-7000    *7-7200     13-4300    15-5600   
TOPOL      CREATED BY  MACRO  ON 13-OCT-79 AT 13:11	PAGE 3

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

NB.PTR	  000000  G	#5-1700    
NETEFN	= 000010  G	#4-8900     6-5500     6-6000    
NETSB 	  000016 RG	#4-12300    6-5500     6-5700     6-6000    
NE$MLB	= 000006	 17-6500   
NE$RES	= 000001	 17-6300   
NE$TCN	= 000040	 17-6700   
NE$TCO	= 000041	 17-6900   
NODCHG	  000014 RG	#4-12100    6-6800    *7-7300    *7-7800    *11-4200   *12-6000   *13-5800   *13-6800   
NODLST	  000000 RG	#4-11700   *6-4100     8-4100     9-5800     11-4000    12-4300   *12-5500    13-4000    15-4000   
NOTFLG	  001754 R	#4-17200    6-6600    *6-7400    *6-7700    
NOTIP 	  001756 R	#4-17300    6-7100    *17-5500   *19-4400   *19-5000   *24-7700   
NOTLMT	= 000007  G	#4-11000    16-5500    22-12000  
NOTLST	  000010 RG	#4-11900   *6-4200     6-7900    *18-4400    19-4500    25-4100    26-4000   *26-4200    26-4300   
                         26-4500   *26-4900   
NS$OFF	= 000001	#3-7400    
NS$ON 	= 000000	#3-7300    
NT$ADJ	= 000002	#3-7700    
NT$AIP	= 000004  G	#5-4000     20-5200    23-5800    24-8800    31-7500   
NT$INT	= 000003	#3-7800    
NT$LOC	= 000001	#3-7600    
NT$NIP	= 000002  G	#5-4100     16-5600    17-8600    19-4800    21-4500    22-10100   24-6400    24-7300    31-7000   
NT$REM	= 000004	#3-7900    
NT.CON	= 000001	 22-8500   
NT.INT	= 000002	 22-8700   
NX$RNN	= 000000	 7-4200    
NX$RNS	= 000002	 13-5000   
NX.NIC	= 017050	 7-4200     13-5000   
N$XLCL	= 000001	 13-4300   
N$XRMT	= 000004	 7-5800    
N.CBL 	= 000142	 5-4500     22-7000   
N.CDA 	  000142	 16-5700   
N.CDAC	  000140	 16-5900    25-4800   
N.DDE 	  000010	 23-4800    23-4900    24-5000    24-5200   
N.RQL 	= 000110	 16-4500   
N.SND 	  000030	 16-4300    23-4900    25-4400    25-4800   
OUTBLK	  000106 RG	#4-15100   
RECAST	  004100 RG	 23-5000   #24-4200   
RELNOT	  002446 RG	 17-7300   #18-3800    20-5400    22-10500   28-4300   
REMNOT	  004052 RG	#23-6400    24-9000    27-4100   
RMINVN	  001270 RG	 11-4400   #12-4100   
RMVAST	  004632 RG	#28-3800    31-7300   
SNDAST	  002614 RG	 17-5600   #20-4100    24-7800   
SNDTOP	  001744 RG	#16-4100    19-5600   
SPAAST	  003134 RG	 6-6000    #22-5500   
SPDAST	  003054 RG	 6-6000    #22-4400   
TIMBUP	= 000005  G	#4-10900    16-5500    22-12000   31-4000   
TOP   	  000426 R	#6-6300     6-6900     6-7500     6-8900    
TOPLEN	= 000400  G	#4-16100    4-16500    4-16900   
TY$ACC	= 000002  G	#3-6200     4-16300   
TY$SRQ	= 000001  G	#3-6100     24-5000   
TY$TOP	= 000003  G	#3-6300     4-16800   
T$$CUS	= 000000	#3-600      4-16300   
TOPOL      CREATED BY  MACRO  ON 13-OCT-79 AT 13:11	PAGE 4

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

T$$ECO	= 000000	#3-500      4-16300   
T$$VER	= 000001	#3-400      4-16300   
UPNODE	  001230 RG	 6-5300     6-6500    #11-3900   
UPNOTI	  002534 RG	 6-8300     17-7500    17-8500   #19-4200    20-5600    21-4800    22-10600   28-4500   
$RLCB 	= ******  GX	 12-5900    18-5000    22-8100    23-7000    24-6800   
$RQCB 	= ******  GX	 9-4400     22-6100   
$SAVAL	= ******  GX	 7-4100     12-4200    13-3900    15-3900    16-4200    19-4300   
$SAVRG	= ******  GX	 10-3900   
$$    	= 000004	#5-6100     5-6100     5-6100    #5-6200     5-6200     5-6200    
$$$   	= 000172	#5-6100     5-6100     5-6100     5-6100    #5-6200     5-6200     5-6200     5-6200    
$$$ARG	= 000002	#6-5500     6-5500    #6-5500     6-5500     6-5500    #6-5500     6-5500     6-5500     6-5500    
                         6-5500     6-5500     6-5500     6-5500     6-5500     6-5500     6-5500    #6-5500     6-5500    
                         6-5500     6-5500     6-5500     6-5500     6-5500     6-5500     6-5500     6-5500     6-5500    
                        #6-5500     6-5500     6-5500     6-5500     6-5500     6-5500     6-5500     6-5500     6-5500    
                         6-5500     6-5500    #6-6000     6-6000    #6-6000     6-6000     6-6000    #6-6000     6-6000    
                         6-6000     6-6000     6-6000     6-6000     6-6000     6-6000     6-6000     6-6000     6-6000    
                        #6-6000     6-6000     6-6000     6-6000     6-6000     6-6000     6-6000     6-6000     6-6000    
                         6-6000     6-6000    #6-6000     6-6000     6-6000     6-6000     6-6000     6-6000     6-6000    
                         6-6000     6-6000     6-6000     6-6000    #6-6200     6-6200     6-6200     6-6200     6-6200    
                         6-6200     6-6200     6-6200     6-6200     6-6200     6-6200    #7-4200     7-4200    #7-4200    
                         7-4200    #7-4200     7-4200    #7-4200     7-4200    #7-4200     7-4200    #7-4200     7-4200    
                         7-4200    #7-4200     7-4200     7-4200     7-4200     7-4200     7-4200     7-4200     7-4200    
                         7-4200     7-4200     7-4200    #7-4200     7-4200     7-4200     7-4200     7-4200     7-4200    
                         7-4200     7-4200     7-4200     7-4200     7-4200    #7-4200     7-4200     7-4200     7-4200    
                         7-4200     7-4200     7-4200     7-4200     7-4200     7-4200     7-4200    #13-5000    13-5000   
                        #13-5000    13-5000   #13-5000    13-5000   #13-5000    13-5000   #13-5000    13-5000   #13-5000   
                         13-5000    13-5000   #13-5000    13-5000    13-5000    13-5000    13-5000    13-5000    13-5000   
                         13-5000    13-5000    13-5000    13-5000   #13-5000    13-5000    13-5000    13-5000    13-5000   
                         13-5000    13-5000    13-5000    13-5000    13-5000    13-5000   #13-5000    13-5000    13-5000   
                         13-5000    13-5000    13-5000    13-5000    13-5000    13-5000    13-5000    13-5000   #16-6100   
                         16-6100   #16-6100    16-6100   #16-6100    16-6100   #16-6100    16-6100   #16-6100    16-6100   
                        #16-6100    16-6100   #16-6100    16-6100   #16-6100    16-6100    16-6100    16-6100    16-6100   
                         16-6100    16-6100    16-6100    16-6100    16-6100    16-6100   #16-6100    16-6100    16-6100   
                         16-6100    16-6100    16-6100    16-6100    16-6100    16-6100    16-6100    16-6100   #16-6100   
                         16-6100    16-6100    16-6100    16-6100    16-6100    16-6100    16-6100    16-6100    16-6100   
                         16-6100   #16-6300    16-6300   #16-6300    16-6300   #16-6300    16-6300   #16-6300    16-6300   
                        #16-6300    16-6300   #16-6300    16-6300   #16-6300    16-6300   #16-6300    16-6300    16-6300   
                         16-6300    16-6300    16-6300    16-6300    16-6300    16-6300    16-6300    16-6300   #16-6300   
                         16-6300    16-6300    16-6300    16-6300    16-6300    16-6300    16-6300    16-6300    16-6300   
                         16-6300   #16-6300    16-6300    16-6300    16-6300    16-6300    16-6300    16-6300    16-6300   
                         16-6300    16-6300    16-6300   #17-5600    17-5600   #17-5600    17-5600   #17-5600    17-5600   
                         17-5600   #17-5600    17-5600    17-5600    17-5600    17-5600    17-5600    17-5600    17-5600   
                         17-5600    17-5600    17-5600   #17-5600    17-5600    17-5600    17-5600    17-5600    17-5600   
                         17-5600    17-5600    17-5600    17-5600    17-5600   #17-5600    17-5600    17-5600    17-5600   
                         17-5600    17-5600    17-5600    17-5600    17-5600    17-5600    17-5600   #20-4600    20-4600   
                         20-4600   #20-4600    20-4600    20-4600    20-4600    20-4600    20-4600    20-4600    20-4600   
                         20-4600    20-4600    20-4600   #20-4600    20-4600    20-4600    20-4600    20-4600    20-4600   
                         20-4600    20-4600    20-4600    20-4600    20-4600   #22-7100    22-7100   #22-7100    22-7100   
                        #22-7100    22-7100    22-7100   #22-7100    22-7100    22-7100    22-7100    22-7100    22-7100   
                         22-7100    22-7100    22-7100    22-7100    22-7100   #22-7100    22-7100    22-7100    22-7100   
                         22-7100    22-7100    22-7100    22-7100    22-7100    22-7100    22-7100   #22-7100    22-7100   
                         22-7100    22-7100    22-7100    22-7100    22-7100    22-7100    22-7100    22-7100    22-7100   
TOPOL      CREATED BY  MACRO  ON 13-OCT-79 AT 13:11	PAGE 5

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

                        #22-12300   22-12300  #22-12300   22-12300  #22-12300   22-12300  #22-12300   22-12300  #22-12300  
                         22-12300  #22-12300   22-12300  #22-12300   22-12300  #22-12300   22-12300   22-12300   22-12300  
                         22-12300   22-12300   22-12300   22-12300   22-12300   22-12300   22-12300  #22-12300   22-12300  
                         22-12300   22-12300   22-12300   22-12300   22-12300   22-12300   22-12300   22-12300   22-12300  
                        #22-12300   22-12300   22-12300   22-12300   22-12300   22-12300   22-12300   22-12300   22-12300  
                         22-12300   22-12300  #22-13200   22-13200  #22-13200   22-13200  #22-13200   22-13200  #22-13200  
                         22-13200  #22-13200   22-13200  #22-13200   22-13200  #22-13200   22-13200  #22-13200   22-13200  
                         22-13200   22-13200   22-13200   22-13200   22-13200   22-13200   22-13200   22-13200   22-13200  
                        #22-13200   22-13200   22-13200   22-13200   22-13200   22-13200   22-13200   22-13200   22-13200  
                         22-13200   22-13200  #22-13200   22-13200   22-13200   22-13200   22-13200   22-13200   22-13200  
                         22-13200   22-13200   22-13200   22-13200  #23-5000    23-5000   #23-5000    23-5000   #23-5000   
                         23-5000    23-5000   #23-5000    23-5000    23-5000    23-5000    23-5000    23-5000    23-5000   
                         23-5000    23-5000    23-5000    23-5000   #23-5000    23-5000    23-5000    23-5000    23-5000   
                         23-5000    23-5000    23-5000    23-5000    23-5000    23-5000   #23-5000    23-5000    23-5000   
                         23-5000    23-5000    23-5000    23-5000    23-5000    23-5000    23-5000    23-5000   #24-7800   
                         24-7800   #24-7800    24-7800   #24-7800    24-7800    24-7800   #24-7800    24-7800    24-7800   
                         24-7800    24-7800    24-7800    24-7800    24-7800    24-7800    24-7800    24-7800   #24-7800   
                         24-7800    24-7800    24-7800    24-7800    24-7800    24-7800    24-7800    24-7800    24-7800   
                         24-7800   #24-7800    24-7800    24-7800    24-7800    24-7800    24-7800    24-7800    24-7800   
                         24-7800    24-7800    24-7800   #24-8200    24-8200    24-8200   #24-8200    24-8200    24-8200   
                         24-8200    24-8200    24-8200    24-8200    24-8200    24-8200    24-8200    24-8200   #24-8200   
                         24-8200    24-8200    24-8200    24-8200    24-8200    24-8200    24-8200    24-8200    24-8200   
                         24-8200   #31-5400    31-5400    31-5400    31-5400    31-5400    31-5400    31-5400    31-5400   
                         31-5400    31-5400    31-5400   #31-7900    31-7900    31-7900   #31-7900    31-7900    31-7900   
                         31-7900    31-7900    31-7900    31-7900    31-7900    31-7900    31-7900    31-7900   #31-7900   
                         31-7900    31-7900    31-7900    31-7900    31-7900    31-7900    31-7900    31-7900    31-7900   
                         31-7900   
$$$FLG	= 016630	#22-7100    22-7100   
$$$$  	= 000170	#5-6100     5-6100    #5-6100     5-6100    #5-6200     5-6200    #5-6200     5-6200    
.SAVR1	= ******  GX	 8-4000     9-4000     25-4000    26-3900   
TOPOL      CREATED BY  MACRO  ON 13-OCT-79 AT 13:11	PAGE 6

MACRO CROSS REFERENCE                                   CREF         

MACRO NAME	REFERENCES

ABT$S 		#4-1100     24-8200    31-7900   
ACC$S 		#4-900     #22-12300  
ALUN$S		#4-900      6-4500     6-4600     6-4700     6-4800     6-4900     6-5000     6-5100     6-5200    
ASTX$S		#4-1100     17-6000    20-6000    21-5100    22-5300    23-5400    24-9400    28-4800    31-5700   
CLEF$S		#4-1200     6-6400    
CON$S 		#4-1000    #16-6100   #16-6300   
CTYWLB		#4-4100    
DIR$  		#6-4500     6-4500    #6-4600     6-4600    #6-4700     6-4700    #6-4800     6-4800    #6-4900     6-4900    
                #6-5000     6-5000    #6-5100     6-5100    #6-5200     6-5200    #6-5500     6-5500    #6-6000     6-6000    
                #6-6200     6-6200    #6-6300     6-6300    #6-6400     6-6400    #6-7000     6-7000    #6-7300     6-7300    
                #6-8800     6-8800    #7-4200     7-4200    #13-5000    13-5000   #16-6100    16-6100   #16-6300    16-6300   
                #17-5600    17-5600   #17-6000    17-6000   #20-4600    20-4600   #20-6000    20-6000   #21-5100    21-5100   
                #22-5300    22-5300   #22-7100    22-7100   #22-12300   22-12300  #22-13200   22-13200  #23-5000    23-5000   
                #23-5400    23-5400   #24-7800    24-7800   #24-8200    24-8200   #24-9400    24-9400   #28-4800    28-4800   
                #31-4200    31-4200   #31-5400    31-5400   #31-5700    31-5700   #31-7900    31-7900   
DLXDF 		#4-1000    #4-8700    
DSAR$S		#4-1100     6-7000    
DSC$S 		#4-1000     20-4600   
EDIOUT		#4-2700    
ENAR$S		#4-1100    #6-7300    #6-8800    
ERCALL		#4-5400     6-5600     6-6100     7-4400     13-5200    16-6400    17-5700    20-4700    22-7200    22-12400  
                 22-13300   23-5100    24-7900    24-8300    31-8000   
ERJUMP		#4-4800    
GNDW$S		#4-900      22-7100   
MOD   		#5-5100    #5-6100    #5-6200    
MOV$  		#6-4500    #6-4500    #6-4500    #6-4500    #6-4600    #6-4600    #6-4600    #6-4600    #6-4700    #6-4700    
                #6-4700    #6-4700    #6-4800    #6-4800    #6-4800    #6-4800    #6-4900    #6-4900    #6-4900    #6-4900    
                #6-5000    #6-5000    #6-5000    #6-5000    #6-5100    #6-5100    #6-5100    #6-5100    #6-5200    #6-5200    
                #6-5200    #6-5200    #6-5500    #6-5500    #6-5500    #6-5500    #6-5500    #6-5500    #6-5500    #6-5500    
                #6-6000    #6-6000    #6-6000    #6-6000    #6-6000    #6-6000    #6-6000    #6-6000    #6-6200    #6-6200    
                #6-6200    #6-6200    #6-6200    #6-6300    #6-6300    #6-6400    #6-6400    #7-4200    #7-4200    #7-4200    
                #7-4200    #7-4200    #7-4200    #7-4200    #7-4200    #7-4200    #7-4200    #7-4200    #7-4200    #13-5000   
                #13-5000   #13-5000   #13-5000   #13-5000   #13-5000   #13-5000   #13-5000   #13-5000   #13-5000   #13-5000   
                #13-5000   #16-6100   #16-6100   #16-6100   #16-6100   #16-6100   #16-6100   #16-6100   #16-6100   #16-6100   
                #16-6100   #16-6100   #16-6100   #16-6100   #16-6300   #16-6300   #16-6300   #16-6300   #16-6300   #16-6300   
                #16-6300   #16-6300   #16-6300   #16-6300   #16-6300   #16-6300   #16-6300   #17-5600   #17-5600   #17-5600   
                #17-5600   #17-5600   #17-5600   #17-5600   #17-5600   #17-5600   #20-4600   #20-4600   #20-4600   #20-4600   
                #20-4600   #20-4600   #22-7100   #22-7100   #22-7100   #22-7100   #22-7100   #22-7100   #22-7100   #22-7100   
                #22-7100   #22-12300  #22-12300  #22-12300  #22-12300  #22-12300  #22-12300  #22-12300  #22-12300  #22-12300  
                #22-12300  #22-12300  #22-12300  #22-12300  #22-13200  #22-13200  #22-13200  #22-13200  #22-13200  #22-13200  
                #22-13200  #22-13200  #22-13200  #22-13200  #22-13200  #22-13200  #22-13200  #23-5000   #23-5000   #23-5000   
                #23-5000   #23-5000   #23-5000   #23-5000   #23-5000   #23-5000   #24-7800   #24-7800   #24-7800   #24-7800   
                #24-7800   #24-7800   #24-7800   #24-7800   #24-7800   #24-8200   #24-8200   #24-8200   #24-8200   #24-8200   
                #24-8200   #31-4200   #31-4200   #31-5400   #31-5400   #31-5400   #31-5400   #31-5400   #31-7900   #31-7900   
                #31-7900   #31-7900   #31-7900   #31-7900   
MRKT$S		#4-1100    #6-6200    #31-5400   
MVB$  		#6-5500    #6-5500    #6-6000    #6-6000    #7-4200    #7-4200    #13-5000   #13-5000   #16-6100   #16-6100   
                #16-6300   #16-6300   #17-5600   #17-5600   #20-4600   #20-4600   #22-7100   #22-7100   #22-12300  #22-12300  
                #22-13200  #22-13200  #23-5000   #23-5000   #24-7800   #24-7800   #24-8200   #24-8200   #31-7900   #31-7900   
NETDF$		#4-1000    #4-8600    
OPNW$S		#4-1000     6-5500    
POP   		#4-7300    #17-5800   #18-5100   #20-5800   #21-4900   #22-5100   #23-5200   #24-5900   #24-6900   #24-9200   
TOPOL      CREATED BY  MACRO  ON 13-OCT-79 AT 13:11	PAGE 7

MACRO CROSS REFERENCE                                   CREF         

MACRO NAME	REFERENCES

                #28-4600   #31-5500   
PUSH  		#4-6300    #17-4100   #18-3900   #20-4200   #21-3900   #22-4500   #22-5700   #23-4000   #24-4300   #24-5500   
                #24-6600   #27-3900   #28-3900   #31-3800   
QDPB$S		#6-5500    #6-5500    #6-6000    #6-6000    #7-4200    #7-4200    #13-5000   #13-5000   #16-6100   #16-6100   
                #16-6300   #16-6300   #17-5600   #17-5600   #20-4600   #20-4600   #22-7100   #22-7100   #22-12300  #22-12300  
                #22-13200  #22-13200  #23-5000   #23-5000   #24-7800   #24-7800   #24-8200   #24-8200   #31-7900   #31-7900   
QIOW$S		#4-900      7-4200     13-5000   
QIO$S 		#4-900     
REC$S 		#4-900     #23-5000   
REJW$S		#4-1000     22-13200  
RVP$  		#6-5500     6-5500     6-5500     6-5500    #6-6000     6-6000     6-6000     6-6000    #6-6200     6-6200    
                #7-4200     7-4200     7-4200     7-4200    #13-5000    13-5000    13-5000    13-5000   #16-6100    16-6100   
                 16-6100    16-6100   #16-6300    16-6300    16-6300    16-6300   #17-5600    17-5600    17-5600    17-5600   
                #20-4600    20-4600    20-4600   #22-7100    22-7100    22-7100    22-7100   #22-12300   22-12300   22-12300  
                 22-12300  #22-13200   22-13200   22-13200   22-13200  #23-5000    23-5000    23-5000    23-5000   #24-7800   
                 24-7800    24-7800    24-7800   #24-8200    24-8200    24-8200   #31-5400    31-5400   #31-7900    31-7900   
                 31-7900   
SETF$S		#4-1200     31-4200   
SND$S 		#4-1000    #17-5600   #24-7800   
SPAW$S		#4-900     #6-6000    
WTSE$S		#4-1100    #6-6300    
$CON$S		#16-6100    16-6100   #16-6300    16-6300   #22-12300   22-12300  #22-13200   22-13200  
$GNDF$		#22-7100    22-7100