#include "exec/types.h"
#include "exec/exec.h"
#include "hardware/custom.h"
#include "hardware/cia.h"
#include "hardware/blit.h"
#include "devices/audio.h"
#include "intuition/intuition.h"
#include "graphics/gfxbase.h"
#include "stdio.h"


struct IntuitionBase *IntuitionBase = 0L;
struct GfxBase *GfxBase = 0L;
struct Window *ControlWindow = NULL;
struct IntuiMessage *MyIntuiMessage;
                
struct CIA         *cia = 0xbfe001;
/* #define custom (*ccustom) */
/* struct Custom      *ccustom = 0xdff000; */
/* these lines only needed if custom is not declared in hardware/custom.h */

LONG s1,s2;
int per=240, dper=20;

short *sndbuffer;



/* Two Images for hit gadget with alternate images  */


 UWORD imageone[] = 
 {

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0080,0x0000,
0x0040,0x0000,0x01C0,0x0000,0x00E0,0x0000,
0x01C0,0x0000,0x00E0,0x0000,0x0080,0x0000,
0x0040,0x0000,0x0000,0xE001,0xC000,0x0000,
0x0001,0xC000,0xE000,0x0000,0x0001,0x8000,
0x6000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0738,0x0000,0x0000,
0x0000,0x0330,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x01E0,0x0000,0x01E0,0x0000,
0x03F0,0x0000,0x03F0,0x0000,0x07F8,0x0000,
0x07F8,0x0000,0x0FFC,0x3FFF,0x0FFC,0x0000,
0x0FFF,0xFFFF,0xFFFC,0x0000,0x0FFF,0xE001,
0xFFFC,0x0000,0x07FC,0x0000,0x0FF8,0x0000,
0x07F0,0x0000,0x03F8,0x0000,0x03E0,0x3003,
0x01F0,0x0000,0x01C0,0x7003,0x80E0,0x0000,

0x01C0,0x07F8,0x00E0,0x0000,0x01C0,0x3FFF,
0x00C0,0x0000,0x01C0,0x7003,0x80C0,0x0000,
0x00E0,0xF003,0xC1C0,0x0000,0x0070,0xF003,
0xC380,0x0000,0x0038,0x7807,0x8700,0x0000,
0x001E,0x1FFE,0x1E00,0x0000,0x0007,0x8000,
0x7800,0x0000,0x0001,0xF807,0xC000,0x0000,
0x0000,0x1FFE,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0xEFC4,0x4FEF,0x776F,0x726B,
0x696E,0x672E,0x2E2E,0x6E6C,0x792E,0x0A0A,
0x2062,0x6520,0x6672,0x6565,0x6C79,0x2064,
0x6973,0x7472,0x6962,0x7574,0x6564,0x2066,
0x6F72,0x206E,0x6F6E,0x2D70,0x726F,0x6669,
0x740A,0x7265,0x0A20,0x2020,0x2020,0x2020,
0x2020,0x2020,0x2020,0x2D63,0x203D,0x2063,
0x7265,0x6174,0x6520,0x636F,0x6C6F,0x7220,
0x7265,0x6769,0x7374,0x6572,0x2069,0x6E66,
0x6F72,0x6D61,0x7469,0x6F6E,0x0A20,0x2020,
0x2020,0x2020,0x2020,0x696E,0x6669,0x6C65,
0x203D,0x2062,0x7275,0x7368,0x2066,0x696C,
0x6520,0x746F,0x2063,0x6F6E,0x7665,0x7274,
0x0A20,0x2020,0x2020,0x2020,0x206F,0x7574,
0x6669,0x6C65,0x203D,0x206F,0x7574,0x7075

 };

struct Image BoolImage = 
 {
  0,0,          /* LeftEdge, TopEdge */
  49,22,2,      /* Width, Height, Depth */
  imageone,
  0x03, 0x0, NULL
 };


 struct IntuiText IntuiStr[15] =
 {
  {2,3,JAM2,16,27,NULL,(UBYTE *)" 0", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)" 1", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)" 2", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)" 3", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)" 4", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)" 5", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)" 6", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)" 7", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)" 8", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)" 9", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)"10", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)"11", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)"12", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)"13", NULL},
  {2,3,JAM2,16,27,NULL,(UBYTE *)"14", NULL}
 };


