	.TITLE	RCO		
; JEFFREY KODOSKY	ARL	JUN76
;
; UTILITY:	FLOATING CONVERSION FOR OUTPUT
; ENTRY:	5 ARGS (SP)	<F>;<PSCAL>;<D OF W.D>;<BUF.LEN.>;<BUF.ADR.>
; EXIT:		NO ARGS	(ASCII REPRESENTATION OF F IS IN BUFFER)
;		C BIT SET AND BUFFER *-FILLED OF ERROR OCCURED
; ERRORS:	NONE
; CALLS:	NONE
; R5 PRESERVED
;(THIS ROUTINE IS $DCO04 OF FPMP WITH LISP CALLING CONVENTION)
	.GLOBL	ECO,FCO,GCO
POINT=2
BEXP=4
EEXP=6
TYPE=12.
P=16.
D=18.
L=20.
S=22.
GCO:	MOV	#42403,R0	
	BR	XCO$9
FCO:	CLR	R0	
	BR	XCO$9
DCO:;	MOV	(SP)+,R0	;NO RETURN PC HERE!
	MOV	(SP)+,R1	
	MOV	(SP)+,R2	
	MOV	@SP,R3	
	MOV	#42002,@SP	
	MOV	R4,-(SP)	
	MOV	4(SP),R4	
	MOV	R0,4(SP)	
	BR	XC1$9
ECO:	MOV	#42402,R0	
XCO$9:;	MOV	(SP)+,R3	;NO RETURN PC HERE!
	MOV	(SP)+,R1	
	MOV	(SP)+,R2	
	MOV	R3,-(SP)	
	MOV	R0,-(SP)	
	CLR	R3	
	MOV	R4,-(SP)	
	CLR	R4
XC1$9:	MOV	R5,-(SP)	
	CLR	-(SP)	
	CLR	-(SP)	
	CMP	-(SP),-(SP)	
	ADD	S(SP),L(SP)	
	MOV	S(SP),R0
CLE$9:	MOVB	#' ,(R0)+	
	CMP	R0,L(SP)
	BLO	CLE$9
	ROL	R1	
	ROL	@SP	
	SWAB	R1
	MOVB	R1,BEXP(SP)	
	BNE	NNZ$9	
	CLR	R0
	BR	NOD$9

NNZ$9:	SEC	
	ROR	R1
	CLRB	R1	
	SWAB	R2
	BISB	R2,R1
	CLRB	R2
	SWAB	R3
	BISB	R3,R2
	CLRB	R3
	SWAB	R4
	BISB	R4,R3
	CLRB	R4
	SUB	#200,BEXP(SP)	
	BLT	DIV$9	
	BEQ	NOM$9	
MUL$9:	TST	R1	
	BLT	ML1$9	
	ASL	R4	
	ROL	R3
	ROL	R2
	ROL	R1
	DEC	BEXP(SP)	
	BGT	MUL$9	
	BR	NOM$9
ML1$9:	JSR	PC,M45$9	
	INC	EEXP(SP)	
	SUB	#3,BEXP(SP)	
	BGT	MUL$9	
	BEQ	NOM$9	
DIV$9:	CMP	R1,#146314	
	BHIS	DV1$9	
	CMP	BEXP(SP),#-3
	BGT	DV1$9	
	JSR	PC,M54$9	
	DEC	EEXP(SP)	
	ADD	#2,BEXP(SP)	
	BR	DV2$9
DV1$9:	JSR	PC,RIT$9	
DV2$9:	INC	BEXP(SP)	
	BNE	DIV$9	


NOM$9:	CLR	R0	
NO1$9:	JSR	PC,M54$9	
	JSR	PC,ML8$9	
	TST	R0
	BNE	NOD$9	
	DEC	EEXP(SP)	
	BR	NO1$9	

