From: Pasi Kallinen Date: Sun, 5 Feb 2023 19:29:19 +0000 (+0200) Subject: Split itemaction key pushing to separate function X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b85fb2a197a23b197a10765cda1de40abf951799;p=nethack Split itemaction key pushing to separate function --- diff --git a/src/invent.c b/src/invent.c index 6682d75f5..f44886626 100644 --- a/src/invent.c +++ b/src/invent.c @@ -40,6 +40,8 @@ static int doorganize_core(struct obj *); 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 */ @@ -2731,6 +2733,123 @@ ia_addmenu(winid win, int act, char let, const char *txt) 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) @@ -3025,118 +3144,7 @@ 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);