Google
 

Trailing-Edge - PDP-10 Archives - AP-4172F-BM - 3a-sources/setspd.mac
There are 33 other files named setspd.mac in the archive. Click here to see a list.
;<3A.UTILITIES>SETSPD.MAC.21,  4-Aug-78 13:13:02, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.20,  4-Aug-78 13:11:23, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.19,  3-Aug-78 17:12:20, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.18, 28-Jul-78 15:33:15, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.17, 27-Jul-78 14:41:21, EDIT BY MILLER
;INCREMENT EDIT NUMBER
;<3A.UTILITIES>SETSPD.MAC.16, 26-Jul-78 15:00:29, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.15, 16-May-78 09:21:33, EDIT BY MILLER
;<3A.UTILITIES>SETSPD.MAC.14, 16-May-78 09:19:58, EDIT BY MILLER
;<3A.UTILITIES>SETSPD.MAC.13, 16-May-78 09:17:32, EDIT BY MILLER
;AND CHANGE VERSION TO 3A
;<3A.UTILITIES>SETSPD.MAC.12, 16-May-78 09:16:35, EDIT BY MILLER
;ADD MINOR VERSION TO CONFIG NAME
;<1MCLEAN>SETSPD.MAC.17,  4-May-78 18:31:02, Edit by MCLEAN
;<1MCLEAN>SETSPD.MAC.16,  4-May-78 18:24:33, Edit by MCLEAN
;<1MCLEAN>SETSPD.MAC.15,  4-May-78 17:37:31, Edit by MCLEAN

;<1MCLEAN>SETSPD.MAC.14,  4-May-78 17:22:55, Edit by MCLEAN
;<1MCLEAN>SETSPD.MAC.13,  4-May-78 17:22:03, Edit by MCLEAN
;<1MCLEAN>SETSPD.MAC.12,  4-May-78 16:22:12, Edit by MCLEAN
;<1MCLEAN>SETSPD.MAC.11,  4-May-78 16:16:56, Edit by MCLEAN
;TCO 1880 ADD SLAVE TYPES TO MTALN JSYS
;<3A.UTILITIES>SETSPD.MAC.10,  7-Apr-78 00:41:18, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.9,  7-Apr-78 00:15:05, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.8,  7-Apr-78 00:13:21, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.7,  7-Apr-78 00:07:24, Edit by MCLEAN
;ADD HSB (HALT STATUS BLOCK) FOR KS10
;<3A.UTILITIES>SETSPD.MAC.6, 28-Feb-78 15:45:42, EDIT BY MILLER
;FIX NODNAM TO CHECK FOR EOL
;<3A.UTILITIES>SETSPD.MAC.5, 24-Feb-78 09:54:01, EDIT BY MILLER
;<3A.UTILITIES>SETSPD.MAC.4, 24-Feb-78 09:45:50, EDIT BY MILLER
;<3A.UTILITIES>SETSPD.MAC.3, 24-Feb-78 09:45:11, EDIT BY MILLER
;ADD NODE NUMBER TO NODE COMMAND
;<4.UTILITIES>SETSPD.MAC.2, 16-Dec-77 14:01:29, EDIT BY MILLER
;<4.UTILITIES>SETSPD.MAC.1, 16-Dec-77 13:56:02, EDIT BY MILLER
;TCO 1879. ADD NODE COMMAND
;<3-UTILITIES>SETSPD.MAC.16,  8-Nov-77 10:51:06, EDIT BY KIRSCHEN
;MORE COPYRIGHT UPDATING...
;<3-UTILITIES>SETSPD.MAC.15,  3-Nov-77 09:07:50, EDIT BY KIRSCHEN
;RECOVER IF BOUT TO ALIGN LPT FORMS FAILS
;<3-UTILITIES>SETSPD.MAC.14, 26-Oct-77 11:48:16, EDIT BY KIRSCHEN
;UPDATE COPYRIGHT FOR RELEASE 3
;<3-UTILITIES>SETSPD.MAC.13, 12-Oct-77 18:57:55, EDIT BY HURLEY
;ADDED THE COMMANDS TO ENABLE/DISABLE FULL LATENCY OPTIMIZATION
;<3-UTILITIES>SETSPD.MAC.12, 16-Aug-77 16:17:50, EDIT BY HURLEY
;<3-UTILITIES>SETSPD.MAC.11, 16-Aug-77 11:17:22, EDIT BY HURLEY
;ADD THE TERMINAL AUTO COMMAND
;<3-UTILITIES>SETSPD.MAC.10, 11-Aug-77 17:05:15, EDIT BY HURLEY
;MAKE SETSPD LOOKUP X-CONFIG WHERE X IS THE RELEASE NUMBER
;<3-UTILITIES>SETSPD.MAC.9, 11-Aug-77 09:21:45, EDIT BY HURLEY
;MAKE SETSPD LOOK ON SYSTEM: FOR CONFIG.CMD
;<3-UTILITIES>SETSPD.MAC.8,  3-Aug-77 00:05:43, EDIT BY CROSSLAND
;RESTORE HOST COMMAND
;<3-UTILITIES>SETSPD.MAC.7, 27-Jul-77 11:55:15, EDIT BY HURLEY
;<3-UTILITIES>SETSPD.MAC.6, 26-Jun-77 12:41:01, EDIT BY MILLER
;UNMAP DUMP PAGES AFTER ERROR
;<3-UTILITIES>SETSPD.MAC.5, 23-Jun-77 13:20:46, Edit by MACK
;TCO 1822 - DISABLE/ENABLE ACCOUNT VALIDATION
;<3-UTILITIES>SETSPD.MAC.4, 23-Jun-77 12:27:01, EDIT BY MILLER
;TCO 1686 AGGAIN. ADD ERJMP'S
;<3-UTILITIES>SETSPD.MAC.3, 23-Jun-77 11:35:38, EDIT BY KIRSCHEN
;TCO 1716 - ADD ENABLE/DISABLE DIRECTORY-PARAMETER-SETTING COMMANDS
;	ALSO REMOVE STRUCTURE COMMAND, NO LONGER APPLICABLE
;<3-UTILITIES>SETSPD.MAC.2, 25-May-77 13:53:35, EDIT BY KIRSCHEN
;TCO 1807 - ADD NOBELL OPTION TO THE TERMINAL COMMAND (SEE ALSO TCO 1802)
;<3-UTILITIES>SETSPD.MAC.1, 17-Jan-77 11:55:09, Edit by LCAMPBELL
;TCO 1714 - Fix LODANY to type error message if LPINI fails.
;<2-UTILITIES>SETSPD.MAC.14, 27-Dec-76 17:07:56, EDIT BY HURLEY
;<2-UTILITIES>SETSPD.MAC.13, 22-Dec-76 13:42:19, EDIT BY HURLEY
;<2-UTILITIES>SETSPD.MAC.12, 22-Dec-76 10:17:55, EDIT BY KIRSCHEN
;<2-UTILITIES>SETSPD.MAC.11, 20-Dec-76 12:19:25, EDIT BY KIRSCHEN
;TCO 1686 - MAKE SETSPD COPY DUMPS GREATER THAN 256 K
;<2-UTILITIES>SETSPD.MAC.10, 23-Nov-76 10:31:18, Edit by MACK
;<2-UTILITIES>SETSPD.MAC.9, 19-Nov-76 09:33:17, Edit by MACK
;TCO 1666 - MORE TIMEZONE EDITS
;<2-UTILITIES>SETSPD.MAC.8, 18-Nov-76 20:26:22, EDIT BY MILLER
;DISABLE CACHE REFILL CODE
;<2-UTILITIES>SETSPD.MAC.7, 16-Nov-76 11:32:27, Edit by MACK
;TCO 1666 - ADDED FUNCTIONS TO SET TIME ZONE AND ARPANET SITE ADDRESS
;<2-UTILITIES>SETSPD.MAC.4,  4-Nov-76 15:08:10, EDIT BY HURLEY
;TCO 1604- ADD CODE TO RESET TTY NO MSG BITS IN F.E.
;<2-UTILITIES>SETSPD.MAC.3, 25-Oct-76 17:27:57, EDIT BY HURLEY
;TAKE OUT CALL TO QUEBLK DURING NORMAL RUNNING OF SETSPD
;<2-UTILITIES>SETSPD.MAC.2, 21-Oct-76 14:56:33, Edit by MACK
;TCO 1615 - ADD ALTERNATE SETSPD ENTRY, START1:
;<2-UTILITIES>SETSPD.MAC.1,  2-Aug-76 14:12:05, EDIT BY KIRSCHEN
;TCO 1468 - ADD STRUCTURE COMMAND
;<1B-UTILITIES>SETSPD.MAC.8,  9-Jul-76 09:40:18, EDIT BY HURLEY
;INCREASED VERSION NUMBER FOR RELEASE 1B
;<1B-UTILITIES>SETSPD.MAC.7, 23-Jun-76 18:33:29, EDIT BY HURLEY
;<1B-UTILITIES>SETSPD.MAC.6, 16-Jun-76 16:26:47, EDIT BY MILLER
;TCO 1437. ADD SETSPD: TO ALL ERROR MESSAGES
;<1B-UTILITIES>SETSPD.MAC.5, 16-Jun-76 16:20:16, EDIT BY MILLER
;<1B-UTILITIES>SETSPD.MAC.4, 16-Jun-76 16:17:15, EDIT BY MILLER
;TCO 1435. IMPROVE ERROR MESSAGE FROM BAD DEFINE COMMAND
;<1B-UTILITIES>SETSPD.MAC.3, 16-Jun-76 16:04:45, EDIT BY MILLER
;TCO 1433. IMPROVE ERROR MESSAGE FOR RAM OR VFU LOAD ERROR
;<1B-UTILITIES>SETSPD.MAC.2, 23-MAY-76 10:58:55, EDIT BY HALL
;<1B-UTILITIES>SETSPD.MAC.1, 22-MAY-76 11:40:05, EDIT BY MILLER
;<1A-UTILITIES>SETSPD.MAC.69,  6-MAY-76 11:03:02, EDIT BY HURLEY
;<1A-UTILITIES>SETSPD.MAC.68,  6-MAY-76 10:45:25, EDIT BY HURLEY
;<1A-UTILITIES>SETSPD.MAC.65, 12-APR-76 10:46:11, EDIT BY MILLER
;TCO 1167 AGAIN. FIX OFF-LINE INTERRUPT
;<1A-UTILITIES>SETSPD.MAC.64,  8-APR-76 11:51:17, EDIT BY HURLEY
;TCO 1244 - ADD .DIRECT .XTABM FOR MACRO 50 ASSEMBLIES
;<1A-UTILITIES>SETSPD.MAC.63,  1-APR-76 18:37:26, EDIT BY HURLEY
;TCO # 1205 - SET PROTECTION OF <SYSTEM>DUMP.EXE TO 770000
;<1A-UTILITIES>SETSPD.MAC.62, 31-MAR-76 09:43:47, EDIT BY HURLEY
;TCO # 1227 - ADD TOPS-20 ENTRY VECTOR AND VERSION NUMBER
;<V-SOURCES>SETSPD.MAC.61, 27-MAR-76 12:22:23, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.60, 27-MAR-76 12:02:14, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.59, 27-MAR-76 12:01:37, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.58, 27-MAR-76 09:07:22, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.57, 27-MAR-76 09:05:33, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.56, 23-MAR-76 15:05:31, EDIT BY HURLEY
;TCO 1205 - MAKE PROTECTION OF DUMP.EXE BE 770000
;<V-SOURCES>SETSPD.MAC.55, 16-MAR-76 14:51:06, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.54, 15-MAR-76 14:12:49, EDIT BY MILLER
;TCO 1015. FIX UP CHFDB
;<V-SOURCES>SETSPD.MAC.53, 15-MAR-76 09:45:25, EDIT BY KIRSCHEN
;<V-SOURCES>SETSPD.MAC.52, 12-MAR-76 10:21:14, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.51, 12-MAR-76 10:13:48, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.50, 12-MAR-76 09:30:06, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.49, 11-MAR-76 19:29:33, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.48, 11-MAR-76 19:26:43, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.47, 11-MAR-76 19:25:48, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.46, 11-MAR-76 19:20:29, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.45, 11-MAR-76 19:16:49, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.44, 11-MAR-76 19:09:30, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.43, 11-MAR-76 12:37:59, EDIT BY KIRSCHEN
;<V-SOURCES>SETSPD.MAC.42, 11-MAR-76 09:22:07, EDIT BY KIRSCHEN
;<V-SOURCES>SETSPD.MAC.41, 10-MAR-76 21:35:51, EDIT BY KIRSCHEN
;<V-SOURCES>SETSPD.MAC.40,  9-MAR-76 13:24:00, EDIT BY KIRSCHEN
;<V-SOURCES>SETSPD.MAC.39,  9-MAR-76 13:23:16, EDIT BY KIRSCHEN
;TCO 1169 - CREATE DUMP.CPY FILES WITH PROTECTION 770000.
;<V-SOURCES>SETSPD.MAC.38,  9-MAR-76 09:53:58, EDIT BY KIRSCHEN
;TCO 1167 - ADD "PRINTER" COMMANDS TO INITIALIZE PRINTERS
;<V-SOURCES>SETSPD.MAC.37,  9-FEB-76 15:35:59, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.37,  9-FEB-76 15:00:02, EDIT BY MILLER
;MCO 1066. LOAD CACHE REFILL ALGORITHM
;<V-SOURCES>SETSPD.MAC.36,  6-FEB-76 14:16:17, EDIT BY MILLER
;MORE EDITS FOR MCO 15
;<V-SOURCES>SETSPD.MAC.35, 21-JAN-76 12:13:58, EDIT BY MILLER
;MCO # 15. SET RETENTION COUNT OF DUMP.CPY AND CHECK DBUGSW
;<V-SOURCES>SETSPD.MAC.34, 12-JAN-76 10:25:44, EDIT BY MILLER

	TITLE SETSPD



