	.TITLE	RI		
; JEFFREY KODOSKY	ARL	JUN76
;
; UTILITY:	REAL TO INTEGER CONVERTER
; ENTRY:	1 ARG (SP)	<F>
; EXIT:		1 ARG (SP)	<I>
; ERRORS:	I4, HARD ARITHMETIC ERROR
; CALLS:	NONE
; R5 PRESERVED
; ASSEMBLY SWITCHES:	FPU,EAE,EIS
;(THIS ROUTINE IS A MODIFIED VERSION OF $RI04 OF FPMP)
	.GLOBL	RI,QI4ERR
MQ=177304
LSH=177314
	.IFDF	FPU
RI:	ROL	@SP
	BEQ	2$	;JUMP IF 0 OR +-INF
	ROR	@SP
	.WORD	170001	;SETF
	.WORD	170002	;SETI
	.WORD	172426	;LDF (SP)+,F0
	.WORD	175446	;STCFI F0,-(SP)
	.WORD	170000	;CFCC
	BCS	OVFL
1$:	JMP	@-(R4)
2$:	CMP	(SP)+,(SP)+
	BEQ	1$	;RETURN 0
OVFL:	QI4ERR
	.ENDC
	.IFNDF	FPU
RI:	CLR	R2
	INC	R2
	MOV	(SP)+,R1
	ROL	R1
	BEQ	ZORINF
	ROL	-(SP)
	ROL	@SP
	ADC	R1
	MOVB	R1,R3
	CLRB	R1
	SWAB	R1
	SUB	#201,R1
	BLT	ZERO
	BEQ	DONE
	CMP	#15.,R1
	BLT	OVFL
	SWAB	R3
	CLRB	R3
	BISB	3(SP),R3
SHFT:
	.IFNDF	EAE&EIS
	ROL	R3
	ROL	R2
	DEC	R1
	BGT	SHFT
	.ENDC
	.IFDF	EAE
	MOV	#MQ,R0
	MOV	R3,@R0
	MOV	R2,-(R0)
	MOV	R1,@#LSH
	MOV	@R0,R2
	.ENDC
	.IFDF	EIS
	.WORD	073201	;ASHC R1,R2
	.ENDC
DONE:	NEG	R2
	BVS	NEGM
	BGT	OVFL
	ROR	(SP)+
	BCS	OUT
	NEG	R2
OUT:	MOV	R2,@SP
	JMP	@-(R4)
NEGM:	ROR	(SP)+
	BCS	OUT
OVFL:	QI4ERR
ZORINF:	TST	@SP
	BNE	OVFL
	JMP	@-(R4)
ZERO:	TST	(SP)+
	CLR	@SP
	JMP	@-(R4)
	.ENDC
	.END
