#include <exec/types.h>
#include "sintab.h"

WORD fastsin (WORD angle, WORD val)
{
    if (angle < 0)
    {
	if (angle == (WORD)0x8000)
	    return 0;

	angle = -angle;
	val = -val;

	if (angle > 16384)
	    angle = 32768L-angle;
	else if (angle == 16384)
	    return val;
    }
    else
    {
	if (angle > 16384)
	    angle = 32768L-angle;
	else if (angle == 16384)
	    return val;
    }

    return (WORD)(((LONG)val*sintab[angle]) >> 16);
} /* fastsin */

WORD fastcos (WORD angle, WORD val)
{
    return fastsin (angle+16384, val);
} /* fastcos */

#ifdef TEST
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char ** argv)
{
    int val, angle;

    angle = strtol (argv[1], NULL, 0);
    val = strtol (argv[2], NULL, 0);

    printf ("a=%d v=%d  v*sin(a)=%d v*cos(a)=%d\n",
	angle, val,
	fastsin (angle,val),
	fastcos (angle,val)
    );
}
#endif
