;/* simplegad.c - Execute me to compile me with SAS C 5.10
LC -b1 -cfistq -v -y -j73 simplegad.c
Blink FROM LIB:c.o,simplegad.o TO simplegad LIBRARY LIB:LC.lib,LIB:Amiga.lib
quit
**
** The example below demonstrates a simple application gadget. The
** program declares a Gadget structure set up as a boolean gadget with
** complement mode highlighting. The gadget is attached to the window
** when it is opened by using the WA_Gadgets tag in the OpenWindowTags()
** call.
**
** simplegad.c - show the use of a button gadget.
*/
#define INTUI_V36_NAMES_ONLY
#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <stdio.h>
#ifdef LATTICE
int CXBRK(void) { return(0); } /* Disable Lattice CTRL/C handling */
int chkabort(void) { return(0); } /* really */
#endif
struct Library *IntuitionBase;
#define BUTTON_GAD_NUM (3)
#define MYBUTTONGADWIDTH (100)
#define MYBUTTONGADHEIGHT (50)
/* NOTE that the use of constant size and positioning values are
** not recommended; it just makes it easy to show what is going on.
** The position of the gadget should be dynamically adjusted depending
** on the height of the font in the title bar of the window.
*/
UWORD buttonBorderData[] =
{
0,0, MYBUTTONGADWIDTH + 1,0, MYBUTTONGADWIDTH + 1,MYBUTTONGADHEIGHT + 1,
0,MYBUTTONGADHEIGHT + 1, 0,0,
};
struct Border buttonBorder =
{
-1,-1,1,0,JAM1,5,buttonBorderData,NULL,
};
struct Gadget buttonGad =
{
NULL, 20,20, MYBUTTONGADWIDTH,MYBUTTONGADHEIGHT,
GFLG_GADGHCOMP, GACT_RELVERIFY | GACT_IMMEDIATE,
GTYP_BOOLGADGET, &buttonBorder, NULL, NULL,0,NULL,BUTTON_GAD_NUM,NULL,
};
/*
** routine to show the use of a button (boolean) gadget.
*/
VOID main(int argc, char **argv)
{
struct Window *win;
struct IntuiMessage *msg;
struct Gadget *gad;
ULONG class;
BOOL done;
/* make sure to get intuition version 37, for OpenWindowTags() */
IntuitionBase = OpenLibrary("intuition.library", 37);
if (IntuitionBase)
{
if (win = OpenWindowTags(NULL,
WA_Width, 400,
WA_Height, 100,
WA_Gadgets, &buttonGad,
WA_Activate, TRUE,
WA_CloseGadget, TRUE,
WA_IDCMP, IDCMP_GADGETDOWN | IDCMP_GADGETUP |
IDCMP_CLOSEWINDOW,
TAG_END))
{
done = FALSE;
while (done == FALSE)
{
Wait(1L << win->UserPort->mp_SigBit);
while ( (done == FALSE) &&
(msg = (struct IntuiMessage *)GetMsg(win->UserPort)))
{
/* Stash message contents and reply, important when message
** triggers some lengthy processing
*/
class = msg->Class;
/* gadget address is ONLY valid for gadget messages! */
if ((class == IDCMP_GADGETUP) || (class == IDCMP_GADGETDOWN))
gad = (struct Gadget *)(msg->IAddress);
ReplyMsg((struct Message *)msg);
/* switch on the type of the event */
switch (class)
{
case IDCMP_GADGETUP:
/* caused by GACT_RELVERIFY */
printf("received an IDCMP_GADGETUP, gadget number %d\n",
gad->GadgetID);
break;
case IDCMP_GADGETDOWN:
/* caused by GACT_IMMEDIATE */
printf("received an IDCMP_GADGETDOWN, gadget number %d\n",
gad->GadgetID);
break;
case IDCMP_CLOSEWINDOW:
/* set a flag that we are done processing events... */
printf("received an IDCMP_CLOSEWINDOW\n");
done = TRUE;
break;
}
}
}
CloseWindow(win);
}
CloseLibrary(IntuitionBase);
}
}