;<EXEC>X4CMD.MAC;35    16-DEC-75 16:57:30    EDIT BY PLUMMER
;1.54
;MAKE .OFFLI AND .ONLIN CHECK THROUGH 1 MILLION WORDS

;<EXEC>X4CMD.MAC;33    25-SEP-75 10:04:46    EDIT BY PLUMMER
;<EXEC>X4CMD.MAC;32    22-SEP-75 10:23:22    EDIT BY PLUMMER
; WARN OF SHUTDOWN ALREADY IN PROGRESS IN HALT
; BY SUBCOMMAND TO HALT
;<EXEC>X4CMD.MAC;27    16-SEP-75 13:55:27    EDIT BY PLUMMER
; PARC CHANGES... REMINDERS IN CREATE, REDO ^EINIT
;<EXEC>X4CMD.MAC;26    10-APR-75 12:21:56    EDIT BY PLUMMER
; ALLOW PASSWORD INPUT WHEN NOT REQUIRED IN "ENABLE"
;<EXEC>X4CMD.MAC;24    28-MAR-75 13:55:44    EDIT BY PLUMMER
; SUPPRESS PRINTING OF HASHED PASSWORDS
;<EXEC>X4CMD.MAC;23    26-MAR-75 13:32:05    EDIT BY PLUMMER
; ADD "ABSOLUTE SOCKET" CAPABILITY
;<EXEC>X4CMD.MAC;22    17-MAR-75 11:39:18    EDIT BY PLUMMER
; CHANGE ..DIRE TO ...DIR
;<EXEC>X4CMD.MAC;21    17-MAR-75 10:49:17    EDIT BY PLUMMER
; RESET BECOMES $RESET FOR MACRO 50
;<EXEC>X4CMD.MAC;20     4-MAR-75 17:31:28    EDIT BY PLUMMER
;^E LIMIT CAPABILITES
;<EXEC>X4CMD.MAC;13    21-JAN-75 11:04:11    EDIT BY PLUMMER
; MAKE "KFACT" LEFT JUSTIFIED
;<EXEC>X4CMD.MAC;12     2-JAN-75 12:25:57    EDIT BY PLUMMER

;1.53
;<EXEC>X4CMD.MAC;11    31-DEC-74 10:33:36    EDIT BY PLUMMER
; FIX DATE COMPARE AT CHKDA4+ (PARC)
;<EXEC>X4CMD.MAC;10    18-DEC-74 13:05:58    EDIT BY PLUMMER
; MORE OPRFN'S
; OPRFNS
;<EXEC>X4CMD.MAC;2    12-DEC-74 13:49:02    EDIT BY PLUMMER
; GATHER ALL PRIVILEDGED COMMANDS FROM X1 TO HERE
;<EXEC>X4CMD.MAC;1     2-DEC-74 10:21:21    EDIT BY PLUMMER

; 1.52
;"NO MAILBOX" SUBCOMMAND FOR "^E CREATE"
;<N-EXEC>X4CMD.MAC;10    15-JUL-74 17:12:27    EDIT BY PLUMMER
; USE SYSTEM DEFAULTS FOR DIRECTORY PROTECTION AND DEFAULT
;   FILE PROTECTION.  CHANGE DIRPNT TO CORRESPOND
;<N-EXEC>X4CMD.MAC;7     9-JUL-74 11:42:35    EDIT BY PLUMMER
; "CREATE" AND "PRINT" DO AUTOMATIC "BREAK" AND "REFUSE"
;<N-EXEC>X4CMD.MAC;5    12-APR-74 13:28:15	EDIT BY PLUMMER
; ALLOW FOR CRDIR TO SKIP
;<N-EXEC>X4CMD.MAC;4    25-FEB-74 14:57:20	EDIT BY PLUMMER
; ADD NETWIZARD CAPABILITY
;<EXEC>X4CMD.MAC;19     2-OCT-73 13:13:37	EDIT BY PLUMMER

; 1.51
; CHANGE .NOT TO ..NOT TO ELIMINATE CONFLICT WITH MAIN .NOT

; 1.50
; END CONDITIONAL ON DST10X
; REMOVE END SO X5 WILL GET ASSEMBLED

; 1.49
; 1B16 TO CRDIR FOR KILL

; 1.48
; ^E PRINT TYPES PASSWORD ONLY IN "VERBOSE" MODE

; 1.47
; 1.46
; MAINTENANCE CAPABILITY ADDED TO PRINT AND CREATE

; PDP-10 TENEX EXECUTIVE

;SEE XMAIN.MAC FOR COMMENTS ON ASSEMBLY

;ROUTINES TO DECODE AND EXECUTE SPECIFIC COMMANDS, CONTINUED.
;THIS FILE CONTAINS MORE OF THE LONG AND LITTLE USED COMMANDS,
;SEGREGATED TO MINIMIZE PAGE FAULTS IN NORMAL USE.

;CONTENTS:
;	PRINT (NAME) <DIRECTORY NAME>		;PRINTS INFO ASSOC W DIRECTORY
;	CREATE (NAME) ...		;CREATES AND MODIFIES
		;DIRECTORIES (AND THUS USERS)

	.DIRECTIVE XSRCVN %X4
	%X4==%X4

;^E PRINT (NAME) <DIRECTORY NAME> [VERBOSE]

;PRINTS ALL OF THE CHARACTERISTICS ASSOCIATED WITH A DIRECTORY:
; PASSWORD, PRIVILEGES, MODE, SPECIAL RESOURCE INFO, DIRECTORY NUMBER,
;     DEFAULT FILE PROT, DIREC PROT, FILE RETENTION SPECS,
;     DIRECTORY & USER GROUPS.
;ADD'L KEYWORD "VERBOSE" OR SUBCOMMAND "VERBOSE" CAUSES ALL TO
;BE PRINTED, OTHERWISE ONLY NON-DEFAULT FIELDS.

.PRINT:	NOISE <NAME>
	CALL DIRNAM		;INPUT DIRECTORY NAME, GET # AND BITS IN A
	ALLOW TALT+TSPC+TEOL+TCOM
	ALTYPE ( )
	CALL SPRTR		;ANALYZE & CHECK TERMINATOR
	 JRST [		;R1: MORE ARG: ALLOW "PRINT NAME VERBOSE"
		KEYWD $PRINT
		 0		;NULL CAN'T GET HERE
		JRST CERR
		CALL (KWV)
		JRST .+2]
	 TLO Z,F1		;R2: COMMA, SAY GET SUBCOMMANDS
		;R3: END OF COMMAND
	CONFIRM
	CALL SUPER
	PUSH P,A		;SAVE USER # THRU SUBCOMMANDS
	CALL BREAK2		;DO "BREAK" AND "REFUSE"
	TLNE Z,F1
	SUBCOM $PRINT		;INPUT SUBCOMMANDS
	POP P,A
	MOVEI A,(A)		;MASK USER #
	MOVEI B,1(P)		;BLOCK WILL BE IN PUSHDOWN
	HRRO C,CSBUFP		;PUT PASSWORD IN STRING STORAGE AREA
	MOVEI D,20		;ALLOCATE 20-WORD BLOCK IN PD (INCLUDES SPARE
	PUSH P,[0]		;...WORDS, BECAUSE ADDITIONS ARE LIKELY)
	SOJG D,.-1
	GTDIR		;GET ALL THE INFO INTO THAT BLOCK
	MOVEI E,(B)		;BLOCK LOCATION
	PUSH P,[CMDIN4]		;SET RETURN FOR "DIRPNT" & FALL IN

