
#include "exec/types.h"
#include "intuition/intuition.h"

extern long code;
extern short flag;                   /*code from IntuiMessage*/
extern short horizvalue,vertvalue;

/*gadgets for main screen*/

/*gadgets and their border vectors */

 SHORT BorderVectors3[] = {
	0,0,
	59,0,
	59,54,
	0,54,
	0,0
};
 struct Border Border3 = {
	-1,-1,	/* XY origin relative to container TopLeft */
	3,0,JAM1,	/* front pen, back pen and drawmode */
	5,	/* number of XY vectors */
	BorderVectors3,	/* pointer to XY vectors */
	NULL	/* next border in list */
};

 SHORT BorderVectors1[] = {
	0,0,
	115,0,
	115,45,
	0,45,
	0,0
};
 struct Border Border1 = {
	-1,-1,	
	3,0,JAM1,
	5,	
	BorderVectors1,	
	NULL	
};

 struct Gadget Gadget3 = {
	NULL,	/* next gadget */
	172,74,	/* origin XY of hit box relative to window TopLeft */
	58,53,	/* hit box width and height */
	NULL,	/* gadget flags */
	RELVERIFY,	/* activation flags */
	BOOLGADGET,	/* gadget type flags */
	(APTR)&Border3,	/* gadget border or image to be rendered */
	NULL,	/* alternate imagery for selection */
	NULL,	/* first IntuiText structure */
	NULL,	/* gadget mutual-exclude long word */
	NULL,	/* SpecialInfo structure */
	NULL,	/* user-definable data */
	NULL	/* pointer to user-definable data */
};

 SHORT BorderVectors2[] = {
	0,0,
	48,0,
	48,71,
	0,71,
	0,0
};
 struct Border Border2 = {
	-1,-1,	
	3,0,JAM1,
	5,	
	BorderVectors2,	
	NULL	
};

 struct Gadget Gadget4 = {
	&Gadget3,
	66,131,	
	47,70,	
	NULL,	
    RELVERIFY,	
	BOOLGADGET,	
	(APTR)&Border2,	
	NULL,	
	NULL,	
	NULL,	
	NULL,	
	NULL,	
	NULL	
};

struct Gadget Gadget2 = {
	&Gadget4,	
	173,155,	
	114,44,	
	NULL,	
	RELVERIFY,	
	BOOLGADGET,	
	(APTR)&Border1,	
	NULL,	
	NULL,	
	NULL,	
	NULL,	
	NULL,	
	NULL	
};

 SHORT BorderVectors4[] = {
	0,0,
	71,0,
	71,27,
	0,27,
	0,0
};
 struct Border Border4 = {
	-1,-1,	
	3,0,JAM1,
	5,	
	BorderVectors4,	
	NULL	
};


 struct IntuiText IText4 = {
	3,0,JAM2,
	127,16,	
	0,
	"Request",	
	NULL	
};

 struct IntuiText IText3 = {
	3,0,JAM2,
	26,92,	
	0,	
	"Quit",	
	&IText4	
};

 struct IntuiText IText2 = {
	3,0,JAM2,
	135,97,	
	0,
	"Proportional",	
	&IText3	
};

 struct IntuiText IText1 = {
	3,0,JAM2,
	0,7,	
	0,	
	"String",	
	&IText2	
};

 struct Gadget Gadget1 = {
	&Gadget2,
	45,70,	
	70,26,	
	NULL,	
	RELVERIFY,	
	BOOLGADGET,	
	(APTR)&Border4,	
	NULL,	
	&IText1,
	NULL,	
	NULL,	
	NULL,	
	NULL	
};

/*gadgets for requesters */

/*OK gadget for requester code 1 */ 

 struct IntuiText ITextA1 = {
	3,2,JAM2,       /*front and back text pens,drawmode and fill byte */
	0,7,	        /* XY origin relative to container TopLeft */
	0,	            /* font pointer or NULL for default */
	"OK",	        /*pointer to text*/ 
	NULL	        /*next IntuiText structure */
};

SHORT ABorderVectors1[] = {
   0,0,
   33,0,
   33,16,
   0,16,
   0,0
};
struct Border ABorder1 = {
   -1,-1,
   3,0,JAM1,
   5,
   ABorderVectors1,
   NULL
};

struct Gadget AGadget1 = {
   NULL,
   127,69,
   33,16,
   NULL,
   RELVERIFY,
   BOOLGADGET,
   (APTR)&ABorder1,
   NULL,
   &ITextA1,
   NULL,
   NULL,
   NULL,
   NULL
};

#define AGadgetList1 AGadget1
 struct IntuiText ITextB2 = {
	3,2,JAM2,
	0,7,	
	0,	
	"No",	
	NULL	
};

/*yes and no gadgets for rquester code 2*/

 struct IntuiText ITextB3 = {
	3,2,JAM2,
	0,7,	
	0,	
	"Yes",	
	NULL	
};

struct Gadget BGadget3 = {
   NULL,
   248,75,
   33,16,
   NULL,
   RELVERIFY,
   BOOLGADGET,
   (APTR)&ABorder1,
   NULL,
   &ITextB3,
   NULL,
   NULL,
   NULL,
   NULL
};

