;SUBROUTINE TO CONVERT RSX DATE TO DAY OF WEEK ; ;ENTER WITH R1 POINTING TO STANDARD GETTIM BUFFER ; ;RETURN WITH DAY OF WEEK IN R1 ; DAYOFW:: MOV R5,-(SP) ;SAVE USED REG'S MOV R4,-(SP) MOV R3,-(SP) MOV R2,-(SP) BIT #3,(R1) ;IS YEAR DIVISIBLE BY 4? BNE NOTLPY ;NO ITS NOT LEAPYEAR INCB DAYSMO+2 ;INCREMENT # OF DAYS IN FEB TO 29 NOTLPY: CLR R5 ;CLEAR FOR DAY OF YEAR ADDITION MOV 2(R1),R2 ;# OF CURRENT MONTH IN R2 MOV #DAYSMO,R3 ;USE R3 AS POINTER ADDAMO: MOVB (R3)+,R4 ;GET # OF DAYS IN R4 ADD R4,R5 ;ADD TO DATE SOB R2,ADDAMO ;IF NOT DONE, DO ANOTHER ADD 4(R1),R5 ;NOW ADD DAY TO R5 MOVB #28.,DAYSMO+2 ;SET FEB BACK TO 28 FOR NEXT TIME ;NOW HAVE JULIAN DAY OF YEAR IN R5 MOV (R1),R3 ;YEAR IN R3 MUL #365.,R3 ;COMPUTE 365.25 * YEAR MOV R3,R4 ;HAVE 365. MOV (R1),R3 ASH #-2,R3 ;.25 TIMES YEAR ADD R3,R4 ;HAVE 365.25 * YEAR IN R4 ADD R4,R5 ;NOW HAVE 365.25*YEAR + DAY IN R5 CLR R4 ;FOR DIVIDE BIT #3,(R1) ;LEAP YEAR ? BNE 1$ ;BR IF NOT DEC R5 ;PATCH FOR LEAP YEAR 1$: DIV #7,R4 ;DIVIDE MODULO 7 ;HAVE DAY OF WEEK IN R5 MOV R5,R1 ;RETURN IT IN R1 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 MOV (SP)+,R5 RTS PC ;AND RETURN ;TABLE (BYTE OF # OF DAYS TO ADD FOR EACH (COMPLETED) MONTH ; DAYSMO: .BYTE 0.,31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30. .END