]> granicus.if.org Git - nethack/commitdiff
invent fixes, take II
authorPatR <rankin@nethack.org>
Tue, 16 Aug 2022 01:00:10 +0000 (18:00 -0700)
committerPatR <rankin@nethack.org>
Tue, 16 Aug 2022 01:00:10 +0000 (18:00 -0700)
Make sure that inventory listing when carrying only gold works when
build without TTY_PERM_INVENT as well as with that.

src/invent.c
win/curses/cursdial.c
win/curses/cursmain.c

index ec280f3bf9a5d2bdd591b17e55e10486ff2d0c7b..9de883c7aac8e9a52d3b150aa340e00ed898adff 100644 (file)
@@ -3226,7 +3226,6 @@ display_pickinv(
         if (g.cached_pickinv_win == WIN_ERR)
             g.cached_pickinv_win = create_nhwindow(NHW_MENU);
         win = g.cached_pickinv_win;
-        show_gold = TRUE;
     } else {
         win = WIN_INVEN;
         menu_behavior = MENU_BEHAVE_PERMINV;
@@ -5412,15 +5411,22 @@ display_binventory(coordxy x, coordxy y, boolean as_if_seen)
 void
 prepare_perminvent(winid window)
 {
-    win_request_info *wri UNUSED;
+    win_request_info *wri;
 
     if (!done_setting_perminv_flags) {
         wri_info = zerowri;
-        /*TEMPORARY*/
-        char *envtmp = nh_getenv("TTYINV");
-        wri_info.fromcore.invmode = envtmp ? atoi(envtmp) : InvNormal;
+#if defined(TTY_PERM_INVENT)
+        if (WINDOWPORT(tty)) {
+            /*TEMPORARY*/
+            char *envtmp = nh_getenv("TTYINV");
+
+            wri_info.fromcore.invmode = envtmp ? atoi(envtmp) : InvNormal;
+        } else
+#endif
+            wri_info.fromcore.invmode = InvShowGold;
         /*  relay the mode settings to the window port */
         wri = ctrl_nhwindow(window, set_mode, &wri_info);
+        nhUse(wri);
         done_setting_perminv_flags = 1;
     }
 }
index 2f5bcd0a3e9d902c427f753692c3968e4c30a9d2..53918aa5901b76a79906dac4b9700c9ce51ec3a6 100644 (file)
@@ -754,14 +754,14 @@ curses_display_nhmenu(
     if (current_menu == NULL) {
         impossible(
                 "curses_display_nhmenu: attempt to display nonexistent menu");
-        return '\033';
+        return -1; /* not ESC which falsely claims 27 items were selected */
     }
 
     menu_item_ptr = current_menu->entries;
 
     if (menu_item_ptr == NULL) {
         impossible("curses_display_nhmenu: attempt to display empty menu");
-        return '\033';
+        return -1;
     }
 
     /* Reset items to unselected to clear out selections from previous
@@ -790,15 +790,14 @@ curses_display_nhmenu(
         selected = (MENU_ITEM_P *) alloc((unsigned)
                                          (num_chosen * sizeof (MENU_ITEM_P)));
         count = 0;
-
         menu_item_ptr = current_menu->entries;
 
         while (menu_item_ptr != NULL) {
             if (menu_item_ptr->selected) {
                 if (count == num_chosen) {
                     impossible("curses_display_nhmenu: Selected items "
-                          "exceeds expected number");
-                     break;
+                               "exceeds expected number");
+                    break;
                 }
                 selected[count].item = menu_item_ptr->identifier;
                 selected[count].count = menu_item_ptr->count;
@@ -810,6 +809,7 @@ curses_display_nhmenu(
         if (count != num_chosen) {
             impossible(
            "curses_display_nhmenu: Selected items less than expected number");
+            num_chosen = min(count, num_chosen);
         }
     }
 
index ea33ef2d4a50b3e492135f43fcfc0e8a443d5a7c..cbdcf45593abcbfd74b6c91244593c6461fc99c9 100644 (file)
@@ -420,7 +420,7 @@ curses_display_nhwindow(winid wid, boolean block)
 
     if (curses_is_menu(wid) || curses_is_text(wid)) {
         curses_end_menu(wid, "");
-        curses_select_menu(wid, PICK_NONE, &selected);
+        (void) curses_select_menu(wid, PICK_NONE, &selected);
         return;
     }