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 $$$