/*************************************************************************
/*                                                                       *
/* C-Beispielprogramm für die Get-It ( Diskettenmagazin der AIT-UG )     *
/* geschrieben von Peter Fischer, RP.-Ebert-Str. 6, D-3257 Springe 1     *
/*                                                                       *
/* Kurs 6 : Systemroutinen                                               *
/* Datum : 3.6.89                                                        *
/*                                                                       *
/* Copyrights (c)'89 by PeeF.                                            *
/* Der ausführbare Code ist Public Domain in bester Manier.              *
/* Der Quellcode darf von jedem/r GetiT-Leser/in benutzt werden, wie es  *
/* in seinem/ihrem Interesse liegt. NUR : Wenn Ihr wesentliche Teile     *
/* kopiert, so erwähnt, daß der Teil von mir stammt. Okay ?              *
/*                                                                       *
/*************************************************************************/

#include <intuition/intuition.h>
#include <exec/exec.h>
#include <graphics/gfx.h>
#include <stdio.h>
#include <libraries/arpbase.h>

/* Für AmigaDOS & Co                                                     */

extern struct IntuitionBase *IntuitionBase;
extern struct GfxBase *GfxBase;
extern struct DiskfontBase *DiskfontBase;
extern struct ArpBase *ArpBase;

/* Selbstdarstellung des Programms                                       */
extern struct Screen *Scr;
extern struct Window *Fenster;
extern struct RastPort *rp;

/* Für Warteschleifen                                                    */
extern struct IntuiMess *mess;

/*************************************************************************/
/*                                                                       *
 *  Mehrere Beispiele für Gadgets. Alles, was gut und teuer ist !        *
 * ---------------------------------------------------------------       */

SHORT pairs[][10] = 
{ { -1,-1,  11,-1,  11, 11,  -1, 11,  -1,-1 },
  { -1,-1,  11,-1,  11, 11,  -1, 11,  -1,-1 },
  { -1,-1,  11,-1,  11, 11,  -1, 11,  -1,-1 },
  { -1,-1,  41,-1,  41, 11,  -1, 11,  -1,-1 },
  { -3,-3,  43,-3,  43, 13,  -3, 13,  -3,-3 },
  { -1,-1,  11,-1,  11, 11,  -1, 11,  -1,-1 },
  { -1,-1, 601,-1, 601, 13,  -1, 13,  -1,-1 },
  { -1,-1,  61,-1,  61, 13,  -1, 13,  -1,-1 },
  { -1,-1, 601,-1, 601, 13,  -1, 13,  -1,-1 },
  { -1,-1,  13,-1,  13,201,  -1,201,  -1,-1 },
  { -1,-1, 601,-1, 601,101,  -1,101,  -1,-1 }
};

struct Border border[] =
{ { 0,0, 4,0,JAM1,5,pairs[0],NULL },
  { 0,0, 5,0,JAM1,5,pairs[1],NULL },
  { 0,0, 6,0,JAM1,5,pairs[2],NULL },
  { 0,0, 7,0,JAM1,5,pairs[3],NULL },
  { 0,0, 8,0,JAM1,5,pairs[4],NULL },
  { 0,0, 9,0,JAM1,5,pairs[5],NULL },
  { 0,0,10,0,JAM1,5,pairs[6],NULL },
  { 0,0,11,0,JAM1,5,pairs[7],NULL },
  { 0,0,12,0,JAM1,5,pairs[8],NULL },
  { 0,0,13,0,JAM1,5,pairs[9],NULL },
  { 0,0,14,0,JAM1,5,pairs[10],NULL },
};

char buffer0[201] = "Quit", undo0[201] = "", buffer1[11] = "", undo1[11] = ""; 

struct StringInfo strinfo[] =
{ { buffer0,undo0,0,200,0,  0,0,0,0,NULL,NULL,NULL },
  { buffer1,undo1,0, 10,0,  0,0,0,0,NULL,NULL,NULL }
};