;DIRPNT
;PRINT DIRECTORY DESCRIPTION FROM GTDIR-FORMAT BLOCK THAT E POINTS TO.
;OMITS DEFAULT VALUES UNLESS BIT F3 IN LH Z IS ON.
;FOR "PRINT" COMMAND AND FOR "LIST" SUBCOMMAND OF "CREATE".
;CLOBBERS B.

DIRPNT:	SKIPN A,(E)		;NAME IS NOT IN BLOCK FOR "PRINT".
	JRST PR1
	TYPE < NAME >
	CALL CTYPE		;NAME FOR "CREATE" CASE
	PRINT EOL
PR1:	SKIPN A,1(E)
	JRST [	TLNE Z,F3
		UTYPE [ASCIZ / NO PASSWORD
/]
		JRST PR2]
	TLNN Z,F3		;DON'T PRINT PASSWORD IF NOT VERBOSE
	JRST PR2
	LDB B,[POINT 6,A,11]	;GET BYTE SIZE OF PASSWORD
	CAIN B,^D36		;HASHED PASSWORD?
	 JRST PR2		;YES, CANNOT BE PRINTED
	TYPE < PASSWORD >
	CALL CTYPE
	PRINT EOL
PR2:	MOVE B,2(E)		;DISK LIMIT
	TLNN Z,F3
	CAIE B,750		;DEFAULT VALUE
	ETYPE < DISK LIMIT %2Q
>
;PRIVILEGES
	MOVE B,3(E)
	TRNN B,1B18
	CALL F3NOT
	TRZE B,1B18
	TYPE < WHEEL
>
	TRNN B,1B19
	CALL F3NOT
	TRZE B,1B19
	TYPE < OPERATOR
>
	TRNN B,1B20
	CALL F3NOT
	TRZE B,1B20
	TYPE < CONFIDENTIAL INFORMATION ACCESS
>
	TRNN B,1B21
	CALL F3NOT
	TRZE B,1B21
	TYPE < MAINTENANCE
>
	TRNN B,1B22
	CALL F3NOT
	TRZE B,1B22
	TYPE < NETWIZARD
>
	TRNN B,1B23
	CALL F3NOT
	TRZE B,1B23
	TYPE < ABSOLUTE SOCKET
>
	TLNN Z,F3
	JUMPE B,.+2		;NO MORE PRIVILEGES
	ETYPE < OTHER PRIVILEGE BITS %2O
>

;DIRPNT...
;MODE
	MOVE B,4(E)
	TLNN B,B0
	CALL F3NOT
	TLZE B,B0
	TYPE < FILES ONLY
>
	TLNN B,B1
	CALL F3NOT
	TLZE B,B1
	TYPE < ALPHANUMERIC ACCOUNTS
>
	TLNN B,B2
	CALL F3NOT
	TLZE B,B2
	TYPE < REPEAT LOGIN MESSAGES
>
	TLNN Z,F3
	JUMPE B,.+2		;TEST FOR ADDITIONAL MODE BITS
	ETYPE < OTHER MODE BITS %2O
>

	SKIPN B,5(E)
	TLNE Z,F3
	ETYPE < SPECIAL RESOURCE INFORMATION %2O
>
	SKIPN B,6(E)
	JRST [	TLNE Z,F3
		UTYPE [ASCIZ / NO DIRECTORY NUMBER
/]		;0: NOT ASSIGNED YET ("CREATE" CASE)
		JRST .+2]
	ETYPE < DIRECTORY NUMBER %2O
>
	SKIPN B,7(E)
	 JRST [	TLNE Z,F3
		 TYPE < DEFAULT FILE PROTECTION: SYSTEM DEFAULT
>
		JRST DIRP10]
	ETYPE < DEFAULT FILE PROTECTION: %2O
>


DIRP10:	SKIPN B,10(E)
	 JRST [	TLNE Z,F3
		 TYPE < DIRECTORY PROTECTION: SYSTEM DEFAULT
>
		JRST DIRP11]
	ETYPE < DIRECTORY PROTECTION: %2O
>

;DIRPNT...
DIRP11:	LDB B,[POINT 4,11(E),35]	;DEFAULT # VERSIONS TO KEEP
	TLNN Z,F3
	CAIE B,2		;2 IS DEFAULT
	ETYPE < DEFAULT # FILE VERSIONS TO KEEP %2Q
>
	MOVE B,11(E)
	TRZ B,17		;MASK OFF DEFAULT # VERSIONS
	TLNN Z,F3
	CAME B,[5B2]		;SEEMS TO BE NORMAL VALUE 11/11/70
	ETYPE < OTHER FILE RETENTION SPECIFICATIONS %2O
>
	SKIPN A,12(E)
	JRST [	TLNE Z,F3
		UTYPE [ASCIZ / NEVER LOGGED IN
/]		;CAN'T USE REG CASE CAUSE %D TYPES CURRENT
		;DATE FOR 0
		JRST .+2]
	ETYPE < LAST LOGIN %1D %1E
>
	SKIPN A,13(E)
	TLNE Z,F3
	ETYPE < USER GROUPS %1U
>
	SKIPN A,14(E)
	TLNE Z,F3
	ETYPE < DIRECTORY GROUPS %1U
>
	PRINT EOL
	RET

;SUBROUTINE TO TYPE " NOT" AND SKIP IF F3 ON

F3NOT:	TLNN Z,F3
	RET
	TYPE < NOT>
	JRST [	AOS (P)
		RET]

;"PRINT" SUBCOMMAND TABLE AND ROUTINES

$PRINT:	TABLE
	T VERBOSE,ONEWD,..VERB
	TEND

..VERB:	TLO Z,F3
	RET

SUPER:	PUSH P,A
	PUSH P,B
	PUSH P,C
	PUSH P,D
	TYPE < [SUPERPASSWORD:] >
	CALL NOECHO
	CALL CSTR
	CALL DOECHO
	ALLOW TALT+TSPC+TEOL
	CALL BUFFF
	MOVE B,[POINT 7,SUPPW,-1]
SUPER1:	ILDB C,A
	ILDB D,B
	CAME C,D
	JRST CERR
	JUMPN C,SUPER1
	PRINT EOL
	JRST [	POP P,D
		POP P,C
		POP P,B
		POP P,A
		RET]