;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1976, 1977, 1978 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

	SEARCH MONSYM,MACSYM,SERCOD
	.REQUIRE SYS:MACREL,SERCOD
	SALL
	IFNDEF .PSECT,<
	.DIRECT .XTABM>

; VERSION NUMBER DEFINITIONS

VMAJOR==3		;MAJOR VERSION OF SETSPD
VMINOR==1		;MINOR VERSION NUMBER
VEDIT==7		;EDIT NUMBER
VWHO==0			;GROUP WHO LAST EDITED PROGRAM (0=DEC DEVELOPMENT)

VSTSPD== <VWHO>B2+<VMAJOR>B11+<VMINOR>B17+VEDIT

;THIS ROUTINE IS RUN BY THE MONITOR AT SYSTEM START UP AND SETS
;VARIOUS PARAMETERS ABOUT THE SYSTEM. PRESENTLY IT WILL SET:
;	1. LINE SPEEDS AND REMOTE CHARACTERSITICS
;
;	2. SYSTEM LOGICAL NAMES
;
;	3. READ THE PREVIOUS DUMP AND QUEUE UP ANY SYSERR BLOCKS
;		THAT DID NOT GET QUEUED UP BEFORE THE CRASH
;
;	4. SET MAGTAPE LOGICAL TO PHYSICAL CORRESPONDENCE
;
;	5. LOAD RAM AND VFU FILES FOR LINEPRINTERS
;
;	6. ENABLE DIRECTORY-PARAMETER-SETTING
;
;	7. SET LOCAL TIME ZONE
;
;	8. SET THIS SITE'S ARPANET ADDRESS
;
;	9. ENABLE ACCOUNT-VALIDATION

;LOCAL STORAGE

MTBLK:	3			;SIZE OF BLOCK
	BLOCK 2			;FOR OTHER ARGS
EOLF:	BLOCK 1
PDL:	BLOCK 20		;THE PDL
FILNAM:	BLOCK ^D28		;NAME OF RAM OR VFU FILE PUT HERE
LINES:	BLOCK 1			;WORD TO HOLD LINES
STRBLK:	BLOCK .MSSLN		;BLOCK FOR STRUCTURE COMMAND
HSBBUF:	BLOCK HS%LEN		;LENGTH OF HSB AND HEADER
SPDTBL==10000			;SPEED TABLE
REMTBL==20000			;REMOTE TABLE

	CPYPGS==^D10		;# OF PAGES TO COPY WITH EACH PMAP
	CPYWDS==CPYPGS_PGSFT	;NUMBER OF WORDS TO COPY
	PGSFT==11		;PAGE SHIFT VALUE
PG0PG==30			;PAGE 0 OF DUMP.EXE
	PG0ADR=PG0PG_PGSFT
TMPPG==31			;2 PAGES FOR TEMPORARY MAPPING
	TMPADR=TMPPG_PGSFT
DMPPG==40			;PAGE FOR MAPPING DUMP FILE
	DMPADR==DMPPG_PGSFT
CPYPG==DMPPG+CPYPGS		;PAGE FOR MAPPING COPY FILE
	CPYADR==CPYPG_PGSFT

