/* äöü Drucker umschalten */

/*********************************************************************/
/*                    Aztec-C Control-Window V4.0                    */
/*********************************************************************/
/*    Programmname: Cont.c          *                                */
/* Includefilename: ContWind.h      *           H.J.P.               */
/*           Datum: Oct./Nov. 88    *                                */
/*********************************************************************/

#define MAXSTRSIZE 200      /* UndoBuffer für StringGadgets */
#define EDITOR   "ed "      /* Ein Space hinter Editornamen */
#define GBFRONTPEN   3      /* Gadget Border Front Farbe    */
#define GBBACKPEN    0      /* Gadget Border Back  Farbe    */
#define GTFRONTPEN   3      /* Gadget Text   Front Farbe    */
#define GTBACKPEN    2      /* Gadget Text   Back  Farbe    */
#define SBFRONTPEN   2      /* String Border Front Farbe    */
#define SBBACKPEN    2      /* String Border Back  Farbe    */
#define STFRONTPEN   3      /* String Text   Front Farbe    */
#define STBACKPEN    0      /* String Text   Back  Farbe    */
#define WDETAILPEN   2      /* Window Text         Farbe    */
#define WBLOCKPEN    3      /* Window Border       Farbe    */

#include <stdio.h>
#include <exec/types.h>
#include <intuition/intuition.h>
#include <functions.h>
#include "ContWind.h"

FILE *fp, *fopen();
static RamDisk=0;
static ErrDat=0;
static UBYTE exstr[MAXSTRSIZE];

main()
   {
    struct Window *Window;
    struct IntuiMessage *Message;
    ULONG class;
    APTR address;

    if ((IntuitionBase=OpenLibrary("intuition.library", 33L)) == NULL)
       goto beenden;
    if ((GfxBase=OpenLibrary("graphics.library", 33L)) == NULL)
       goto beenden;
    if ((Window=OpenWindow(&NewWindow)) == NULL)
       goto beenden;

    SwitchGadgets(OffGadget, Window);
    ActivateGadget(&MainfileGadget, Window, NULL);
    FOREVER
      {
       Wait(1L<<Window->UserPort->mp_SigBit);
       while (Message=(struct IntuiMessage *)GetMsg(Window->UserPort))
         {
          class=Message->Class;
          address=Message->IAddress;
          ReplyMsg(Message);
          switch(class)
            {
             case GADGETUP:
               GadgetMessage(address,Window);
               break;
             case CLOSEWINDOW:
               while (Message=(struct IntuiMessage *)GetMsg(Window->UserPort)) ReplyMsg(Message);
               goto beenden;
            }  /* switch */
         }  /* while  */
      }  /* FOREVER */

beenden:
    if (Window)        CloseWindow(Window);
    if (GfxBase)       CloseLibrary(GfxBase);
    if (IntuitionBase) CloseLibrary(IntuitionBase);
   }  /* main */

