.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
