/* * namewindow.c V1.1 * * name window handling * * (c) 1992-1993 Holger Brunst */ #include /* Window data */ #define WIN_X 192 #define WIN_Y 68 #define WIN_W 256 #define WIN_H 64 #define WINDOW_IDCMP (IDCMP_REFRESHWINDOW|STRINGIDCMP) static struct Window *win; /* Gadget data */ #define GAD_W 200 #define GAD_H 15 #define GAD_X (WIN_W-GAD_W)/2 #define GAD_Y (WIN_H-GAD_H)/2 #define GAD_NAME 0 #define GAD_NUM 1 static const struct TagItem nametags[] = {GTST_String, "MrS. Anonymous", GTST_MaxChars, HIGH_STRLEN, TAG_DONE}; static struct Gadget *gadlist; static struct GadgetData gads[] = { { "Enter your Name", STRING_KIND, PLACETEXT_ABOVE, nametags, GAD_X, GAD_Y, GAD_W, GAD_H, NULL} }; /* Name buffer */ static char name[HIGH_STRLEN+1]; BOOL OpenNameWindow(void) { /* Create gadgets */ if (gadlist = CreateGadgetList(gads, GAD_NUM, 0)) { /* Open Window */ if (win = OpenWindowTags(NULL, WA_Left, WIN_X, WA_Top, WIN_Y, WA_Width, WIN_W, WA_Height, WIN_H, WA_PubScreen, Screen, WA_Flags, WFLG_SMART_REFRESH|WFLG_ACTIVATE| WFLG_RMBTRAP, TAG_DONE)) { /* Add gadgets to window */ AddGList(win, gadlist, ~0, ~0, NULL); RefreshGList(gadlist, win, NULL, ~0); GT_RefreshWindow(win, NULL); /* Acvtivate name gadget */ ActivateGadget(gads[GAD_NAME].gadget, win, NULL); /* Set IDCMPPort */ win->UserPort = IDCMPPort; win->UserData = HandleNameWindowIDCMP; ModifyIDCMP(win, WINDOW_IDCMP); /* O.K. */ return (TRUE); } FreeGadgets(gadlist); } /* failure */ return (FALSE); } static void CloseNameWindow(void) { RemoveGList(win, gadlist, ~0); CloseWindowSafely(win); FreeGadgets(gadlist); } void *HandleNameWindowIDCMP(struct IntuiMessage *msg) { switch (msg->Class) { case IDCMP_GADGETUP: { USHORT gad = (((struct Gadget *) msg->IAddress)->GadgetID); /* Close window? */ if (gad == GAD_NAME) { /* Copy string gadget buffer to internal buffer */ strcpy(name, ( (struct StringInfo *) ( (struct Gadget *) msg->IAddress )->SpecialInfo )->Buffer); /* Yes. Don't forget to reply message! */ GT_ReplyIMsg(msg); CloseNameWindow(); return (name); } break; } case IDCMP_REFRESHWINDOW: GT_BeginRefresh(win); GT_EndRefresh(win, TRUE); break; } return (NULL); }