/* gadget structure */

 struct Gadget BoolGadget[15] =
{ 
 {
  NULL,                         /* pointer to Next Gadget */
  10+8,25,49,22,                  /* Left, Top, Width, Height */
  GADGIMAGE|GADGHCOMP,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[0],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  0,                          /* ID */
  NULL                          /* pointer to special data */
 },

 {
  &BoolGadget[0],                /* pointer to Next Gadget */
  70+8,25,49,22,                  /* Left, Top, Width, Height */
  GADGIMAGE|GADGHCOMP,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[1],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  1,                          /* ID */
  NULL                          /* pointer to special data */
 },

 {
  &BoolGadget[1],                /* pointer to Next Gadget */
  130+8,25,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[2],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  2,                          /* ID */
  NULL                          /* pointer to special data */
 },


 {
  &BoolGadget[2],                /* pointer to Next Gadget */
  190+8,25,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[3],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  3,                          /* ID */
  NULL                          /* pointer to special data */
 },


 {
  &BoolGadget[3],                /* pointer to Next Gadget */
  250+8,25,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[4],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  4,                          /* ID */
  NULL                          /* pointer to special data */
 },


 {
  &BoolGadget[4],                /* pointer to Next Gadget */
  10+8,75,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[5],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  5,                          /* ID */
  NULL                          /* pointer to special data */
 },


 {
  &BoolGadget[5],                /* pointer to Next Gadget */
  70+8,75,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[6],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  6,                          /* ID */
  NULL                          /* pointer to special data */
 },


 {
  &BoolGadget[6],                /* pointer to Next Gadget */
  130+8,75,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[7],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  7,                          /* ID */
  NULL                          /* pointer to special data */
 },

 {
  &BoolGadget[7],                /* pointer to Next Gadget */
  190+8,75,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[8],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  8,                          /* ID */
  NULL                          /* pointer to special data */
 },

 {
  &BoolGadget[8],                /* pointer to Next Gadget */
  250+8,75,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[9],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  9,                          /* ID */
  NULL                          /* pointer to special data */
 },


 {
  &BoolGadget[9],                /* pointer to Next Gadget */
  10+8,125,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[10],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  10,                          /* ID */
  NULL                          /* pointer to special data */
 },


 {
  &BoolGadget[10],                /* pointer to Next Gadget */
  70+8,125,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[11],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  11,                          /* ID */
  NULL                          /* pointer to special data */
 },


 {
  &BoolGadget[11],                /* pointer to Next Gadget */
  130+8,125,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[12],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  12,                          /* ID */
  NULL                          /* pointer to special data */
 },

 {
  &BoolGadget[12],                /* pointer to Next Gadget */
  190+8,125,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[13],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  13,                          /* ID */
  NULL                          /* pointer to special data */
 },


 {
  &BoolGadget[13],                /* pointer to Next Gadget */
  250+8,125,49,22,                  /* Left, Top, Width, Height */
  GADGHCOMP|GADGIMAGE,         /* Flags */
  GADGIMMEDIATE | RELVERIFY,                /* Activation flags */
  BOOLGADGET,                   /* Type */
  (APTR) &BoolImage,            /* pointer to Border Image */
  NULL,           /* pointer to Select Render */
  &IntuiStr[14],                 /* Pointer to GadgetText */
  0,                            /* MutualExclude */
  NULL,                         /* pointer to SpecialInfo */
  14,                          /* ID */
  NULL                          /* pointer to special data */
 }
 
};
 
 struct NewWindow NewControlWindow =
 { 
  0,0,
  325,170,
  2,3,
  GADGETDOWN|CLOSEWINDOW|GADGETUP, /* !!!!!! IDCMP Flags !!!!!!!! */
  WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|ACTIVATE|SMART_REFRESH,
  &BoolGadget[14], /* pointer to first gadget */
  NULL,
  (UBYTE *) "CLICK_A_PIG COPYDISK [BS ONE] ",
  NULL,
  NULL,
  0,0,
  325,170,
  WBENCHSCREEN
 };


