Google
 

Trailing-Edge - PDP-10 Archives - decnet_mcb_cusps_703a - 10,7/dcnmcb/ngncnf.mac
There are 7 other files named ngncnf.mac in the archive. Click here to see a list.
;	TITLE	NGNCNF - NETGEN Configuration File Processing
;		======

	SEARCH	NGNMAC

	INIGEN (NGNCNF)			; Initialize GLXLIB assembly options
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1980,1981,1982,1985,1986.
;ALL RIGHTS RESERVED.
;
;
;  module NGNCNF, containing the save file sections for the 
;		  NETGEN - Network configurator program
;
;
;	SUMMARY OF EDIT HISTORY - FOR FULL DETAILS SEE MODULE NETGEN.MAC
;
;	EDIT #		DATE
; 4.1
;	2.		23Nov82
;	33.		18Oct84
;	35.		06Jan85
;	38.		15Jul85
;
;
;********** INITIALIZE THE DEFAULTS
;
PRMLST:	EXP	DN100##
	EXP	DN500##,DN502##,DN510##,DN511##
	EXP	DN710##,DN721##,DN722##,DN723##
	EXP	DN910##,DN920##,DN922##,DN923##,DN924##,DN931##
	EXP	DNS0##,DNS6##,DNS7##,DNS8##,DNS9##
	EXP	 DNS10##,DNS11##,DNS12##,DNS13##
	EXP	DNS1##,DNS2##,DNS3##,DNS4##,DNS5##
	EXP	DN502##,DN920##,DN931##		; For min/max adjust
	EXP	DN923##,DN924##			; For min/max adjust
	EXP	DKC906##,DKC907##
	EXP	DMS1##
	EXP	DPD1##
	EXP	DNX2##,DNX3##,DNX4##
	EXP	XKL121##,XKL130##,XKL131##,XKL132##
	EXP	XP1110##,XP1131##,XP1140##,XP1141##,XP1150##,XP1151##,XP1152##
	EXP	 XP1153##,XP1154##,XP1160##,XP1161##,XP1162##,XP1163##
	EXP	XPS0##,XSS0##,XSS1##
	EXP	XKL130##,XP1140##,XP1150## 	; For min/max adjust
	EXP	0

NGINIT::SETOM	SAVDON##		;A SAVE has not been done
	SETZ	S1,
	SKIPE	PDN200##
	 MOVEI	S1,NDN200##		;DEFAULT NODE TYPE = DN200
	SKIPE	PX25##
	 MOVEI	S1,NX25##		;DEFAULT NODE TYPE = X25
	SKIPE	PDN20##
	 MOVEI	S1,NDN20##		;DEFAULT NODE TYPE = DN20
	MOVEM	S1,NODTYP##
	SETOM	NOTSTA##		;STATUS = DEFAULT
	MOVEI	S1,PRMLST
	$CALL	INIPRM
	MOVEI	S1,1			;DEFAULT IS 1 NRM PIPES *edit 5
	MOVEM	S1,NRLNUM##			
	SETOM	NRLSTA##		;SAY DEFAULT
	MOVEI	S2,^D50
	MOVEM	S2,BUFDIF##
	LOAD	S1,DMS2##,PRMINI
	ADD	S2,S1			;DEFAULT IS 64 RDBS
	MOVEM	S2,RDBNUM##
	SETOM	RDBSTA##
;
; CONTINUED ON NEXT PAGE
;
;
; SET UP COMMUNICATIONS CONFIGURATION
;
	SETZM	KDPNUM##		;DEFAULT IS NO KDP11S
	SETZM	DCPNUM##		;Initialize KDP XPT lines to zero.
	MOVSI	I1,-NUMDUP##		;NO DUP11S EXIST
	SETZ	I2,
INI.1:	SETOM	DUPUSE##(I1)
	SETZM	DTEADR##(I2)
	ADD	I2,QUADTE##+EINC
	AOBJN	I1,INI.1		;MARK IT SO.
	SETOM	KDPSTA##
	MOVSI	S1,-NUMKDP##		;NO DUP LINES FOR ANY KDPS
INI.3A:	SETZM	KDPLNM##(S1)
	AOBJN	S1,INI.3A
	SETZM	DMXNUM##		;DEFAULT IS NO DMC11S, DMR11S OR DMP11S
	SETZM	DMCNUM##		;DEFAULT IS NO DMC11S
	SETOM	DMCSTA##
	MOVSI	S1,-NUMDMC##		;NO DMC11S IN USE
