 10-APR-1990 00:10:05  - notes on FT_1 AMIMESS (aka AMIRTR)

1. Status: It works. Debugging code is in transition, some is conditionalized
	on DEBUG_LEVEL, some isn't. 

- Known bug in logical name translation. Do not mix real and logical node 
names - use one or the other throughout. Best to define RTR$NODE=node::task
for all links. Fix is known, just not in place. 

2. To use: 
	a) Install AMIRTR
	b) make sure GROUP GLOBALS exist for group under which it runs
	c) Define RTR$LOG_FILE=NL: (or some tt: or file)
	d) RUN it 
3. Single-node testing
	It is possible now to run two routers on a single node. Do step 2
	above for first router. For second:
	
	a) Install AMIRTR with another name (e.g., ALTRTR)
	b) create group globals for different group than in 2 above
	c) run ALTRTR/UIC=[gg,mmm] 

	d) define RTR$FOO (foo is fake node name) = node::ALTRTR, where 
		node is real local node. 
	e) send messages to FOO::taskname. The message will go to AMIRTR,
	which will open link to FOO::. However, by translating RTR$FOO, AMIRTR
	will realize the link really goes to DRAGON::ALTRTR (or whatever), and 
	open a link to that. Message now goes over decnet to ALTRTR, who does
	with it what is needed. When reply comes back, it comes addressed to 
	DRAGON::taskname, but with router of ALTRTR, thus completely reversing
	the path. 

	With this setup, anything addressed to DRAGON:: goes to AMIRTR by 
	default (or straigt to destination task), while anything for FOO::
	goes thru AMIRTR to ALTRTR and then out to destination. 

4. Debug Output
	If you send debug output to the same tt: that runs SENDER, be SURE
	to set the Delay parameter of sender to about 5 seconds. Do NOT 
	attempt to send both router's debug to the same tt! They get very 
	garbled, and result is useless. If you change RTR$LOG_FILE and/or
	RTR$DEBUG_FILE from NL: to TTx: between running AMIRTR and ALTRTR,
	you get one or the other debug. Or, define differently in the two
	group tables. 

	You need the delay in SENDER to allow the message to float around and 
	the router to produce it's full debug output. Otherwise, the READ
	statement from SENDER gets in the way, and the screen becomes very
	hard to read. 

	Those with windows would do well to use them! 

5. SENDER
	The SENDER.TSK in [MESSAGE] has been munged to work with AMIRTR
	type messaging. New commands:
	
	B (body) - set the body part of the message
	H (header) - set the header of the message
	S (send) - send the message
	P (pause) - STOP sender - use UNS SENDER to resume
	D (delay) - insert a n-second (you're asked) delay between sending
		the message and receiving any incomming. Gives other tasks
		a window to put output to the screen. 

	Bugs: In Header, you must use UPPER CASE, and you must change BOTH
		task name and node name - the <return> defaulting is broken. 
	
6. MSLOOP
	In [message]. This is a task to loop back TEXT messages to the sender.
	It works with any message type which is ALL text, but has only been 
	tested with type=39 (comment). If logical MSLOOP$LOG_FILE is defined,
	a copy of the message header and text are written to the specified
	device (file or TT:). If MSLOOP$LOG_FILE is *NOT* defined, I believe
	that any packet would be looped successfully. Could be fixed to 
	notice packet type and not print binary packets. 

7. MSSEND, MSRCVR
	In [MESSAGE]. Source and sink for messages. Basically, MSSEND is not
	too useful - use SENDER instead. MSRCVR is again intended for text
	packet contents. Might be useful. Coding examples, if nothing else. 

8. EFNs
	AMIRTR uses f90 as shutdown-request, f91 for event notification.
	MSLOOP uses f92, f93 in same way. Don't fool with f91 or f93. Set 
	f90 and/or f92 to kill off AMIRTR, MSLOOP respectively. 

9. PASUTIL usage:
	These all use P3UTIL, version last insert 20-SEP-1989. This is, I 
	believe, vanilla AMI P3UTIL. 

10. REBUILDING
	SENDER is OK to fool with. Re-compile/link others at your own risk, 
	as there is work-in-progress, especially in AMIRTR. I'd say the stuff
	in [DECNET] and [MESSAGE] is pretty stable, AMIRTR is definitely not. 

11. Futures:
	Other than fixing the DEBUG code, and a couple of other things, the
	control packet area needs work. Also, the DIRECTORY will become a
	separate task - possibly called from AMIRTR - rather than a procedure
	in AMIRTR itself. Main reason is I don't want to either hold up AMIRTR
	doing directory function *OR* complicate the control flow any more 
	than it	already is! 

	I see the directory function as a service accessed by messages - like
	any other. You send a message for a node::task pair (node may be 
	wildcarded), and you get back a message containing up to, say, 10 
	node::task pairs where the task was found. Implementation is via a 
	GIN$ subfunction. I don't want to keep a list of all tasks, because
	I don't want to sort out the 'illegal' ones (DCL, MCR..., etc.). 
	Might be possible to do a group or uic search, tho. As I recall the
	GIN subfunction is pretty general. 

	Have only scratched the surface of VMS implementation - much in my 
	head. However, this won't be too bad. As you can see, the majority
	of this stuff is vanilla Pascal, and I won't need any MACRO-32
	(sigh) to do the network links. 
	
