home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 2
/
goldfish_vol2_cd1.bin
/
files
/
game
/
think
/
crazyclock
/
source
/
namewindow.c
< prev
Wrap
C/C++ Source or Header
|
1993-12-21
|
3KB
|
112 lines
/*
* namewindow.c V1.1
*
* name window handling
*
* (c) 1992-1993 Holger Brunst
*/
#include <CClock.h>
/* 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);
}