INI.2:	SETOM	DMCUSE##(S1)
	AOBJN	S1,INI.2		;MAKE IT SO
	SETZM	DMRNUM##		;DEFAULT IS NO DMR11S
	SETOM	DMRSTA##
	MOVSI	S1,-NUMDMR##		;NO DMR11S IN USE
	SETOM	DMRUSE##(S1)
	AOBJN	S1,.-1			;MAKE IT SO
;
; CONTINUED ON NEXT PAGE
;
;
; INITIALIZE THE DEVICE CONFIGURATION FOR THE DN20.
;
	SETZM	LPTNUM##		;NO LP11S OR LP20S
	SETOM	LPTSTA##
	MOVSI	S1,-NUMLPT##		;SET ALL PRINTERS TO UNUSED
INI.10:	SETOM	LPTUSE##(S1)
	AOBJN	S1,INI.10
	SETZM	CR1NUM##		;NO CR11S
	SETOM	CR1STA##
	MOVSI	S1,-NUMCDR##		;SET ALL CR11S TO UNUSED
	SETOM	CR1USE##(S1)
	AOBJN	S1,.-1			;DO THEM ALL
	MOVEI	S1,2			;fudge = 2
	MOVEM	S1,NTPNCK##		; NMX - # NMX CIRCUITS
	AOS	NTPNCK##		;  set orig to fudge factor +1
	MOVEI	S2,1			;DTE20 NUMBER
	MOVEM	S2,DTENUM##
	LOAD	S1,DC900##,PRMINI
	MOVEM	S1,DTECST##
	MOVEM	S2,NTPNLN##		;DEFAULT NUMBER OF NMX LINES
	MOVEM	S2,PLKNUM##		;DEFAULT IS 1 PHYSICAL LINK (DTE)
	MOVEM	S2,NTPLIX##		; CEX - Number of line indices
	SETOM	NTDLIX##		;SAY DEFAULT
	SETOM	PLKSTA##
	SETOM	DTESTA##
