X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fgadgets.c;h=b5afaa880cc92fc6bae8bee9cabf2b219e521ec7;hb=c12ae4bec59aed267be508426df06b948732daec;hp=7f5125d20cd885cf059dc131b0d7eb761be9ff7d;hpb=8932f698c0831ab0e4ae2e03d64a48be1aeee82a;p=rocksndiamonds.git diff --git a/src/libgame/gadgets.c b/src/libgame/gadgets.c index 7f5125d2..b5afaa88 100644 --- a/src/libgame/gadgets.c +++ b/src/libgame/gadgets.c @@ -1,7 +1,7 @@ /*********************************************************** * Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1994-2001 Artsoft Entertainment * +* (c) 1994-2002 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -63,6 +63,21 @@ static int getNewGadgetID() return id; } +#if 0 +void DUMP_GADGET_MAP_STATE() +{ + struct GadgetInfo *gi = gadget_list_first_entry; + + while (gi) + { + printf("-XXX-1-> '%s': %s\n", + gi->info_text, (gi->mapped ? "mapped" : "not mapped")); + + gi = gi->next; + } +} +#endif + static struct GadgetInfo *getGadgetInfoFromMousePosition(int mx, int my) { struct GadgetInfo *gi = gadget_list_first_entry; @@ -273,8 +288,13 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap) case GDI_INFO_TEXT: { int max_textsize = MAX_INFO_TEXTSIZE - 1; + char *text = va_arg(ap, char *); + + if (text != NULL) + strncpy(gi->info_text, text, max_textsize); + else + max_textsize = 0; - strncpy(gi->info_text, va_arg(ap, char *), max_textsize); gi->info_text[max_textsize] = '\0'; } break; @@ -556,14 +576,14 @@ void RedrawGadget(struct GadgetInfo *gi) struct GadgetInfo *CreateGadget(int first_tag, ...) { - struct GadgetInfo *new_gadget = checked_malloc(sizeof(struct GadgetInfo)); + struct GadgetInfo *new_gadget = checked_calloc(sizeof(struct GadgetInfo)); va_list ap; /* always start with reliable default values */ - memset(new_gadget, 0, sizeof(struct GadgetInfo)); /* zero all fields */ new_gadget->id = getNewGadgetID(); new_gadget->callback_info = default_callback_info; new_gadget->callback_action = default_callback_action; + new_gadget->next = NULL; va_start(ap, first_tag); HandleGadgetTags(new_gadget, first_tag, ap); @@ -594,7 +614,9 @@ void FreeGadget(struct GadgetInfo *gi) if (gi == gadget_list_last_entry) gadget_list_last_entry = gi_previous; - gi_previous->next = gi->next; + if (gi_previous) + gi_previous->next = gi->next; + free(gi); }