	.TITLE	SUB1		
; JEFFREY KODOSKY	ARL	JUL76
;
; SUBR
; ENTRY:	1 ARG		<N>
; EXIT:		1 ARG		<N>
; ERRORS:	I4, HARD MATH ERROR (SUPPRESSED WITH Z SWITCH)
; CALLS:	ATM2N, ATOM TO NUMBER CONVERTER
;		I2ATM, INTEGER TO ATOM CONVERTER
;		R2ATM, REAL TO ATOM CONVERTER
;		ADR, REAL ADDER
;		GET, SEARCH PROPERTY LIST
	.GLOBL	SUB1,ZSUB1,QATM2N,QI2ATM,QR2ATM,QADR,QGET
	.GLOBL	APVAL,ZSW,QI4ERR
SUB1:	QATM2N
	BCS	SUB13	;JUMP TO SUBTRACT 1.0
	DEC	@SP
	BVS	SUB11	;JUMP TO RETURN NEGMAX-1
	QI2ATM
	.WORD	0
SUB11:	MOV	#400,@SP	;LO ORDER OF -32769.
	MOV	#^F-32769.,-(SP)
	BR	SUB19
SUB13:	ASL	@SP
	BEQ	SUB15	;JUMP IF +-INF OR 0
	ROR	@SP	;SUB 1.0
	CLR	-(SP)
	MOV	#^F-1.0,-(SP)
	QADR
	BCS	SUB17	;JUMP IF INF RETURNED
	BR	SUB19
SUB15:	ROR	@SP
	TST	2(SP)	;JUMP IF SUB1 FORM +-INF!
	BNE	SUB17
	MOV	#^F-1.0,@SP	;SUB1 FROM 0.0 IS -1.0
	BR	SUB19
SUB17:	ROOM	3	;CHECK IF INF ALLOWED
	MOV	APVAL,-(R5)
	MOV	ZSW,-(R5)
	QGET
	TST	(R5)+
	BNE	SUB19	;JUMP IF IT IS
	QI4ERR		;ELSE HARD ERROR
SUB19:	QR2ATM		;RETURN REAL ATOM
	.WORD	0
ZSUB1=.-SUB1
	.END