struct PropInfo propinfo[] = 
{ { AUTOKNOB | FREEHORIZ,0, 0,1024,0,   0,0,0,0,0 },
  { AUTOKNOB | FREEVERT ,0,32 * 50,   0,2048,0,0,0,0,0 },
  { AUTOKNOB | FREEVERT | FREEHORIZ, 32 * 20, 32 * 80, 1024,2048,0,0,0,0,0 }
};

struct IntuiText text[] =
{ { 15,0,JAM1,0,0,NULL,"0",NULL },
  { 12,0,JAM1,0,0,NULL,"SUPERPOTI !",NULL }
};

struct Gadget gad[] =
{ { &gad[1],  0,  5, 10, 10, GADGHCOMP | SELECTED,
    TOGGLESELECT | RELVERIFY, BOOLGADGET , &border[0], &text[0], 
    NULL, 0, NULL, 0, NULL
  },
  { &gad[2], 20,  5, 10, 10, GADGHBOX,
    RELVERIFY, BOOLGADGET , &border[1], NULL,
    NULL, 0, NULL, 1, NULL
  },
  { &gad[3], 40,  5, 10, 10, GADGHCOMP,
    RELVERIFY, BOOLGADGET , &border[2], NULL,
    NULL, 0, NULL, 2, NULL
  },
  { &gad[4], 60,  5, 40, 10, GADGHIMAGE,
    RELVERIFY | TOGGLESELECT, BOOLGADGET , &border[3], &border[4],
    NULL, 0, NULL, 3, NULL
  },
  { &gad[5], 120, 5, 10, 10, GADGHBOX,
    RELVERIFY, BOOLGADGET , &border[5], NULL,
    NULL, 0, NULL, 4, NULL
  },
  { &gad[6],  0, 30,600, 12, GADGHCOMP,
    RELVERIFY, STRGADGET , &border[6], NULL,
    NULL, 0, &strinfo[0], 5, NULL
  },
  { &gad[7],250, 50, 60, 12, GADGHBOX,
    RELVERIFY | LONGINT, STRGADGET , &border[7], NULL,
    NULL, 0, &strinfo[1], 6, NULL 
  },
  { &gad[8],  0, 70,600, 12, GADGHCOMP,
    RELVERIFY, PROPGADGET , &border[8], NULL,
    NULL, 0, &propinfo[0], 7, NULL
  },
  { &gad[9],610,  0, 12,200, GADGHCOMP,
    RELVERIFY, PROPGADGET , &border[9], NULL,
    NULL, 0, &propinfo[1], 8, NULL
  },
  { NULL,     0, 90,600,100, GADGHCOMP,
    RELVERIFY, PROPGADGET , &border[10], &text[1],
    NULL, 0, &propinfo[2], 9, NULL
  }
};

gads()
{ struct IntuiMessage back;
  int i;
  char aus[120];

  for ( i = 0; i < 10; i++ )
    AddGadget ( Fenster,&gad[i],-1 );
  RefreshGadgets ( &gad[0],Fenster,NULL );
  ActivateGadget ( &gad[0],Fenster,NULL );
  do 
  { GetMess ( Fenster,GADGETUP,&back );
  } while ( (back.IAddress)->GadgetID != 5 );
  fmore();
  Move ( rp,10,160 );
  sprintf ( aus,"Zustand der Gadgets : " );
  Text ( rp,aus,strlen(aus) );
  Move ( rp,15,170 );
  sprintf ( aus,"String : %s, Nummer : %ld",buffer0,strinfo[1].LongInt );
  Text ( rp,aus,strlen(aus) );
  Move ( rp,15,180 );
  sprintf ( aus,"Pos. langes Gadget : %ld, Pos. hohes Gagdet : %ld",
            propinfo[0].HorizPot / 1024,propinfo[1].VertPot/2048 );
  Text ( rp,aus,strlen(aus) );
  Move ( rp,15,190 );
  sprintf ( aus,"Pos. 2D : ( %ld,%ld )",
            propinfo[2].HorizPot /1024 ,propinfo[2].VertPot/2048 );
  Text ( rp,aus,strlen(aus) );
  return ( TRUE );
}