;
;Continued on next page
;
	MOVEI	S1,^D2			; NSP - NSP delay factor
	MOVEM	S1,NTPDLY##		; NSP - NSP delay factor
	SETOM	NTDDLY##		;SAY DEFAULT
	SETOM	CURPTN##		;INITIALIZE POINTER TO PHASE-II NODES
	SETOM	PTNSTA##		;SAY DEFAULT
	SETOM	PRCPTR##		;INITIALIZE MCB PROCESS POINTER
	SETOM	RSTPTR##		;INITIALIZE RSX TASK POINTER
	SETZM	NMLTYP##		;Include large NML
	SETOM	RSDPTR##		;INITIALIZE RSX DRIVER POINTER
	SETOM	PRCMDT##		;SAY NO DEBUGGER (MDT)
	MOVE	S2,[IOWD NUMNOD##,1]
INI.11:	LOAD	S1,DNS14##,PRMINI
	MOVEM	S1,@DNS14##+PRMPTR
	AOBJN	S2,INI.11
;
;	Init X25 netpar parameters
;

	SETZM	NUMCIR##		;No X.25 circuits
	SETZM	NUMDES##		;No X.25 destinations
	SETZM	NCIR##			;DEFAULT
	MOVEI	^B1111001111		;Set events 0.0-3,6-9
	MOVEM	GBLFLT##+0
	SETZM	GBLFLT##+1		;Clear events 1.0-31
	MOVEI	^B11			;Set events 2.0-1
	MOVEM	GBLFLT##+2
	MOVEI	^B111			;Set events 3.0-2
	MOVEM	GBLFLT##+3
	MOVEI	^B11011111111111	;Set events 4.0-10,12-13
	MOVEM	GBLFLT##+4
	MOVEI	^B1111111000000		;Set events 5.6-12
	MOVEM	GBLFLT##+5
	MOVEI	^B11000			;Set events 6.3-4
	MOVEM	GBLFLT##+6
	MOVSI	S1,-GRPSIZ##*NUMDUP##
INI.12:	SETOM	GRPNUM##(S1)
	AOBJN	S1,INI.12
	$RETT				; END OF 1ST PART INITIALIZATION.

INIPRM:	$SAVE	<P1,P2>			; Initialize parameters from blocks.
	MOVE	P2,S1
INIPR1:	SKIPN	P1,0(P2)		; For each parameter block,
	 $RETT
	MOVEM	P1,PRMBLK##
	LOAD	S1,(P1),PRMINI		; Get the initial value
	SKIPE	PRMSTR(P1)		;  and if there is a store routine
	 $CALL	PRMSTR(P1)		;  then initialize.
	LOAD	S1,(P1),PRMDFL		; If the is a default indicator
	SKIPE	S1			;  then
	 SETOM	0(S1)			;  indicate defaulted.
	AOJA	P2,INIPR1		; Do for all.
;
NGIN2::	MOVEI	S1,4			;*EDIT 5
	MOVEM	S1,FLOWCT##		;INIT VAL FOR FLOW COUNT = 4
	SETOM	FLOSTA##		;Show Status default
	LOAD	S1,DN931##,PRMINI	;SET DEFAULT DL BLOCK SIZE
	MOVEM	S1,NTPBLK##		; AND SAVE IT
	SETOM	NTDBLK##		;SAY DEFAULT
	$CALL	RDBCLC##		; CALCULATE DEFAULT RDB SIZE

	MOVEM	S1,RDBLEN##		; AND SAVE IT
	SETOM	RDSSTA##		; SAY DEFAULT
	$RETT
;
;
;	*	*	*	NODE	*	*	*	*	*	
;
;*******NODE - top level command routine
;
NOD::
	$CALL	P$KEYW##		;get keyword value
	JUMPF [$TEXT ,<?Error returned from P$KEYW>
		$RETT]
	JUMPE	S1,NOD
	MOVEM	S1,NODTYP##		;STORE IT
	SETZM	NOTSTA##		;STATUS = "TYPED IN"
;
; ADJUST THE DEFAULTS BASED ON THE NEW NODE TYPE.
; ANY VALUE WHICH HAS BEEN SPECIFIED EXPLICITLY BY THE USER
;  IS NOT ADJUSTED.
;
	SKIPN	DTESTA##		;DTE20 DEFAULT?
	 JRST	NOT.6			;NO, LEAVE IT ALONE.
	SKIPL	DTENUM##		;If DTE defined
	 $CALL	DELXPT##		;then take away from transport.
	SETZM	DTENUM##
	CAIE	S1,NDN20##		;If DN20
	 JRST	NOT.6			;then
	AOS	DTENUM##		;set for DTE #1
	$CALL	ADDXPT##		;and transport line.
;	
; FALL THROUGH TO NEXT PAGE
;
;
;INCLUDE/EXCLUDE DMC #0 (IF STILL DEFAULTED) BASED ON NODE TYPE
;	(EDIT 5)
;
NOT.6:	SKIPN	DMCSTA##		;don't adjust if user has
	 JRST	NOT.6A			;	touched DMCs
	CAIE	S1,NDN200##		;
	 JRST	NOT.61			;
					;CHANGING TO DN200
	MOVE	S2,DMXNUM##		;get # DMx11 devices already included
	CAIL	S2,NUMDMX##		;ok to add another?
	JRST [	$TEXT	,<?Too Many DMx11 Devices - Can't Add The DN200's Default DMC>
		JRST	NOT.6A]
	MOVEI	S2,0			;set the dmc #
	SETZM	DMCUSE##(S2)		;	in use
	LOAD	T1,DC900##,PRMINI
	MOVEM	T1,DMCCST##(S2)		;Set default cost
	LOAD	T1,DL1111##,PRMINI
	MOVEM	T1,DMCDUP(S2)		;Set default cost
	AOS	DMXNUM##		;yes - add 1 to # DMx11 devices
	AOS	DMCNUM##		;	and to # DMCs
	$CALL	ADDXPT##		;Give transport another line.
	JRST	NOT.6A
;
;			CHANGING TO DN20
;
NOT.61:	MOVEI	S2,0			;DMC involved is #0
	SKIPE	DMCUSE##(S2)		;
	JRST	NOT.6A			;should only happen when found too many
					;DMx11 devices when changed to DN200
	SETOM	DMCUSE##(S2)		;set dmc#0 not in use
	SOS	DMCNUM##		;one less dmc11
	SOS	DMXNUM##		;one less dmx11 device
	$CALL	DELXPT##		;Take away from transport.
	JRST	NOT.6A			;this jump for good measure
;
; NOW CHANGE THE COMMUNICATIONS CONFIGURATION.
;
NOT.6A:	MOVEI	S2,^D64			;Default for DN20
	CAIN	S1,NDN200##		;DN200?
	 MOVEI	S2,^D30			;Yes, User DN200 Default
	SKIPE	CCBSTA##		;Number of CCBs Defaulted ?
	 MOVEM	S2,CCBNUM##		;Store new value
	SKIPN	RDBSTA##		;Number of RDBs Defaulted?
	 JRST	NOT.8D			;No, Continue on
	MOVEI	S2,^D64			;Default for DN20
	CAIN	S1,NDN200##		;DN200?
	 MOVEI	S2,^D20			;Yes, Use DN200 Defaults
	MOVEM	S2,RDBNUM##		;Store number of RDBs
	MOVEI	S2,^D8			; for dn20, default = 8
	CAIN	S1,NDN200##		; dn200?
	MOVEI	S2,^D20			; yes, use dn200 default = 20.
	MOVEM	S2,NTPIBQ##		; XPT - Input buffer quota (from NSP)
	MOVEM	S2,NTPEBQ##		; XPT - ECL buffer quota (to NSP)
NOT.8D:	SKIPE	PRVLDG##
	 SKIPGE	NRLSTA##		;NRM PIPES DEFAULTED?
	  $CALL	SETPIP##		;Set number of NRM pipes.
	$RETT				;ALL DONE.
;
;	*	*	*	RESTORE	*	*	*	*
;
;
; Process the Restore command
;
RESTR::
	$CALL	P$IFILE##		;get the FD from the parse block
	MOVEM	S1,SRFOB		;put FD addr in FOB
	MOVEI	S1,^D36			;
	MOVEM	S1,SRFOB+1		;put byte size in FOB
	MOVEI	S1,2			;length of FOB
	MOVEI	S2,SRFOB		;address of FOB
	$CALL	F%IOPN			;OPEN FILE FOR INPUT
	JUMPF	[$TEXT ,<?error opening restore file>
		 $RETT]
	MOVEM	S1,SRIFN		;save IFN
	$CALL	F%IBYT			;GET THE FIRST WORD
	JUMPF	[$TEXT ,<?Cannot read file after open ok>
	 JRST RES.3]
	CAIE S2,SAVLNW##		;LENGTHS MATCH?
	 JRST [$TEXT ,<?Length Of Save File Differs From Expected Length - Cannot Restore This File>
		JRST RES.3]		;DATA BASE MUST HAVE CHANGED
;
	$CALL	F%IBYT			;get next word
	JUMPF	[$TEXT ,<?Cannot read file after open ok>
		 JRST RES.3]
	CAME	S2,VERSION##		;DOES THE VERSION MATCH?
	 $TEXT  ,<%Version Mis-Match - File Might Not Be Compatible>
					;WARN HIM BUT CONTINUE
	MOVE	S1,SRIFN
	$CALL	F%REW			;rewind the file
	MOVE	S1,SRIFN
	MOVEI	T1,SAVLNW##		;use # of words as loop counter
	MOVEI	T2,DBBEG##		;start address of restore data
RES.2:	$CALL	F%IBYT			;get word (ie, 36-bit byte)
	JUMPF	[$TEXT ,<?Error Reading Restore File - Data Area Corrupted>
		$CALL	NGINIT		;Re-initialize
		$CALL	NGIN2		;the data base
		MOVE	S1,VERSION##	;and set
		MOVEM	S1,FILVER##	;our version.
		JRST	RES.3]
	MOVEM	S2,@T2			;put it away where it goes
	AOJ	T2,RES.4		;incr to next dest
RES.4:	SOJN	T1,RES.2		;loop

	$TEXT ,<[Configuration Restored From:  ^F/@SRFOB/]>
RES.3:	MOVE	S1,SRIFN
	$CALL	F%REL			;Close and release the file
	JUMPF	[$TEXT ,<?Error closing restore file>]
	SETZM	SRIFN			;Not in use
	LOAD	T1,FILVER##,VI%MAJ	; Get major version number,
	LOAD	T2,FILVER##,VI%MIN	; minor version number,
	LOAD	T3,FILVER##,VI%EDT	; and edit number.
	CAIN	T1,^D3			; Changes during version 3:
	 $CALL [CAIGE	T3,^D41
		 $CALL	EDIT41		;  Updates in edit 3(51):
		CAIGE	T3,^D42
		 $CALL	EDIT42		;  Updates in edit 3(52):
		CAIGE	T3,^D46
		 $CALL	EDIT46		;  Updates in edit 3(56):
		MOVE	T4,DBLVL##	;  The data base level comes into being
		CAIN	T3,^D46		;   during edit 3(56):
		 $CALL [CAIL	T4,^D100
			 CAILE	T4,^D120
			  MOVEI	T4,^D100
			MOVEM	T4,DBLVL##
			$RET]
		$RET]
	CAIN	T4,^D100
	 $CALL [LOAD	S1,DPD1##,PRMINI ; Initialize
		MOVEM	S1,DMCPXB##	; DMC transmit buffer allocation.
		SETZM	NMLTYP##	; NMLTYP = NML, not NMS.
		AOS	T4,DBLVL##
		$RET]
	CAIN	T4,^D101
	 $CALL [MOVEI	S2,NUMNOD##-1	; For all nodes
	RES.10:	SETZM	XPTMXA##(S2)	; purge the fence.
		SOJGE	S2,RES.10
		AOS	T4,DBLVL##
		$RET]
	CAIN	T4,^D102
	 $CALL [LOAD	S1,DL1112##,PRMINI ; Set DDCMP-DMC
		MOVSI	S2,-NUMDUP##	; for
	RES.11:	MOVEM	S1,LNTYP##(S2)	; all line protocol types.
		AOBJN	S2,RES.11
		SETZM	NUMCIR##	; No X.25 circuits
		SETZM	NUMDES##	; No X.25 destinations
		SETZM	NCIR##		; No circuit high-water mark.
		MOVEI	S1,RES.12	; Initialize all X.25 parameters.
		$CALL	INIPRM
		AOS	T4,DBLVL##
		$RET
	RES.12:	EXP	DNX2##,DNX3##,DNX4##
		EXP	XKL121##,XKL130##,XKL131##,XKL132##,XP1110##
		EXP	XP1131##,XP1140##,XP1141##,XP1150##,XP1151##,XP1152##
		EXP	XP1153##,XP1154##,XP1160##,XP1161##,XP1162##,XP1163##
		EXP	XKL130##,XP1140##,XP1150## 	; For min/max adjust
		EXP	0]
	CAIN	T4,^D103
	 $CALL [;
		;   Add filter data base.
		;
		MOVEI	^B1111001111	;Set events 0.0-3,6-9
		MOVEM	GBLFLT##+0
		SETZM	GBLFLT##+1	;Clear events 1.0-31
		MOVEI	^B11		;Set events 2.0-1
		MOVEM	GBLFLT##+2
		MOVEI	^B111		;Set events 3.0-2
		MOVEM	GBLFLT##+3
		MOVEI	^B11011111111111 ;Set events 4.0-10,12-13
		MOVEM	GBLFLT##+4
		MOVEI	^B1111111000000	;Set events 5.6-12
		MOVEM	GBLFLT##+5
		MOVEI	^B11000		;Set events 6.3-4
		MOVEM	GBLFLT##+6
		;
		;   Add duplex indicator for KDP lines.
		;
		;   Set DTEADR corresponding to non-LAPB lines to zero
		;   in order to eliminate DTE qualifier list access
		;   dependency.  A X25-PROTOCOL DTE is now active when
		;   DTEADR is non-zero.
		;
		LOAD	S1,DL1111##,PRMINI ; Default duplex is FULL
		MOVSI	I1,-NUMDUP##	; Set for all included DUPs
		SETZ	I2,
	RES.13:	SKIPL	DUPUSE##(I1)
		 MOVEM	S1,DUPDUP##(I1)
		MOVE	LNTYP##(I1) 	; If line protocol
		CAIE	^D5		; is not LAPB
		 SETZM	DTEADR##(I2)	; then no associated DTE.
		ADD	I2,QUADTE##+EINC
		AOBJN	I1,RES.13
		;
		;   Initialize forgotten X.25 variables
		;
		MOVEI	S1,RES.14
		$CALL	INIPRM
		AOS	T4,DBLVL##
		$RET
	RES.14:	EXP	XPS0##,XSS0##
		EXP	0]
	$RETT
;
;   Data base changes made during 2(51)
;
EDIT41:	SETOM	CURPTN##		; INITIALIZE POINTER TO PHASE-II NODES
	SETOM	PTNSTA##		; SAY DEFAULT
	SETOM	PRCPTR##		; INITIALIZE MCB PROCESS POINTER
	SETOM	RSTPTR##		; INITIALIZE RSX TASK POINTER
	SETOM	RSDPTR##		; INITIALIZE RSX DRIVER POINTER
	SETOM	PRCMDT##		; SAY NO DEBUGGER (MDT)
	LOAD	S1,DC900##,PRMINI	; This is the default cost.
	SKIPLE	DTENUM##
	 MOVEM	S1,DTECST##		; Set for the included DTE
	MOVSI	S2,-NUMDMC##		; Set for all included DMCs
EDT41A:	SKIPL	DMCUSE##(S2)
	 MOVEM	S1,DMCCST##(S2)
	AOBJN	S2,EDT41A
	MOVSI	S2,-NUMDMR##		; Set for all included DMRs
EDT41B:	SKIPL	DMRUSE##(S2)
	 MOVEM	S1,DMRCST##(S2)
	AOBJN	S2,EDT41B
	MOVSI	S2,-NUMDUP##		; Set for all included DUPs
EDT41C:	SKIPL	DUPUSE##(S2)
	 MOVEM	S1,DUPCST##(S2)
	AOBJN	S2,EDT41C
	$RET
;
;   Data base changes made during 2(52)
;
EDIT42:	SETZM	BUFDIF##		; Clear buffer shrink count
	$RET
;
;   Data base changes made during 2(56)
;
EDIT46:	MOVE	S1,BUFDIF##
	SKIPE	RDBSTA##		; If RDBs defaulted,
	 SUBM	S1,RDBNUM##		;  then remove buffer shrink count.
	SKIPN	S1,BUFDIF##		; If defaulted,
	 MOVEI	S1,^D50			;  buffer shrink count is now 50.
	MOVEM	S1,BUFDIF##
	ADD	S1,RDBNUM##		; Figure new default RDB count.
	SKIPE	RDBSTA##
	 MOVEM	S1,RDBNUM##
	LOAD	S1,DN920##,PRMINI	; MAXIMUM ADDRESS is now 255
	SKIPE	NTDNN##			;  if defaulted.
	 CAMN	S1,NTPNN##
	  SKIPA
	   $CALL [$TEXT	(,<
%MAXIMUM ADDRESS is being left as ^D/NTPNN/ (default is now ^D/S1/)>)
		SETZM	NTDNN##
		$RET]
	LOAD	S1,DN931##,PRMINI	; BUFFER SIZE is now 576
	SKIPE	NTDBLK##		;  if defaulted.
	 CAMN	S1,NTPBLK##
	  SKIPA
	   $CALL [$TEXT	(,<
%BUFFER SIZE is being left as ^D/NTPBLK/ (default is now ^D/S1/)>)
		SETZM	NTDBLK##
		$RET]
	MOVE	S1,NTPSLF##		; Check consistency of
	CAMLE	S1,NTPNN##		;  ADDRESS vs MAXIMUM ADDRESS
	 $CALL [$TEXT	(,<
%The Node Number and MAXIMUM ADDRESS parameters are inconsistent
% MAXIMUM ADDRESS is being increased from ^D/NTPNN/ to ^D/S1/>)
		MOVEM	S1,NTPNN##
		$RET]
	MOVE	S1,NTPNN##		; Check consistency of
	IMULI	S1,^D2
	ADDI	S1,^D5
	CAMLE	S1,NTPBLK##		;  MAXIMUM ADDRESS vs BUFFER SIZE
	 $CALL [$TEXT	(,<
%The MAXIMUM ADDRESS and BUFFER SIZE parameters are inconsistent
% BUFFER SIZE is being increased from ^D/NTPBLK/ to ^D/S1/>)
		MOVEM	S1,NTPBLK##
		$RET]
	LOAD	S1,DN923##,PRMINI	; MAXIMUM HOPS is now 16
	SKIPE	NTDMXH##		;  if defaulted.
	 MOVEM	S1,NTPMXH##
	LOAD	S1,DN924##,PRMINI	; MAXIMUM VISITS is now 32
	SKIPE	NTDMXV##		;  if defaulted.
	 MOVEM	S1,NTPMXV##
	MOVE	S1,NTPMXH##		; Check consistency of
	CAMLE	S1,NTPMXV##		;  MAXIMUM VISITS vs MAXIMUM HOPS
	 $CALL [$TEXT	(,<
%The MAXIMUM VISITS and MAXIMUM HOPS parameters are inconsistent
% MAXIMUM VISITS is being set from ^D/NTPMXV/ to ^D/S1/>)
		MOVEM	S1,NTPMXV##
		$RET]
	LOAD	S1,DL1111##,PRMINI	; Default duplex is FULL
	MOVSI	S2,-NUMDMC##		; Set for all included DMCs
EDT46A:	SKIPL	DMCUSE##(S2)
	 MOVEM	S1,DMCDUP##(S2)
	AOBJN	S2,EDT46A
	MOVSI	S2,-NUMDMR##		; Set for all included DMRs
EDT46B:	SKIPL	DMRUSE##(S2)
	 MOVEM	S1,DMRDUP##(S2)
	AOBJN	S2,EDT46B
	LOAD	S1,DPD1##,PRMINI
	MOVEM	S1,DMCPXB##
	$RET
;
;	SAVE Command - Prefill routine
;
SRFIL::SETZB	T1,T2			;clear to start
	MOVE	T3,[POINT 7,T1]		;dest byte ptr
	MOVEI	T4,6			;max 6 char
	MOVE	S1,[POINT 7,NODNAM##]	;src byte ptr
	ILDB	S2,S1			;get first char in node name string
	JUMPE	S2,SAVF.4		;no node name, null default file name
	JRST	SAVF.2			;it's alright, start filling
SAVF.1:	ILDB	S2,S1			;get char into s2
	JUMPE	S2,SAVF.3		;done if null before 6th char
SAVF.2:	IDPB	S2,T3			;store char
	SOJG	T4,SAVF.1		;loop
SAVF.3:	MOVEI	S2,"."			;put in
	IDPB	S2,T3			;	".
	MOVEI	S2,"C"			;
	IDPB	S2,T3			;	  C
	MOVEI	S2,"N"			;
	IDPB	S2,T3			;	   N
	MOVEI	S2,"F"			;
	IDPB	S2,T3			;	    F"
SAVF.4:	DMOVEM	T1,SRNAM##		;store nodnam.CNF as default save file
	$RETT				;and return
;
;	*	*	*	SAVE	*	*	*	*	*
;
;
; Process SAVE command
;
SAVER::	$CALL	SETDFL##		;Make sure defaults are set
	MOVE	S1,VERSION##		;and this file
	MOVEM	S1,FILVER##		;has our version.
	$CALL	P$OFIL##		;Get FD from parser
	MOVEM	S1,SRFOB		;Put its addr in FOB
	MOVEI	S1,7			;Put byte-size
	MOVEM	S1,SRFOB+1		;  in FOB
	MOVEI	S1,2			;Length of FOB
	MOVEI	S2,SRFOB		;  and its address
	$CALL	F%OOPN			;Open save file for output
	JUMPF	[$TEXT ,<?Error opening save file>
		 $RETT]
	MOVEM	S1,SRIFN		;Save IFN
	MOVE	S2,[XWD <SAVLNW##*5>,DBBEG##] ;
	$CALL	F%OBUF
	JUMPF	[$TEXT ,<?Error writing save file>
		 JRST SAVR.1]
	MOVE	S1,SRIFN		;Get IFN
	SETO	S2,			; Flag for exact FD
	$CALL	F%FD			; Get it for printing
	$TEXT	,<[Configuration Saved On:  ^F/@S1/]>
	MOVE	S1,SRIFN		;Setup to close save file
SAVR.1:	$CALL	F%REL			;Close and release file
	JUMPF	[$TEXT ,<?Error closing save file>
		  SETZM SRIFN
		 $RETT]
	SETZM	SRIFN			;No longer in use
	SETZM	SAVDON##		;a SAVE has been done
	$RETT
SRIFN:	BLOCK	1			;This location must not be in the saved
					; area or nasty and generally bad things
					; will happen
SRFOB:	BLOCK	2			;SAVE/RESTORE FOB

	END