	.TITLE	.ATAN2
/
/ INTERNAL GLOBALS
	.GLOBL	ATAN2
/
/ EXTERNAL GLOBALS
	.GLOBL	.MODEA,.SIGNA,.EXPA,.MOSTA,.SIGNB,.EXPB,.MOSTB
	.GLOBL	.SPRLD,.SPADD,.SPRDV,.LDREL,.PICK1,.PICK2,.ATAN
	.GLOBL	.FETCH,.PSHBA,.SNGL,.ERROR,.FLOTB
	.GLOBL	.CS1,.ILMDE
/ DOUBLE ARGUMENT ARCTAN
/
ATAN2	XX
	JMS*	.FETCH
	JMS*	.PSHBA	/FIRST ARGUMENT TO ACC A
	LAC*	.MODEA
	JMS*	.SNGL	/CHECK MODE OF FIRST ARGUMENT
	JMS*	.FETCH	/SECOND ARGUMENT TO ACC B
	TAD	(-1
	SPA!SNA
	JMP	BINT	/SECOND ARGUMENT IS INTEGER
	TAD	(-3
	SMA
	JMP*	.ILMDE	/SECOND ARGUMENT COMPLEX,LOGICAL, OR CHARACTER
BSP	LAC*	.SIGNA
	DAC	SIGNIA
	LAC*	.SIGNB
	DAC	SIGNIB	/SAVE USEFUL SIGNS IN SIGNIA AND SIGNIB
	LAC*	.MOSTB
	SZA
	JMP	BNOTZ
	SAD*	.MOSTA
	JMP	ATANER	/ERROR, BOTH ARGUMENTS 0
	LAC	.CS1	/ANSWER EITHER + OR - PI/2
	JMS*	.SPRLD	/LOAD 2*PI
	LAC	(1
	DAC*	.EXPB	/ACC B=PI/2
	JMS*	.LDREL
	LAC	SIGNIA
	DAC*	.SIGNA	/SET SIGN
	JMP*	ATAN2
BNOTZ	JMS*	.SPRDV
	LAC*	.MODEA
	JMS*	.ATAN	/CALCULATE ARCTAN
	LAC	SIGNIB
	SNA
	JMP*	ATAN2
	LAC	.CS1
	JMS*	.SPRLD
	LAC	(2
	DAC*	.EXPB	/ACC B=PI
	LAC	SIGNIA
	DAC*	.SIGNB
	JMS*	.SPADD
	JMP*	ATAN2
/
BINT	SMA
	JMP	BDINT	/ARGUMENT DOUBLE INTEGER
	JMS*	.PICK1	/PICK UP SINGLE INTEGER
FLTB	JMS*	.FLOTB	/AND FLOAT IT
	JMP	BSP
BDINT	JMS*	.PICK2	/PICK UP DOUBLE INTEGER 
	JMP	FLTB	/AND GO FLOAT IT
/
ATANER	LAW	31	/ERROR, BOTH ARGUMENTS=0
	JMS*	.ERROR
	JMP*	ATAN2
/
SIGNIA;SIGNIB
	.END
