/FLOATING INTEGER FUNCTIONS FOR USE WITH FORTRAN
/"FLINT" IS SIMPLE TRUNCATION (DROPS ALL AFTER . )
/"GRINT" IS GREATEST INTEGER FUNCTION
/"ROUND" ROUNDS TO THE NEAREST (+ OR -) INTEGER

/MAY '73

OPDEF	TADI 1400

/----------

ENTRY FLINT

FLINT,	BLOCK 2

	JMS FETCHX	/GET THE ARGUMENT
^ADD,	JMS ADD0	/INTEGERIZE IT

RETRN	FLINT

/----------

ENTRY GRINT

GRINT,	BLOCK 2
	TAD GRINT
	DCA FLINT
	TAD GRINT#
	DCA FLINT#












	JMS FETCHX	/GET THE ARG.
	TAD X1		/IS THE NUMBER NEGATIVE?
	SMA CLA
	JMP ^ADD	/NO, SO PROCEED WITH FLINT

CALL 1,	FAD		/YES, SO ADD -0.9999999
ARG	ALMOS1

	JMP ^ADD

/----------

ENTRY ROUND

ROUND,	BLOCK 2

	TAD ROUND
	DCA FLINT
	TAD ROUND#
	DCA FLINT#
	
	JMS FETCHX
	TAD X1
	SPA CLA
	CLL CML RAR	/4000, I.E. " - "
	TAD HALF1
	DCA HALF

CALL 1,	FAD
ARG	HALF		/ 0.5 * SGN(X)

	JMP ^ADD

/----------

FETCHX,	0
	TAD FLINT
	DCA CDF1
CDF1,	0	  /WILL HOLD DATA FIELD OF CALL
	TADI FLINT#
	DCA CDFX
	INC FLINT#
	TADI FLINT#
	DCA ADRSX
	INC FLINT#













CDFX,	0	  /WILL HOLD DATA FIELD OF ARG.
	TADI ADRSX
	DCA X1
	INC ADRSX
	TADI ADRSX
	DCA X2
	INC ADRSX
	TADI ADRSX
	DCA X3
	DCA ACH
	DCA ACM
	DCA ACL
	JMP I FETCHX

ADD0,	0

CALL 1,	FAD
ARG	X1

CALL 1,	FAD
ARG	ZERO
	JMP I ADD0

ZERO,	2330	/THIS FORCES E.G. 1.5 TO ROTATE
	0	/ 26 PLACES TO THE RIGHT, SO THAT
	0	/ THE NON-INTEGER BITS ARE LOST.

ALMOS1,	6007	/ABT. -0.9999999
	7777
	7776

HALF1,	2004

HALF,	0	/WILL BE 2004 OR 6004
	0
	0

X1,	0
X2,	0
X3,	0

ADRSX,	0	/ADDRESS OF ARG., IN ITS OWN FIELD

END
