;/* simplegtgadget.c -- execute me to compile me lc -b1 -cfistq -v -y simplegtgadget blink FROM LIB:c.o simplegtgadget.o TO simplegtgadget LIB LIB:lc.lib LIB:amiga.lib quit ** ** The example listed here shows how to use the NewGadget structure and ** the GadTools library functions discussed above to create a simple ** button gadget. ** ** Simple example of a GadTools gadget. Compiled with SAS C v5.10a */ #define INTUI_V36_NAMES_ONLY #include <exec/types.h> #include <intuition/intuition.h> #include <intuition/gadgetclass.h> #include <libraries/gadtools.h> #include <clib/exec_protos.h> #include <clib/intuition_protos.h> #include <clib/gadtools_protos.h> #include <stdio.h> #ifdef LATTICE int CXBRK(void) { return(0); } /* Disable Lattice CTRL/C handling */ int chkabort(void) { return(0); } /* really */ #endif /* Gadget defines of our choosing, to be used as GadgetID's. */ #define MYGAD_BUTTON (4) VOID process_window_events(struct Window *); VOID gadtoolsWindow(VOID); struct TextAttr Topaz80 = { "topaz.font", 8, 0, 0, }; struct Library *IntuitionBase; struct Library *GadToolsBase; /* ** Open all libraries and run. Clean up when finished or on error.. */ void main(void) { if ( (IntuitionBase = OpenLibrary("intuition.library", 37)) != NULL ) { if ( (GadToolsBase = OpenLibrary("gadtools.library", 37)) != NULL ) { gadtoolsWindow(); CloseLibrary(GadToolsBase); } CloseLibrary(IntuitionBase); } } /* ** Prepare for using GadTools, set up gadgets and open window. ** Clean up and when done or on error. */ VOID gadtoolsWindow(VOID) { struct Screen *mysc; struct Window *mywin; struct Gadget *glist, *gad; struct NewGadget ng; void *vi; glist = NULL; if ( (mysc = LockPubScreen(NULL)) != NULL ) { if ( (vi = GetVisualInfo(mysc, TAG_END)) != NULL ) { /* GadTools gadgets require this step to be taken */ gad = CreateContext(&glist); /* create a button gadget centered below the window title */ ng.ng_TextAttr = &Topaz80; ng.ng_VisualInfo = vi; ng.ng_LeftEdge = 150; ng.ng_TopEdge = 20 + mysc->WBorTop + (mysc->Font->ta_YSize + 1); ng.ng_Width = 100; ng.ng_Height = 12; ng.ng_GadgetText = "Click Here"; ng.ng_GadgetID = MYGAD_BUTTON; ng.ng_Flags = 0; gad = CreateGadget(BUTTON_KIND, gad, &ng, TAG_END); if (gad != NULL) { if ( (mywin = OpenWindowTags(NULL, WA_Title, "GadTools Gadget Demo", WA_Gadgets, glist, WA_AutoAdjust, TRUE, WA_Width, 400, WA_InnerHeight, 100, WA_DragBar, TRUE, WA_DepthGadget, TRUE, WA_Activate, TRUE, WA_CloseGadget, TRUE, WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW | BUTTONIDCMP, WA_PubScreen, mysc, TAG_END)) != NULL ) { GT_RefreshWindow(mywin, NULL); process_window_events(mywin); CloseWindow(mywin); } } /* FreeGadgets() must be called after the context has been ** created. It does nothing if glist is NULL */ FreeGadgets(glist); FreeVisualInfo(vi); } UnlockPubScreen(NULL, mysc); } } /* ** Standard message handling loop with GadTools message handling functions ** used (GT_GetIMsg() and GT_ReplyIMsg()). */ VOID process_window_events(struct Window *mywin) { struct IntuiMessage *imsg; struct Gadget *gad; BOOL terminated = FALSE; while (!terminated) { Wait (1 << mywin->UserPort->mp_SigBit); /* Use GT_GetIMsg() and GT_ReplyIMsg() for handling */ /* IntuiMessages with GadTools gadgets. */ while ((!terminated) && (imsg = GT_GetIMsg(mywin->UserPort))) { /* GT_ReplyIMsg() at end of loop */ switch (imsg->Class) { case IDCMP_GADGETUP: /* Buttons only report GADGETUP */ gad = (struct Gadget *)imsg->IAddress; if (gad->GadgetID == MYGAD_BUTTON) printf("Button was pressed.\n"); break; case IDCMP_CLOSEWINDOW: terminated = TRUE; break; case IDCMP_REFRESHWINDOW: /* This handling is REQUIRED with GadTools. */ GT_BeginRefresh(mywin); GT_EndRefresh(mywin, TRUE); break; } /* Use the toolkit message-replying function here... */ GT_ReplyIMsg(imsg); } } }