.TITLE C2WDAY .IDENT /V1.0/ .SBTTL DETERMINE DAY OF WEEK OF CLUNK VALUE (C2WDAY) ; ; THIS ROUTINE FINDS THE DAY OF THE WEEK A CLUNK TIME APPEARS IN. ; IT IS HELPFUL TO KNOW THAT NOVEMBER 17,1858 WAS A WEDNESDAY. ; ; LAST EDIT: 6-NOV-1987 12:11:41 ; ; AUTHOR: PETER STADICK ; CARGILL INC. ; P.O. DRAWER AR ; RESERVE,LA 70084 ; ; EDIT HISTORY: CREATED MAY-87 PJS ; MADE SEPERATE MODULE OCT-87 PJS ; ; CALLING PARAMETER LIST ; 2(R5) = CLUNK VALUE OF DATE ( INPUT PRESERVED ) ; 4(R5) = RETURNED DAY NUMBER VALUE ( OUTPUT ) ; 6(R5) = STATUS 1=SUCCESS ( OUTPUT ) ; ; RETURNED VALUES: ; MONDAY = 1 THRU SUNDAY = 7 ; ; ONLY R5 AND SP ARE PRESERVED ; .PSECT CLUNK,RO,I,LCL,REL C2WDAY:: MOV R5, -(SP) ; SAVE POINTER FOR LATER USE... MOV 2(R5),R0 ; ADDRESS OF CLUNK VALUE MOV 6(R0),-(SP) ; MOVE CLUNK VALUE TO BUFFER MOV 4(R0),-(SP) MOV 2(R0),-(SP) MOV (R0),-(SP) MOV SP,R1 ; SAVE ADDRESS OF CLUNK VALUE BUFFER MOV R2,-(SP) ; CREATE FIRST WORKING BUFFER ON STACK MOV R2,-(SP) MOV R2,-(SP) MOV R2,-(SP) MOV SP,R2 ; SAVE ADDRESS OF BUFFER MOV R3,-(SP) ; CREATE SECOND WORKING BUFFER ON STACK MOV R3,-(SP) MOV R3,-(SP) MOV R3,-(SP) MOV SP,R3 ; SAVE ADDRESS OF BUFFER MOV #000000,-(SP) ; MSW OF CLUNKS PER WEEK MOV #002600,-(SP) MOV #024344,-(SP) MOV #040000,-(SP) ; LSW OF CLUNKS PER WEEK MOV SP,R0 ; SAVE ADDRESS OF CLUNKS PER WEEK ; FIRST DIVIDE CLUNKS BY CLUNK PER WEEK TO FIND REMAINDER MOV R5,-(SP) ; IDS VALUE LOCATION MOV SP,R5 ; BUILD DEC CALL SITE MOV R5,-(SP) ; ADDRESS OF IDS MOV R2,-(SP) ; LOCATION OF RESULT MOV R3,-(SP) ; LOCATION OF REMAINDER MOV R0,-(SP) ; DIVISOR - CLUNKS PER WEEK MOV R1,-(SP) ; DIVIDEND - CLUNK VALUE MOV SP,R5 SUB #2,R5 ; ADJUST ADDRESS JSR PC, DIV64 ; DIVIDE TO FIND CLUNKS LEFT IN WEEK BCS WERRD MOV #140000,(R0) ; REPLACE CLUNKS PER WEEK WITH CLUNKS PER DAY MOV #025151,2(R0) MOV #000311,4(R0) MOV #000000,6(R0) ; NOW DIVIDE REMAINDER BY CLUNKS PER DAY TO FIND DAY OF WEEK MOV R2,10(R5) ; RESULT - DAY OF WEEK MOV R1,6(R5) ; REMAINDER - USE ORIGINAL CLUNK VALUE BUFFER MOV R0,4(R5) ; DIVISOR - CLUNKS PER DAY MOV R3,2(R5) ; DIVIDEND - REMAINDER FROM CLUNKS/WEEK DIVISION JSR PC, DIV64 ; DIVIDE TO FIND DAY OF WEEK BCS WERRD ADD #3,(R2) ; ADJUST WEDNESDAY TO THREE CMP #7,(R2) ; CHECK FOR A MONDAY OR TUESDAY BPL WDONE ; BRANCH IF WED THRU SUN SUB #7,(R2) ; ADJUST BACK TO 1 OR 2 FOR 8 OR 9 WDONE: MOV R1,SP ; ADJUST BACK SP ADD #10,SP MOV (SP)+, R5 ; GET ARG POINTER BACK FROM STACK MOV (R2),@4(R5) ; MOVE RESULT TO PARAMETER LOCATION MOV #1,@6(R5) ; SET GOOD STATUS RTS PC WERRD: MOV R1,SP ; ADJUST BACK SP ADD #10,SP MOV (SP)+, R5 ; RESTORE ARG POINTER MOV #-3,@6(R5) ; SET UNDERFLOW STATUS RTS PC .END