#include "exec/types.h"
#include "exec/memory.h"
#include "libraries/dos.h"
#include "intuition/intuition.h"
#include "graphics/view.h"
#include "graphics/rastport.h"
#include "lattice/stdio.h"

struct IntuitionBase *IntuitionBase;
struct GfxBase       *GfxBase;
struct IntuiMessage  *message;
struct RastPort      *rp;
struct ViewPort      *vp;
struct Screen        *screen;
struct Window        *w;
long                 wait;
int                  auf=2,allow=2,flag,i,x,y,code,kreuz,eig[11],summe[11],was[11];
float                weiter[11];
char                 info[1],filename[6]="Test ";
char                 *a,buffer[80];
char                 *interesse[11];
ULONG                DosBase,file;
BYTE                 laenge;
int                  p[53];
FILE                 *erg;

struct NewScreen ns =
 { 0,0,640,256,4,0,1,HIRES,CUSTOMSCREEN,NULL,"Was soll ich werden ?",NULL,NULL};

struct NewWindow nw =
 { 0,0,640,256,4,0,
   MOUSEBUTTONS|MOUSEMOVE|CLOSEWINDOW,
   REPORTMOUSE|WINDOWCLOSE|BORDERLESS|ACTIVATE,NULL,NULL,
   " BERUFSWAHL  V1.0 ",NULL,NULL,0,0,0,0,CUSTOMSCREEN };

void iff(name)
char name[];
{
 struct BitMap        *ptr;
 BYTE *puffer[5];

 UBYTE depth;
 char text[5];
 BYTE rot,gruen,blau;
 register int i;

 file = Open(name,MODE_OLDFILE);

  Read(file,&text[0],4);
  Read(file,&text[0],4);
  Read(file,&depth,1);
  Read(file,&depth,1);

  ptr = rp->BitMap;
  for(i = 0 ; i < 4 ; i++)
   puffer[i] = ptr->Planes[i]+799;
  Read(file,&text[0],6);
  for(i=0 ; i < 32 ; i++)
   {
    Read(file,&rot,1);
    Read(file,&gruen,1);
    Read(file,&blau,1);
    SetRGB4(&screen->ViewPort,i,rot/16,gruen/16,blau/16);
   };

  for(i=0 ; i < 4 ; i++)
   Read(file,puffer[i],ns.Width/8*200);
  Close(file);
  SetAPen(rp,0);
  RectFill(rp,630,0,640,10);
  SetAPen(rp,5);
  Move(rp,10,235);
  Text(rp,"© 5.10.1988 by MEGABYTECREW",27);
  Move(rp,10,245);
  Text(rp,"Programmer: Pöll Markus     Designer: Ahamer Martin",51);
}

event()
{
 int class = 0;
 if(message=(struct IntuiMessage *)GetMsg(w->UserPort))
   {
    class=message->Class;
    code=message->Code;
    ReplyMsg(message);
   }
 return(class);
}

void neueFrage()
{
 SetAPen(rp,0);
 Move(rp,0,90);
 Text(rp,"                                                                             ",80);
 SetAPen(rp,1);
 Move(rp,0,90);
 Read(file,&laenge,1);
 Read(file,&buffer[0],laenge);
 strncpy(info,&buffer[0],1);
 Text(rp,&buffer[1],laenge-1);
 kreuz=atoi(info);
}

void neueFragen()
{
 int ii;
 SetAPen(rp,0);
 RectFill(rp,0,80,640,150);
 SetAPen(rp,1);
 for(ii=0;ii<5;ii++)
  {
   Move(rp,0,90+10*ii);
   Read(file,&laenge,1);
   Read(file,&buffer[0],laenge);
   Text(rp,&buffer[0],laenge);
  }
 for(ii=0;ii<5;ii++)
  {
   Move(rp,320,90+10*ii);
   Read(file,&laenge,1);
   Read(file,&buffer[0],laenge);
   Text(rp,&buffer[0],laenge);
  }
}

