;/* Talk2boopsi.c - Execute me to compile me with SAS/C 5.10b LC -b1 -cfistq -v -y -j73 Talk2boopsi.c Blink FROM LIB:c.o,Talk2boopsi.o TO Talk2boopsi LIBRARY LIB:LC.lib,LIB:Amiga.lib quit ;*/ /* This example creates a Boopsi prop gadget and integer string gadget, connecting them so they */ /* update each other when the user changes their value. The example program only initializes */ /* the gadgets and puts them on the window; it doesn't have to interact with them to make them */ /* talk to each other. */ #include <exec/types.h> #include <utility/tagitem.h> #include <intuition/intuition.h> #include <intuition/gadgetclass.h> /* contains IDs for gadget attributes */ #include <intuition/icclass.h> /* contains ICA_MAP, ICA_TARGET */ #include <clib/exec_protos.h> #include <clib/intuition_protos.h> #ifdef LATTICE /* Disable SAS/C CTRL/C handling */ int CXBRK(void) { return(0); } int chkabort(void) { return(0); } #endif UBYTE *vers = "\0$VER: Talk2boopsi 37.1"; struct Library *IntuitionBase; struct Window *w; struct IntuiMessage *msg; struct Gadget *prop, *integer; /* The attribute mapping lists */ struct TagItem prop2intmap[] = /* This tells the prop gadget to */ { /* map its PGA_Top attribute to */ {PGA_Top, STRINGA_LongVal}, /* STRINGA_LongVal when it */ {TAG_END,} /* issues an update about the */ }; /* change to its PGA_Top value. */ struct TagItem int2propmap[] = /* This tells the string gadget */ { /* to map its STRINGA_LongVal */ {STRINGA_LongVal, PGA_Top}, /* attribute to PGA_Top when it */ {TAG_END,} /* issues an update. */ }; #define PROPGADGET_ID 1L #define INTGADGET_ID 2L #define PROPGADGETWIDTH 10L #define PROPGADGETHEIGHT 80L #define INTGADGETHEIGHT 18L #define VISIBLE 10L #define TOTAL 100L #define INITIALVAL 25L #define MINWINDOWWIDTH 80 #define MINWINDOWHEIGHT (PROPGADGETHEIGHT + 70) #define MAXCHARS 3L void main(void) { BOOL done = FALSE; if (IntuitionBase = OpenLibrary("intuition.library", 37L)) { /* Open the window--notice that the window's IDCMP port */ /* does not listen for GADGETUP messages. */ if (w = OpenWindowTags(NULL, WA_Flags, WFLG_DEPTHGADGET | WFLG_DRAGBAR | WFLG_CLOSEGADGET | WFLG_SIZEGADGET, WA_IDCMP, IDCMP_CLOSEWINDOW, WA_MinWidth, MINWINDOWWIDTH, WA_MinHeight, MINWINDOWHEIGHT, TAG_END)) { /* Create a new propgclass object */ if (prop = (struct Gadget *)NewObject(NULL, "propgclass", GA_ID, PROPGADGET_ID, /* These are defined by gadgetclass and */ GA_Top, (w->BorderTop) + 5L, /* correspond to similarly named fields in */ GA_Left, (w->BorderLeft) + 5L, /* the Gadget structure. */ GA_Width, PROPGADGETWIDTH, GA_Height, PROPGADGETHEIGHT, ICA_MAP, prop2intmap, /* The prop gadget's attribute map */ /* The rest of this gadget's attributes are defined by propgclass. */ PGA_Total, TOTAL, /* This is the integer range of the prop gadget. */ PGA_Top, INITIALVAL, /* The initial integer value of the prop gadget. */ PGA_Visible, VISIBLE, /* This determines how much of the prop gadget area is */ /* covered by the prop gadget's knob, or how much of */ /* the gadget's TOTAL range is taken up by the prop */ /* gadget's knob. */ PGA_NewLook, TRUE, /* Use new-look prop gadget imagery */ TAG_END)) { /* create the integer string gadget. */ if (integer = (struct Gadget *)NewObject(NULL, "strgclass", GA_ID, INTGADGET_ID, /* Parameters for the Gadget structure */ GA_Top, (w->BorderTop) + 5L, GA_Left, (w->BorderLeft) + PROPGADGETWIDTH + 10L, GA_Width, MINWINDOWWIDTH - (w->BorderLeft + w->BorderRight + PROPGADGETWIDTH + 15L), GA_Height, INTGADGETHEIGHT, ICA_MAP, int2propmap, /* The attribute map */ ICA_TARGET, prop, /* plus the target. */ /* Th GA_Previous attribute is defined by gadgetclass and is used to */ /* wedge a new gadget into a list of gadget's linked by their */ /* Gadget.NextGadget field. When NewObject() creates this gadget, */ /* it inserts the new gadget into this list behind the GA_Previous */ /* gadget. This attribute is a pointer to the previous gadget */ /* (struct Gadget *). This attribute cannot be used to link new */ /* gadgetsinto the gadget list of an open window or requester, */ GA_Previous, prop, /* use AddGList() instead. */ STRINGA_LongVal, INITIALVAL, /* These attributes are defined by strgclass. */ STRINGA_MaxChars, MAXCHARS, /* The first contains the value of the */ TAG_END)) /* integer string gadget. The second is the */ /* maximum number of characters the user is */ /* allowed to type into the gadget. */ { SetGadgetAttrs(prop, w, NULL, /* Because the integer string gadget did not */ ICA_TARGET, integer, /* exist when this example created the prop */ TAG_END); /* gadget, it had to wait to set the */ /* ICA_Target of the prop gadget. */ AddGList(w, prop, -1, -1, NULL); /* Add the gadgets to the */ RefreshGList(prop, w, NULL, -1); /* window and display them. */ while (done == FALSE) /* Wait for the user to click */ { /* the window close gadget. */ WaitPort((struct MsgPort *)w->UserPort); while (msg = (struct IntuiMessage *) GetMsg((struct MsgPort *)w->UserPort)) { if (msg->Class == IDCMP_CLOSEWINDOW) done = TRUE; ReplyMsg(msg); } } RemoveGList(w, prop, -1); DisposeObject(integer); } DisposeObject(prop); } CloseWindow(w); } CloseLibrary(IntuitionBase); } }