SUPPW:	ASCIZ /GUESS/

;^E CREATE (NAME) <DIRECTORY NAME> (PASSWORD) --
;EITHER FIELD CAN BE TERMINATED WITH COMMA TO INITIATE SUBCOMMANDS.
;CAN CREATE NEW DIRECTORIES OR MODIFY INFO ASSOCIATED WITH OLD ONES.
;E HOLDS FLAGS AND BLOCK POINTER WHICH WILL BE IN B FOR CRDIR.
;BLOCK IS IN PUSHDOWN.
;FLAGS IN LH E ARE SET ONLY FOR FIELDS EXPLICITLY INPUT BY USER,
;  BUT ALL INFO IS IN BLOCK FOR "LIST" SUBCOMMAND.

.CREAT:	NOISE <NAME>
	MOVEI E,1(P)		;RH E POINTS TO...
;ALLOCATE CRDIR PARAMETER BLOCK IN PUSHDOWN.
;INITIALIZE MOST WORDS TO THE SYSTEM DEFAULT VALUES SO THAT IN THE
;NEW NAME CASE THE SUBCOMMAND "LIST" WON'T PRINT IF THE VALUE
;HASN'T BEEN EXPLICITLY SPECIFIED.
	PUSH P,[0]
	PUSH P,[0]
	PUSH P,[750]		;DISK LIMIT
	PUSH P,[0]
	PUSH P,[0]
	PUSH P,[0]
	PUSH P,[0]
	PUSH P,[0]		;DEFAULT FILE PROTECTION
	PUSH P,[0]		;DIRECTORY PROTECTION
	PUSH P,[500000000002]		;FILE RETENTION SPECS
	PUSH P,[0]		;DATE AND TIME OF LAST LOGIN
	PUSH P,[0]		;USER GROUP BITS
	PUSH P,[0]		;DIRECTORY GROUP BITS
	PUSH P,[0]
	PUSH P,[0]		;EXTRAS, BECAUSE ADDITIONS ARE LIKELY
	PUSH P,[0]
	PUSH P,[0]

;CREATE...
;INPUT NAME AND TYPE [OLD/NEW] AND GET CURRENT INFO FOR OLD.
	TLO Z,PUNCF
	CALL CSTR
	ALLOW TCOM+TALT+TSPC
	CALL BUFFF
	ALTYPE ( )
	PUSH P,A		;PTR TO NAME TEXT FOR USE IN AC1 FOR CRDIR
	MOVE B,A
	SETZ A,
	STDIR
	 JRST [	U$TYPE [ASCIZ /[NEW] /]
		TLO Z,F2		;LOCAL FLAG FOR "NEW NAME"
		JRST CRET1A]
	 CALL SCREWUP
	PUSH P,A		;SAVE FOR LATER
	$TYPE <[OLD] >;
	CALL BREAK2		;DO "BREAK" AND "REFUSE"
	POP P,A			;GET DIRECTORY NUMBER
	HRRZS A			;FLUSH LH BITS
	MOVE B,E
	MOVE C,CSBUFP
	GTDIR			;GET CURRENT INFO FOR OLD DIR
	IBP C
	MOVEM C,CSBUFP
		;AT THE END OF THE NAME FIELD COMMA MEANS "GO DIRECTLY
		;TO SUBCOMMAND INPUT".
		;BUT WE CAN'T CALL "SPRTR" HERE BECAUSE IT MIGHT READ AHEAD,
		;WHICH IS BAD BECAUSE A NOISE WORD FOLLOWS.
CRET1A:	TRNE CBT,TCOM
	JRST CRSUB
	TRNE CBT,TEOL		;EOL ENDS COMMAND, DON'T INPUT PASSWORD.
	JRST CREAT8		;(ERROR IF NEW, NOP IF OLD, BUT ANYWAY...)