void controlmouse()
{
 int class;
 flag=0;
 while(flag==0)
 {
  class=event();
  switch(class)
  {
   case MOUSEBUTTONS: allow=3-allow;
                      if(allow==1) flag=1;
                      break;
   case CLOSEWINDOW:  ende();
                      break;
  };
 }
 x=(w->MouseX);
 y=(w->MouseY);
}

void auswerten1()
{
 controlmouse();
 flag=0;
 if((y>164) && (y<190))
  {
   if((x> 64) && (x<150)) { summe[kreuz]=summe[kreuz]+1; flag=1; };
   if((x>168) && (x<254)) { summe[kreuz]=summe[kreuz]+2; flag=1; };
   if((x>272) && (x<358)) { summe[kreuz]=summe[kreuz]+3; flag=1; };
   if((x>376) && (x<462)) { summe[kreuz]=summe[kreuz]+4; flag=1; };
   if((x>480) && (x<566)) { summe[kreuz]=summe[kreuz]+5; flag=1; };
  }
 if(flag==0) auswerten1();
}

void auswerten2()
{
 controlmouse();
 flag=0;
 if((y>173) && (y<200))
  {
   if((x>155) && (x<239)) { p[i]=1; flag=1; };
   if((x>401) && (x<485)) { p[i]=0; flag=1; };
  }
 if(flag==0) auswerten2();
}

void auswerten3()
{
 controlmouse();
 flag=0;
 if((y>161) && (y<202))
  {
   if((x>159) && (x<234)) { p[i]=1; flag=1; };
   if((x>406) && (x<481)) { p[i]=0; flag=1; };
  }
 if(flag==0) auswerten3();
}

void ordnen()
{
 int copy;
 float const;

 interesse[0]="Naturwissenschaft      ";
 interesse[1]="Technik                ";
 interesse[2]="EDV                    ";
 interesse[3]="Medizin                ";
 interesse[4]="Sozialarbeit           ";
 interesse[5]="Unterrricht            ";
 interesse[6]="Verwaltung             ";
 interesse[7]="Kaufmännische Tätigkeit";
 interesse[8]="Optische Gestaltung    ";
 interesse[9]="Geisteswissenschaft    ";

 for(i=0;i<10;i++)
  was[i]=i;

 flag=0;
 while(flag==0)
 {
  flag=1;
  for(i=0;i<10;i++)
   if(summe[i] < summe[i+1])
    {
     copy=summe[i];
     summe[i]=summe[i+1];
     summe[i+1]=copy;
     eig[10]=eig[i];
     eig[i]=eig[i+1];
     eig[i+1]=eig[10];
     interesse[10]=interesse[i];
     interesse[i]=interesse[i+1];
     interesse[i+1]=interesse[10];
     was[10]=was[i];
     was[i]=was[i+1];
     was[i+1]=was[10];
     flag=0;
    };
 }
 const=(float)summe[0]/8;
 for(i=0;i<10;i++)
  weiter[i]=summe[i]+eig[i]*const;

 flag=0;
 while(flag==0)
  {
   flag=1;
   for(i=0;i<10;i++)
    if(weiter[i] < weiter[i+1])
     {
      was[10]=was[i];
      was[i]=was[i+1];
      was[i+1]=was[10];
      const=weiter[i];
      weiter[i]=weiter[i+1];
      weiter[i+1]=const;
      flag=0;
     };
  }
}

void Ergebnis12()
{
 fprintf(erg," Berufsgebiet             Interessenspunkte               Eignungspunkte\n");
 fprintf(erg," -----------------------------------------------------------------------\n");
 for(i=0;i<10;i++)
  fprintf(erg," %s     %d                     %d \n",interesse[i],summe[i],eig[i]);
for(i=0;i<10;i++)
 fprintf(erg,"%f ",weiter[i]);
fprintf(erg,"\n");
for(i=0;i<3;i++)
 fprintf(erg,"%d ",was[i]);
fprintf(erg,"\n");
}

