.TITLE DAOFWK .IDENT /1.1/ ;+ ; DAOFWK -- ROUTINE TO RETURN THE DAY OF THE WEEK (SUN=1) IN R0 ; ; WRITTEN BY JEFF HAMILTON ; E-SYSTEMS, INC. ; GREENVILLE DIVISION ; P.O. BOX 1056 ; GREENVILLE, TEXAS 75401 ; (214)454-4175 ; ; IF DATE IS GIVEN AS IN A FORTRAN FUNCTION THEN THE DATE IS ; USED. IF NO DATE IS GIVEN TODAY IS USED. ; THE FORTRAN CALLING FORMAT IS: ; ITODAY=DAOFWK() ; IDAY=DAOFWK(MONTH,DAY,YEAR) ; BASED ON THE ROUTINE GIVEN IN RSX11M V3.2 MCR OPERATIONS MANUAL P. 5-38 ;- .MCALL DIR$,GTIM$ YEAR: .WORD 0 MONTH: .WORD 0 DAY: .WORD 0 GTTIM: GTIM$ TIMBUF TIMBUF: .BLKW 8. DAOFWK:: CMP (R5),#1. ;IS DATE GIVEN? BNE 10$ ;YES, DATE IS GIVEN DIR$ #GTTIM ;NO, GET DATE MOV TIMBUF,YEAR ;GET YEAR MOV TIMBUF+2,MONTH ;GET MONTH MOV TIMBUF+4,DAY ;GET DAY OF MONTH BR 15$ ;LOOP AROUND GIVEN DATE 10$: MOV @2(R5),MONTH ;GET GIVEN MONTH MOV @4(R5),DAY ;GET GIVEN DAY OF MONTH MOV @6(R5),YEAR ;GET GIVEN YEAR 15$: MOV MONTH,R1 ;LOAD MONTH ADD #10.,R1 ;ADD 10 MOV R1,R3 ;GET READY TO DIVIDE CLR R2 ;CLEAR FOR DIVIDE DIV #13.,R2 ;DIVIDE USES R2,R3 MOV R2,R3 ;TRANSFER R2 MUL #12.,R3 ;MUL USES R3 SUB R3,R1 ;SUBTRACT RESULT FROM MON+10 MOV R1,R2 ;SAVE R1 FOR LATER MOV R2,R3 ;LOAD FOR MULTIPLY MUL #13.,R3 ;MUL USES R3 DEC R3 ;SUBTRACT ONE CLR R2 ;CLEAR FOR DIVIDE DIV #5.,R2 ;DIV USES R2,R3 MOV DAY,R4 ;GET DAYS ADD R4,R2 ;ADD DAYS ADD #77.,R2 ;ADD 77 (T3) MOV YEAR,R4 ;GET YEAR CMP #3.,MONTH ;MONTH LESS THAN THREE? BLE 20$ ;YES,GO TO 20$ DEC R4 ;NO,SUBTRACT 1 20$: MOV R4,R1 ;SAVE R4 (T4) MOV R4,R5 ;LOAD FOR DIVIDE CLR R4 ;CLEAR FOR DIVIDE DIV #100.,R4 ;DIV USES R4,R5 MOV R4,R0 ;SAVE RESULT (T5) MOV R1,R5 ;GET BACK ORIGINAL R4 CLR R4 ;CLEAR FOR DIVIDE DIV #400.,R4 ;DIVIDE USES R4,R5 MOV R4,R3 ;SAVE RESULT (T6) MOV R0,R5 ;GET BACK R0 MUL #100.,R5 ;MUL USES R5 SUB R5,R1 ;SUBTRACT RESULT FROM R1 MOV R1,R5 ;SAVE R1 INTO MULTIPLY MUL #5.,R5 ;MUL USES R5 CLR R4 ;CLEAR FOR DIVIDE DIV #4.,R4 ;DIV USES R4,R5 ADD R2,R4 ;ADD IN R2 ADD R3,R4 ;ADD IN R3 SUB R0,R4 ;SUBTRACT R0 SUB R0,R4 ;SUBTRACT R0 AGAIN INC R4 ;ADD ONE MOV R4,R0 ;SAVE RESULT MOV R4,R5 ;LOAD FOR DIVIDE CLR R4 ;CLEAR FOR DIVIDE DIV #7.,R4 ;DIV USES R4,R5 MOV R4,R5 ;LOAD FOR MULTIPLY MUL #7.,R5 ;MUL USES R5 SUB R5,R0 ;SUBTRACT THE RESULT INC R0 ;ADD 1 (SUN=1) RETURN .END