perm filename IMP.FAI[S,NET] blob sn#727548 filedate 1983-09-17 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	TITLE IMP  RFCS RFCR CLSS CLSR LGONCE REAPRV WRTPRV UPGPRV ACWPRV LUPPRV PRIVS HSTSTR PDL IMPDIE FLNOPS WHYDWN REASON UNWUNW UNWIDX
C00005 00003	 IMP PROMPT ERROR CRLRET GIVHLP
C00007 00004	 IMPOP BACKWH GTHOUR HRWIN NOWHEN
C00011 00005	 DECOUT OCTOUT NUMOUT GETNUM GETNM1 GETOCT GETOC1
C00012 ENDMK
C⊗;
TITLE IMP ;⊗ RFCS RFCR CLSS CLSR LGONCE REAPRV WRTPRV UPGPRV ACWPRV LUPPRV PRIVS HSTSTR PDL IMPDIE FLNOPS WHYDWN REASON UNWUNW UNWIDX

;Original MIDAS program by Mark Crispin, 3/79.
;Converted to FAIL and IP/TCP (most functions removed) by Joe Weening, 9/83.

; General purpose IMP utility

RFCS←←  200000,,0
RFCR←←  100000,,0
CLSS←←  040000,,0
CLSR←←  020000,,0
LGONCE←←004000,,0
REAPRV←←040000,,0
WRTPRV←←020000,,0
UPGPRV←←004000,,0
ACWPRV←←000040,,0
LUPPRV←←000001,,0

PRIVS←←REAPRV!WRTPRV!UPGPRV!ACWPRV!LUPPRV

HSTSTR:	BLOCK =20
PDL:	BLOCK =50

IMPDIE:	0
FLNOPS:	0

WHYDWN:	23
REASON:	0

UNWUNW:	24
UNWIDX:	0
;⊗ IMP PROMPT ERROR CRLRET GIVHLP

SUBTTL Main program

IMP:	CAI
	RESET
	MOVE 17,[IOWD =50,PDL]
	MOVSI 377777
	SETPR2
	 JRST 4,.-1
	MOVSI (UPGPRV)
	SETPRV				; we need this priv for almost everything
	OPEN [0 ↔ 'IMP',, ↔ 0]
	 JRST 4,.-1
	MOVEI [RADIX50 0,IMPDIE ↔ 0]
	.SYML
	 JRST 4,.-1
	ADDI 400000
	MOVEM IMPDIE
	MOVEI [RADIX50 0,FLNOPS ↔ 0]	; first entry in our tables
	.SYML
	 JRST 4,.-1
	ADDI 400000
	MOVEM FLNOPS
PROMPT:	INSKIP
	 CAI
	OUTCHR ["!"]
	INCHRW
	CAIN 15
	 INCHRW
	CAIN "?"
	 JRST [	OUTSTR [ASCIZ/ H/]
		JRST GIVHLP]
	ANDI 137
	CAIN 12
	 JRST PROMPT
	CAIN "H"
	 JRST GIVHLP
	CAIN "E"
	 JRST [	OUTSTR [ASCIZ/xit/]
		EXIT 1,
		JRST IMP]
	CAIN "I"
	 JRST IMPOP
	CAIN "C"
	 JRST [	OUTSTR [ASCIZ/ycle the network/]
;;		EIOTM
;;		CONO 400,100000		;this doesn't work on F2, where IMP=550
		SKIPN @IMPDIE		;skip if NCP already down
		MTAPE [13]		;take NCP down
		MTAPE [12]		;put NCP up
		JRST 2,@[CRLRET]]
ERROR:	CLRBFI
	OUTCHR ["?"]
CRLRET:	OUTSTR [ASCIZ/
/]
	JRST PROMPT

GIVHLP:	OUTSTR [ASCIZ\elp:
Cycle, Exit, Help, IMP on/off
\]
	JRST PROMPT
;⊗ IMPOP BACKWH GTHOUR HRWIN NOWHEN

SUBTTL IMP operations

IMPOP:	OUTSTR [ASCIZ/MP o/]
	INCHRW
	ANDI 137
	CAIN "N"
	 JRST [	SKIPN @IMPDIE
		 JRST ERROR
		MTAPE [12]	;put IMP up
		JRST CRLRET]
	CAIE "F"
	 JRST ERROR
	OUTCHR ["f"]
	SKIPE @IMPDIE
	 JRST ERROR
	OUTSTR [ASCIZ/, back up on /]