void Test1()
{
 iff("Testbild1");
 file = Open("Fragen1",MODE_OLDFILE);
 auf=3-auf;
 while(i<300)
 {
  neueFrage();
  auswerten1();
  i++;
 }
 Close(file);
 auf=3-auf;
}

void Test2()
{
 SetAPen(rp,0);
 RectFill(rp,0,10,640,256);
 iff("Testbild2");
 file = Open("Fragen2",MODE_OLDFILE);
 auf=3-auf;
 i=1;
 while(i<53)
 {
  neueFrage();
  auswerten2();
  i++;
 }
 Close(file);
 auf=3-auf;
 eig[0]=p[8]+p[10]+p[14]+p[17]+p[23]+p[28]+p[35]+p[42];
 eig[1]=p[9]+p[10]+p[14]+p[17]+p[31]+p[36]+p[46]+p[51];
 eig[2]=p[10]+p[12]+p[14]+p[24]+p[30]+p[31]+p[36]+p[47];
 eig[3]=p[11]+p[16]+p[20]+p[22]+p[33]+p[39]+p[41]+p[43];
 eig[4]=p[4]+p[7]+p[18]+p[20]+p[22]+p[34]+p[39]+p[43];
 eig[5]=p[4]+p[5]+p[20]+p[25]+p[29]+p[40]+p[45]+p[52];
 eig[6]=p[1]+p[2]+p[15]+p[27]+p[28]+p[41]+p[47]+p[49];
 eig[7]=p[1]+p[6]+p[14]+p[17]+p[31]+p[38]+p[50]+p[52];
 eig[8]=p[3]+p[13]+p[21]+p[26]+p[32]+p[37]+p[42]+p[46];
 eig[9]=p[1]+p[12]+p[19]+p[25]+p[28]+p[42]+p[44]+p[48];
}

