/* lc -L ... .c */

#include <math.h>
#include <stdio.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>


struct scpl {
  short re;
  short im;
};

struct lcpl {
  long re;
  long im;
};

struct scpl e[256];
short p[256];

#define n 8

short fp( short a )
{
short r;

  r=  (a & 1) << 7; 
  r+= (a & 2) << 5; 
  r+= (a & 4) << 3; 
  r+= (a & 8) << 1; 
  r+= (a & 16)  >> 1; 
  r+= (a & 32)  >> 3; 
  r+= (a & 64)  >> 5; 
  r+= (a & 128) >> 7; 
  return( r );
}

void get_e()
{
short m, k, i=0;
double phi;

  for( m=n; m>=1; m-- )
  {
    for( k=0; k<= ( (1<<(m-1)) -1 ); k++ )
    {
      phi= (double)k * (-2) * PI / (double)(1<<m);
      e[i].re= (short)(cos( phi ) * 1024);
      e[i].im= (short)(sin( phi ) * 1024);
      i++;
    }
  }
}

void main()
{
struct FileHandle *fh;
int i;

  printf("computing e\n");
  get_e();


  printf("writing e\n");

  fh= (struct FileHandle *)Open( (UBYTE *)("e.func"), MODE_NEWFILE );
  if( fh==0 )
  { 
    exit();
  }

  Write( fh, (UBYTE *)&(e[0].re), 1024L );

  Close( fh );



  printf("computing p\n");
  for(i=0; i<256; i++ )
  {
    p[i]= fp( (short)i ) * 8;
  }

  printf("writing p\n");

  fh= (struct FileHandle *)Open( (UBYTE *)("p.func"), MODE_NEWFILE );
  if( fh==0 )
  { 
    exit();
  }

  Write( fh, (UBYTE *)p, 512L );

  Close( fh );
}


