#include <stdio.h>

extern float Chebyshev();
extern float Gegenbauer();
extern float Hermite();
extern float Jacobi();
extern float Laguerre();
extern float Legendre();

Table(lastval,order,s,t,x,y)
int lastval,order;
float s,t,x,y;
{  FILE *out;
   char name[30];
   int i;
   float a;

   sprintf(name,"tables/");
   switch(lastval)
      { case 0: sprintf(name+7,"Chebyshev%d",order);
                break;
        case 1: sprintf(name+7,"Gegenbauer%d%.1f",order,s);
                break;
        case 2: sprintf(name+7,"Hermite%d",order);
                break;
        case 3: sprintf(name+7,"Jacobi%d%.1f%.1f",order,s,t);
                break;
        case 4: sprintf(name+7,"Laguerre%d",order);
                break;
        case 5: sprintf(name+7,"Legendre%d",order);
                break;
      }
   if (!(out=fopen(name,"w"))) return;
   switch(lastval)
      { case 0: fprintf(out,"Chebyshev Polynomial degree %d\n",order);
                for (i=0;i<641;i++)
                   { a=i/320.0-1.0;
                     fprintf(out,"x = %.3f",a);
                     a=Chebyshev(order,a);
                     fprintf(out,"   C(x) = %.3f\n",a);
                   }
                break;
        case 1: fprintf(out,"Gegenbauer Polynomial(%.1f) degree %d\n",s,order);
                for (i=0;i<641;i++)
                   { a=i/320.0-1.0;
                     fprintf(out,"x = %.3f",a);
                     a=Gegenbauer(order,a,s);
                     fprintf(out,"   C(x) = %.3f\n",a);
                   }
                break;
        case 2: fprintf(out,"Hermite Polynomial degree %d\n",order);
                s=x;
                t=(y-x)/640;
                for (i=0;i<641;i++)
                   { fprintf(out,"x = %.3f",s);
                     a=Hermite(order,s);
                     fprintf(out,"   H(x) = %.3f\n",a);
                     s+=t;
                   }
                break;
        case 3: fprintf(out,"Jacobi Polynomial(%.1f)(%.1f) degree %d\n",s,t,order);
                for (i=0;i<641;i++)
                   { a=i/320.0-1.0;
                     fprintf(out,"x = %.3f",a);
                     a=Jacobi(order,a,s,t);
                     fprintf(out,"   P(x) = %.3f\n",a);
                   }
                break;
        case 4: fprintf(out,"Laguerre Polynomial degree %d\n",order);
                s=x;
                t=(y-x)/640;
                for (i=0;i<641;i++)
                   { fprintf(out,"x = %.3f",s);
                     a=Laguerre(order,s);
                     fprintf(out,"   L(x) = %.3f\n",a);
                     s+=t;
                   }
                break;
        case 5: fprintf(out,"Legendre Polynomial degree %d\n",order);
                for (i=0;i<641;i++)
                   { a=i/320.0-1.0;
                     fprintf(out,"x = %.3f",a);
                     a=Legendre(order,a);
                     fprintf(out,"   P(x) = %.3f\n",a);
                   }
                break;
      }
   fclose(out);
}

/* int write_iff(name, colors, bits, xoff, yoff, width, compressed, ExtraSize, ExtraInfo)
char *name;
unsigned char *colors;
register struct BitMap *bits;
short xoff, yoff;
short compressed;
int ExtraSize;
APTR ExtraInfo; */

#define BMDEPTH         5               /* Depth of our bitmap */
#define MAXCOL (1<<BMDEPTH)     /* Maximum number of colors */
#include <intuition/intuition.h>
extern struct Window *w;

SaveIff(lastval,order,s,t)
int lastval,order;
float s,t;
{  unsigned char ea_colormap[3*MAXCOL];
   FILE *out;
   char name[30];

   sprintf(name,"IFF/");
   switch(lastval)
      { case 0: sprintf(name+4,"Chebyshev%d",order);
                break;
        case 1: sprintf(name+4,"Gegenbauer%d%.1f",order,s);
                break;
        case 2: sprintf(name+4,"Hermite%d",order);
                break;
        case 3: sprintf(name+4,"Jacobi%d%.1f%.1f",order,s,t);
                break;
        case 4: sprintf(name+4,"Laguerre%d",order);
                break;
        case 5: sprintf(name+4,"Legendre%d",order);
                break;
      }
   get_ea_cmap(ea_colormap,4,w->WScreen);
   write_iff(name,ea_colormap,w->RPort->BitMap,0,0,640,0,0,NULL);
}