void Test3()
{
 int elemente=24,s[10];
 file = Open(filename,MODE_OLDFILE);
 auf=3-auf;
 if(filename[4]==(2+48)) elemente=15;
 if(filename[4]==(6+48)) elemente=20;
 if(filename[4]==(8+48)) elemente=18;

 i=0;
 while(i<elemente)
 {
  i++;
  neueFragen();
  auswerten3();
 }

 switch(filename[4]-48)
  {
   case 2:  { s[1]=(p[1]==1)+(p[2]==1)+(p[4]==0)+(p[5]==0)+(p[7]==1)+(p[8]==1)+(p[10]==0)+(p[11]==0)+(p[13]==1)+(p[14]==1);
              s[2]=(p[1]==0)+(p[3]==1)+(p[4]==1)+(p[6]==0)+(p[7]==0)+(p[9]==1)+(p[10]==1)+(p[12]==0)+(p[13]==0)+(p[15]==1);
              s[3]=(p[2]==0)+(p[3]==0)+(p[5]==1)+(p[6]==1)+(p[8]==0)+(p[9]==0)+(p[11]==1)+(p[12]==1)+(p[14]==0)+(p[15]==0);
              elemente=3;
              break; }
   case 6:  { s[1]=(p[1]==1)+(p[3]==1)+(p[7]==1)+(p[8]==0)+(p[11]==0)+(p[13]==0)+(p[17]==0)+(p[18]==1);
              s[2]=(p[1]==0)+(p[4]==1)+(p[9]==1)+(p[10]==0)+(p[11]==1)+(p[14]==0)+(p[19]==0)+(p[20]==1);
              s[3]=(p[2]==1)+(p[4]==0)+(p[6]==1)+(p[7]==0)+(p[12]==0)+(p[14]==1)+(p[16]==0)+(p[17]==1);
              s[4]=(p[2]==0)+(p[5]==1)+(p[8]==1)+(p[9]==0)+(p[12]==1)+(p[15]==0)+(p[18]==0)+(p[19]==1);
              s[5]=(p[3]==0)+(p[5]==0)+(p[6]==0)+(p[10]==1)+(p[13]==1)+(p[15]==1)+(p[16]==1)+(p[20]==0);
              elemente=5;
              break; }
   case 8:  { s[1]=(p[1]==1)+(p[2]==1)+(p[4]==0)+(p[5]==0)+(p[7]==1)+(p[8]==1)+(p[10]==0)+(p[11]==0)+(p[13]==1)+(p[14]==1)+(p[16]==0)+(p[17]==0);
              s[2]=(p[1]==0)+(p[3]==1)+(p[4]==1)+(p[6]==0)+(p[7]==0)+(p[9]==1)+(p[10]==1)+(p[12]==0)+(p[13]==0)+(p[15]==1)+(p[16]==1)+(p[18]==0);
              s[3]=(p[2]==0)+(p[3]==0)+(p[5]==1)+(p[6]==1)+(p[8]==0)+(p[9]==0)+(p[11]==1)+(p[12]==1)+(p[14]==0)+(p[15]==0)+(p[17]==1)+(p[18]==1);
              elemente=3;
              break; }
   default: { s[1]=(p[1]==1)+(p[3]==1)+(p[5]==1)+(p[7]==0)+(p[9]==0)+(p[11]==0)+(p[13]==1)+(p[15]==1)+(p[17]==1)+(p[19]==0)+(p[21]==0)+(p[23]==0);
              s[2]=(p[1]==0)+(p[4]==0)+(p[6]==1)+(p[7]==1)+(p[10]==1)+(p[12]==0)+(p[13]==0)+(p[16]==0)+(p[18]==1)+(p[19]==1)+(p[22]==1)+(p[24]==0);
              s[3]=(p[2]==1)+(p[3]==0)+(p[4]==1)+(p[8]==0)+(p[9]==1)+(p[10]==0)+(p[14]==1)+(p[15]==0)+(p[16]==1)+(p[20]==0)+(p[21]==1)+(p[22]==0);
              s[4]=(p[2]==0)+(p[5]==0)+(p[6]==0)+(p[8]==1)+(p[11]==1)+(p[12]==1)+(p[14]==0)+(p[17]==0)+(p[18]==0)+(p[20]==1)+(p[23]==1)+(p[24]==1);
              elemente=4;
              break;
                     }
  }

 kreuz++;
 for(i=1;i<elemente+1;i++)
  {
   Read(file,&laenge,1);
   Read(file,&buffer[0],laenge);
   fprintf(erg,"%s:   %d Punkte\n",buffer,s[i]);
  }
 Close(file);
 auf=3-auf;
}
 
void main()
{
 if((GfxBase = (struct GfxBase *)
  OpenLibrary("graphics.library",0)) == 0) exit();

 if((IntuitionBase = (struct IntuitionBase *)
  OpenLibrary("intuition.library",0)) == 0) exit();

 if ((screen = (struct Screen*) OpenScreen(&ns)) == NULL)
  {
   printf("Hilfe, kein Screen !!!!!\n");
   exit();
  }

 nw.Screen = screen;
 w = (struct Window *) OpenWindow(&nw);
 DosBase = OpenLibrary("dos.library",0);
 rp = w -> RPort;
 vp = &screen->ViewPort;
 erg=fopen("Ergebnis","w");
 Test1();
 Test2();
 ordnen();
 Ergebnis12();
 SetAPen(rp,0);
 RectFill(rp,0,10,640,256);
 kreuz=0;
 iff("Testbild3");
 filename[4]=was[0]+48;
 Test3();
 filename[4]=was[1]+48;
 Test3();
 filename[4]=was[2]+48;
 Test3();
 ende();
}

ende()
{
 if(auf==1) Close(file);
 fclose(erg);
 CloseWindow(w);
 CloseScreen(screen);
 CloseLibrary(DosBase);
 CloseLibrary(GfxBase);
 CloseLibrary(IntuitionBase);
 exit();
}
