File: IT.TK of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text) 

/IT.TK 13-MAY-80
/
/FUNCTION: SET (IF PRESENT) THE TIME WORDS IN THE MONITOR
/	AND THE DATE, FOR INSTANCE ON THE
/	FIRST DAY OF A MONTH.
/CONCEPT:  THE INTERRUPT ENABLE IS SET OFF DURING THE ACTUAL
/	STORE OF TIME AND DATE (15MMSEC), SO NO CLOCK-INTER-
/	RUPT SERVICES CAN INTERFERE , WHICH COULD HAVE GIVEN
/	REMARKABLE EFFECTS.
/USE:	THE TASK IS CALLED BY ">R IT" WITH THE NAME
/	OF THE CALLING KEYBOARD IN THE AC, OR AT POWERUP
/	WITH ZERO AC, IN WHICH CASE K1 IS ASSUMED.
/	IT THEN TYPES "TIME=", AND EXPECTS THE FOLLOWING
/	RESPONSE:"HH:MM(CR)", WHERE HH IS THE HOUR (0-23)
/	AND MM THE MINUTES (0-59).
/	THE TASK PRINTS "DATE=", AND THE DATE IN OS8 FOR-
/	MAT MUST BE TYPED IN. (NUMERICAL DAY-MONTH-YEAR)
/	IF AN ERROR IS FOUND,"?" IS PRINTED, AND THE TASK
/	IS SWAPPED OUT.
/TASK CIRCULATION: FOR INPUT IT USES "IN", WHICH WILL TAKE
/	CARE OF RUBOUTS, ETC. OUTPUT GOES THRUE "T1", OR
/	ANY TELETYPE , CALLING IT.

LENGTH=12	/LENGTH OF INPUT BUFFER (JUST LONG ENOUGH)

/USE OF ZTEM REGISTERS:
IT0=ZTEM1
IT1=ZTEM2
ITEM=ZTEM3

/TASK HEADER
ITEM1,	"I^100+"T&3777	/NAME: "IT"
	200+100		/ONE PAGE, AUTO-START

/PAGE HEADER
PTIIN,	TIIN
PDAIN,	DAIN
ITEM2,	0
IT,	SZA		/IF AC=0 USE K1
	 DCA TIIN
	TAD TIIN
	DCA DAIN	/ALSO FOR DATE
	JMS ITREAD	/READ 1 LINE, USING "IN" (LIN)
	 JMP ITDATE	/ON TO NEXT
	TAD (-30	/-24 HOURS
	SMA
	 JMP ITDATE	/NOT MORE THEN 24 HOURS
	DCA ITEM1	/SAVE TEMP.
	JMS ITINP	/READ MINUTES
	 JMP ITDATE
	TAD (-74	/-60 MINUTES
	SMA
	 JMP ITDATE	/NOT MORE THEN 60 MINUTES
	CDF 0		//
	IOF		///
	DCA I (TIME+2	///
	TAD ITEM1	///
	DCA I (TIME+3	///
	ION		//
ITDATE,	CDTOIF
	CLA
	TAD PDAIN	/
	DCA PTIIN	/SET POINTER TO DATE MESSAGE
	TAD (TAD DABEGIN/RESET ITPTR TO DATE
	DCA ITPTR	/
	JMS ITREAD	/READ 1 LINE, USING "IN"
	 JMP ITEXIT	/END
	CLL RAL		/DAY ^ 2
	DCA IT0
	JMS ITINP	/READ DAY-OF-MONTH
	 JMP ITEXIT
	BSW		/MONTH ^ 100
	TAD IT0		/+DAY ^ 2
	RTL		/^ 4 = MONTH ^ 400 + DAY ^ 10
	DCA IT0
	JMS ITINP	/READ YEAR (70-77)
	 JMP ITEXIT
	TAD (-106	/SUBSTRACT 70 (DECIMAL)
	AND C7		/REDUCE MODULO 8 (ASSUME EXTRA BIT IS CORRECT)
	TAD IT0		/+ MONTH ^ 400 + DAY ^ 10
	CDF 10
	DCA I (7666	//SAVE IT IN FIELD 1
ITEXIT,	CDTOIF
	CLA
	JMS MONITOR
	   EXIT SWPOUT	/WE DON'T EXPECT TO BE CALLED
			/AGAIN SO SOON.
ITREAD,	0
	CDTOIF
	TAD PTIIN	/CALL "IN" TO READ 1 LINE
	JMS MONITOR
	   CALL
	   "I^100+"N&3777
	 JMP .-3	/BUSY ?
	SZA CLA
	 JMP I ITREAD	/ERROR, "?CRLF" ALREADY PRINTED.
	JMS ITINP	/READ THE FIRST 1 OR 2 DIGITS
	 JMP I ITREAD	/ERROR
	ISZ ITREAD
	JMP I ITREAD

ITINP,	0		/1 OR 2 DIGITS DECIMAL INPUT
	JMS ITRD	/READ 4 BITS CHAR.
	SNL
	 JMP I ITINP	/NO DIGIT
	DCA IT1
	JMS ITRD	/SECOND DIGIT
	SNL
	 JMP ITFND	/NO DIGIT, NO WORRY
	CLL RAR		/DIVIDE BY 10
	RTR
	TAD IT1
	RTL		/MULTIPLY BY 10
	TAD IT1		/DECIMAL THIS TIME
	RAL
	DCA IT1		/SAVE
	JMS ITRD	/READ LAST DIGIT
	SZL CLA		/NO DIGIT, OK
	 JMP I ITINP	/3 DIGITS IS TOO MUCH
ITFND,	CLA
	ISZ ITINP
	TAD IT1
	JMP I ITINP	/RETURN

ITRD,	0		/INPUT A CHARACTER
ITPTR,	TAD TIBEGIN 
	ISZ ITPTR
	TAD (-272	/RETURN WITH CHAR-260 IN AC
	CLL
	TAD (12
	JMP I ITRD	/IF LINK = 1 : DIGIT, = 0 : REST
TIIN,	"K^100+"1&3777	/DEFAULT
	-LENGTH
TIBEGIN,
IFNDEF GERMAN <"T;"i;"m;"e;240;":>
IFDEF GERMAN  <"Z;"e;"i;"t;240;":>
	ZBLOCK LENGTH-6

DAIN,	"K^100+"1&3777
	-LENGTH
DABEGIN,
IFNDEF GERMAN <"D;"a;"t;"e;240;":>
IFDEF GERMAN  <"D;"a;"t;"u;"m;":>
	ZBLOCK LENGTH-6

	PAGE
	$$$