;THE TEXTI ARG BLOCK

TEXT:	4
FLAGS:	RD%JFN!RD%PUN		;FLAGS
JFN:	0,,377777		;JFN'S
BUFPTR:	-1,,BUFFER		;BUFFER POINTER
COUNT:	SIZE			;SIZE OF BUFFER
SIZE==100
SIZEB==SIZE*5		;# OF BYTES IN BUFFER

BUFFER:	BLOCK SIZE		;WORK BUFFER

	RELOC 1000-140		;ALL THE REST IS PURE

;PROGRAM ENTRY VECTOR

ENTVEC:	JRST START		;STARTING LOCATION
	JRST START		;REENTER LOCATION
	VSTSPD			;VERSION NUMBER
	JRST START1		;ALTERNATE STARTING LOCATION

ENVLEN==.-ENTVEC		;ENTRY VECTOR LENGTH

;COMMAND TABLES:

;****************************************************************
;
;	WARNING!!!
;
;	THESE TABLES MUST BE KEPT IN ALPHABETICAL ORDER FOR TBLUK
;
;****************************************************************

LEV1TB:	ELEVL1-.-1,,ELEVL1-.-1
	XWD [ASCIZ /DEFINE/],DEFINE
	XWD [ASCIZ /DISABLE/],DISABL
	XWD [ASCIZ /ENABLE/],ENABLE
	XWD [ASCIZ /HOST/],HOST
	XWD [ASCIZ /MAGTAPE/],MAGTAP
	XWD [ASCIZ /NODE/],NODNAM
	XWD [ASCIZ /PRINTER/],LPTLOD
	XWD [ASCIZ /TERMINAL/],TERM
	XWD [ASCIZ /TIMEZONE/],TIMZON
ELEVL1:

;TABLE FOR TERMINAL CHARACTERISTICS

LEV2TB:	ELEVL2-.-1,,ELEVL2-.-1
	XWD [ASCIZ /AUTO-BAUD/],AUTO
	XWD [ASCIZ /NOBELL/],NOBELL
	XWD [ASCIZ /REMOTE/],REMOTE
	XWD [ASCIZ /SPEED/],SPEED
ELEVL2:

; TABLE OF OPTIONS FOR ENABLE COMMANDS

ENAOPT:	ENASIZ-1,,ENASIZ-1
	XWD [ASCIZ/ACCOUNT-VALIDATION/], ENACCT
	XWD [ASCIZ/DIRECTORY-PARAMETER-SETTING/], ENADIR
	XWD [ASCIZ/FULL-LATENCY-OPTIMIZATION/], ENAFLO

	ENASIZ==.-ENAOPT

; TABLE OF OPTIONS FOR DISBLE COMMANDS

DISOPT:	DISSIZ-1,,DISSIZ-1
	XWD [ASCIZ/ACCOUNT-VALIDATION/], DISACT
	XWD [ASCIZ/DIRECTORY-PARAMETER-SETTING/], DISDIR
	XWD [ASCIZ/FULL-LATENCY-OPTIMIZATION/], DISFLO

	DISSIZ==.-DISOPT

; TABLE OF OPTIONS FOR LOADING PRINTERS

LPTTAB:	LPTBSZ-1,,LPTBSZ-1
	XWD [ASCIZ /LOWERCASE/], .MOSTS
	XWD [ASCIZ /RAM/], .MOLTR
	XWD [ASCIZ /VFU/], .MOLVF

	LPTBSZ==.-LPTTAB

SLAVT:	SLVBSZ-1,,SLVBSZ-1
	XWD [ASCIZ /TU45/],.MTT45	;TU45
	XWD [ASCIZ /TU70/],.MTT70	;TU70
	XWD [ASCIZ /TU71/],.MTT71
	XWD [ASCIZ /TU72/],.MTT72	;TU72
	SLVBSZ==.-SLAVT
;DEFINE REGISTERS USED

A==1
B==2
C==3
D==4
T1=1
T2=2
T3=3
T4=4
Q1==5
Q2==6
Q3==7
P1==10
P2==11
P3==12
P4==13
P5==14
P==17

;USEFUL DEFINITIONS

OPDEF CALL [PUSHJ P,]
OPDEF RET [POPJ P,]

DEFSTR SEBSIZ,0,17,12		;POINTER TO SIZE FIELD IN SYSERR BLOCK
DEFSTR SEBERC,HSBBUF,8,9	;POINTER TO ERROR BLOCK IN SYSERR BLOCK

	SEBQOU=24		;ADDRESS OF POINTER TO SYSERR QUEUE
	SEBHED==2		;NUMBER OF HEADER WORDS IN SYSERR BLOCK

;DEFINE INTERRUPT SYSTEM TABLES

ADDR:	BLOCK 1
LEVTAB:	ADDR
CHNTAB:	1,,LPTINT

	DEFINE BCONFIG (R)  <
	IFE VMINOR,<ASCIZ /SYSTEM:'R'-CONFIG.CMD/>
	IFG VMINOR,<
	 DEFINE BSP (R1,LETT) <
		IRPC LETT,<
		IFE "A"-"'LETT'"+VMINOR-1,<
			ASCIZ /SYSTEM:'R1'LETT'-CONFIG.CMD/
			STOPI>
		>
		>
	BSP (\VMAJOR,"ABCDEFGHIJKLMNOPQRSTUVWXYZ")>
	>

RCONFG:	BCONFIG (\VMAJOR)
;THE CODE

START:	RESET			;GET TO A KNOWN STATE
	MOVEI A,.FHSLF		;GET OWN ID
	RPCAP			;READ CAPABILITES
	MOVE C,B		;ENABLE ALL CAPABILITIES
	EPCAP			;DO IT
	MOVE P,[IOWD 20,PDL]	;SET UP PUSH DOWN LIST
	MOVE B,[LEVTAB,,CHNTAB]	;DEFINE INT SYSTEM
	SIR
	MOVSI B,(1B0)		;ENABLE LPT CHANNEL
	AIC
	EIR			;TURN ON INTS

;NOW FIND THE COMMAND FILE

	MOVX A,GJ%SHT!GJ%OLD!GJ%PHY
	HRROI B,RCONFG		;SYSTEM:X-CONFIG.CMD
	GTJFN			;FIND THE FILE
	 JRST FINISH		;NOT THERE. GO DEFAULT EVERYTHING
	HRLM A,JFN		;STASH THE JFN IN THE TEXTI BLOCK
	MOVE B,[070000,,200000]	;READ ONLY
	OPENF			;GET IT
	 JRST [	MOVEI A,.PRIOU	;THE CTY NO DOUBT
		HRLOI B,.FHSLF	;THIS FORK
		SETZ C,		;NO FLAGS
		ERSTR		;OUTPUT SOMETHING
		 JFCL
		 JFCL
		JRST FINISH]	;AND GO DEFAULT EVERYTHING

;FOUND THE FILE. NOW PROCESS THE COMMANDS


CMND:	CALL PBLANK		;SKIP BLANKS
	 JRST .-1		;NULL LINE
	CAIE B,";"		;A COMMENT?
	CAIN B,"!"		;OR THIS TYPE
	JRST PURGE		;YES. SKIP ALL OF THE LINE
	MOVEI A,LEV1TB		;THE TABLE
	JRST GTKEY		;GO FIND AND DISPATCH ON KEY

;ALTERNATE SETSPD ENTRY

START1:	RESET			;GET TO A KNOWN STATE
	MOVEI A,.FHSLF		;GET OWN ID
	RPCAP			;READ CAPABILITIES
	MOVE C,B		;ENABLE ALL CAPABILITIES
	EPCAP			;DO IT
	MOVE P,[IOWD 20,PDL]	;SET UP PUSH DOWN LIST
	MOVE B,[LEVTAB,,CHNTAB]	;DEFINE INT SYSTEM
	SIR
	MOVSI B,(1B0)		;ENABLE LPT CHANNEL
	AIC
	EIR			;TURN ON INTERRUPTS
	CALL QUEBLK
	HALTF
;ROUTINE TO PURGE INVALID COMMAND

PURGE1:	HLRZ A,JFN
	BKJFN			;GO BACK ONE
	 JFCL