;CREATE...
;INPUT PASSWORD.
;FOR OLD DIRECTORY, THIS PASSWORD REPLACES OLD ONE - IS THAT GOOD?
	NOISE <PASSWORD>
	TLO Z,PUNCF
	CALL CSTR
	ALTYPE ( )
	CALL BUFFF
	CAIG CNT,1
	JRST CREAT3		;NULL INPUT MEANS "NO CHANGE"
		;CAIN CNT,2
		;JRST [	MOVE B,.BFP		;1 CHAR INPUT, IS IT "-" ?
		;	ILDB B,B
		;	CAIN B,"-"	;JUST "-" MEANS MAKE IT NULL.
		;	MOVE A,[POINT 7,[ASCIZ //],-1]
		;	JRST .+1]
	MOVEM A,1(E)		;PASSWD STRING PTR TO PARAMETER BLOCK
	TLO E,B1		;TELL CRDIR TO SET PASSWORD
CREAT3:	CALL SPRTR		;TEST TERMINATING CHARACTER(S)
	 JRST CERR		; R1: MORE ARGS ON THIS LINE. ERROR.
	 JRST CRSUB		; B2: COMMA, GET SUBCOMMANDS.
		; R3: END OF COMMAND.
;CHECK, CONFIRM, EXECUTE

CREAT8:	TLZA Z,F1
CREAT9:	TLO Z,F1
	TLNE Z,F2		;NEW NAME
	TLNE E,B1		;PASSWORD SPECIFIED?
	JRST CRET9A
	MOVE A,4(E)
	TLNN A,B0
	ERROR < PASSWORD REQUIRED FOR NEW NAME UNLESS FILES-ONLY>
CRET9A:		;CHECK FOR GIVING PRIVILEGES TO FILES-ONLY DIRECTORY & WARN?
	CONFIRM
	TLNN Z,F1
	CALL SUPER
	POP P,A		;POINTER TO NAME STRING
	TLNE Z,F2
	TLOE E,B0
	JRST .+2
	MOVEM A,(E)		;SUPPLY NAME IF NEW & NOT GIVEN WITH SUBCOMMAND
	MOVE B,E		;XWD FLAGS, PARAMETER BLOCK ADDRESS
	CRDIR		;CREATE DIRECTORY !
	 CALL JERR
	TLNN Z,F2		;NEW DIRECTORY, OR
	TLNE E,(1B16)		;KILL EXISTING DIRECTORY?
	CAIA
	 JRST CRET9X
	SKIPL 4(E)		;YES. SKIP IF FILES ONLY
	 JRST [	TYPE < [DON'T FORGET TO UPDATE USER-ACCOUNT DATA]>
		JRST CRET9X]
	MOVSI A,(1B2!1B17)	;OLD, SHORT, STRING
	HRROI B,[ASCIZ /<SYSTEM>ARCHIVE-FILES-ONLY.TXT/]
	GTJFN			;TEST IF IT EXISTS
	 JRST CRET9X		;NO. SKIP MESSAGE
	RLJFN
	 JFCL
	TYPE < [DON'T FORGET TO UPDATE <SYSTEM>ARCHIVE-FILES-ONLY.TXT]>
CRET9X:	JRST CMDIN4

;CREATE...
;SUBCOMMAND LOOP

CRSUB:	CONFIRM
	CALL SUPER
	SUBCOM $CREAT		;INPUT AND DISPATCH ON SUBCOMMANDS
	TLO KWV1,CONFRC		;FORCE CONFIRMATION
		;NOTE: CONFRC CAN'T BE USED IN NON-SUBCOMMAND CASE
		;BECAUSE SPRTR CAN READ CONFIRMING CHARACTER BEFORE "CONF"
		;GETS ITS CHANCE TO TYPE "[CONFIRM:]".
	JRST CREAT9

;CREATE...
;SUBCOMMAND DISPATCH TABLE
;FLAG B5 INDICATES "NOT" MAY PRECEDE THE SUBCOMMAND.

$CREAT:	TABLE
	TE ABORT,ONEWD
	TE ABSOLUTE,B5+LPROK,..ABSO
	TE ALPHANUMERIC,B5+LPROK,..ALPH
	TE CONFIDENTIAL,B5+LPROK
	T DEFAULT
	T DIRECTORY,B5+LPROK,...DIR
	T DISK,LPROK,..DISK
	TE FILES,B5+LPROK
	TE KILL,B5+LPROK+CONMAN
	TE LIST,,..LIST
	TE MAINTENANCE,B5,.MAINT
	T MODE,B5
	T NAME
	TE NETWIZARD,B5,.NETWI
	T NO,,....NO
	T NOT,,..NOT
	T NUMBER,,...NUM
	TE OPERATOR,B5
	T PASSWORD
	T PRIVILEGES,B5
	T PROTECTION,LPROK,...PRO
	TE REPEAT,B5+LPROK
	T RETENTION,B5+LPROK
	T SPECIAL,B5+LPROK
	T USER,B5+LPROK,.USER
	TE WHEEL,B5
	TEND


....NO:	KEYWD $$$$NO
	 0			;NO DEFAULT
	JRST CERR
	JRST 0(KWV)

$$$$NO:	TABLE
	TE MAILBOX
	TEND

.MAILB:	ALLOW TSPC+TALT+TEOL
	CONFIRM
	TLO E,(1B15)		;"NO MSG FILE" FOR CRDIR
	RET

;CREATE...
;"NOT" CAN PRECEDE THOSE SUBCOMMANDS WHICH HAVE B5 SET IN TABLE.
;DISPATCH IS TO SAME ROUTINE BUT WITH "F1" SET TO REVERSE EFFECT.

..NOT:	KEYWD $CREAT
	 0
	 JRST CERR
	TLNN KWV,B5
	JRST CERR
	MOVE KWV1,KWV
	TLO Z,F1
	JRST (KWV)

;ROUTINES FOR THE INDIVIDUAL SUBCOMMANDS

;NAME <NAME>. FOR CHANGING A DIRECTORY'S NAME.

.NAME:	TLO Z,PUNCF
	CALL CSTR
	CALL BUFFF
	ALLOW TALT+TSPC+TEOL
	CONFIRM
	JRST NIYE		;NOT IMPLEMENTED AS OF 6/28/70 __________
	MOVEM A,(E)
	TLO E,B0
	RET

;PASSWORD
;CURRENTLY REDUNDANT EXCEPT THAT IT ALLOWS TYPIN IN A FORMAT MORE LIKE
; WHAT "PRINT" PUTS OUT AND ALLOWS GIVING A NULL STRING (USEFUL?).
;LATER I CLAIM PASSWORD FOR OLD DIRECTORY SHOULD BE TESTED FOR
; ACCESS PERMISSION BY NON-WHEELS (AND BE IGNORED FOR WHEELS), AND THIS
; COMMAND BE USED TO CHANGE PASSWORD. ____

.PASSW:	TLO Z,PUNCF
	CALL CSTR
	CALL BUFFF
	ALLOW TALT+TSPC+TEOL
	CONFIRM
	MOVEM A,1(E)
	TLO E,B1
	RET


;"CREATE" SUBCOMMANDS...

;DISK (STORAGE LIMIT) <DECIMAL>

..DISK:	NOISE <STORAGE LIMIT>
	CALL DECIN		;DECIMAL INPUT TO A
	 JRST CERR		;NULL
	ALLOW TALT+TEOL+TSPC
	CONFIRM
	MOVEM A,2(E)
	TLO E,B2
	RET

;SUBCOMMANDS FOR SPECIFIC PRIVILEGES AND MODES.
;F1 ON AT ENTRY IF PRECEDED BY "NOT".

;AC USE: A: MASK INDICATING BITS TO SET (F1 OFF), OR CLEAR (F1 ON).

..ABSO:	NOISE <SOCKET CAPABILITY>
	MOVEI A,1B23
	JRST CPRIV
.NETWI:	SKIPA 1,[1B22]
.MAINT:	MOVEI A,1B21
	JRST CPRIV
.WHEEL:	SKIPA A,[1B18]
.OPERA:	MOVEI A,1B19
	JRST CPRIV

.CONFI:	NOISE <INFORMATION ACCESS>
	MOVEI A,1B20
CPRIV:	CONFIRM
	IORM A,3(E)		;SET BITS IN QUESTION
	TLNE Z,F1		;BUT IF SUBCOMMAND PRECEDED BY "NOT",
	ANDCAM A,3(E)		;CLEAR THE BITS.
	TLO E,B3
	RET

.FILES:	NOISE <ONLY>
	HRLZI A,B0
	JRST CCMODE

..ALPH:	NOISE <ACCOUNTS>
	HRLZI A,B1
	JRST CCMODE

.REPEA:	NOISE <LOGIN MESSAGES>
	HRLZI A,B2
CCMODE:	CONFIRM
	IORM A,4(E)		;SET BIT
	TLNE Z,F1		;PRECEDED BY "NOT"?
	ANDCAM A,4(E)		;YES, CLEAR BIT.
	TLO E,B4
	RET

;"CREATE" SUBCOMMANDS...

;COMMANDS TO ENTER PRIVILEGES AND MODES IN OCTAL.
;THESE ALLOW ENTERING VALUES WHICH WEREN'T DEFINED WHEN THE CODE FOR
; "CREATE" WAS LAST UPDATED.
;CAN BE PRECEDED BY "NOT" TO TURN OFF RATHER THAN TURN ON THE GIVEN
; BITS.

.PRIVI:	CALL OCTCOM		;36-BIT OCTAL INPUT, LH,,RH ETC ACCEPTED.
	 JRST CERR
		;ALLOW TALT+TEOL+TSPC	;"OCTCOM" CHECKS TERMINATOR
	JRST CPRIV

.MODE:	CALL OCTCOM
	 JRST CERR
		;ALLOW TALT+TEOL+TSPC
	JRST CCMODE

;SPECIAL (RESOURCES INFORMATION) <OCTAL>. IRRELEVANT AT PRESENT.

.SPECI:	NOISE <RESOURCES INFORMATION>
	CALL OCTCOM
	 JRST CERR
		;ALLOW TALT+TSPC+TEOL
CSPEC:	CONFIRM		;FUTURE SUBCOMMANDS FOR INDIV BITS CAN COME HERE
	IORM A,5(E)
	TLNE Z,F1
	ANDCAM A,5(E)
	TLO E,B5
	RET

;NUMBER <OCTAL>. SPECIFIES DIRECTORY NUMBER

...NUM:	CALL OCTAL
	 JRST CERR
	ALLOW TALT+TSPC+TEOL
	TLNN Z,F2
	JRST [	CAME A,6(E)
	 UERR [ASCIZ / YOU CAN'T CHANGE THE NUMBER OF AN OLD DIRECTORY/]
		JRST NUMBE1]
;CHECK THAT THE NUMBER ISN'T IN USE BY TRYING TO CONVERT IT TO STRING.
	MOVE B,A
	MOVE A,CSBUFP
	DIRST
	SKIPA A,B		;NOT IN USE
	ERROR <NUMBER ALREADY IN USE>
NUMBE1:	CONFIRM
	MOVEM A,6(E)
	TLO E,B6
	RET

;"CREATE" SUBCOMMANDS...

;PROTECTION (OF DIRECTORY) <OCTAL>. LATER ALSO ALLOW NAMED PROT?

...PRO:	NOISE <OF DIRECTORY>
	CALL OCTCOM		;OCTAL INPUT SUBR, ACCEPTS LH,,RH ETC.
	 JRST CERR
		;ALLOW TALT+TSPC+TEOL
	CONFIRM
	MOVEM A,10(E)
	TLO E,B8
	RET

;DEFAULT (FILE) PROTECTION <OCTAL>
;		NUMBER (OF VERSIONS TO KEEP) <DECIMAL>

.DEFAU:	NOISE <FILE>
	KEYWD $DEFAU
	 0
	 JRST CERR
	JRST (KWV)

$DEFAU:	TABLE
	T NUMBER,LPROK,..NUMB
	T PROTECTION,,....PR
	TEND

....PR:	CALL OCTCOM		;36-BIT OCTAL. OK? _______
	 JRST CERR
		;ALLOW TALT+TSPC+TEOL
	CONFIRM
	MOVEM A,7(E)
	TLO E,B7
	RET

..NUMB:	NOISE <OF VERSIONS TO KEEP>
	CALL DECIN
	 JRST CERR
	CAIL A,1
	CAILE A,15
	ERROR <MUST BE 1-15>
	ALLOW TALT+TSPC+TEOL
	CONFIRM
	DPB A,[POINT 4,11(E),35]
	TLO E,B9
	RET

;"CREATE" SUBCOMMANDS...
;[NOT] RETENTION (SPECIFICATIONS) <OCTAL>
;OR'S IN AND AND'S OUT, APPROPRIATE FOR BITS ONLY.

.RETEN:	NOISE <SPECIFICATIONS>
	CALL OCTCOM
	 JRST CERR
	CONFIRM
	IORM A,11(E)
	TLNE Z,F1
	ANDCAM A,11(E)
	TLO E,B9
	RET

;[NOT] USER (GROUP) <DECIMAL BIT NUMBER>
;F1 ON IF PRECEDED BY "NOT"

.USER:	NOISE <GROUP>
	CALL BITIN		;INPUT BIT NUMBER
	CONFIRM
	IORM A,13(E)
	TLNE Z,F1
	ANDCAM A,13(E)
	TLO E,B11
	RET

;[NOT] DIRECTORY (GROUP) <DECIMAL BIT NUMBER>

...DIR:	NOISE <GROUP>
	CALL BITIN
	CONFIRM
	IORM A,14(E)
	TLNE Z,F1
	ANDCAM A,14(E)
	TLO E,B12
	RET

;SUBROUTINE TO INPUT DECIMAL BIT NUMBER. RETURNS BIT SET IN A.
;FOR USER AND DIRECTORY GROUP SUBCOMMANDS

BITIN:	INHELP <DECIMAL NUMBER 0-35>
	TLO Z,BAKFF
	CALL DECIN
	 JRST CERR
	CAILE A,^D35
	JRST CERR
	MOVN B,A
	HRLZI A,B0
	LSH A,(B)
	RET

;"CREATE" SUBCOMMANDS...

;KILL (THIS DIRECTORY)

.KILL:	NOISE <THIS DIRECTORY>
	CONFIRM
	TLO E,B16
	TLNE Z,F1
	TLZ E,B16		;"NOT KILL" REVERSES EFFECT.
	RET

;ABORT: ABORT THIS CREATE. REDUNDANT FOR ^C.

.ABORT:	MOVEI A,RERET
	MOVEM A,CERET
	JRST CMDIN4		;GO GET NEXT EXEC COMMAND

;LIST. PRINTS WHAT "PRINT" WILL PRINT IF THIS "CREATE" IS COMPLETED.
;"LIST VERBOSE" PRINTS AS "PRINT" WITH VERBOSE SUBCOMMAND

..LIST:	KEYWD $.LIST
	 T <>,EOLOK,0
	 JRST CERR
	TLZ Z,F3
	CONFIRM
	TRNE KWV,F3
	TLO Z,F3
	TLNN E,B17
	JRST DIRPNT		;GO ACT LIKE "PRINT" COMMAND
	TYPE < KILLED
>
	RET

$.LIST:	TABLE
	T VERBOSE,EOLOK,F3
	TEND

;^E CYCLE (THE NETWORK)

.CYCLE:	NOISE (THE NETWORK)
	CONFIRM
	MOVE A,['IMPDRQ']
	MOVEI B,1
	OPRFN
	 JRST NIYE
	RET



;^E DISK (PANIC LEVEL FOR) SYSTEM/USERS (IS) <NUMBER OF PAGES>

...DSK:	NOISE (PANIC LEVEL FOR)
	KEYWD $$$DSK
	 0
	 JRST CERR
	MOVE A,['USRSPC']	;VALUE IS 0 FOR SYSTEM, 1 FOR USERS
	TRNN KWV,-1
	MOVE A,['SYSSPC']
	PUSH P,A
	NOISE (IS)
	CALL DECIN		;INPUT A DECIMAL NUMBER
	 JRST CERR		;NULL INPUT
	SKIPL A		;MAKE SURE IT IS REASONABLE
	CAILE A,^D2000
	 ERROR <UNREASONABLE LIMIT>
	PUSH P,A
	ALLOW TSPC+TALT+TEOL
	ALTYPE ( )
	CONFIRM
	POP P,B			;THE NUMBER
	POP P,A			;THE CELL NAME
	OPRFN
	 JRST NIYE		;COME ON CLEMENTS
	RET

$$$DSK:	TABLE
	T SYSTEM,LPROK+WHLUO+OPRUO,0
	T USER,LPROK+WHLUO+OPRUO,1
	TEND

;^E EDDT
;TRANSFER CONTROL TO TENEX DDT, GETTING IT IF IT ISN'T ALREADY THERE.

.EDDT:	SKIPE DDTORG
	 JRST EDDT3		;DDT ALREADY THERE
	MOVE B,[POINT 7,[ASCIZ /<SUBSYS>UDDT.SAV/],-1]
	CALL $GTJFN		;ENTRY TO "$LPT" SUBR NEAR "DIRECTORY"
	HRLI A,B0		;SAY THIS FORK (JFN IS IN RH A)
	GET
	CALL RLJFNS
	MOVEI A,400000
	MOVE B,[EVECL,,EXEC]	;ENTRY VECTOR
	SEVEC			;MAKE EV POINT AT EXEC, NOT DDT


;IF WE CAN FIND A SYMBOL TABLE POINTER, PUT IT IN THE DDT.
EDDT3:	SKIPN A,..JBSYM		;HAVE WE SAVED SYMBOL TABLE POINTER?
	SKIPE A,.JBSYM		;NO, 10/50 SYMBOL TABLE POINTER?
	CAIA
	 JRST EDDT4		;NO. START DDT.
	MOVEM A,@DDTORG+1	;STORE SYMBOL TABLE POINTER INTO DDT
	MOVE B,..JBUSY
	SKIPN A			;SOURCE OF .JBUSY MUST BE SAME AS .JBSYM
	MOVE B,.JBUSY
	MOVEM B,@DDTORG+2
;DEASSIGN ^C, SO THAT ^C'S IN DDT WILL GO TO SUPERIOR EXEC.

EDDT4:	CALL INFER		;SKIP IF INFERIOR EXEC
	JRST EDDT5		;AT TOP LEVEL LEAVE ^C ENABLED
	MOVEI A,B0		;THIS FORK
	RPCAP			;ENABLED CAPS INTO C
	MOVEI A,CTRLC
	TLNE C,B0		;^C SPEC CAP ENABLED?
	DTI			;YES, DEASSIGN ^C
EDDT5:	JRST DDTORG		;ENTER DDT

;DISABLE
;DISABLES PRIVILEGED COMMANDS,
;DISABLES USER (RH) SPEC CAPS IN EXEC AND INFERIOR FORK
; (CAPS POSSIBLE ARE STILL TRANSMITTED, SO INFERIOR CAN USE THEM
; IF IT ENABLES THEM ITSELF)

.DISAB:	SETZM PRVENF		;SAY PRIVILEGED COMMANDS OFF
DISAB1:	MOVEI A,B0		;"ENABLE" JOINS HERE
	RPCAP
	TRZ C,-1
	SKIPE PRVENF
	HRR C,B
	EPCAP		;EXEC'S CAPABILITIES
	SKIPG A,FORK
	RET		;NO INFERIOR, DONE
	RPCAP
	TRZ C,-1
	SKIPE PRVENF
	HRR C,B
	EPCAP		;INFERIOR'S CAPS
	RET

;ENABLE
;ENABLES OTHER PRIVILEGED COMMANDS IN EXEC, AND ENABLES
;RH (USER) SPECIAL CAPS IN EXEC AND IN INFERIOR FORK, IF THERE IS ONE.

.ENABL:	ALLOW TSPC!TALT!TEOL
	TRNE CBT,TEOL
	 JRST [	SKIPE LIMITC	;UNDER A ^E LIMIT CAPS ?
		 ERROR (PASSWORD REQUIRED)
		CONFIRM
		JRST ENABL2]
	HRRZ A,CUSRNO		;THIS USER'S NUMBER
	CALL PASWD		;INPUT PASSWORD
	ALLOW TSPC!TALT!TEOL
	CONFIRM
	MOVE B,A
	HRRZ A,CUSRNO
	TLO A,(1B0)		;JUST CHECK PASSWORD
	CNDIR
	 CALL [	CAIN A,CNDIX1
		UERR [ASCIZ /INCORRECT PASSWORD/]
		JRST JERR]
	SETZM LIMITC		;CANCEL THE LIMIT
ENABL2:	; CALL BREAK2		;"BREAK" AND "REFUSE"
	SETOM PRVENF		;SAY PRIVILEGED COMMANDS ENABLED
	JRST DISAB1

;HALT THE SYSTEM
; NO BITS LEFT IN COMMAND FLAGS FOR A "MAINTENANCE" CAP. BIT
; THUS, PRVCK CAN'T ALLOW "ENABLE", AND THUS, ^E CANNOT PREFIX THE HALT.

.HALT:	CALL SPRTR		;ANALYZE SEPARATOR
	 JRST CERR		;R1: MORE FOLLOWS
	 TLO Z,F1		;R2: SUBCOMMANDS FOLLOW
	 CONFIRM		;R3: END OF COMMAND
	HRLZ A,CUSRNO		;SET "WHO" DEFAULT TO ME
	MOVEM A,WHYHLT##
	MOVEI 1,400000		;EXEC FORK
	RPCAP
	TRNN 3,1B18!1B19	;WHEEL OR OPERATOR MUST BE ENABLED
	TRNE 2,1B21		;MAINT. CANT ENABLE, DO IT FOR HIM
	CAIA
	 JRST CERR
	PUSH P,3		;ENABLED CAPABILITIES
	PUSH P,2		;POSSIBLE CAPABILITIES
	CALL SUPER
	TLNN Z,F1		;SUBCOMMANDS?
	JRST HALT2		;NO.

HALT0:	MOVE 1,['SYSTAT']
	CALL $SYSGT
	JUMPE B,CERR		;NO SUCH TABLE??
	MOVSI 1,27
	HRR 1,2
	GETAB			;GET ANY CURRENTLY SET DOWN TIME
	 CALL JERR
	MOVEM 1,DOWNTM		;USE AS DEFAULT
	SKIPE 1
	 TYPE < [NOTE: THERE IS A SHUTDOWN ALREADY IN PROGRESS]>
	MOVSI 1,30
	HRR 1,2
	GETAB
	 CALL JERR
	MOVEM 1,UPTIME		;DEFAULT UP TIME
	SUBCOM $HALT		;DO SUBCOMMANDS TO MODIFY THESE
	JRST HALT3		;GO MAKE ABSOLUTE

HALT2:	MOVEI 1,5		;NO SUBCOM'S.  DOWN IN 5 MIN.
	MOVEM 1,DOWNTM
	SETZM UPTIME		;WHO KNOWS WHEN IT WILL BE UP AGAIN?


HALT3:	MOVE 1,UPTIME
	IOR 1,DOWNTM
	JUMPE 1,HALT4		;BOTH 0 ==> RETRACT
	SKIPN 2,DOWNTM		;SKIP IF ABSOLUTE OR REL.
	MOVEI 2,5		;NOT SET. DEFAULT TO 5 MIN.
	GTAD			;WHAT TO ADD REL. TO
	TLNE 2,-1		;DOWNTM IS ABS?
	JRST .+3		;YES
	CALL TIMPMN		;ABS IN 1 PLUS MINS IN 2
	MOVEM 1,DOWNTM		;THAT'S THE DOWN TIME

	SKIPE 2,UPTIME		;IF UPTIME IS NOT SET...
	TLNE 2,-1		;OR IS ABSOLUTE,
	 JRST HALT4		;THEN TAKE AS IS.
	MOVE 1,DOWNTM		;OTHERWISE IT IS RELATIVE TO DOWN TIME
	CALL TIMPMN		;TIME IN 1 PLUS MINUTES IN 2
	MOVEM 1,UPTIME

HALT4:	POP P,3			;CAPABILITIES POSSIBLE
	MOVEI 1,CTRLC		;^C TERMINAL CODE
	TLNE 3,(1B0)		;^C CAP. ENABLED?
	DTI			;YES, DEASSIGN IT
	MOVEI 1,400000		;THIS FORK
	EPCAP

HALT7:	MOVE 1,DOWNTM
	MOVE 2,UPTIME
	MOVE 3,WHYHLT		;REASON FOR HALTING
	HSYS
	 TLOA Z,F1		;REMEMBER HSYS FAILED
	TLZ Z,F1		;HSYS WAS OK
	MOVEI 1,400000
	POP P,3			;RESTORE CAPS. AS THEY WERE AT ENTRY
	EPCAP
	MOVE 1,[CTRLC,,1]	;^C ON CHAN 1
	TLNE 3,(1B0)		;IF SPECIAL CAP IS ENABLED
	ATI
	TLNE Z,F1		;DID HSYS FAIL?
	 JRST CERR		;YES
	RET			;NO

$HALT:	TABLE
	T AT,LPROK,..HLTA
	T BY,LPROK,..HLTB
	T DUE,LPROK,..HLTD
	T FOR,LPROK,..HLTF
	T IN,LPROK,..HLTI
	T RETRACT,ONEWD,..HLTR
	T UNTIL,LPROK,..HLTU
	TEND


..HLTA:	NOISE <DATE AND TIME>
	CALL DATEIN
	MOVEM A,DOWNTM
	RET


..HLTB:	NOISE <USER>
	HRRZ A,CUSRNO		;DEFAULT TO ME
	CALL DEFDIR##		;INPUT DIRECTORY NAME
	ALLOW TALT+TSPC+TEOL
	CONFIRM
	HRLM A,WHYHLT		;WILL BE AC3 TO HSYS
	RET


..HLTD:	NOISE <TO REASON>
	KEYWD $HLTDU
	 0
	 JRST CERR
	ALLOW TALT+TEOL
	ALTYPE ( )
	CONFIRM
	HRRM KWV,WHYHLT
	RET

$HLTDU:	TABLE
	TE EMERGENCY,,8
	TE HARDWARE,,6
	TE PM,,5
	TE PREVENTIVE-MAINTENANCE,,5
	TE SOFTWARE,,7
	TEND

..HLTF:	NOISE <NUMBER OF MINUTES>
	CALL DECIN
	 JRST CERR
	JUMPL A,CERR
	ALLOW TALT+TSPC+TEOL
	CONFIRM
	HRRZM A,UPTIME		;A RELATIVE TIME
	RET


..HLTI:	NOISE <NUMBER OF MINUTES>
	CALL DECIN
	 JRST CERR
	JUMPLE A,CERR
	ALLOW TALT+TSPC+TEOL
	CONFIRM
	HRRZM A,DOWNTM		;A RELATIVE TIME
	RET

..HLTR:	NOISE <ANY PENDING SHUTDOWN REQUEST>
	SETZM DOWNTM		;NO KNOWN DOWN TIME
	SETZM UPTIME		;OR UPTIME
	SETZM WHYHLT		;OR REASON
	RET

..HLTU:	NOISE <DATE AND TIME>
	CALL DATEIN
	ALLOW TALT!TEOL
	CONFIRM
	MOVEM A,UPTIME
	RET

;ADD THE MINUTES IN 2  TO THE TAD IN 1

TIMPMN:	IMULI 2,^D60		;MAKE IT SECONDS



;ADD THE SECONDS IN 2  TO THE TAD IN 1

TIMPSC:	ADDI 2,0(1)		;ADD IN SECONDS FROM TAD
	IDIVI 2,^D<60*60*24>	;NUMBER OF SECONDS IN A DAY
	MOVSS 2			;0 FOR TODAY, 1,,0 FOR TOMORROW, ETC
	ADD 1,2			;BUMP DAY
	HRR 1,3			;INSERT SECONDS
	RET

;^E INITIALIZED ACCOUNTS/HOSTS


.INITI:	KEYWD $INITI
	 0
	 JRST CERR
	MOVE A,(KWV)		;GET SIXBIT NAME FOR OPRFN
	CONFIRM
	OPRFN
	 JRST [	CAIN A,OPRFX1
		 JRST NIYE	;FUNCTION NOT DEFINED
		JRST JERR]	;OTHER FAILURE
	RET

$INITI:	TABLE
	TE ACCOUNTS,WHLUO+OPRUO,['ACTINI']
	TE HOSTS,WHLUO+OPRUO,['HSTINI']
	TEND

;^E K (FACTOR IS) <FLOATING NUMBER>

.KFACT:	NOISE (FACTOR IS)
	CALL FPIN		;INPUT A FLOATING POINT NUMBER
	SKIPL A
	CAMLE A,[1.0]
	 JRST CERR
	ALLOW TSPC!TALT!TEOL
	CONFIRM
	MOVE B,A
	MOVE A,['KFACT ']
	OPRFN
	 CALL JERR
	RET


;^E LIMIT

..LIMI:	KEYWD $$LIMI
	0			;NO DEFAULT
	JRST CERR
	JRST 0(KWV)

$$LIMI:	TABLE
	TE CAPABILITIES,,..LIMC
	TEND

;^E LIMIT CAPABILITIES

..LIMC:	NOISE (OF JOB)
	CALL INFER		;IS THIS A TOP-LEVEL EXEC?
	 CAIA
	ERROR (MUST BE TOP-LEVEL EXEC)
	SKIPGE FORK
	SKIPL LFORK
	 ERROR (JOB MUST BE "RESET")
	CONFIRM
	CALL $RESET		;BE SURE EVERYTHING IS IN SYNC
	CALL .DISABL		;DO A FREE "DISABLE"
	SETOM LIMITC		;FLAG TELLS ENALE, EPCAP WHAT TO DO
	RET





;^E LOAD (EDDT)

.LOAD:	NOISE (EDDT)
	CONFIRM
	MOVE A,['DDTRCL']
	OPRFN
	 CALL JERR
	RET



;^E NETWORK OFF/ON

.NETWO:	KEYWD $NETWO
	 0
	 JRST CERR
	CONFIRM
	HRRE B,KWV
	MOVE A,['NETON ']
	OPRFN
	 CALL JERR
	RET

$NETWO:	TABLE
	TE OFF,,0
	TE ON,,-1
	TEND

; ^E OFFLINE (CORE FROM PAGE) ... (THROUGH PAGE) ...
; ^E ONLINE (CORE FROM PAGE) ... (THROUGH PAGE) ...


.OFFLI:	TLZA Z,F1		;REMEMBER WHICH COMMAND
.ONLIN:	TLO Z,F1
	NOISE (CORE FROM PAGE)
.ONLI1:	CALL OCTAL
	 JRST [	ALLOW TALT	;NO NUMBER, THINK ABOUT DEFAULT
		TLNN Z,F1	;"OFFLINE" HAS NO DEFAULT
		 JRST [	CALL DING
			JRST .ONLI1]
		MOVEI A,0
		U$TYPE [ASCIZ /0 /]
		JRST .+1]
	ALLOW TSPC+TALT+TLPR
	CAILE A,3777		;MAKE SURE IT'S A GOOD PAGE NUMBER
	 JRST CERR
	PUSH P,A		;SAVE FOR LATER
	NOISE (THROUGH PAGE)
	CALL OCTAL
	 JRST [	ALLOW TALT
		MOVEI A,3777
		U$TYPE [ASCIZ /3777 /]
		JRST .+1]
	ALLOW TSPC+TALT+TEOL
	CAIG A,3777		;CHECK FOR REASONABLE PAGE NUMBER
	CAMGE A,0(P)		;AND ORDER
	 JRST CERR
	POP P,B			;FIRST PAGE
	MOVE C,A		;LAST PAGE
	CONFIRM
	TLNN Z,F1		;WHICH COMMAND
	SKIPA A,['MKPGSU']	;"OFFLINE"
	MOVE A,['MKPGSA']	;"ONLINE"
	OPRFN
	 CALL JERR
	RET

;^E PAUSE

..PAUS:	NOISE (AT BUGCHKS)
	CONFIRM
	MOVEI B,1
	MOVE A,['DCHKSW']
	OPRFN
	 CALL JERR
 RET



;^E PERMIT

.PERMI:	NOISE (LOGINS)
	CONFIRM
	MOVE A,['ENTFLG']
	SETO B,
	OPRFN
	 CALL JERR
	RET



;^E PROCEED

.PROCE:	NOISE (AT BUGCHKS)
	CONFIRM
	MOVE A,['DCHKSW']
	SETZ B,
	OPRFN
	 CALL JERR
	RET



;^E PROHIBIT

.PROHI:	NOISE (LOGINS)
	CONFIRM
	MOVE A,['ENTFLG']
	SETZ B,
	OPRFN
	 CALL JERR
	RET

;^E SYSTEM (IS) ...

.SYSTE:	NOISE (IS)
	KEYWD $SYSTE
	 0
	 JRST CERR
	CONFIRM
	MOVE A,['DBUGSW']
	MOVEI B,0(KWV)
	OPRFN
	 CALL JERR
	RET

$SYSTE:	TABLE
	TE ATTENDED,,1
	TE DEGUGGABLE,,2
	TE UNATTENDED,,0
	TEND

;^E SET (DATE AND TIME)

.SET:	NOISE <DATE AND TIME>
		;FALL INTO "INDT" WHICH DOES THE REST

;SUBROUTINE TO INPUT AND SET DATE AND TIME
;FOR MAIN LOOP AND ^E SET COMMAND.


INDT:	CALL DATEIN		;INPUT DATE AND TIME
	PUSH P,1
	CALL CHKDAT		;SKIP IF IT LOOKS OK
	 JRST [	TYPE < PLEASE RECONFIRM: >
		MOVE 1,COJFN	;PRIMARY OUTPUT JFN
		MOVE 2,0(P)	;DATE TYPED IN
		SETOM 3		;VERBOSE FORMAT
		ODTIM
		TLO KWV1,CONMAN
		CONFIRM
		JRST .+1]
	POP P,A
	STAD			;SET TIME AND DATE
	 CALL [	CAIN A,STADX1	;SPEC CAP NOT ENABLED ERROR?
		RET		;YES. GO QUIETLY AWAY
		JRST JERR]
	RET


;CHECK TYPED IN TIME TO BESURE IT IS OK FOR STAD
; CURRENTLY THIS MEANS WITHIN 11 HRS. AFTER LAST FACT FILE WRITE

CHKDAT:	PUSH P,1
	INTOFF			;BE SURE JFN WILL GET STACKED
	MOVSI 1,(1B2!1B17)
	HRROI 2,[ASCIZ /<ACCOUNTS>FACT./]
	GTJFN
	 JRST [	INTON		;CAN'T GET JFN, FORCE RECONFIRMATION
		JRST CHKDA9]	;NO-SKIP RETURN
	MOVE 2,JBUFP		;JFN STACK PTR
	PUSH 2,1		;SAVE FOR RELEASE AT ^C OR ERROR
	MOVEM 2,JBUFP
	INTON
	MOVE 1,0(2)		;GET THE JFN BACK
	MOVE 2,[1,,FDBWRT]
	MOVEI 3,3
	CALL $GTFDB		;DON'T SKIP IF ACCESS LACKING
	 JRST CHKDA8
CHKDA4:	CAML 3,0(P)		;DATE TYPED MUST BE AFTER FILE WRITE
	 JRST CHKDA8		;NOT SO
	MOVE 1,3
	MOVEI 2,^D<11*60*60>	;TIME LIMIT = 11 HRS.
	CALL TIMPSC		;GTAD IN 1 PLUS SECONDS IN 2, TO 1
	CAML 1,0(P)		;11HRS AFTER FILE WRT BEFORE INPUT ?
	 AOS -1(P)		;DATE LOOKS GOOD, SKIP

CHKDA8:	CALL RLJFNS
CHKDA9:	POP P,1
	RET

; ^E TRAPS OFF/ON

.TRAPS:	NOISE (OF JSYS'S)
	KEYWD $TRAPS
	 0
	 JRST CERR
	CONFIRM
	MOVE A,['JTRPON']
	HRRE B,KWV
	OPRFN
	 CALL JERR
	RET

$TRAPS:	TABLE
	TE OFF,,0
	TE ON,,-1
	TEND



;^E UNLOAD EDDT

..UNLO:	NOISE (EDDT)
	CONFIRM
	MOVE A,['DDTFSH']
	OPRFN
	 CALL JERR
	RET
	LIT

IFE DST10X,<	END EXEC>	;STOP HERE IF NOT ASSEMBLING
				;A DISTRIBUTED TENEX EXEC
