extern APTR FImage,SImage,EImage,BImage;
extern APTR FSImage,SSImage,ESImage,BSImage;
extern movecur(),read_sector(),write_sector(),gotogad(),
       Fgadget(),Sgadget(),Egadget(),Bgadget(),fspecgad(),Dummy();

/* GADGETS.C; support routines for NewZAP - (c) 1986 John Hodgson
  
   Gadget notes :

   The HEX and ASCII window gadgets are invisible gadgets whose real purpose
   is to provide mousevents when selected in their "windows". The last gadget
   is a blanket gadget whose only purpose is to detect mouse presses in areas
   not previously defined. The purpose of the GADGIMMEDIATE flags are to
   are to provide rapid detection of left mouse presses used for selecting/
   deselecting the edit windows.

   Odd Intuition notes :
     GADGIMMEDIATE|FOLLOWMOUSE will return 1 GADGETDOWN and 1 MOUSEMOVE.

     GADGIMMEDIATE|RELVERIFY|FOLLOWMOUSE will return 1 GADGETDOWN,
     MOUSEMOVES whenever the mouse is moved, followed by GADGETUP.     

     RELVERIFY|FOLLOWMOUSE is like above, only the GADGETDOWN is substituted
     with an initial MOUSEMOVE.

     Note that a gadget selected with RELVERIFY and MOUSEMOVE flags set will
     report MOUSEMOVES as long as the user moves the mouse and keeps the LMB
     held down. Even if the gadget graphically de-selects by moving outside
     of its select box! Huh?!? Of course, no GADGETUP will be provided in this
     case.

     STRING GADGETS are buggy before the 1.2 release of Intuition. String
     gadget displays suffer do not completely redraw their input windows
     upon selection, nor do they correctly refresh during STRINGCENTER
     editing.
*/

UBYTE iobuf[10],filespec[80],bakbuf[80]; /* bakbuf shared by all string gads */
  
struct StringInfo ginfo = {
  &iobuf[0],0L,0,5,0,0,0,0,0,0,0L,0L,0L };
struct StringInfo finfo = {
  &filespec[0],&bakbuf[0],0,sizeof(filespec),0,0,0,0,0,0,0L,0L,0L };
    
struct Gadget gadget[11] = {
  { &gadget[1],  6, 24,430,131,GADGHNONE,   /* HEX window gadget */
        GADGIMMEDIATE|RELVERIFY|FOLLOWMOUSE,BOOLGADGET,
             0L,0L,0L,0L,0L,1,(APTR)&movecur },
  { &gadget[2],  437,24,197,131,GADGHNONE,  /* ASC window gadget */
        GADGIMMEDIATE|RELVERIFY|FOLLOWMOUSE,BOOLGADGET,
             0L,0L,0L,0L,0L,2,(APTR)&movecur },

  { &gadget[3],206,173, 53, 9,   /* UNDO gadget */
        GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,
             0L,0L,0L,0L,0L,3,(APTR)&read_sector },
  { &gadget[4],368,173, 49, 9,   /* SAVE gadget */
        GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,
             0L,0L,0L,0L,0L,4,(APTR)&write_sector },
  { &gadget[5],294,174, 40, 8,   /* GOTO string gadget */
        GADGHCOMP,GADGIMMEDIATE|RELVERIFY|STRINGCENTER|LONGINT,
            STRGADGET,0L,0L,0L,0L,(APTR)&ginfo,5,(APTR)&gotogad },

  { &gadget[6],301,158, 26, 12,  /* F arrow */
        GADGHIMAGE|GADGIMAGE,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,
            (APTR)&FSImage,(APTR)&FImage,0L,0L,0L,6,(APTR)&Fgadget },
  { &gadget[7],272,170, 17, 15,  /* S arrow */
        GADGHIMAGE|GADGIMAGE,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,
             (APTR)&SSImage,(APTR)&SImage,0L,0L,0L,7,(APTR)&Sgadget },
  { &gadget[8],339,170, 17, 15,  /* E arrow */
        GADGHIMAGE|GADGIMAGE,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,
            (APTR)&ESImage,(APTR)&EImage,0L,0L,0L,8,(APTR)&Egadget },
  { &gadget[9],301,185, 25, 13,  /* B arrow */
        GADGHIMAGE|GADGIMAGE,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,
            (APTR)&BSImage,(APTR)&BImage,0L,0L,0L,9,(APTR)&Bgadget },

  { &gadget[10],98,12, 250, 8,   /* filespec string gadget */
        GADGHCOMP,GADGIMMEDIATE|RELVERIFY,
           STRGADGET,0L,0L,0L,0L,(APTR)&finfo,10,(APTR)&fspecgad },

  { 0L,          1, 10, 637,189, /* cover remaining space - MUST be last! */
        GADGHNONE,GADGIMMEDIATE,BOOLGADGET,0L,0L,0L,0L,0L,11,(APTR)&Dummy }
};

/* This "GOTO" Image is used to overlay the string gadget when not in use.
   Note that the string gadget will erase this GOTO when selected. 

  bitmap : w = 48, h = 11
  ----- plane # 0: -----
*/
USHORT gotobrush [66*2] = { 
  0x7FFF,0xFFFF,0xFFF0, 
  0xC000,0x0,   0x18, 
  0x87C0,0xF0FE,0x1E08, 
  0x8EE1,0xF8FE,0x3F08, 
  0x9C03,0x9C38,0x7388, 
  0x9DE3,0x9C38,0x7388, 
  0x9CE3,0x9C38,0x7388, 
  0x8EE1,0xF838,0x3F08, 
  0x87E0,0xF07C,0x1E08, 
  0xC000,0x0,   0x18, 
  0x7FFF,0xFFFF,0xFFF0,
/*----- plane # 1: -----*/
  0x0,   0x0,   0x0, 
  0x0,   0x0,   0x0, 
  0x7F0, 0xFCFF,0x9F80, 
  0xFF9, 0xFEFF,0xBFC0, 
  0x1F03,0xDF3E,0x7FE0, 
  0x1FFB,0xDF3E,0x7FE0, 
  0x1FFB,0xDF3E,0x7FE0, 
  0xFF9, 0xFE3E,0x3FC0, 
  0x7F8, 0xFC7F,0x1F80, 
  0x0,   0x0,   0x0, 
  0x0,   0x0,   0x0
 };

struct Image GotoImage= { 0,0,45,11,2,&gotobrush[0],3,0,0L };