PURGE:	MOVX A,RD%BEL!RD%JFN	;FIND END OF COMMAND
	MOVEM A,FLAGS
	HRROI A,BUFFER		;WHERE TO PUT IT
	MOVEM A,BUFPTR
	MOVEI A,SIZEB		;SIZE OF BUFFER
	MOVEM A,COUNT		;TO THE ARG BLOCK
	MOVEI A,TEXT		;ARG BLOCK
	TEXTI			;PURGE THE COMMAND
	 JRST FINISH		;FILE SCREWED UP. GO FINISH UP
	MOVX A,RD%BTM		;CHECK FOR TERMINATOR FOUND
	TDNE A,FLAGS		;DID WE
	JRST CMND		;YES. GO TO NEXT COMMAND
	CALL SEEEOF		;SEE IF AT EOF
	 JRST PURGE		;NOT .CONTINUE PURGING
	JRST FINISH		;YES. ALL DONE

SEEEOF:	HLRZ A,JFN		;SEE IF AT EOF
	GTSTS			;GET STATUS
	TXNE B,GS%EOF		;AT EOF?
	AOS 0(P)		;YES
	RET			;RETURN

;ROUTINE TO SKIP BLANKS AND TABS
;WILL RETURN TERMINATING BYTE IN B

PBLANK:	HLRZ A,JFN
	BIN			;GET NEXT BYTE
	CAIN B,.CHLFD		;A LINE FEED?
	RET			;YES. TELL HIM EOL
	JUMPE B,[ CALL SEEEOF	;SEE IF EOF
		  JRST .+1	;NO
		 JRST FINISH]	;YES. BAD FILE
	CAIE B," "		;A BLANK
	CAIN B,"	"	;OR A TAB?
	JRST PBLANK		;YES. SKIP IT
	CAIN B,15		;A CR?
	JRST PBLANK		;YES. SKIP IT
	BKJFN
	 JFCL
	AOS (P)			;SKIP
	RET			;AND DONE
;CODE TO FIND THE NEXT KEY WORD IN THE COMMAND FILE AND DISPATCH
;TO THE ACTION ROUTINE. INPUT IS:
;	A/ ADDRESS OF TABLE


GTKEY:	PUSH P,A		;SAVE ARG
	MOVEI A,SIZEB		;SIZE OF BUFFER
	MOVEM A,COUNT		;TO ARG BLOCK
	HRROI A,BUFFER		;WHERE DATA IS GOING
	MOVEM A,BUFPTR
	MOVX A,RD%JFN!RD%PUN!RD%BEL ;FLAGS
	MOVEM A,FLAGS		;TO THE ARGS
	MOVEI A,TEXT		;ARG BLOCK
	TEXTI			;READ KEY VALUE
	 JRST FINISH		;FILE IS SCREWED UP. GO FINISH
	MOVX A,RD%BTM		;SEE IF FOUND TERMIANTOR
	TDNN A,FLAGS		;DID WE?
	JRST [	CALL SEEEOF	;NO. AT EOF?
		 JRST PURGE	;NO. SKIP REST OF LINE
		JRST FINISH]	;YES. DONE
	LDB A,BUFPTR		;GET TERMINATOR
	SETZM EOLF		;NOT AN EOL
	CAIN A,.CHLFD		;WAS IT A LINE FEED?
	SETOM EOLF		;YES. REMEMBER THIS

;FOUND KEY WORD. DO DISPATCH

	SETZ B,
	DPB B,BUFPTR		;TIE OFF STRING
	SKIPE EOLF		;AT END OF LINE?
	JRST [	MOVE A,BUFPTR	;YES
		BKJFN		;BACK UP BYTE POINTER
		 JFCL
		LDB C,A
		CAIN C,15	;A CR?
		DPB B,A		;YES. ZAP IT TOO
		JRST .+1]
	POP P,A			;TABLE
	HRROI B,BUFFER		;THE KEY WORD
	TBLUK			;LOOK UP THE ENTRY
	TXNN B,TL%ABR!TL%EXM	;GOT A GOOD MATCH?
	JRST [	SKIPE EOLF	;NO. FOUND EOL YET?
		JRST CMND	;SKIP IT
		JRST PURGE]	;GO PURGE
	HRRZ A,0(A)		;GET DISPACTH ADDRESS
	JRST 0(A)		;GO TO IT
;COMMAND LEVEL ACTION ROUTINES.

;FIRST TERMINAL

TERM:	SKIPE EOLF		;HAVE MORE ARGS?
	JRST CMND		;NO. IGNORE LINE
	CALL PBLANK		;SKIP BLANKS
	 JRST CMND		;FORGET IT

;NOW READ OUT THE LINE NUMBERS

	HLRZ A,JFN		;GET JFN
	MOVEI C,10		;READ NUMNER IN OCTAL
	NIN			;GET THE NUMBER
	 JRST PURGE1		;PURGE LINE
	HRLZM B,LINES		;SAVE FIST LINE NUMBER
	BKJFN			;READ OUT TERMINATOR AGAIN
	 JFCL
	BIN			;GET IT
	CAIN B,"-"		;SPECIFYING A RANGE?
	JRST GTRNGE		;YES. GET RANGE
	HLRS LINES		;EXTEND LINE NUMBER	
	JRST LINKEY		;GO GET THE KEY

GTRNGE:	NIN			;GET SECOND PART
	 JRST PURGE1		;PURGE BAD COMMAND
	HRRM B,LINES		;STASH LAST LINE NUMBER
	; ..
;NOW READ OUT THE KEY WORD

LINKEY:	HLRZ A,JFN
	BKJFN			;GET TERMINATOR
	 JFCL
	BIN			;""
	CAIN B,.CHLFD		;A LINE FEED?
	JRST LNKEY1		;YES. END OF THIS ONE
LNKEY:	CALL PBLANK		;SKIP BLANKS
	 JRST LNKEY1		;NO KEY WORDS
	SETZB P1,P2		;ASSUME IS REMOTE
	MOVEI A,LEV2TB		;KEY WORD
	JRST GTKEY		;GET KEY WORD

LNKEY1:	SETZB P1,P2		;NO KEYWORDS
	SETOM EOLF		;MARK THAT THE EOL WS SEEN
	JRST REMOTE		;GO SET THIS LINE UP

;IF HERE, LINES ARE REMOTE

AUTO:	TXOA P2,MO%AUT		;SET THE AUTO BUAD BIT
REMOTE:	TXO P2,MO%RMT		;SET THE REMOTE BIT
	HRRZ A,LINES		;GET FIRST LINE
	HLRZ B,LINES		;GET LAST LINE
	SUBI B,1(A)		;GET # TO DO
	HRLI A,0(B)		;AN AOBJN WORD
	HLR A,LINES		;FIRST LINE AGAIN
DOLINE:	SKIPN P1		;SETTING SPEED?
	IORM P2,REMTBL(A)	;SAY IT IS REMOTE
	SKIPE P1		;SETTING REMOTE?
	MOVEM P1,SPDTBL(A)	;NO. SET SPEED
	SKIPN SPDTBL(A)		;HAVE A SPEED YET?
	SKIPE EOLF		;NO, IS THIS THE END OF LINE?
	SKIPA			;YES, SET THE SPEED
	JRST REMOT1		;NO. GO ON UNITIL ONE APPEARS
	PUSH P,A		;SAVE LINES
	CALL SPDSET		;GO SET THE SPEED
	POP P,A			;RESTORE AOBJN WORD
REMOT1:	AOBJN A,DOLINE		;GO DO ALL OF THEM
	SKIPE EOLF		;FOUND AN EOF?
	JRST CMND		;YES. GO DO COMMAND
	JRST LNKEY		;NO
; HERE TO SET THE "IGNORE INPUT" (NO BELLS) BIT

NOBELL:	HRRZ D,LINES		;GET LAST LINE NUMBER
	HLRZ B,LINES		;GET FIRST LINE NUMBER
	SUBI B,1(D)		;FORM - NUMBER IN RANGE
	HRLI D,(B)		;FORM AN AOBJN POINTER TO LOOP
	HLR D,LINES		; OVER ALL THE LINES IN THE RANGE

NOBEL1:	MOVEI A,400000(D)	;GET LINE DESIGNATOR
	MOVX B,.MOSIG		;SET "IGNORE INPUT" BIT
	MOVX C,1		;TURN THE BIT ON
	MTOPR			;SET THE LINE TO IGNORE CHARACTERS UNTIL OPENED
	 ERJMP .+1		;IGNORE FAILURE HERE
	AOBJN D,NOBEL1		;LOOP OVER ALL THE LINES IN THE INDICATED RANGE
	JRST LNKEY		;GO GET THE NEXT KEYWORD IN THE COMMAND
;SET LINE SPEEDS

