/* hypo2.c */

double b,bc,c2,d,st,t;
int aa, bb;
int s = 4;
int nr,fnx(),fny(),c1,n1;
extern int SPAdd(),SPDiv(),SPMul(),SPSub(),SPTieee(),SPFieee();
extern int SPSin(),SPCos();
void doepic(),epic();
extern double bf,cf,dd,bl,l,z;
extern int an,bd,col,cc,rr,ex;

union kludge5
{
   FLOAT num5;
   int i5;
} k5;
union kludge6
{
   FLOAT num6;
   int i6;
} k6;

void epic()
{
   int h,v;

   h=fnx(0)+65;
   v=185-fny(0);
   SetAPen(rp,s);
   Move(rp,h,v);
   st=b/nr;
   ex=0;
   t=st;
   while (t<=b+st){
      h=fnx(t)+65;
      v=185-fny(t);
      Draw(rp,h,v);
      t+=st;
   }
}

fillscreen()
{
   SetAPen(rp,4);
   SetDrMd(w->RPort,JAM1);
   RectFill(w->RPort,0,0,320,200);
}

precalculate()
{
   int n2;

   c1=aa-bb;
   c2=(double)c1/bb;
   b=2.0*PI*bb;
   n1=-aa;
   n2=aa;
   d=(n2-n1)/180.0;
   nr=25*(aa+bb);
   if (nr>400)
      nr=401;
   z=1.0;
   if (an!=0)
      dd=360.0/an;
   else
      dd=360.0;
   z=z-(cc/dd);
   bd=bb;
   bl=bb-bf*bb;
   rr=1;
   z=z+(cc/dd);
   bc=bl-(cf*bd*(rr/dd));
   l=(2*PI*an*rr)/360.0;
}

void doepic()
{
   while ((rr*an)<360){
      ex = stopcheck();
      if (ex==1)
         break;
      ++rr;
      ++s;
      if (s>(col+4))
         s=5;
      z=z+(cc/dd);
      bc=bl-(cf*bd*((rr-1)/dd));
      l=(2*PI*an*rr)/360.0;
      epic();
   }
}

int fnx(t)
double t;
{
   k1.num1=t;
   k2.num2=c2;
   k5.num5=l;
   k1.i1=SPFieee(k1.i1);
   k2.i2=SPFieee(k2.i2);
   k5.i5=SPFieee(k5.i5);
   k3.i3=SPMul(k1.i1,k2.i2); /* t*c2 */
   k2.i2=SPAdd(k3.i3,k5.i5); /* t*c2+l */
   k4.i4=SPCos(k2.i2); /* cos(t*c2+l) */
   k2.i2=SPAdd(k1.i1,k5.i5); /* t+l */
   k3.i3=SPCos(k2.i2); /* cos(t+l) */
   k1.num1=c1;
   k2.num2=bc;
   k1.i1=SPFieee(k1.i1);
   k2.i2=SPFieee(k2.i2);
   k5.i5=SPMul(k1.i1,k3.i3); /* c1*cos(t+l) */
   k6.i6=SPMul(k2.i2,k4.i4); /* bc*cos(t*c2+l) */
   k3.i3=SPAdd(k6.i6,k5.i5);
   k1.num1=n1;
   k2.num2=d;
   k6.num6=z;
   k1.i1=SPFieee(k1.i1);
   k2.i2=SPFieee(k2.i2);
   k6.i6=SPFieee(k6.i6);
   k4.i4=SPDiv(k6.i6,k3.i3);
   k3.i3=k4.i4;
   k4.i4=SPSub(k1.i1,k3.i3);
   k5.i5=SPDiv(k2.i2,k4.i4);
   k5.i5=SPTieee(k5.i5);
   return (int)k5.num5;
}


int fny(t)
double t;
{

   k1.num1=t;
   k2.num2=c2;
   k5.num5=l;
   k1.i1=SPFieee(k1.i1);
   k2.i2=SPFieee(k2.i2);
   k5.i5=SPFieee(k5.i5);
   k3.i3=SPMul(k1.i1,k2.i2); /* t*c2 */
   k2.i2=SPAdd(k3.i3,k5.i5); /* t*c2+l */
   k4.i4=SPSin(k2.i2); /* sin(t*c2+l) */
   k2.i2=SPAdd(k1.i1,k5.i5); /* t+l */
   k3.i3=SPSin(k2.i2); /* sin(t+l) */
   k1.num1=c1;
   k2.num2=bc;
   k1.i1=SPFieee(k1.i1);
   k2.i2=SPFieee(k2.i2);
   k5.i5=SPMul(k1.i1,k3.i3); /* c1*sin(t+l) */
   k6.i6=SPMul(k2.i2,k4.i4); /* bc*sin(t*c2+l) */
   k3.i3=SPSub(k6.i6,k5.i5);
   k1.num1=n1;
   k2.num2=d;
   k6.num6=z;
   k1.i1=SPFieee(k1.i1);
   k2.i2=SPFieee(k2.i2);
   k6.i6=SPFieee(k6.i6);
   k4.i4=SPDiv(k6.i6,k3.i3);
   k3.i3=k4.i4;
   k4.i4=SPSub(k1.i1,k3.i3);
   k5.i5=SPDiv(k2.i2,k4.i4);
   k1.num1=.5;
   k1.i1=SPFieee(k1.i1);
   k3.i3=SPAdd(k1.i1,k5.i5);
   k3.i3=SPTieee(k3.i3);
   return (int)k3.num3;
}
