static char obj_to_let(struct obj *);
static boolean item_naming_classification(struct obj *, char *, char *);
static int item_reading_classification(struct obj *, char *);
+static void ia_addmenu(winid, int, char, const char *);
+static void itemactions_pushkeys(struct obj *, int);
static void mime_action(const char *);
/* enum and structs are defined in wintype.h */
ATR_NONE, clr, txt, MENU_ITEMFLAGS_NONE);
}
+static void
+itemactions_pushkeys(struct obj *otmp, int act)
+{
+ switch (act) {
+ default:
+ impossible("Unknown item action");
+ case IA_NONE:
+ break;
+ case IA_UNWIELD:
+ cmdq_add_ec(CQ_CANNED, (otmp == uwep) ? dowield
+ : (otmp == uswapwep) ? remarm_swapwep
+ : (otmp == uquiver) ? dowieldquiver
+ : donull); /* can't happen */
+ cmdq_add_key(CQ_CANNED, '-');
+ break;
+ case IA_APPLY_OBJ:
+ cmdq_add_ec(CQ_CANNED, doapply);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_DIP_OBJ:
+ /* #altdip instead of normal #dip - takes potion to dip into
+ first (the inventory item instigating this) and item to
+ be dipped second, also ignores floor features such as
+ fountain/sink so we don't need to force m-prefix here */
+ cmdq_add_ec(CQ_CANNED, dip_into);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_NAME_OBJ:
+ case IA_NAME_OTYP:
+ cmdq_add_ec(CQ_CANNED, docallcmd);
+ cmdq_add_key(CQ_CANNED, (act == IA_NAME_OBJ) ? 'i' : 'o');
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_DROP_OBJ:
+ cmdq_add_ec(CQ_CANNED, dodrop);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_EAT_OBJ:
+ /* start with m-prefix; for #eat, it means ignore floor food
+ if present and eat food from invent */
+ cmdq_add_ec(CQ_CANNED, do_reqmenu);
+ cmdq_add_ec(CQ_CANNED, doeat);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_ENGRAVE_OBJ:
+ cmdq_add_ec(CQ_CANNED, doengrave);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_ADJUST_OBJ:
+ cmdq_add_ec(CQ_CANNED, doorganize); /* #adjust */
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_ADJUST_STACK:
+ cmdq_add_ec(CQ_CANNED, adjust_split); /* #altadjust */
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_SACRIFICE:
+ cmdq_add_ec(CQ_CANNED, dosacrifice);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_BUY_OBJ:
+ cmdq_add_ec(CQ_CANNED, dopay);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_QUAFF_OBJ:
+ /* start with m-prefix; for #quaff, it means ignore fountain
+ or sink if present and drink a potion from invent */
+ cmdq_add_ec(CQ_CANNED, do_reqmenu);
+ cmdq_add_ec(CQ_CANNED, dodrink);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_QUIVER_OBJ:
+ cmdq_add_ec(CQ_CANNED, dowieldquiver);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_READ_OBJ:
+ cmdq_add_ec(CQ_CANNED, doread);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_RUB_OBJ:
+ cmdq_add_ec(CQ_CANNED, dorub);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_THROW_OBJ:
+ cmdq_add_ec(CQ_CANNED, dothrow);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_TAKEOFF_OBJ:
+ cmdq_add_ec(CQ_CANNED, dotakeoff);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_TIP_CONTAINER:
+ cmdq_add_ec(CQ_CANNED, dotip);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_INVOKE_OBJ:
+ cmdq_add_ec(CQ_CANNED, doinvoke);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_WIELD_OBJ:
+ cmdq_add_ec(CQ_CANNED, dowield);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_WEAR_OBJ:
+ cmdq_add_ec(CQ_CANNED, dowear);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ case IA_SWAPWEAPON:
+ cmdq_add_ec(CQ_CANNED, doswapweapon);
+ break;
+ case IA_ZAP_OBJ:
+ cmdq_add_ec(CQ_CANNED, dozap);
+ cmdq_add_key(CQ_CANNED, otmp->invlet);
+ break;
+ }
+}
+
/* Show menu of possible actions hero could do with item otmp */
static int
itemactions(struct obj *otmp)
act = selected[0].item.a_int;
free((genericptr_t) selected);
- switch (act) {
- default:
- impossible("Unknown item action");
- case IA_NONE:
- break;
- case IA_UNWIELD:
- cmdq_add_ec(CQ_CANNED, (otmp == uwep) ? dowield
- : (otmp == uswapwep) ? remarm_swapwep
- : (otmp == uquiver) ? dowieldquiver
- : donull); /* can't happen */
- cmdq_add_key(CQ_CANNED, '-');
- break;
- case IA_APPLY_OBJ:
- cmdq_add_ec(CQ_CANNED, doapply);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_DIP_OBJ:
- /* #altdip instead of normal #dip - takes potion to dip into
- first (the inventory item instigating this) and item to
- be dipped second, also ignores floor features such as
- fountain/sink so we don't need to force m-prefix here */
- cmdq_add_ec(CQ_CANNED, dip_into);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_NAME_OBJ:
- case IA_NAME_OTYP:
- cmdq_add_ec(CQ_CANNED, docallcmd);
- cmdq_add_key(CQ_CANNED, (act == IA_NAME_OBJ) ? 'i' : 'o');
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_DROP_OBJ:
- cmdq_add_ec(CQ_CANNED, dodrop);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_EAT_OBJ:
- /* start with m-prefix; for #eat, it means ignore floor food
- if present and eat food from invent */
- cmdq_add_ec(CQ_CANNED, do_reqmenu);
- cmdq_add_ec(CQ_CANNED, doeat);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_ENGRAVE_OBJ:
- cmdq_add_ec(CQ_CANNED, doengrave);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_ADJUST_OBJ:
- cmdq_add_ec(CQ_CANNED, doorganize); /* #adjust */
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_ADJUST_STACK:
- cmdq_add_ec(CQ_CANNED, adjust_split); /* #altadjust */
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_SACRIFICE:
- cmdq_add_ec(CQ_CANNED, dosacrifice);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_BUY_OBJ:
- cmdq_add_ec(CQ_CANNED, dopay);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_QUAFF_OBJ:
- /* start with m-prefix; for #quaff, it means ignore fountain
- or sink if present and drink a potion from invent */
- cmdq_add_ec(CQ_CANNED, do_reqmenu);
- cmdq_add_ec(CQ_CANNED, dodrink);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_QUIVER_OBJ:
- cmdq_add_ec(CQ_CANNED, dowieldquiver);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_READ_OBJ:
- cmdq_add_ec(CQ_CANNED, doread);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_RUB_OBJ:
- cmdq_add_ec(CQ_CANNED, dorub);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_THROW_OBJ:
- cmdq_add_ec(CQ_CANNED, dothrow);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_TAKEOFF_OBJ:
- cmdq_add_ec(CQ_CANNED, dotakeoff);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_TIP_CONTAINER:
- cmdq_add_ec(CQ_CANNED, dotip);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_INVOKE_OBJ:
- cmdq_add_ec(CQ_CANNED, doinvoke);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_WIELD_OBJ:
- cmdq_add_ec(CQ_CANNED, dowield);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_WEAR_OBJ:
- cmdq_add_ec(CQ_CANNED, dowear);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- case IA_SWAPWEAPON:
- cmdq_add_ec(CQ_CANNED, doswapweapon);
- break;
- case IA_ZAP_OBJ:
- cmdq_add_ec(CQ_CANNED, dozap);
- cmdq_add_key(CQ_CANNED, otmp->invlet);
- break;
- }
+ itemactions_pushkeys(otmp, act);
}
destroy_nhwindow(win);