	.TITLE	MIN		
; JEFFREY KODOSKY	ARL	JUL76
;
; FSUBR
; ENTRY:	1 ARG
; EXIT:		1 ARG		<N>
; ERRORS:	NONE
; CALLS:	ATM2N
;		I2ATM
;		R2ATM
;		CAR
;		CDR
;		EVLIS
;		CMR
;		IR
	.GLOBL	MIN,ZMIN,QEVLIS,QCDR,QCAR,QATM2N,QR2ATM
	.GLOBL	QI2ATM,QIR,QCMR
MIN:	QEVLIS
	CLR	(PC)+
ACFLAG:	.WORD	0	;0=INT,>0=REAL,<0=INF
	MOV	@R5,R3	;GET FIRST ARG
	BEQ	MIN02	;JUMP IF NO ARGS
	QCDR
	MOV	R3,-(R5)
	QCAR
	QATM2N
	BCC	MIN10	;JUMP IF AC TO BE INT
	INC	ACFLAG	;ELSE REAL
	BIT	#77777,@SP	;CHECK FOR INF
	BNE	MIN10
	TST	2(SP)
	BEQ	MIN10
	NEG	ACFLAG	;NOTE INF
MIN00:	MOV	#-1,2(SP)	;MAKE CLEAN INF
	TST	@SP
	BPL	MIN10
	TST	(R5)+	;-INF TERMINATES SEARCH
	BR	MIN06
MIN02:	MOV	(R5)+,-(SP)	;POP NIL AND MAKE INTEGER 0
MIN03:	QI2ATM
	.WORD	0
MIN05:	CMP	ACFLAG,(R5)+	;TST ACFLAG
	BEQ	MIN03
MIN06:	QR2ATM
	.WORD	0
MIN09:	TST	(SP)+
MIN10:	MOV	@R5,R3	;GET NEXT NUMBER
	BEQ	MIN05	;JUMP IF NO MORE
	QCDR
	MOV	R3,-(R5)
	QCAR
	QATM2N
	BCS	MIN25	;JUMP IF ARG=REAL
	TST	ACFLAG
	BMI	MIN17	;JUMP IF AC=+INF
	BNE	MIN15	;JUMP IF AC=REAL
	CMP	@SP,2(SP)	;COMPARE 2 INTEGERS
	BGE	MIN09
	MOV	(SP)+,@SP
	BR	MIN10
MIN15:	CMP	2(SP),#^F-32768.;AC=REAL,ARG=INT
	BLE	MIN09	;JUMP IF AC ALREADY SMALLER THAN ANY INT
	CMP	2(SP),#^F32767.
	BLT	MIN20
MIN17:	MOV	(SP)+,2(SP)	;ANY INTEGER < CURRENT AC
	CLR	ACFLAG
	BR	MIN09
MIN20:	MOV	4(SP),-(SP)	;COPY AC AND ARG=INT
	MOV	4(SP),-(SP)
	MOV	4(SP),-(SP)
	QIR
	QCMR		;COMPARE REALS
	BMI	MIN17	;JUMP IF ARG=INT<AC=REAL
	BR	MIN09
MIN25:	BIT	#77777,@SP
	BNE	MIN26
	TST	2(SP)
	BNE	MIN40	;JUMP IF ARG=INF
MIN26:	TST	ACFLAG	;ARG=REAL
	BMI	MIN30	;JUMP IF AC=+INF
	BEQ	MIN35	;JUMP IF AC=INT
	.REPT	4	;COMPARE TWO REALS
	MOV	6(SP),-(SP)
	.ENDR
	QCMR
	BPL	MIN31	;JUMP IF AC<=ARG
MIN29:	MOV	(SP)+,2(SP)	;ELSE REPLACE AC WITH NEW MIN
	MOV	(SP)+,2(SP)
	BR	MIN10
MIN30:	NEG	ACFLAG
	BR	MIN29
MIN31:	CMP	(SP)+,(SP)+
	BR	MIN10
MIN35:	INC	ACFLAG	;SWITCH ARG=REAL, AC=INT
	MOV	4(SP),R3
	MOV	2(SP),4(SP)
	MOV	(SP)+,@SP
	MOV	R3,-(SP)
	BR	MIN15
MIN40:	MOV	(SP)+,@SP	;IGNORE +INF
	BMI	MIN09
	TST	ACFLAG	;-INF TERMINATES SEARCH
	BEQ	.+4
	MOV	(SP)+,@SP
	BR	MIN00
ZMIN=.-MIN
	.END