GadgetMessage(address,w)
   APTR address;
   struct Window *w;
   {

/* RAM Disk */

    if (address == (APTR)&RamDiskGadget) RamDisk ? (RamDisk=0) : (RamDisk=1);

/* ErrDat */

    if (address == (APTR)&ErrDatGadget) ErrDat ? (ErrDat=0) : (ErrDat=1);

/* Mainfile */

    if ((address == (APTR)&MainfileGadget) && (MainfileBuffer[0]))
      {
       strcpy(&WorkfileBuffer, &MainfileBuffer);
       strcat(WorkfileBuffer, ".c");
       RefreshGadgets(&WorkfileGadget, w, NULL);
       ActivateGadget(&InclfileGadget, w, NULL);
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* Save Opt */

    if (address == (APTR)&SaveOptGadget)
      {
       fp=fopen("ContDir/Cont.opt", "w");
       if (fp != NULL)
         {
          fwrite(CompOptBuffer, MAXSTRSIZE, 1, fp);
          fwrite(LinkOptBuffer, MAXSTRSIZE, 1, fp);
          fwrite(AssmOptBuffer, MAXSTRSIZE, 1, fp);
          fclose(fp);
         }  /* if */
      }  /* if */

/* Load Opt */

    if (address == (APTR)&LoadOptGadget)
      {
       fp=fopen("ContDir/Cont.opt", "r");
       if (fp != NULL)
         {
          fread(CompOptBuffer, MAXSTRSIZE, 1, fp);
          fread(LinkOptBuffer, MAXSTRSIZE, 1, fp);
          fread(AssmOptBuffer, MAXSTRSIZE, 1, fp);
          fclose(fp);
          RefreshGadgets(&LinkOptGadget, w, NULL);
          RefreshGadgets(&AssmOptGadget, w, NULL);
          RefreshGadgets(&CompOptGadget, w, NULL);
         }  /* if */
      }  /* if */
   
/* Save File */

    if (address == (APTR)&SaveFileGadget)
      {
       fp=fopen("ContDir/Cont.file", "w");
       if (fp != NULL)
         {
          fwrite(WorkfileBuffer, MAXSTRSIZE, 1, fp);
          fwrite(MainfileBuffer, MAXSTRSIZE, 1, fp);
          fwrite(InclfileBuffer, MAXSTRSIZE, 1, fp);
          fclose(fp);
         }  /* if */
      }  /* if */

/* Load File */

    if (address == (APTR)&LoadFileGadget)
      {
       fp=fopen("ContDir/Cont.file", "r");
       if (fp != NULL)
         {
          fread(WorkfileBuffer, MAXSTRSIZE, 1, fp);
          fread(MainfileBuffer, MAXSTRSIZE, 1, fp);
          fread(InclfileBuffer, MAXSTRSIZE, 1, fp);
          fclose(fp);
          RefreshGadgets(&WorkfileGadget, w, NULL);
          RefreshGadgets(&MainfileGadget, w, NULL);
          RefreshGadgets(&InclfileGadget, w, NULL);
          SwitchGadgets(OnGadget, w);
         }  /* if */
      }  /* if */

/* Ed.c */

    if (address == (APTR)&EdCGadget)
      {
       SwitchGadgets(OffGadget, w);
       ExEd(WorkfileBuffer);
       SwitchGadgets(OnGadget, w);
      }  /*  if */

/* Start Pr */

    if (address == (APTR)&StartPrGadget)
      {
       SwitchGadgets(OffGadget, w);
       Execute(MainfileBuffer,0L,0L);
       SwitchGadgets(OnGadget, w);
      }  /*  if */

/* AsLn */

    if (address == (APTR)&AsLnGadget)
      {
       SwitchGadgets(OffGadget, w);
       As();
       Ln();
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* CcAsLn */

    if (address == (APTR)&CcAsLnGadget)
      {
       SwitchGadgets(OffGadget, w);
       Cc();
       As();
       Ln();
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* Cc */

    if (address == (APTR)&CcGadget)
      {
       SwitchGadgets(OffGadget, w);
       Cc();
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* As */

    if (address == (APTR)&AsGadget)
      {
       SwitchGadgets(OffGadget, w);
       As();
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* Ln */

    if (address == (APTR)&LnGadget)
      {
       SwitchGadgets(OffGadget, w);
       Ln();
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* Dir DF0: */

    if (address == (APTR)&DirDf0Gadget)
      {
       ExDir("df0:");
      }  /* if */

/* Dir DF1: */

    if (address == (APTR)&DirDf1Gadget)
      {
       ExDir("df1:");
      }  /* if */

/* Dir RAM: */

    if (address == (APTR)&DirRamGadget)
      {
       ExDir("ram:");
      }  /* if */

/* Prt.c */

    if (address == (APTR)&PrtCGadget)
      {
       SwitchGadgets(OffGadget, w);
       ExPrint(WorkfileBuffer, "");
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* Prt.asm */

    if (address == (APTR)&PrtAsmGadget)
      {
       SwitchGadgets(OffGadget, w);
       ExPrint(MainfileBuffer, ".asm");
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* Prt.h */

    if (address == (APTR)&PrtHGadget)
      {
       SwitchGadgets(OffGadget, w);
       ExPrint(InclfileBuffer, "");
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* Ed .asm */

    if (address == (APTR)&EdAsmGadget)
      {
       SwitchGadgets(OffGadget, w);
       ExBefehl("ed ", ".asm", "");
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* ClearScr */

    if (address == (APTR)&ClearScrGadget)
      {
       exstr[0]='\0';
       strcat(exstr, "cls");
       Execute(exstr, 0L, 0L);
      }  /* if */

/* Ed.h */

    if (address == (APTR)&EdHGadget)
      {
       SwitchGadgets(OffGadget, w);
       ExEd(InclfileBuffer);
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* Prt Err */

    if (address == (APTR)&PrtErrDatGadget)
      {
       SwitchGadgets(OffGadget, w);
       ExPrint("ContDir/Cont.err", "");
       SwitchGadgets(OnGadget, w);
      }  /* if */

/* Ed Err */

    if (address == (APTR)&EdErrDatGadget)
      {
       SwitchGadgets(OffGadget, w);
       ExEd("ContDir/Cont.err");
       SwitchGadgets(OnGadget, w);
      }  /* if */

   }  /* Gadget Message */

Cc()
   {
    UBYTE txt[25];
    (ErrDat) ? (strcpy(txt, "cc >ContDir/Cont.err ")) : (strcpy(txt, "cc "));

    if (RamDisk)
      {
       ExBefehl(txt, " -O RAM:cprtemp.asm ", CompOptBuffer);
      }  /* if */
    else
      {
       ExBefehl(txt, " ", CompOptBuffer);
      }  /* else */
   }  /* Cc */

As()
   {
    if (RamDisk)
      {
       Execute("as RAM:cprtemp.asm", 0L, 0L);
       Execute("delete RAM:cprtemp.asm", 0L, 0L);
      }  /* if */
    else
      {
       ExBefehl("as ", " ", AssmOptBuffer);
      }  /* else */
   }  /* As */

Ln()
   {
    if (RamDisk)
      {
       ExBefehl("ln -O ", " RAM:cprtemp.o ", LinkOptBuffer);
       Execute("delete RAM:cprtemp.o", 0L, 0L);
      }  /* if */
    else
      {
       ExBefehl("ln ", ".o ", LinkOptBuffer);
      }  /* else */
   }  /* Ln */

   
ExBefehl(str1, str2, str3)
   UBYTE *str1[], *str2[], *str3[];
   {
    exstr[0]='\0';
    strcat(exstr, str1);
    strcat(exstr, MainfileBuffer);
    strcat(exstr, str2);
    strcat(exstr, str3);
    Execute(exstr, 0L, 0L);
   }  /* ExBefehl */

ExPrint(str1, str2)
   UBYTE *str1[], str2[];
   {
    exstr[0]='\0';
    strcat(exstr, "type ");
    strcat(exstr, str1);
    strcat(exstr, str2);
    strcat(exstr, " to prt:");
    Execute(exstr, 0L, 0L);
   }  /* ExPrint */

ExDir(str1)
   UBYTE *str1[];
   {
    exstr[0]='\0';
    strcat(exstr, "dir ");
    strcat(exstr, str1);
    Execute(exstr, 0L, 0L);
   }  /* ExDir */

ExEd(str1)
   UBYTE *str1[];
   {
    exstr[0]='\0';
    strcat(exstr, EDITOR);
    strcat(exstr, str1);
    Execute(exstr, 0L, 0L);
   }  /* ExEd */

SwitchGadgets(funcp, w)
   void (*funcp)();
   struct Window *w;
   {
    (*funcp)(&PrtCGadget,      w, NULL);
    (*funcp)(&PrtAsmGadget,    w, NULL);
    (*funcp)(&PrtHGadget,      w, NULL);
    (*funcp)(&EdCGadget,       w, NULL);
    (*funcp)(&EdAsmGadget,     w, NULL);
    (*funcp)(&EdHGadget,       w, NULL);
    (*funcp)(&CcGadget,        w, NULL);
    (*funcp)(&AsGadget,        w, NULL);
    (*funcp)(&LnGadget,        w, NULL);
    (*funcp)(&AsLnGadget,      w, NULL);
    (*funcp)(&CcAsLnGadget,    w, NULL);
    (*funcp)(&PrtErrDatGadget, w, NULL);
    (*funcp)(&EdErrDatGadget,  w, NULL);
   }  /* SwitchGadgets */

