]> granicus.if.org Git - nethack/commitdiff
Split itemaction key pushing to separate function
authorPasi Kallinen <paxed@alt.org>
Sun, 5 Feb 2023 19:29:19 +0000 (21:29 +0200)
committerPasi Kallinen <paxed@alt.org>
Sun, 5 Feb 2023 19:29:19 +0000 (21:29 +0200)
src/invent.c

index 6682d75f545dc84dbaacd996d7997d927556bf17..f448866262f06756f0ba64e12fe40e5ae0ed21a5 100644 (file)
@@ -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);