NOD$9:	TSTB	TYPE(SP)	
	BEQ	FFT$9	
	RORB	TYPE(SP)
	BCC	EFT$9	
	TST	EEXP(SP)	
	BLT	EFT$9	
	CMP	EEXP(SP),D(SP)
	BGT	EFT$9	
	CLRB	TYPE(SP)	
	SUB	#4,L(SP)	
	SUB	EEXP(SP),D(SP)	
	CLR	P(SP)	
FFT$9:	MOV	EEXP(SP),R5	
FFE$9:	ADD	D(SP),R5
	ADD	P(SP),R5
	JSR	PC,RUD$9	
	MOV	L(SP),R5
	SUB	D(SP),R5
	TSTB	TYPE(SP)
	BNE	FF5$9	
	ADD	EEXP(SP),P(SP)	
	BLE	FF5$9	
	SUB	P(SP),R5
	SUB	#2,R5	
	JSR	PC,ISN$9	
	BR	FF3$9	
FF5$9:	SUB	#3,R5	
	JSR	PC,ISN$9	
	MOVB	#'0,(R5)+	
	MOVB	#'.,(R5)+	
FF4$9:	CMP	R5,L(SP)	
	BHIS	FF3$9	
	MOVB	#'0,(R5)+	
	BR	FF4$9
FF3$9:	MOV	L(SP),R5
	SUB	D(SP),R5
	DEC	R5	
	MOV	R5,POINT(SP)	
	TST	P(SP)
	BGT	FF6$9
	INC	R5	
FF6$9:	SUB	P(SP),R5
	JSR	PC,DGS$9	
	TSTB	TYPE(SP)
	BEQ	DNE$9	
	BR	EFE$9	
EFT$9:	SUB	#4,L(SP)	
	CLR	R5
	TST	P(SP)
	BLE	FFE$9	
	MOV	D(SP),R5	
	ADD	P(SP),R5
	JSR	PC,RUD$9	
	MOV	L(SP),R5	
	SUB	D(SP),R5
	DEC	R5
	MOV	R5,POINT(SP)
	SUB	P(SP),R5
	DEC	R5
	JSR	PC,ISN$9	
	JSR	PC,DGS$9	
EFE$9:	SUB	P(SP),EEXP(SP)	
	MOV	L(SP),R3
	MOVB	TYPE+1(SP),(R3)+	
	MOV	EEXP(SP),R4
	BGE	EXP$9	
	NEG	R4	
	MOVB	#'-,(R3)+	
	BR	EX1$9
EXP$9:	MOVB	#' ,(R3)+	
EX1$9:	MOVB	#'0,@R3	
EX3$9:	SUB	#10.,R4	
	BLT	EX2$9
	INCB	@R3	
	BR	EX3$9
EX2$9:	ADD	#72,R4	
	MOVB	R4,1(R3)	
DNE$9:	ADD	#8.,SP
	MOV	(SP)+,R5
	MOV	(SP)+,R4
	MOV	(SP)+,6(SP)	
	MOV	(SP)+,6(SP)
	CMP	(SP)+,(SP)+	
	MOV	(SP)+,@SP	;NO RETURN PC IS THERE!
	ROL	(SP)+
	JMP	@-(R4)
M54$9:	MOV	R1,-(SP)	
	MOV	R2,-(SP)
	MOV	R3,-(SP)
	MOV	R4,-(SP)
	JSR	PC,RIT$9	
	JSR	PC,RIT$9	
	ADC	R4	
	ADC	R3
	ADC	R2	
	ADC	R1
	ADD	(SP)+,R4
	ADC	R3
	ADC	R2
	ADC	R1
	ADC	R0
	ADD	(SP)+,R3
	ADC	R2
	ADC	R1
	ADC	R0
	ADD	(SP)+,R2
	ADC	R1
	ADC	R0
	ADD	(SP)+,R1
	ADC	R0
	RTS	PC	


