/* SINE Wave text mode plot. */
/* $VER Sinewave_Anim_CC0_Licence_2017_B.Walker_G0LCU. */

SAY 'c'x
ESC='1B'x
HORIZ=9

DO THETA=0.0 TO 360.0 BY 6.0
	ANGLE=THETA
	CALL SIN
	VERT=(11-(10*y)%1)
	SAY ESC"["VERT";"HORIZ"f"ESC"[32m*"ESC"[0m"
	HORIZ=HORIZ+1
END

SAY ESC"[22;1fPlotted text mode sinewave DEMO in pure ARexx, by B.Walker, 2017."
STOP

/* SIN subroutine, '_Function_'. */
SIN:
/* Greater than 360.0 degrees NOT catered for but easily cured. */
IF ANGLE>=360.0 THEN ANGLE=0.0
IF ANGLE>270.0 THEN ANGLE=ANGLE-360.0
IF ANGLE>180.0 THEN ANGLE=-(ANGLE-180.0)
IF ANGLE>90.0 THEN ANGLE=180.0-ANGLE
/* Convert to radians. */
PI=3.14159265
x=((ANGLE*PI)/180)
y=x-((x**3)/6)+((x**5)/120)-((x**7)/5040)+((x**9)/362880)-((x**11)/39916800)
IF ANGLE=0.0 THEN y=0.0
IF ANGLE=90.0 THEN y=1.0
IF ANGLE=-90.0 THEN y=-1.0
/* 'y' is the floating point value returned. */
RETURN