/* * $Id: coolmenu_interface2.h,v 1.1 2005/06/13 20:50:52 murrayma Exp $ * * Author: Markus Stenberg <fingon@iki.fi> * * Copyright (c) 1996 Markus Stenberg * All rights reserved * * Created: Mon Sep 16 23:02:01 1996 fingon * Last modified: Sat Jun 6 19:48:06 1998 fingon * */ /* Functions for toggling / changing values / changing strings */ /* These are the generic form ones */ static coolmenu *retrieve_matching_letter(coolmenu * c, char l) { l = tolower(l); for (; c; c = c->next) if (c->letter == l) return c; return NULL; } #if 0 static coolmenu *retrieve_matching_id(coolmenu * c, int i) { for (; c; c = c->next) if (c->id == i) return c; return NULL; } #endif #ifdef DASMAGIC4 #define MAYBESHOW ShowCoolMenu(player, c) #else #define MAYBESHOW #endif static void update_entry(dbref player, coolmenu * c, char l, int val) { int o; coolmenu *d = retrieve_matching_letter(c, l); DOCHECK(!d, "Invalid letter!"); DOCHECK(c->flags & CM_NUMBER, "Invalid type of field!"); o = d->value; d->value += val; if (d->value < 0) { val = 0 - o; d->value = 0; } if (d->value > d->maxvalue) { val = d->maxvalue - o; d->value = d->maxvalue; } DOCHECK(!val, "Uh.. You think about changing something and then don't."); if (val > 0) notify(player, tprintf("%s increased by %d to %d!", d->text, val, d->value)); else notify(player, tprintf("%s decreased by %d to %d!", d->text, 0 - val, d->value)); DASMAGIC3; MAYBESHOW; } static void update_entry_toggle(dbref player, coolmenu * c, char l) { coolmenu *d = retrieve_matching_letter(c, l); DOCHECK(!d, "Invalid letter!"); DOCHECK(!(d->flags & CM_TOGGLE), "Invalid type of field!"); #ifndef REAL_SNEAKY_SET if (d->value) notify(player, tprintf("%s set off!", d->text)); else notify(player, tprintf("%s set on!", d->text)); #endif d->value = !d->value; DASMAGIC3; MAYBESHOW; } static void update_entry_set(dbref player, coolmenu * c, char l, char *buffer) { coolmenu *d = retrieve_matching_letter(c, l); int i; DOCHECK(!d, "Invalid letter!"); DOCHECK(!(d->flags & (CM_STRING | CM_NUMBER)), "Invalid type of field!"); if (d->flags & CM_STRING) { if (d->text) free((void *) d->text); d->text = strdup(buffer); } else { i = atoi(buffer); if (i > d->maxvalue) i = d->maxvalue; DOCHECK(i < 0, "You consider a negative value, and then forget about it."); notify(player, tprintf("%s set to %d!", d->text, i)); d->value = i; } DASMAGIC3; MAYBESHOW; } #define CMD(a) void a (dbref player, void *data, char *buffer) #define COMMAND_ADD(fname,letter,mod) \ CMD(fname) \ { DASMAGIC; DOCHECK(!c, "Huh?"); if (buffer && (strlen(buffer) > 1 || (buffer[0] && buffer[0] != ' '))) \ { if (atoi(buffer) > 0) \ update_entry(player, DASMAGIC2, letter, mod*atoi(buffer)); \ else \ notify(player, "Invalid argument!"); \ } else update_entry(player, DASMAGIC2, letter, mod*1); } #define COMMAND_TOGGLE(fname,letter) \ CMD(fname) \ { DASMAGIC; DOCHECK(!c, "Huh?"); if (buffer && (strlen(buffer) > 1 || (buffer[0] && buffer[0] != ' '))) notify(player, "Invalid argument!"); \ else update_entry_toggle(player, DASMAGIC2, letter); } #define COMMAND_SET(fname,letter) \ CMD(fname) \ { DASMAGIC; DOCHECK(!c, "Huh?"); if (!(buffer && (strlen(buffer) > 1 || (buffer[0] && buffer[0] != ' ')))) notify(player, "Lack argument(s)!"); \ else update_entry_set(player, DASMAGIC2, letter, buffer); } #define COMMANDS(bname,letter) \ COMMAND_ADD(bname ## _add,letter,1); \ COMMAND_ADD(bname ## _minus,letter,-1); \ COMMAND_TOGGLE(bname ## _toggle,letter); \ COMMAND_SET(bname ## _set,letter); #define COMMANDSET(name) \ COMMANDS(name ## _a,'a'); \ COMMANDS(name ## _b,'b'); \ COMMANDS(name ## _c,'c'); \ COMMANDS(name ## _d,'d'); \ COMMANDS(name ## _e,'e'); \ COMMANDS(name ## _f,'f'); \ COMMANDS(name ## _g,'g'); \ COMMANDS(name ## _h,'h'); \ COMMANDS(name ## _i,'i'); \ COMMANDS(name ## _j,'j'); \ COMMANDS(name ## _k,'k'); \ COMMANDS(name ## _l,'l'); \ COMMANDS(name ## _m,'m'); \ COMMANDS(name ## _n,'n'); \ COMMANDS(name ## _o,'o'); \ COMMANDS(name ## _p,'p'); \ COMMANDS(name ## _q,'q'); \ COMMANDS(name ## _r,'r'); \ COMMANDS(name ## _s,'s'); \ COMMANDS(name ## _t,'t'); \ COMMANDS(name ## _u,'u'); \ COMMANDS(name ## _v,'v'); \ COMMANDS(name ## _w,'w'); \ COMMANDS(name ## _x,'x'); \ COMMANDS(name ## _y,'y'); \ COMMANDS(name ## _z,'z');