.TITLE EDDAT
.IDENT /V1.0/
;
; THIS IS THE SYSLIB MODULE EDDAT MODIFIED TO WORK IN A SUPERVISOR
; MODE LIBRARY. THE REASON THE ORIGINAL SYSLIB ROUTINE DID NOT WORK
; IS BECAUSE IT CONTAINED READ ONLY DATA AND USED THE 'JSR R5,$SAVRG'
; FORM OF A SUBROUTINE CALL WHICH ARE NOT ALLOWED. THE READ ONLY DATA
; WAS THE MONTH ABBREVIATIONS WHICH ARE NOW PUSHED ONTO THE STACK.
; THIS ROUTINE WAS DISASSEMBLED FROM SYSLIB, MODIFIED AND THEN 
; REASSEMBLED.
;
; LAST EDIT: 6-NOV-1987 14:43:04 
;
; MODIFYED BY:	PETER STADICK
;		CARGILL INC.
;		P.O. DRAWER AR
;		RESERVE,LA 70084
;
; EDIT HISTORY:	CREATED NOV-87 PJS
;
;
.PSECT CLUNK,RO,I,LCL,REL
$DAT::	
;	JSR R5,$SAVRG		; SYSLIB REGISTER SAVE 
	MOV R3,-(SP)		; SAVE REGISTERS ON STACK
	MOV R4,-(SP)
	MOV R5,-(SP)
	MOV #"EC,-(SP)		; PUSH MONTH ABREVIATIONS ON STACK
	MOV #"VD,-(SP)
	MOV #"NO,-(SP)
	MOV #"CT,-(SP)
	MOV #"PO,-(SP)
	MOV #"SE,-(SP)
	MOV #"UG,-(SP)
	MOV #"LA,-(SP)
	MOV #"JU,-(SP)
	MOV #"UN,-(SP)
	MOV #"YJ,-(SP)
	MOV #"MA,-(SP)
	MOV #"PR,-(SP)
	MOV #"RA,-(SP)
	MOV #"MA,-(SP)
	MOV #"EB,-(SP)
	MOV #"NF,-(SP)
	MOV #"JA,-(SP)
	MOV R1,R4		; SAVE PARAMETERS IN R4 AND R5
	MOV R2,R5
	MOV (R4)+,-(SP)		; PUSH PARAMETERS ON STACK
	MOV (R4)+,-(SP)
	MOV (R4)+,R1		; CONVERT DAY OF MONTH TO ASCII
	JSR PC,A20
	MOVB #55,(R0)+		; PUT IN DASH
	DEC (SP)		; COMPUTE OFFSET INTO STACK FOR
	MOV (SP),R1		; MONTH ABBREVIATION
	ASL (SP)		
	ADD (SP)+,R1		
	ADD SP,R1		
	ADD #2,R1
	MOVB (R1)+,(R0)+	; PUT MONTH ABREVIATION IN OUTPUT STRING
	MOVB (R1)+,(R0)+
	MOVB (R1)+,(R0)+
	MOVB #55,(R0)+		; PUT IN DASH
	MOV (SP)+,R1
	JSR PC,A10		; ADD ON YEAR
	ADD #36.,SP		; ADJUST SP BACK
B10:	MOV (SP)+,R5		; RESTORE REGISTERS
	MOV (SP)+,R4
	MOV (SP)+,R3
	RTS PC
$TIM::	
;	JSR R5,$SAVRG		; SYSLIB REGISTER SAVE
	MOV R3,-(SP)		; SAVE REGISTERS ON STACK
	MOV R4,-(SP)
	MOV R5,-(SP)
	MOV R1,R4		; SAVE PARAMETER IN R4
	MOV #3,R5
	CMP R2,R5		; CHECK OUTPUT SIZE
	BLOS A80		; JUMP IF NO FRACTION TO BE INCLUDED
	JSR PC,A70		; DISPLAY FRACTION
	MOVB #56,(R0)+		; ADD DECIMAL POINT
	MOV R0,R3		; MULTIPLY BY 10
	MOV (R4),R0
	ASL R0
	ASL R0
	ASL R0
	ADD (R4),R0
	ADD (R4)+,R0		; SET UP FOR DIVIDE
	MOV (R4)+,R1		
	JSR PC,$DIV
	MOV R0,R1
	MOV R3,R0
	BR A20
A80:	MOV R2,R5		;
	BR A70
A60:	MOVB #72,(R0)+		; PUT SEMICOLON IN OUTPUT STRING
A70:	MOV (R4)+,R1
	JSR PC,A10
	DEC R5
	BGT A60
	MOV R4,R1		; ALL DONE SO RESTORE REGISTERS AND RETURN
	MOV R5,R2
	BR B10
A20:	CLR R2
	BR A30
A10:	MOV PC,R2
A30:	JSR PC,CBDAT		; CONVERT BINARY TO 2 DIGIT ASCII
	MOV R4,R1
	MOV R5,R2
	RTS PC

	; THIS IS THE EQUIVILENT OF THE ROUTINE '$CBDAT' IN SYSLIB.
CBDAT:
	MOV R3,-(SP)		; PRESERVE R3
	CLR R3			; DIVIDE TO FIND TENS DIGIT
30$:	INC R3
	SUB #10.,R1
	BGT 30$
	BEQ 40$			; IF ZERO THEN DON'T ADD BACK
	ADD #10.,R1		; R1 CONTAINS ONE DIGIT
	DEC R3
40$:	ADD #60,R3		; CONVERT TO ASCII
	TST R2	
	BNE 10$			; IF WE DON'T SUPPRESS ZEROS PRINT IT ANYWAY
	CMP #60,R3		
	BEQ 20$			; WE SUPPRESS ZEROS AND IT IS ZERO SO JUMP
10$:	MOVB R3,(R0)+		; WRITE DIGIT TO STRING
20$:	ADD #60,R1		; CONVERT TO ASCII
	MOVB R1,(R0)+		; WRITE DIGIT TO STRING
	MOV (SP)+,R3		; RESTORE R3
	RTS PC

	.END