BACKWH:	INCHRW
	CAIN "?"
	 JRST [ OUTSTR [ASCIZ/
Day of week back up (or "D" for "Don't tell IMP when up or why down")

Back up on /]
		CLRBFI
		JRST BACKWH]
	ANDI 137
	CAIN "D"
	 JRST [	OUTSTR [ASCIZ\on't tell IMP when or why.  Confirm w/CR.\]
		INCHRW
		CAIE 15
		JRST ERROR
		INCHSL		;read the LF
		 JFCL		;isn't one?? oh well.
		JRST NOWHEN ]	;Just take network down
	CAIN "M"
	 JRST [	OUTSTR [ASCIZ/onday/]
		SETZ 2,
		JRST GTHOUR]
	CAIN "W"
	 JRST [	OUTSTR [ASCIZ/ednesday/]
		MOVEI 2,2
		JRST GTHOUR]
	CAIN "F"
	 JRST [	OUTSTR [ASCIZ/riday/]
		MOVEI 2,4
		JRST GTHOUR]
	CAIN "S"
	 JRST [	INCHRW
		ANDI 137
		CAIN "A"
		 JRST [	OUTSTR [ASCIZ/turday/]
			MOVEI 2,5
			JRST GTHOUR]
		CAIE "U"
		 JRST ERROR
		OUTSTR [ASCIZ/nday/]
		MOVEI 2,6
		JRST GTHOUR]
	CAIE "T"
	 JRST ERROR
	INCHRW
	ANDI 137
	CAIN "U"
	 JRST [	OUTSTR [ASCIZ/esday/]
		MOVEI 2,1
		JRST GTHOUR]
	CAIE "H"
	 JRST ERROR
	OUTSTR [ASCIZ/ursday/]
	MOVEI 2,3
GTHOUR:	OUTSTR [ASCIZ/ at /]
	JSR GETNUM
	CAIG =23
	 CAIE 1,":"
	  JRST ERROR
	JUMPL ERROR
	ADDI =8				; PST to GMT
	MOVE 1,400261			; DAYLIT
	MOVE 1,400000(1)
	SKIPE 1
	 SOS				; daylight losing time
	CAIG =23
	 JRST HRWIN
	SUBI =24
	AOS 2
	CAIN 2,7
	 SETZ 2,
HRWIN:	LSH 2,5
	ADD 2,
	JSR GETNUM
	CAIG =59
	 CAIE 1,12
	  JRST ERROR
	JUMPL ERROR
	IDIVI 5
	LSH 2,4
	ADD 2,
	HRRM 2,REASON
	OUTSTR [ASCIZ/Reason:
 5 → Scheduled PM
 6 → Scheduled hardware work
 7 → Scheduled software work
 8 → Emergency restart
 9 → Power outage
10 → Software breakpoint
11 → Hardware failure
12 → Not scheduled up

Why down?/]
	JSR GETNUM
	CAIL 5
	 CAILE 14
	  JRST ERROR
	CAIE 1,12
	 JRST ERROR
	HRLM REASON
	MTAPE WHYDWN		;tell IMP why down and when up
NOWHEN:	MTAPE [13]		;take IMP down
	JRST PROMPT
;⊗ DECOUT OCTOUT NUMOUT GETNUM GETNM1 GETOCT GETOC1

SUBTTL Subroutines

; Decimal/octal print routine

DECOUT:	SKIPA 2,[10.]			; decimal print
OCTOUT:	 MOVEI 2,8.			; octal print
NUMOUT:	IDIVI (2)
	PUSH 17,1
	SKIPE
	 PUSHJ 17,NUMOUT
	POP 17,
	ADDI "0"
	OUTCHR
	POPJ 17,

GETNUM:	0
	SETZ
GETNM1:	INCHWL 1
	CAIN 1,15
	 INCHWL 1
	ANDI 1,177
	CAIL 1,"0"
	 CAILE 1,"9"
	  JRST @GETNUM
	IMULI 10.
	ADDI -"0"(1)
	JRST GETNM1

GETOCT:	0
	SETZ
GETOC1:	INCHWL 1
	CAIN 1,15
	 INCHWL 1
	ANDI 1,177
	CAIL 1,"0"
	 CAILE 1,"7"
	  JRST @GETOCT
	LSH 3
	ADDI -"0"(1)
	JRST GETOC1

END IMP