/*---(FontDesigner)------- File test.c (Hauptprogramm) ----------*/


#include "header.h"

/*------------------------ Globale Variablen --------------------------*/

struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
ULONG DiskfontBase,DosBase;
long XMatrix=8,YMatrix=8,BaseLine=7,HelpLine=4,DMode=1,Ascii=65;
long Quadrant=1,undoascii=65;
struct TextFont *tftopaz,*tfuser;
struct Window *wind;
struct RastPort *rast;
ULONG *cmatrix;
BYTE *drawmem;
struct Image *oima,*drima,*mima;
struct FileInfoBlock *f_info;
ULONG maske[]=
{
   0x80000000,1073741824,536870912,268435456,134217728,67108864,
   33554432,16777216,8388608,4194304,2097152,1048576,524288,
   262144,131072,65536,32768,16384,8192,4096,2048,1024,512,256,128,
   64,32,16,8,4,2,1,
};

ULONG cmemo[100],scmemo[100],undomem[100];

extern short recdat[][4],FAscii,TAscii;

/*-------------------- H A U P T P R O G R A M M -------------------*/
main()
{
ULONG class;
USHORT code;
short mox,moy,i,mode,j;
long *adr,*point;
BYTE flag=0;

   Oplibs();

   if(GetMemory(1)<0)
   {
      Shure(3);
      Cllibs();
      exit(0);
   }
   if(Display()<0)
   {
      Shure(3);
      Cllibs();
      GetMemory(0);
      exit(0);
   }
   tfuser=tftopaz=rast->Font;

   FOREVER
   {
      Wait(1<<wind->UserPort->mp_SigBit);
      while(ExaIntui(wind,&class,&code))
      {
         mox=wind->MouseX;moy=wind->MouseY;

         switch (class)
         {

            case CLOSEWINDOW:
               if(Shure(0)==1)break;
               if(flag==1){ RemFont(tfuser);CloseFont(tfuser); }
               CloseWindow(wind);
               GetMemory(0);
               Cllibs();
               exit(0);

            case VANILLAKEY:
               adr=cmatrix+100*Ascii;point=undomem;
               undoascii=Ascii;
               for(j=0;j<=99;j++,point++,adr++)*point=*adr;
               Ascii=code;
               AsciiOut();
               Mem_to_Matrix();
               break;

            case MOUSEBUTTONS:
            if(code!=SELECTDOWN && code!=MENUDOWN)break;
            mode=1;
            if(code==MENUDOWN)mode=0;
            i=Prurec(mox,moy,recdat,0,40);
            if(i<0)break;
            if(i>=4 && i<=15){ ChangeMatrix(i);break; }
            if(i != 32)
            {
               adr=cmatrix+100*Ascii;point=undomem;
               undoascii=Ascii;
               for(j=0;j<=99;j++,point++,adr++)*point=*adr;
            }
            if(i>=29)Invert(rast,recdat[i]);
            switch (i)
            {
               case 0: DrawInto(mode);break;
               case 1: case 2: case 3:
                  ChangeAscii(i-1);
                  break;
               case 16:
                  if(DMode==1)break;
                  DMode=1;
                  Invert(rast,recdat[16]);Invert(rast,recdat[17]);
                  break;
               case 17:
                  if(DMode==0)break;
                  DMode=0;
                  Invert(rast,recdat[16]);Invert(rast,recdat[17]);
                  break;
               case 18: case 19: case 20:
                  Invert(rast,recdat[i]);
                  Delete(i-18);
                  Invert (rast,recdat[i]);
                  break;
               case 21: case 22: case 23: case 24:
                  Invert(rast,recdat[i]);
                  Scroll(i-21);
                  Invert(rast,recdat[i]);
                  break;
               case 25: case 26: case 27: case 28:
                  if((i-25)==Quadrant)break;
                  Invert(rast,recdat[Quadrant+25]);
                  Quadrant=i-25;
                  Invert(rast,recdat[i]);
                  break;
               case 29: case 30: Mirror(i-29);break;
               case 31: Rotate();break;
               case 32: Undo();break;
               case 33: Revers();break;
               case 34:
                  if(flag==1){ RemFont(tfuser);CloseFont(tfuser); }
                  flag=1;
                  j=LoadDiskFont();
                  if(j==-3){ flag=0;Shure(3);break; }
                  if(j==-2){ flag=0;break; }
                  if(j==-1)
                  {
                     tfuser=tftopaz;
                     Shure(1);
                     flag=0;
                  }
                  if(flag==1)Shure(6);
                  else Shure(7);
                  for(j=FAscii;j<=TAscii;j++)
                     Font_to_Mem(j);
                  Shure(6);
                  Ascii=65;
                  XMatrix=tfuser->tf_XSize;
                  if(XMatrix > 64)XMatrix=64;
                  YMatrix=tfuser->tf_YSize;
                  if(YMatrix > 50)YMatrix=50;
                  BaseLine=tfuser->tf_Baseline;
                  if(BaseLine > 50)BaseLine=49;
                  HelpLine=XMatrix/2;
                  Mem_to_Matrix();
                  AsciiOut();Matout();
                  break;
               case 35: case 36:
                  if(i==35) Expand_x();
                  else Expand_y();
                  break;
               case 37: SaveFont();break;
               case 38: Programm();break;
               case 39: Show();break;
               case 40: MoveAscii();break;
            }
            if(i>=29)Invert(rast,recdat[i]);
         }
      }
   }
}
