DAY:: .TITLE $DAY .IDENT /V01.1C/ ; ; THIS ROUTINE WILL GIVE THE DAY OF THE WEEK FOR THE CURRENT ; DATE. ; CALL: ; R0 -- ADDRESS TO RECEIVE DAY ASCII STRING (3 BYTES) ; RETURN: ; ALL REGISTERS RESTORED ; ; ALTERNATLY TIMBUF MAY BE FILLED IN WITH YOUR VALUES (SUBJECT TO ; GTIM$ CONVENTION) AND CALL DAYY. ; DAYSWK= 7 DAYPYR= 365. DAYPLR= 366. LEAPYR= 4 .MCALL GTIM$S START: GTIM$S #TIMBUF ;GET TODAY'S TIME PARAMETERS DAYY:: CALL $SAVAL ;SAVE ALL REGISTERS MOV R0,-(SP) ;SAVE REGISTER WE'LL NEED CLR R0 ;SET FOR DOUBLE PRECISION DIVIDE MOV TIMBUF+G.TIYR,R1;GET YEARS SINCE 1900 DIV #LEAPYR,R0 ;R0 HAS # LEAP YEARS SINCE 1900 MOV TIMBUF+G.TIYR,R4;R1 IS FLAG (0 => THIS IS LEAP YEAR) SUB R0,R4 ;R4 HAS # YEARS NOT LEAP YEAR TST R1 ;THIS A LEAP YEAR? BEQ 5$ ;YES DECREMENT # OF LEAP YEARS DEC R4 ;ELSE DECREMENT # OF NON LEAP YEARS BR 6$ ; 5$: DEC R0 ; 6$: MUL #DAYPYR,R4 ;TOTAL # DAYS IN YEARS MOV R0,R2 ;SAVE IT MUL #DAYPLR,R2 ;GET TOTAL # DAYS IN LEAP YEARS ADD R3,R5 ;ADD TOGETHER ADC R2 ;.... ADD R2,R4 ;R4-R5 HAVE TOTAL # DAYS TO JAN 1 THIS YEAR MOV #MONTHS,R2 ;START OF MONTHS TABLE MOV TIMBUF+G.TIMO,R3;GET THIS MONTH DEC R3 ;TAKE OFF THIS ONE BEQ 3$ ;BR IF THIS IS JAN ADD (R2)+,R5 ;ADD IN JAN IF APPROPRIATE ADC R4 ;.... DEC R3 ; BEQ 3$ ;BR IF THIS IS FEB ADD (R2)+,R5 ;ADD IN FEB DAYS IF NEEDED ADC R4 ;.... TST R1 ;THIS A LEAP YEAR? BNE 1$ ;NOPE INC R5 ;YUP ADD IN ONE DAY ADC R4 ;... 1$: DEC R3 ; BEQ 3$ ; 2$: ADD (R2)+,R5 ;ADD IN REST OF MONTHS ADC R4 ;.... SOB R3,2$ ;.... 3$: MOV TIMBUF+G.TIDA,R3;GET DAYS IN THIS MONTH ADD R3,R5 ;ADD THEM IN ADC R4 ;.... DIV #DAYSWK,R4 ;DIVIDE BY # DAYS PER WEEK ASL R5 ;MAKE MOD DAY OFFSET MOV DAYS(R5),R1 ;GET RAD50 MOD 7 MOV (SP)+,R0 ;GET BUFFER FOR USER CALL $C5TA ;CONVERT IT TO ASCII RETURN ; TIMBUF::.BLKW 8. MONTHS: .WORD 31. ;JAN .WORD 28. ;FEB .WORD 31. ;MAR .WORD 30. ;APR .WORD 31. ;MAR .WORD 30. ;JUN .WORD 31. ;JUL .WORD 31. ;AUG .WORD 30. ;SEP .WORD 31. ;OCT .WORD 30. ;NOV .WORD 31. ;DEC DAYS: .RAD50 /MON/ .RAD50 /TUE/ .RAD50 /WED/ .RAD50 /THU/ .RAD50 /FRI/ .RAD50 /SAT/ .RAD50 /SUN/ .END