SPEED:	CALL PBLANK		;SKIP BLANKS
	 JRST CMND		;GIVE IT UP
	HLRZ A,JFN		;THE FILE
	MOVEI C,^D10		;GET SPEED IN DECIMAL
	NIN			;GET IT
	 JRST PURGE1		;GIVE UP
	HRRZ P1,B		;SAVE SPEED
	HRLI P1,400000(B)	;IN CASE NO MORE
	BKJFN			;LOOK AT TERMINATOR
	 JFCL
	BIN			;GET IT
	CAIN B,.CHLFD		;A LINE FEED?
	SETOM EOLF		;YES. REMEMBER THIS
	SKIPE EOLF
	JRST REMOTE		;GO DO IT
	CALL PBLANK		;GO FIND OTHER SPEED
	 JRST [	SETOM EOLF	;REMEMBER EOL
		JRST REMOTE]	;GO SET THE SPEED
	MOVEI C,^D10
	NIN			;READ THE BYTE
	 JRST PURGE1		;BLEW IT
	HRRI P1,0(B)		;SAVE OUTPUT SPEED
	BKJFN
	 JFCL
	BIN
	CAIN B,.CHLFD		;A LINE FEED?
	SETOM EOLF		;REMEMBER EOL

	JRST REMOTE		;GO SET SPEEDS
;ROUTINE TO SET SPEED OF A LINE.
;INPUT IS :	A/ LINE NUMBER

SPDSET:	MOVEI A,0(A)		;CLEAN UP ARG
	SKIPE REMTBL(A)		;THIS A REMOTE SETTING?
	JRST SPDST1		;YES. ALWAYS USE FILE SETTING
	MOVEI A,400000(A)	;GET TTY DESIGNATOR
	MOVEI B,.MORSP		;GET SPEED FROM MONITOR
	MTOPR			;GET IT
	ERJMP REMOT2		;?
	TRZ A,400000
	SKIPG C			;GET IT?