M45$9:	MOV	#16.,R5	
	JSR	PC,RIT$9
	MOV	R4,-(SP)
	MOV	R3,-(SP)
	MOV	R2,-(SP)
	MOV	R1,-(SP)
M51$9:	JSR	PC,RIT$9
	JSR	PC,RIT$9
	MOV	#2,R0
M52$9:	JSR	PC,RIT$9
	ADD	6(SP),R4
	ADC	R3
	ADC	R2
	ADC	R1
	ADD	4(SP),R3
	ADC	R2
	ADC	R1
	ADD	2(SP),R2
	ADC	R1
	ADD	@SP,R1
	DEC	R0
	BGT	M52$9
	DEC	R5
	BGT	M51$9
	ADD	#8.,SP	
	RTS	PC



ML8$9:	MOV	R5,-(SP)
	MOV	#3,R5
M81$9:	ASL	R4
	ROL	R3
	ROL	R2
	ROL	R1
	ROL	R0
	DEC	R5
	BGT	M81$9
	MOV	(SP)+,R5
	RTS	PC
ERR$9:	TST	(SP)+	
	MOV	S(SP),R3	
	MOV	L(SP),R4	
	TSTB	TYPE(SP)	
	BEQ	STS$9	
	ADD	#4,R4	
STS$9:	MOVB	#'*,(R3)+	
	CMP	R3,R4
	BLO	STS$9	
	COM	TYPE(SP)	
	BR	DNE$9





RUD$9:	CMP	R5,#20.
	BGT	RU1$9	
	MOV	R5,BEXP+0+2(SP)	
	BEQ	RU3$9	
	BLT	RU1$9	
	MOV	R0,-(SP)
	MOV	R1,-(SP)
	MOV	R2,-(SP)
	MOV	R3,-(SP)
	MOV	R4,-(SP)
	MOV	#100000,R1	
	CLR	R2
	CLR	R3
	CLR	R4
RDF$9:	DEC	BEXP+0+2+10.(SP)	
	BEQ	RDD$9	
	JSR	PC,M45$9	
	JSR	PC,RIT$9
	JSR	PC,RIT$9
	JSR	PC,RIT$9	
	BR	RDF$9	
RDD$9:	CLR	R0
	ADD	(SP)+,R4	
	ADC	R3
	ADC	R2
	ADC	R1
	ADD	(SP)+,R3
	ADC	R2
	ADC	R1
	ADD	(SP)+,R2
	ADC	R1
	ADD	(SP)+,R1
	ADC	R0
	ADD	(SP)+,R0
RU2$9:	CMP	#10.,R0
	BGT	RU1$9	
	INC	EEXP+2(SP)	
RU1$9:	RTS	PC	
RU3$9:	ADD	#5,R0	
	BR	RU2$9



ISN$9:	CMP	R5,S-0+2(SP)	
	BLO	SPC$9	
	ROR	0+2(SP)	
	BCC	ISR$9	
	MOVB	#'-,@R5	
ISR$9:	INC	R5	
	RTS	PC	
SPC$9:	ROR	0+2(SP)	
	BCS	ERR$9	
	INC	R5	
	CMP	R5,S+2(SP)
	BLO	ERR$9	
	RTS	PC




DGS$9:	CMP	#10.,R0	
	BGT	DG1$9	
	MOVB	#'1,(R5)+	
	SUB	#10.,R0	
DG1$9:	CMP	POINT+2(SP),R5	
	BNE	DG2$9
	MOVB	#'.,(R5)+	
DG2$9:	CMP	L+2(SP),R5	
	BLOS	DIG$9	
DG3$9:	ADD	#60,R0	
	MOVB	R0,(R5)+	
	CLR	R0
	JSR	PC,M54$9	
	JSR	PC,ML8$9	
	BR	DG1$9	
DIG$9:	RTS	PC	


RIT$9:	CLC
	ROR	R1
	ROR	R2
	ROR	R3
	ROR	R4
	RTS	PC
	.END
