src/hcode/include/coolmenu_interface2.h

Go to the documentation of this file.
00001 /*
00002  * Author: Markus Stenberg <fingon@iki.fi>
00003  *
00004  *  Copyright (c) 1996 Markus Stenberg
00005  *       All rights reserved
00006  *
00007  * Created: Mon Sep 16 23:02:01 1996 fingon
00008  * Last modified: Sat Jun  6 19:48:06 1998 fingon
00009  *
00010  */
00011 
00012 /* Functions for toggling / changing values / changing strings */
00013 
00014 /* These are the generic form ones */
00015 static coolmenu *retrieve_matching_letter(coolmenu * c, char l)
00016 {
00017     l = tolower(l);
00018     for (; c; c = c->next)
00019         if (c->letter == l)
00020             return c;
00021     return NULL;
00022 }
00023 
00024 #if 0
00025 static coolmenu *retrieve_matching_id(coolmenu * c, int i)
00026 {
00027     for (; c; c = c->next)
00028         if (c->id == i)
00029             return c;
00030     return NULL;
00031 }
00032 #endif
00033 #ifdef DASMAGIC4
00034 #define MAYBESHOW ShowCoolMenu(player, c)
00035 #else
00036 #define MAYBESHOW
00037 #endif
00038 
00039 static void update_entry(dbref player, coolmenu * c, char l, int val)
00040 {
00041     int o;
00042     coolmenu *d = retrieve_matching_letter(c, l);
00043 
00044     DOCHECK(!d, "Invalid letter!");
00045     DOCHECK(c->flags & CM_NUMBER, "Invalid type of field!");
00046     o = d->value;
00047     d->value += val;
00048     if (d->value < 0) {
00049         val = 0 - o;
00050         d->value = 0;
00051     }
00052     if (d->value > d->maxvalue) {
00053         val = d->maxvalue - o;
00054         d->value = d->maxvalue;
00055     }
00056     DOCHECK(!val,
00057         "Uh.. You think about changing something and then don't.");
00058     if (val > 0)
00059         notify_printf(player, "%s increased by %d to %d!", d->text, val,
00060                 d->value);
00061     else
00062         notify_printf(player, "%s decreased by %d to %d!", d->text,
00063                 0 - val, d->value);
00064     DASMAGIC3;
00065     MAYBESHOW;
00066 }
00067 
00068 static void update_entry_toggle(dbref player, coolmenu * c, char l)
00069 {
00070     coolmenu *d = retrieve_matching_letter(c, l);
00071 
00072     DOCHECK(!d, "Invalid letter!");
00073     DOCHECK(!(d->flags & CM_TOGGLE), "Invalid type of field!");
00074 #ifndef REAL_SNEAKY_SET
00075     if (d->value)
00076         notify_printf(player, "%s set off!", d->text);
00077     else
00078         notify_printf(player, "%s set on!", d->text);
00079 #endif
00080     d->value = !d->value;
00081     DASMAGIC3;
00082     MAYBESHOW;
00083 }
00084 
00085 static void update_entry_set(dbref player, coolmenu * c, char l,
00086     char *buffer)
00087 {
00088     coolmenu *d = retrieve_matching_letter(c, l);
00089     int i;
00090 
00091     DOCHECK(!d, "Invalid letter!");
00092     DOCHECK(!(d->flags & (CM_STRING | CM_NUMBER)),
00093         "Invalid type of field!");
00094     if (d->flags & CM_STRING) {
00095         if (d->text)
00096             free((void *) d->text);
00097         d->text = strdup(buffer);
00098     } else {
00099         i = atoi(buffer);
00100         if (i > d->maxvalue)
00101             i = d->maxvalue;
00102         DOCHECK(i < 0,
00103             "You consider a negative value, and then forget about it.");
00104         notify_printf(player, "%s set to %d!", d->text, i);
00105         d->value = i;
00106     }
00107     DASMAGIC3;
00108     MAYBESHOW;
00109 }
00110 
00111 
00112 
00113 #define CMD(a) void a (dbref player, void *data, char *buffer)
00114 
00115 
00116 #define COMMAND_ADD(fname,letter,mod) \
00117 CMD(fname) \
00118 { DASMAGIC; DOCHECK(!c, "Huh?"); if (buffer && (strlen(buffer) > 1 || (buffer[0] && buffer[0] != ' '))) \
00119 { if (atoi(buffer) > 0) \
00120    update_entry(player, DASMAGIC2, letter, mod*atoi(buffer)); \
00121  else \
00122    notify(player, "Invalid argument!"); \
00123 } else update_entry(player, DASMAGIC2, letter, mod*1); }
00124 
00125 #define COMMAND_TOGGLE(fname,letter) \
00126 CMD(fname) \
00127 { DASMAGIC; DOCHECK(!c, "Huh?"); if (buffer && (strlen(buffer) > 1 || (buffer[0] && buffer[0] != ' ')))  notify(player, "Invalid argument!"); \
00128  else update_entry_toggle(player, DASMAGIC2, letter); }
00129 
00130 #define COMMAND_SET(fname,letter) \
00131 CMD(fname) \
00132 { DASMAGIC; DOCHECK(!c, "Huh?"); if (!(buffer && (strlen(buffer) > 1 || (buffer[0] && buffer[0] != ' ')))) notify(player, "Lack argument(s)!"); \
00133  else update_entry_set(player, DASMAGIC2, letter, buffer); }
00134 
00135 #define COMMANDS(bname,letter) \
00136 COMMAND_ADD(bname ## _add,letter,1); \
00137 COMMAND_ADD(bname ## _minus,letter,-1); \
00138 COMMAND_TOGGLE(bname ## _toggle,letter); \
00139 COMMAND_SET(bname ## _set,letter);
00140 
00141 #define COMMANDSET(name) \
00142 COMMANDS(name ## _a,'a'); \
00143 COMMANDS(name ## _b,'b'); \
00144 COMMANDS(name ## _c,'c'); \
00145 COMMANDS(name ## _d,'d'); \
00146 COMMANDS(name ## _e,'e'); \
00147 COMMANDS(name ## _f,'f'); \
00148 COMMANDS(name ## _g,'g'); \
00149 COMMANDS(name ## _h,'h'); \
00150 COMMANDS(name ## _i,'i'); \
00151 COMMANDS(name ## _j,'j'); \
00152 COMMANDS(name ## _k,'k'); \
00153 COMMANDS(name ## _l,'l'); \
00154 COMMANDS(name ## _m,'m'); \
00155 COMMANDS(name ## _n,'n'); \
00156 COMMANDS(name ## _o,'o'); \
00157 COMMANDS(name ## _p,'p'); \
00158 COMMANDS(name ## _q,'q'); \
00159 COMMANDS(name ## _r,'r'); \
00160 COMMANDS(name ## _s,'s'); \
00161 COMMANDS(name ## _t,'t'); \
00162 COMMANDS(name ## _u,'u'); \
00163 COMMANDS(name ## _v,'v'); \
00164 COMMANDS(name ## _w,'w'); \
00165 COMMANDS(name ## _x,'x'); \
00166 COMMANDS(name ## _y,'y'); \
00167 COMMANDS(name ## _z,'z');

Generated on Mon May 28 04:25:24 2007 for BattletechMUX by  doxygen 1.4.7