struct Gadget BGadget2 = {
   &BGadget3,
   41,75,
   33,16,
   NULL,
   RELVERIFY,
   BOOLGADGET,
   (APTR)&ABorder1,
   NULL,
   &ITextB2,
   NULL,
   NULL,
   NULL,
   NULL
};
/*cancel and contine gadgets for requester code 3*/
/*other gadget lists are linked to this one*/

 struct IntuiText ITextC4 = {
	3,2,JAM2,
	0,7,	
	0,	
	"Continue",	
	NULL	
};
 struct IntuiText ITextC5 = {
	3,2,JAM2,
	0,7,	
	0,	
	"Cancel",	
	NULL	
};

SHORT CBorderVectors4[] = {
   0,0,
   67,0,
   67,17,
   0,17,
   0,0
};
struct Border CBorder4 = {
   -1,-1,
   3,0,JAM1,
   5,
   CBorderVectors4,
   NULL
};

struct Gadget CGadget5 = {
   NULL,
   218,98,
   66,16,
   NULL,
   RELVERIFY,
   BOOLGADGET,
   (APTR)&CBorder4,
   NULL,
   &ITextC5,
   NULL,
   NULL,
   NULL,
   NULL
};

struct Gadget CGadget4 = {
   &CGadget5,
   31,98,
   66,16,
   NULL,
   RELVERIFY,
   BOOLGADGET,
   (APTR)&CBorder4,
   NULL,
   &ITextC4,
   NULL,
   NULL,
   NULL,
   NULL
};

#define CGadgetList3 CGadget4

/*the string gadget, list 4, and its special info*/

UBYTE DGadget6SIBuff[28] = "";
UBYTE DGadget6SIUndo[28] = "";
struct StringInfo DGadget6SInfo = {
   DGadget6SIBuff,
   DGadget6SIUndo,
   1,
   27,
   0,
   0,0,0,0,0,
   0,
   0,
   NULL
};

SHORT DBorderVectors6[] = {
   0,0,
   209,0,
   209,9,
   0,9,
   0,0
};
struct Border DBorder6 = {
   -1,-1,
   3,0,JAM1,
   5,
   DBorderVectors6,
   NULL
};

struct Gadget DGadget6 = {
   &CGadget4,
   58,51,
   208,8,
   NULL,
   RELVERIFY,
   STRGADGET,
   (APTR)&DBorder6,
   NULL,
   NULL,
   NULL,
   (APTR)&DGadget6SInfo,
   NULL,
   NULL
};

/*the proportional gadgets, code 5, and their special info*/

struct Image ImageE8 = {
   0,0,
   8,4,
   0,
   NULL,
   0x0000,0x0000,
   NULL
};


struct PropInfo EGadget8SInfo = {
   AUTOKNOB+FREEVERT,
   0,0,
   0,0
};


struct Gadget EGadget8 = {
   &CGadget4,
   188,40,
   16,39,
   NULL,
   RELVERIFY,
   PROPGADGET,
   (APTR)&ImageE8,
   NULL,
   NULL,
   NULL,
   (APTR)&EGadget8SInfo,
   NULL,
   NULL
};
struct PropInfo EGadget7SInfo = {
   AUTOKNOB+FREEHORIZ,
   0,0,
   0,0,
};

struct Image ImageE7 = {
   0,0,
   92,14,
   0,
   NULL,
   0x0000,0x0000,
   NULL
};

struct Gadget EGadget7 = {
   &EGadget8,
   60,40,
   100,18,
   NULL,
   RELVERIFY,
   PROPGADGET,
   (APTR)&ImageE7,
   NULL,
   NULL,
   NULL,
   (APTR)&EGadget7SInfo,
   0,
   NULL
};



/*handles main screen gadget events*/

void HandleEvent(object)
APTR object;
    {
     if (object==(APTR)&Gadget1) 
       {stringadget();return;}            
     if (object==(APTR)&Gadget2) 
       {propgadget();return;}
     if (object==(APTR)&Gadget3) 
        {requestgadget();return;}  
     if (object==(APTR)&Gadget4) 
        {quit();return;}            /*sets the quit flag */ 
     return;
     }


/*handle events for requester*/

void HandleEventR(object)
APTR object;
{
       int i;
       if (object==(APTR)&AGadget1) {flag = TRUE;return;}
       if (object==(APTR)&BGadget2) {flag = TRUE;return;}
       if (object==(APTR)&BGadget3) {return;}
       if (object==(APTR) &CGadget4) {flag = TRUE;return;}
       if (object==(APTR) &CGadget5) 
            {
               i = strcmp(DGadget6SIBuff,DGadget6SIUndo);
               if (i!=0) strcpy(DGadget6SIBuff,DGadget6SIUndo);
               flag = TRUE;
               return;
            }
      if (object==(APTR) &EGadget7) 
            {
               horigadget(&EGadget7);
               return;
            }
      if (object==(APTR) &EGadget8) 
            {
               vertgadget(&EGadget8);
               return;
            }

      if (object==(APTR) &DGadget6) {return;}
}

/*reads proportional information*/

horigadget(gadget)
struct Gadget *gadget;
{
    struct PropInfo *spi;
    USHORT divisor,lsp;
    divisor = MAXPOT/100;
    spi = (struct PropInfo *)gadget->SpecialInfo;
    lsp = spi->HorizPot;
    horizvalue = lsp/divisor;
    horiztext();
    return(0);
}
vertgadget(gadget)
struct Gadget *gadget;
{
    struct PropInfo *spi;
    USHORT divisor,lsp;
    divisor = MAXPOT/100;
    spi = (struct PropInfo *)gadget->SpecialInfo;
    lsp = spi->VertPot;
    vertvalue = lsp/divisor;
    vertext();
    return(0);
}