main()
{
 ULONG Signals,MIClass,MICode, itemnum;
 APTR MIAddress;
 USHORT id;
 LONG i;
 VOID OpenALL(), CloseALL(), CleanUp();
 OpenALL();

 if(!(ControlWindow = (struct Window *) OpenWindow(&NewControlWindow))) CloseALL();

 MakeSound();

 for(;;)
 {
  while((MyIntuiMessage = (struct IntuiMessage *)
         GetMsg(ControlWindow->UserPort))==NULL)
  {
     if(per > 460 || per < 240) dper=-dper;
     per+=dper;
     Delay(120L);
     custom.aud[0].ac_per = per;
     custom.aud[1].ac_per = per;
   }
   MIClass = MyIntuiMessage->Class;
   MICode  = MyIntuiMessage->Code;
   MIAddress = MyIntuiMessage->IAddress;
   ReplyMsg(MyIntuiMessage);

   switch(MIClass)
   {
    case GADGETUP:
    id = ( ((struct Gadget *) (MIAddress))->GadgetID);
    switch(id)
    {
     case 0:
      Execute("NEWCLI",0,0); break;
     case 1:
      custom.dmacon = 0x0003;
      FreeMem(sndbuffer,65544L);
      break;
     case 2:
      MakeSound(); break;
     case 3:
      Execute("sys:3",0,0); break;
     case 4:
      Execute("sys:4",0,0); break;
     case 5:
      Execute("sys:5",0,0); break;
     case 6:
      Execute("sys:6",0,0); break;
     case 7:
      Execute("sys:7",0,0); break;
     case 8:
      Execute("sys:8",0,0); break;
     case 9:
      Execute("sys:9",0,0);break;
     case 10:
      Execute("sys:10",0,0);break;
     case 11:
      Execute("sys:11",0,0); break;
     case 12:
      Execute("sys:12",0,0);break;
     case 13:
      Execute("sys:13",0,0); break;
     case 14:
      Execute("sys:14",0,0); break;
    }

    break;

    case CLOSEWINDOW:

    while(MyIntuiMessage=(struct IntuiMessage *)
     GetMsg(ControlWindow->UserPort)) ReplyMsg(MyIntuiMessage);
    CleanUp();
    exit(TRUE);
    break;
   } /* switch */
 } /* for */
}
/* ************************************** end *************************** */

VOID OpenALL()
{
 /*==Intuition==*/

 if(!(IntuitionBase=(struct IntuitionBase *) OpenLibrary( "intuition.library",(LONG)LIBRARY_VERSION) ));
 {
   CloseALL();
 }

 /*==Graphics Library==*/

 if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",(LONG)LIBRARY_VERSION)));
 {
   CloseALL();
 }
}

VOID CloseALL()
{
 if(ControlWindow) CloseWindow(ControlWindow);
 if(GfxBase) CloseLibrary(GfxBase);
} 

VOID CleanUp()
{
 custom.dmacon = 0x0003;
 FreeMem(sndbuffer,65544L);
 CloseALL();
}


MakeSound()
{
LoadSound();
PlaySong();
}  

LoadSound()
{
FILE *fopen(), *fp;
SHORT *ptr, *AllocMem();
LONG i;

sndbuffer = AllocMem(65544L,MEMF_CHIP);
ptr = sndbuffer;

custom . dmacon = 0x0003;
fp = fopen("df1:Thriller","r");
if (fp == NULL) return(0);

s1 = 0; s2 =65544;
for (i=0; i<s1; i++)
	getc(fp);

for (i=s1/2; i<s2/2; i++)
	{
	*ptr++ = getc(fp)*256 + getc(fp);
	}

fclose (fp);
}

PlaySong()
{
custom . aud[0].ac_ptr = (UWORD *)sndbuffer;
custom . aud[0].ac_len = s2/2-s1/2;
custom . aud[0].ac_per = per;
custom . aud[0].ac_vol = 42;

custom . aud[1].ac_ptr = (UWORD *)sndbuffer;
custom . aud[1].ac_len = s2/2-s1/2;
custom . aud[1].ac_per = per;
custom . aud[1].ac_vol = 42;

custom . dmacon = 0x8203;
}