SPDST1:	MOVE C,SPDTBL(A)	;NO. USE FILE'S VALUE
	TLZ C,(1B0)		;GET RID OF SIGN BIT
	MOVEI B,.MOSPD		;SPEED SETTING
	IOR B,REMTBL(A)		;ADD IN THE REMOTE AND AUTO BITS (IF ANY)
	TRO A,400000		;TTY DESIGNATOR
	MTOPR			;DO IT
	 ERJMP REMOT2		;IGNORE ERROR
	MOVEI B,.MORNT		;REQ MSG SUPPRESS STATUS FROM
	MTOPR			;MONITOR FOR TTY (A/ TTY#)
	 ERJMP REMOT2		;IGNORE ERROR
	MOVEI B,.MOSNT		;SET MSG SUPPRESS BIT FOR TTY
	MTOPR			;SAME AS BEFORE
	 ERJMP REMOT2		;IGNORE ERROR
REMOT2:	RET			;ALL DONE

;ROUTINE TO APPLY DEFAULT SPEEDS AT EOF

FINISH:	MOVE A,[SIXBIT /TTYJOB/] ;FIRST FIND # OF TTY'S
	SYSGT			;GET IT
	HLLZ P3,B		;MAKE AOBJN POINTER
FIN1:	SKIPE SPDTBL(P3)	;THIS ONE SET YET?
	JRST FIN2		;YES. GO ON
	MOVEI A,0(P3)		;NO. GET LINE #
	MOVE B,[^D300,,^D300]	;DEFAULT SPEED
	MOVEM B,SPDTBL(A)	;STORE IT
	CALL SPDSET		;GO SET THE SPEED
FIN2:	AOBJN P3,FIN1		;DO ALL LINES
	CALL REFILL		;GO LOAD THE CACHE REFILL ALGORITHM
	HALTF			;AND DONE
;THIS CODE PROCESSES THE MAGTAPE CONFIGURATION COMMANDS. FORMAT
;OF A COMMAND LINE IS:
;	MAGTAPE "LUN" "SERIAL#" "SLAVE"

MAGTAP:	SKIPN EOLF		;AT EOL YET?
	CALL PBLANK		;NO. GET TO LUN THEN
	 JRST CMND		;NO MORE STUFF
	HLRZ A,JFN		;GET INPUT
	MOVEI C,10		;GET NUMBER IN OCTAL
	NIN			;GET LUN
	 JRST PURGE1		;BAD LINE
	MOVE P1,B		;SAVE LUN
	CALL PBLANK		;GET TO NEXT VALUE
	 JRST CMND		;BAD LINE. JUST GO SKIP IT
	MOVE D,P1		;RESOTRE LUN
	MOVEI C,12		;GET DECIMAL SERIAL NUMBER
	HLRZ A,JFN		;THE JFN
	NIN			;DO IT
	 JRST PURGE1		;BAD COMMAND
	HRRZ P2,B		;SAVE SERIAL NUMBER
	BKJFN			;LOOK FOR TERMINATOR
	HLRZ A,JFN		;READ A CHARACTER
	BIN			;GET IT
	CAIN B,.CHLFD		;LINEFEED?
	JRST MAGTP1		;YUP END
	CALL PBLANK		;REMOVE BLANKS
	JRST MAGTP1			;END OF COMMAND
	HRROI A,BUFFER		;READ REST
	MOVEM A,BUFPTR
	MOVEI A,SIZEB		;STORE SIZE
	MOVEM A,COUNT
	MOVX A,RD%JFN!RD%BEL!RD%PUN
	MOVEM A,FLAGS
	MOVEI A,TEXT		;FIND ARGUMENT
	TEXTI			;GET STRING
	JRST FINISH		;QUIT END OF FILE
	MOVX A,RD%BTM		;CHECK FOR CORRECT TERMINATION
	TDNN A,FLAGS
	JRST [CALL SEEEOF	;CHECK FOR EOF
		JRST PURGE
		JRST FINISH]	;DONE
	MOVE A,BUFPTR		;GET TERMINATOR
	LDB C,A			;GET TERMINATING CHARACTER
	CAIE C,.CHLFD		;LF?
	JRST MAGTP2
	BKJFN			;BACKUP OVER LF
	 JSERR			;UNEXPECTED ERROR
	MOVEM A,BUFPTR		;SAVE NEW STRING POINTER
MAGTP2:	SETZ A,			;STORE NUL
	DPB A,BUFPTR		;TERMINATE STRING
	MOVEI A,SLAVT		;GET SLAVE TABLE
	HRROI B,BUFFER		;CHECK FOR MATCH
	TBLUK
	TXNN B,TL%EXM!TL%ABR	;CORRECT MATCH?
	JRST [SKIPE EOLF	;NO AT END OFLINE?
		JRST CMND	;YES. GO ON TO NEXT ONE
		JRST PURGE1]	;NOPE PURGE JUNK
	HRL P1,(A)		;GET UNIT TYPE
MAGTP1:	MOVE A,P1		;SET LUN
	MOVE B,P2		;SET SERIAL #
	MTALN			;DO IT
	ERJMP [	HRROI A,[ASCIZ /
? SETSPD: COULD NOT SET MTA /]
		PSOUT
		MOVEI A,.PRIOU	;TO THE CTY
		EXCH B,D	;GET MTA, SAVE SERIAL #
		MOVEI C,10	;IN OCTAL
		NOUT		;DO IT
		 JFCL
		HRROI A,[ASCIZ / SERIAL # /]
		PSOUT
		MOVEI A,.PRIOU
		MOVE B,D
		MOVEI C,12
		NOUT		;OUPUT THE SERIAL # AS WELL
		 JFCL
		JRST .+1]	;AND DONE
	JRST PURGE1		;GO SYNCH LINE
; ENABLE COMMAND

DISABL:	TDZA P1,P1		;MARK THAT THIS IS A DISABLE COMMAND
ENABLE:	SETOM P1		;MARK THAT THIS IS AN ENABLE COMMAND
	SKIPE EOLF		;AT END OF COMMAND ?
	JRST CMND		;YES, GO GET NEXT LINE
	CALL PBLANK		;SKIP BLANKS
	 JRST CMND		;PUNT
	HRROI A,BUFFER		;WHERE TO STASH IT
	MOVEM A,BUFPTR		;TO THE ARG BLOCK
	MOVEI A,SIZEB		;THE SIZE OF IT
	MOVEM A,COUNT		;TO THE BLOCK
	MOVX A,RD%JFN!RD%BEL
	MOVEM A,FLAGS		;TO ARG BLOCK
	MOVEI A,TEXT		;THE ARG BLOCK
	TEXTI			;GET DEFINITION
	 JRST FINISH		;FILE IS SCREWED UP
	MOVX A,RD%BTM		;SEE IF PROPERLY TERMINATED
	TDNN A,FLAGS		;IS IT?
	JRST [	CALL SEEEOF	;NO. SEE IF EOF THEN
		 JRST PURGE	;NOT. DO MORE PURGING
		JRST FINISH]	;YES. ALL DONE
	MOVE A,BUFPTR		;GET BYTE POINTER
	LDB C,A			;GET TERMINATING CHARACTER
	CAIE C,.CHLFD		;TERMINATED BY A LINE FEED ?
	JRST ENA010		;NO, GO ON
	BKJFN			;YES, BACK UP TO CARRIAGE RETURN
	 JSERR			;UNEXPECTED ERROR
	MOVEM A,BUFPTR		;SAVE NEW POINTER TO TERMINATOR
ENA010:	MOVEI A,.CHNUL		;GET A NULL
	DPB A,BUFPTR		;TERMINATE STRING
	MOVEI A,ENAOPT		;GET ADDRESS OF OPTION TABLE
	SKIPL P1		;IS THIS AN ENABLE COMMAND ?
	MOVEI A,DISOPT		;NO, USE DISABLE OPTION TABLE
	HRROI B,BUFFER		;GET POINTER TO OPTION REQUESTED
	TBLUK			;FIND OPTION IN TABLE
	TXNN B,TL%EXM!TL%ABR	;FOUND A MATCH ?
	JRST [	SKIPE EOLF	;NO, AT END OF LINE ?
		JRST CMND	;YES, GO ON TO NEXT COMMAND
		JRST PURGE1 ]	;NO, IGNORE REMAINDER OF LINE
	HRRZ A,(A)		;GET ADDRESS OF PROCESSING ROUTINE
	CALL (A)		;GO PERFORM INDICATED FUNCTION
	SKIPE EOLF		;AT END OF LINE YET ?
	JRST CMND		;YES, GO ON TO  NEXT COMMAND
	JRST PURGE1		;NO, IGNORE REMAINDER OF LINE

; HERE TO PERMIT CHANGING DIRECTORY PARAMETERS

DISDIR:	TDZA B,B		;TURN OFF THE PARAMETER
ENADIR:	MOVEI B,1		;TURN ON THE OPTION
	MOVEI A,.SFCRD		;GET FUNCTION CODE
	SMON			;TELL THE MONITOR
	RET			;RETURN
; HERE TO ENABLE ACCOUNT VALIDATION

DISACT:	TDZA B,B		;TURN OFF ACCOUNT VALIDATION
ENACCT:	MOVEI B,1		;TURN ON ACCOUNT VALIDATION
	MOVEI A,.SFAVR		;GET THE FUNCTION CODE
	SMON			;TELL THE MONITOR
	RET			;RETURN


DISFLO:	TDZA B,B		;TURN OFF FULL LATENCY OPTIMIZATION
ENAFLO:	MOVEI B,1		;TURN ON FULL LATENCY OPTIMIZATION
	MOVEI A,.SFFLO		;GET THE SMON FUNCTION CODE
	SMON			;SET THE DESIRED STATE
	RET			;AND RETURN
;DEFINE A LOGICAL NAME

DEFINE:	SKIPE EOLF		;AT EOL?
	JRST CMND		;YES. GET NEXT COMMAND
	CALL PBLANK		;GO FIND LOGICAL NAME
	 JRST CMND		;NO ARGS
	HRROI A,BUFFER		;WHERE TO STASH IT
	MOVEM A,BUFPTR		;TO THE ARG BLOCK
	MOVEI A,SIZEB		;THE SIZE OF IT
	MOVEM A,COUNT		;TO THE BLOCK
	MOVX A,RD%JFN!RD%PUN!RD%BEL
	MOVEM A,FLAGS		;TO ARG BLOCK
	MOVEI A,TEXT		;THE ARG BLOCK
	TEXTI			;GET DEFINITION
	 JRST FINISH		;FILE IS SCREWED UP
	MOVX A,RD%BTM		;SEE IF PROPERLY TERMINATED
	TDNN A,FLAGS		;IS IT?
	JRST [	CALL SEEEOF	;NO. SEE IF EOF THEN
		 JRST PURGE	;NOT. DO MORE PURGING
		JRST FINISH]	;YES. ALL DONE
	LDB A,BUFPTR		;LOOK AT TERMINATER
	CAIN A,.CHLFD		;A LINE FEED?
	JRST CMND		;YES. NOTHING TO DEFINE THEN
	SETZ A,			;GET RID OF THE TERMINATER
	DPB A,BUFPTR		;TIE IT OFF
	CALL PBLANK		;GET TO DEFINITION
	 JRST CMND		;NOTHING TO DEFINE
	PUSH P,BUFPTR		;SAVE START OF DEFINITION
	MOVX A,RD%JFN!RD%BEL	;GET REST OF COMMAND
	MOVEM A,FLAGS
	MOVEI A,TEXT		;THE BLOCK
	TEXTI			;GOBBLE DOWN THE DEFINITION
	 JRST FINISH		;BAD FILE
	POP P,C			;THE DEFINITION
	MOVX A,RD%BTM		;SEE IF PROPERLY TERMINATED
	TDNN A,FLAGS		;IS IT?
	JRST [	CALL SEEEOF	;NO. SEE IF EOF
		 JRST PURGE	;NOT. ILLEGAL THEN
		JRST FINISH]	;IS. ALL DONE
	HRROI B,BUFFER		;THE LOGICAL NAME
	MOVEI A,.CLNSY		;CREATE A SYSTEM NAME
	CRLNM			;DO IT
	 JRST [	TMSG <
? SETSPD: FAILED TO DEFINE LOGICAL NAME >
		HRROI A,BUFFER	;GET NAME
		PSOUT		;OUTPUT IT
		TMSG < BECAUSE:
>				;AND A REASON
		MOVEI A,.PRIOU	;THE OUTPUT PLACE
		HRLOI B,.FHSLF	;US
		SETZ C,
		ERSTR		;OUTPUT THE MESSAGE
		 JFCL
		 JFCL
		JRST CMND]	;GO DO MORE
	JRST CMND		;GO DO MORE

;SET LOCAL TIME ZONE; IT MUST BE A NUMBER FROM -12 TO 12

TIMZON:	SKIPN EOLF		;GET TO THE ARGUMENT
	CALL PBLANK		; ...
	JRST CMND		;NONE THERE
	HLRZ A,JFN		;NOW READ A NUMBER FOR THE TIMEZONE
	MOVEI C,12		; IN DECIMAL
	NIN
	 JRST PURGE1		;NOT A GOOD ARGUMENT
	MOVM D,B		;CHECK IT FOR RANGE
	CAILE D,^D12		;MUST BE FROM -12 TO 12 DECIMAL
	 JRST [ TMSG <
? setspd: illegal time zone value
		>
		JRST PURGE1]	;GO RE-SYNCH LINE
	MOVEI A,.SFTMZ		;SET TIME ZONE
	SMON			;ARGUMENT IN B
	 ERJMP TZERR
	JRST PURGE1		;SUCCESS, ON TO NEXT COMMAND

;ATTEMPT TO SET TIME ZONE FAILED

TZERR:	TMSG <
? setspd: unable to set time zone because:
	>
GENERR:	MOVEI A,.PRIOU		;TYPE OUT MONITOR ERROR
	HRLOI B,.FHSLF		; FOR THIS FORK
	ERSTR
	 JFCL
	 JFCL
	JRST PURGE1		;ON TO NEXT LINE

;SET LOCAL HOST NUMBER OF AN ARPANET SITE

HOST:	SKIPN EOLF		;GET TO THE ARGUMENT
	CALL PBLANK		; ...
	 JRST CMND		;NONE THERE
	HLRZ A,JFN		;READ A NUMBER FOR THE SITE ADDRESS
	MOVEI C,10		; IN OCTAL
	NIN
	 JRST PURGE1		;NOT A GOOD ARGUMENT
	MOVEI A,.SFLHN		;SET LOCAL HOST NUMBER
	SMON
	 ERJMP HSTERR		;FAILED?
	JRST PURGE1		;NO, ON TO NEXT COMMAND

HSTERR: TMSG <
? setspd: unable to set arpanet site address because:
	>
	JRST GENERR
;COMMAND TO DECLARE DECNET NODE NAME

NODNAM:	SKIPE EOLF		;AT THE END-OF-COMMAND?
NODNA1:	JRST [	TMSG <
?SETSPD: Invalid name given for NODE command
>
		JRST PURGE1]	;AND DO IT AGAIN
	CALL PBLANK		;SKIP BLANKS
	 JRST NODNA1		;ERROR
	MOVEI A,SIZEB		;SIZE OF BUFFER
	MOVEM A,COUNT
	HRROI A,BUFFER		;WHERE NAME WILL GO
	MOVEM A,BUFPTR		;TO ARG BLOCK
	MOVX A,RD%JFN!RD%PUN!RD%BEL!RD%CRF ;FLAGS
	MOVEM A,FLAGS
	MOVEI A,TEXT		;ARG BLOCK
	TEXTI			;GET NAME
	 JRST FINISH		;FILE IS BAD. GO WRAP UP
	MOVX A,RD%BTM		;SEE IF FOUND TERMINATOR
	TDNN A,FLAGS		;DID WE?
	JRST NODNA1		;NO. ERROR THEN
	LDB A,BUFPTR		;GET TERMINATOR?
	CAIN A,.CHLFD		;EOL?
	SETOM EOLF		;YES. REMEMBER THIS
	MOVEI A,.CHNUL		;GET A NULL
	DPB A,BUFPTR		;ZAP POINTER
	SKIPN EOLF		;AT EOL?
	CALL PBLANK		;SKIP TO NEXT FIELD
	 JRST [	SETZM D		;AT THE END. DON'T SET NUMBER
		JRST NODNA2]
	HLRZ A,JFN		;GET FILE JFN
	MOVEI C,12		;GET OCTAL NUMBER
	NIN			;""
NODNA3:	 JRST [	TMSG <
?SETSPD: Illegal node number in NODE command
>
		JRST PURGE1]	;SKIP REMAINDER OF COMMAND
	MOVE D,B		;SAVE NUMBER
NODNA2:	MOVEI A,.NDSLN		;WANT TO SET NODE NAME
	MOVEI B,C		;ARG BLOCK
	HRROI C,BUFFER		;WHERE NAME IS
	NODE			;DO IT
	 ERJMP NODNA1		;IF FAILED, GO AWAY
	JUMPE D,PURGE1		;IF NO NUMBER, GO ON
	MOVEI A,.NDSNM		;SET NODE NUMBER
	MOVEI B,D		;WHERE THE NUMBER IS
	NODE			;SET IT
	 ERJMP NODNA3		;BAD!!
	JRST PURGE1		;NAME IS SET
; ROUTINE TO LOAD A RAM OR VFU

LPTLOD:	SKIPE EOLF		;AT END-OF-COMMAND ?
	JRST CMND		;YES, GO GET NEXT LINE
	CALL PBLANK		;SKIP BLANKS
	 JRST CMND		;PUNT

; READ LPT UNIT NUMBER FROM FILE

	STKVAR <LODUNI,LODFNC,LODJFN,LODLCP,LPTJFN>
	SETZM LODJFN		;INIT THIS TO ZERO
	SETZM LODLCP		;ASSUME PRINTER IS NOT LOWER CASE
	HLRZ A,JFN		;GET JFN OF FILE TO READ
	MOVEI C,^D8		;USE OCTAL FOR UNIT NUMBER
	NIN			;INPUT THE PRINTER UNIT NUMBER
	 JRST PURGE1		;ERROR, IGNORE REMAINDER OF LINE
	MOVEM B,LODUNI		;SAVE LPT UNIT NUMBER

; SEE IF RAM OR VFU IS TO BE LOADED

LPLD20:	CALL PBLANK		;SKIP BLANKS
	 JRST PURGE1		;NO MORE ARGS, IGNORE REST OF LINE
	MOVEI A,SIZEB		;SIZE OF BUFFER
	MOVEM A,COUNT		;TO ARG BLOCK
	HRROI A,BUFFER		;WHERE DATA IS GOING
	MOVEM A,BUFPTR
	MOVX A,RD%JFN!RD%PUN!RD%BEL ;FLAGS
	MOVEM A,FLAGS		;TO THE ARGS
	MOVEI A,TEXT		;ARG BLOCK
	TEXTI			;READ KEY VALUE
	 JRST FINISH		;FILE IS SCREWED UP. GO FINISH
	MOVX A,RD%BTM		;SEE IF FOUND TERMIANTOR
	TDNN A,FLAGS		;DID WE?
	JRST [	CALL SEEEOF	;NO. AT EOF?
		 JRST PURGE	;NO. SKIP REST OF LINE
		JRST FINISH]	;YES. DONE
	LDB A,BUFPTR		;GET TERMINATOR
	SETZM EOLF		;NOT AN EOL
	CAIN A,.CHLFD		;WAS IT A LINE FEED?
	SETOM EOLF		;YES. REMEMBER THIS
	;..
	;..

	MOVEI A,.CHNUL		;GET A NULL CHARACTER
	DPB A,BUFPTR		;TERMINATE KEYWORD WITH A NULL
	MOVEI A,LPTTAB		;GET ADDRESS OF TABLE OF OPTIONS
	HRROI B,BUFFER		;GET POINTER TO TEXT ARGUMENT IN FILE
	TBLUK			;LOOK FOR OPTION SPECIFIED
	TXNN T2,TL%EXM!TL%ABR	;FOUND A MATCH ?
	JRST [	SKIPE EOLF	;NO, HAS END-OF-LINE BEEN SEEN ?
		JRST CMND	;YES, GO DO NEXT COMMAND
		JRST PURGE1 ]	;NO, IGNORE REMAINDER OF LINE
	HRRZ A,(A)		;GET FUNCTION TO PERFORM
	CAIN A,.MOSTS		;SET STATUS FUNCTION (DECLARE LOWER CASE LPT) ?
	JRST [	SETOM LODLCP	;YES, FLAG THAT PRINTER SHOULD BE LOWER CASE
		JRST LPLD20 ]	;GO GET NEXT ARGUMENT
	MOVEM A,LODFNC		;SAVE DESIRED FUNCTION (MTOPR CODE)

; READ FILENAME TO BE LOADED AND GET A JFN FOR IT

	CALL PBLANK		;SKIP ANY BLANKS
	 JRST PURGE1		;NO MORE DATA
	MOVX T1,GJ%SHT!GJ%FNS!GJ%OLD ;EXISTING FILE, PHYSICAL ONLY
	HLLZ T2,JFN		;GET JFN OF FILE TO READ NAME FROM
	HRRI T2,.NULIO		;NO EDITING OUTPUT JFN
	GTJFN			;GET A JFN FOR FILE TO BE LOADED
	 JRST LODERR		;FAILED
	MOVEM A,LODJFN		;SAVE JFN
	HLRZ A,JFN		;GET JFN FOR COMMAND FILE
	BKJFN			;BACK UP ONE CHARACTER
	 JFCL			;IGNORE ERRORS
	BIN			;GET LAST CHARACTER READ
	CAIN B,.CHLFD		;READ AN END-OF-LINE ?
	SETOM EOLF		;YES, INDICATE EOL SEEN
; OPEN THE PRINTER AND VERIFY THAT NO RAM OR VFU IS NOW LOADED

	HRROI A,FILNAM		;GET POINTER TO WHERE DEVICE STRING GOES
	MOVSI B,600007		;GET LPT DEVICE DESIGNATOR
	HRR B,LODUNI		;GET UNIT NUMBER
	DEVST			;GET DEVICE NAME STRING
	 JRST LODERR		;FAILED 
	MOVEI B,":"		;GET TERMINATOR FOR GTJFN
	IDPB B,A		;TERMINATE DEVICE NAME
	SETZ B,
	IDPB B,A		;TIE IT OFF
	MOVX A,GJ%SHT!GJ%FOU	;SHORT CALL, FOR OUTPUT USE
	HRROI B,FILNAM		;GET POINTER TO DEVICE NAME
	GTJFN			;GET A JFN FOR THE PRINTER
	 JRST ENDLPT		;ALREADY ASSIGNED
	MOVEM A,LPTJFN		;SAVE LPT JFN
	MOVX B,<FLD(7,OF%BSZ)+OF%WR> ;OPEN FOR WRITE
	OPENF			;OPEN THE PRINTER
	 JRST [	EXCH A,LPTJFN	;MUST BE OPEN ALREADY, GET BACK JFN
		RLJFN		;RELEASE THE JFN
		 JFCL		;IGNORE ERRORS HERE
		MOVE A,LPTJFN	;GET BACK ERROR CODE
		CAIE A,OPNX9	;ALREADY OPENED BY SOMEONE?
		JRST LODANY	;NO. LOAD ANYWAY
		JRST ENDLPT ]	;GO ON TO NEXT COMMAND
	MOVEI B,.MOPSI		;GET OFF-LINE INTS
	MOVEI C,P1		;SET UP ARGS IN REGISTERS
	MOVEI P1,3		;3 WORDS
	SETZB P2,P3		;CHANNEL 0, NO FLAGS
	MTOPR			;DO IT
	ERJMP .+1		;IN CASE SOMETHING TERRIBLE HAPPENED
	GDSTS			;GET CURRENT STATUS
	TXZ B,MO%LVU!MO%LCP!MO%EOF ;TURN OFF CONDITION BITS
	JUMPN B,INERR		;IF AN ERROR, PUNT IT
	MOVEI B,14		;IF NO ERROR, ALIGN FORMS
	BOUT			;DO IT
	 ERJMP .+1		;IGNORE FAILURE
INERR:	DMOVE B,[-1,,FILNAM
		5*^D28]		;ARGS
	DMOVEM B,MTBLK+1	;TO ARG BLOCK
	MOVE C,LODFNC		;GET FUNCTION TO PERFORM
	MOVX B,.MORTR		;GET READ-RAM FUNCTION CODE
	CAIE C,.MOLTR		;ARE WE LOADING THE RAM ?
	MOVX B,.MORVF		;NO, GET READ-VFU FUNTION
	MOVEI C,MTBLK		;GET ADDRESS OF BLOCK
	SETZM FILNAM		;MAKE IT LOOK AS IF IT IS NOT LOADED
	MTOPR			;READ FILENAME ALREADY LOADED
	 ERJMP .+1		;UNEXPECTED ERROR. LOAD RAM ANYWAY
	MOVE A,LPTJFN		;GET JFN FOR PRINTER
	CLOSF			;CLOSE THE FILE
FCLOSE:	 JRST [	MOVE A,LPTJFN	;FAILED. GET JFN AGAIN
		TXO A,CZ%ABT	;DO IT NOW WITH ABORT
		CLOSF		;DO IT
		 JFCL		;HAS TO WORK
		JRST .+1]	;ALL DONE
	LDB A,[POINT 7,FILNAM,6] ;GET FIRST BYTE RETURNED
	JUMPN A,ENDLPT		;IF NOT-NULL, GO ON TO NEXT COMMAND

; GET JFN, FUNCTION, AND UNIT # AND LOAD THE RAM OR VFU

LODANY:	MOVE B,LODFNC		;GET FUNCTION TO BE PERFORMED
	MOVE A,LODJFN
	MOVE C,LODUNI		;GET UNIT NUMBER OF PRINTER
	SKIPE LODLCP		;IS THIS PRINTER LOWER CASE ?
	TXO B,MO%LCP		;YES, MARK THAT PRINTER IS LOWER CASE
	LPINI			;LOAD RAM OR VFU
	 ERJMP LODERR		;ERROR - TELL SOMEONE

; HERE TO FINISH UP AND GO DO NEXT COMMAND

ENDLPT:	MOVE P,[IOWD 20,PDL]	;RESET STACK
	SKIPE EOLF		;AT END OF COMMAND YET ?
	JRST CMND		;YES, GO DO NEXT COMMAND
	JRST PURGE1		;NO, IGNORE REST OF LINE
; HERE ON AN ERROR LOADING THE RAM OR VFU

LODERR:	TMSG <
? SETSPD: Could not load the >
	HRROI A,[ASCIZ/VFU/]	;GET TEXT
	MOVE B,LODFNC		;GET FUNCTION BEING PERFORMED
	CAIE B,.MOLVF		;ARE WE LOADING THE VFU ?
	HRROI A,[ASCIZ/RAM/]	;NO, GET RAM TEXT
	PSOUT			;TELL USER WHAT WE ARE LOADING
	TMSG < for PLPT>	;GET UNIT NAME
	MOVEI A,.PRIOU		;GET PRIMARY OUTPUT JFN
	MOVE B,LODUNI		;GET UNIT NUMBER
	MOVEI C,^D8		;GET OCTAL RADIX
	NOUT			;OUTPUT THE UNIT NUMBER
	 JFCL			;IGNORE ERRORS HERE
	TMSG <
>				;END OF MESSAGE
	SKIPE A,LODJFN		;GET JFN FOR FILE TO HAVE BEEN LOADED
	CLOSF			;MAKE SURE IT IS REALLY CLOSED AND RELEASED
	 JFCL			;PROBABLY CLOSED BY MONITOR ALREADY ANYHOW
	JRST ENDLPT		;GO FINISH UP

;LPT OFF-LINE INTERRUPT ROUTINE

LPTINT:	MOVEI A,@FCLOSE		;REDIRECT CODE TO CLOSE AND ABORT DEVICE
	MOVEM A,ADDR		;ZAP THE OLD PC WORD
	DEBRK			;AND GO FINISH UP
;ROUTINE TO PULL ANY UNQUEUED SYSERR BLOCKS OUT OF THE CRASH DUMP
;  AND QUEUE THEM UP TO SYSERR

QUEBLK:
;	SAVEP
	MOVE T1,[SIXBIT /DBUGSW/] ;CHECK ON STATE OF SYSTEM
	SYSGT			;READ DBUGSW
	SKIPE T2		;FOUND IT?
	CAIGE T1,2		;YES. IS IT STAND-ALONE?
	SKIPA			;NO. DO THE DUMP
	RET			;YES. DON'T DO ANYTHING
	TRVAR <QUEJFN,QUEFRK,QUEPGS>
	SETZ T1,		;GET A FORK TO LOAD DUMP.EXE INTO
	CFORK
	 RET			;COULD NOT GET A FORK, SO JUST EXIT
	MOVEM T1,QUEFRK		;SAVE FORK HANDLE
	MOVX T1,GJ%OLD!GJ%SHT	;GET A JFN FOR <SYSTEM>DUMP.EXE
	HRROI T2,[ASCIZ/PS:<SYSTEM>DUMP.EXE/]
	GTJFN
	 JRST QUEKFK		;NO DUMP FILE, NOTHING TO DO
	MOVEM T1,QUEJFN		;SAVE JFN
	MOVE T2,[440000,,OF%RD!OF%WR!OF%THW]
	OPENF			;OPEN THE FILE FOR READ/WRITE THAWED
	 JRST [	MOVE T1,QUEJFN	;FAILED, CLEAN UP
		RLJFN
		 JFCL
		JRST QUEKFK]
	HRLI T1,.FBPRT		;SET THE PROTECTION OF DUMP.EXE TO 770000
	MOVEI T2,-1		;RIGHT HALF PROTECTION BITS
	MOVEI T3,770000		;MUCHO PROTECTION
	CHFDB			;THIS FILE MUST BE PROTECTED FOR SECURITY
	 ERJMP .+1
	HRLZ T1,QUEJFN		;NOW MAP IN DIR PAGE
	MOVE T2,[.FHSLF,,PG0PG]
	MOVX T3,PM%RD!PM%WT	;READ AND WRITE
	PMAP
	HRRZ T1,PG0ADR		;GET LENGTH OF DIRECTORY BLOCK
	HRRZ T2,PG0ADR-2(T1)	;GET STARTING FILE PAGE # OF LAST GROUP
	HLRZ T3,PG0ADR-1(T1)	;GET HALFWORD CONTAINING REPEAT COUNT
	LSH T3,-9		;RIGHT JUSTIFY REPEAT COUNT
	ADD T2,T3		;COMPUTE # OF FILE PAGES TO MAP
	MOVEM T2,QUEPGS		;SAVE PAGE NUMBER
	HRRZ T1,PG0ADR		;GET LENGTH OF HEADER BLOCK OF DIR
	HLRZ T2,PG0ADR(T1)	;GET CODE OF NEXT BLOCK
	CAIE T2,1775		;ENTRY VECTOR?
	JRST QUEDON		;NO, GIVE UP
	HRRZ T2,PG0ADR(T1)	;GET LENGTH
	CAIGE T2,4		;CORRECT LENGTH?
	JRST QUEDON		;NO, GIVE UP
	SKIPE PG0ADR+3(T1)	;ALREADY LOOKED AT THIS DUMP?
	JRST QUEDON		;YES, GIVE UP
	SETOM PG0ADR+3(T1)	;NO, MARK THAT WE HAVE NOW SEEN IT
	SETO T1,		;AND UNMAP THE PAGE
	MOVE T2,[.FHSLF,,PG0PG]
	SETZ T3,
	PMAP
	HRRZ T1,QUEJFN		;GET JFN OF ORIGINAL DUMP FILE
	MOVE T2,QUEPGS		;GET HIGHEST PAGE NUMBER TO COPY
	CALL CPYDMP		;GO COPY THE DUMP