--- /dev/null
+/
+/
+/
+/ A T A N 2
+/ - - - - -
+/
+/SUBROUTINE ATAN2(Y,X)
+/
+/ VERSION 5A 4-27-77 PT
+/
+ SECT ATAN2
+ JA #ATAN2
+ TEXT +ATAN2 +
+ATN2XR, SETX XRATN2
+ SETB BPATN2
+BPATN2, FNOP
+ 0
+ 0
+XRATN2, F 0.0
+YCOR, F 0.0
+XCOR, F 0.0
+FPIAT2, 2 /PI
+ 3110
+ 3755
+ATPI, F 1.570796 /PI/2
+ ORG 10*3+BPATN2
+ FNOP
+ JA ATN2XR
+ 0
+AT2RTN, JA .
+ BASE 0
+#ATAN2, STARTD
+ FLDA 10*3
+ FSTA AT2RTN
+ FLDA 0
+ SETX XRATN2
+ SETB BPATN2
+ BASE BPATN2
+ LDX 1,1
+ FSTA BPATN2
+ FLDA% BPATN2,1 /ADDR OF Y
+ FSTA YCOR
+ FLDA% BPATN2,1+ /ADDR OF X
+ FSTA XCOR
+ STARTF
+ FLDA% YCOR /GET Y - THE TAN
+ FSTA YCOR /SAV FOR A SECOND
+ LDX 1,2 /POSITIVE X
+ JEQ ATN0
+ JGT ATN1
+ LDX 0,2
+ATN1, FLDA% XCOR /GET X - THE QUADRAND
+ FSTA XCOR /+MOVE IT TO A SAFE PLACE
+ JEQ ATASP
+ FLDA YCOR /Y/X
+ FDIV XCOR
+ FSTA YCOR
+ EXTERN ATAN
+ JSR ATAN /CALL ATAN
+ JA .+4 /TAKE ARCTAN OF Y/X
+ JA YCOR
+ FSTA YCOR /SAVE IT AWAY
+ JGE A2 /SKIP IF 1 OR 3 Q
+ FADD FPIAT2 /ADD PI FOR 4TH Q
+ FSTA YCOR
+A2, JXN AT2RTN,2
+ FLDA YCOR
+ FSUB FPIAT2 /SUB PI FOR 2ND+3RD QUADS
+ JA AT2RTN
+ATASP, FLDA ATPI /X=0 MEANS +-PI/2
+ JXN ATNG,2
+ FNEG
+ATNG, JA AT2RTN
+ATN0, FLDA% XCOR
+ JLT POSX /IF X POS,ANS IS 0
+ FCLA
+ JA AT2RTN
+POSX, FLDA FPIAT2 /OTHERWISE,ANS IS PI
+ JA AT2RTN
+\f