Merge branch 'NetHack-3.6'

This commit is contained in:
nhmall
2019-06-28 18:30:32 -04:00
9 changed files with 103 additions and 39 deletions
+31 -20
View File
@@ -135,7 +135,7 @@ curses_line_input_dialog(const char *prompt, char *answer, int buffer)
curses_got_input();
if (buffer > (int) sizeof input)
buffer = (int) sizeof input;
buffer = (int) sizeof input;
maxwidth = term_cols - 2;
if (iflags.window_inited) {
@@ -264,7 +264,8 @@ curses_character_input_dialog(const char *prompt, const char *choices,
any_choice = TRUE;
}
prompt_width = (int) strlen(askstr);
/* +1: room for a trailing space where the cursor will rest */
prompt_width = (int) strlen(askstr) + 1;
if ((prompt_width + 2) > maxwidth) {
prompt_height = curses_num_lines(askstr, maxwidth);
@@ -284,11 +285,11 @@ curses_character_input_dialog(const char *prompt, const char *choices,
/* TODO: add SUPPRESS_HISTORY flag, then after getting a response,
append it and use put_msghistory() on combined prompt+answer */
custompline(OVERRIDE_MSGTYPE, "%s", askstr);
curs_set(1);
}
/*curses_stupid_hack = 0; */
curs_set(1);
while (1) {
#ifdef PDCURSES
answer = wgetch(message_window);
@@ -342,6 +343,7 @@ curses_character_input_dialog(const char *prompt, const char *choices,
if (choices != NULL && answer != '\0' && index(choices, answer))
break;
}
curs_set(0);
if (iflags.wc_popup_dialog) {
/* Kludge to make prompt visible after window is dismissed
@@ -354,7 +356,6 @@ curses_character_input_dialog(const char *prompt, const char *choices,
curses_destroy_win(askwin);
} else {
curses_clear_unhighlight_message_window();
curs_set(0);
}
return answer;
@@ -388,7 +389,8 @@ curses_ext_cmd()
getbegyx(extwin2, y0, x0);
getmaxyx(extwin2, h, w);
extwin = newwin(1, w - 2, y0 + 1, x0 + 1);
if (w - 4 < maxlen) maxlen = w - 4;
if (w - 4 < maxlen)
maxlen = w - 4;
} else {
curses_get_window_xy(MESSAGE_WIN, &winx, &winy);
curses_get_window_size(MESSAGE_WIN, &messageh, &messagew);
@@ -985,14 +987,24 @@ menu_determine_pages(nhmenu *menu)
static void
menu_win_size(nhmenu *menu)
{
int width, height, maxwidth, maxheight, curentrywidth, lastline;
int maxwidth, maxheight, curentrywidth, lastline;
int maxentrywidth = (int) strlen(menu->prompt);
int maxheaderwidth = 0;
nhmenu_item *menu_item_ptr;
maxwidth = 38; /* Reasonable minimum usable width */
if ((term_cols / 2) > maxwidth) {
maxwidth = (term_cols / 2); /* Half the screen */
if (program_state.gameover) {
/* for final inventory disclosure, use full width */
maxwidth = term_cols - 2;
} else {
/* this used to be 38, which is 80/2 - 2 (half a 'normal' sized
screen minus room for a border box), but some data files
have been manually formatted for 80 columns (usually limited
to 78 but sometimes 79, rarely 80 itself) and using a value
less that 40 meant that a full line would wrap twice:
1..38, 39..76, and 77..80 */
maxwidth = 40; /* Reasonable minimum usable width */
if ((term_cols / 2) > maxwidth)
maxwidth = (term_cols / 2); /* Half the screen */
}
maxheight = menu_max_height();
@@ -1017,7 +1029,8 @@ menu_win_size(nhmenu *menu)
}
}
/* If widest entry is smaller than maxwidth, reduce maxwidth accordingly */
/* If widest entry is smaller than maxwidth, reduce maxwidth
accordingly (but not too far; minimum width will be applied below) */
if (maxentrywidth < maxwidth) {
maxwidth = maxentrywidth;
}
@@ -1032,8 +1045,6 @@ menu_win_size(nhmenu *menu)
maxwidth = term_cols - 2;
}
width = maxwidth;
/* Possibly reduce height if only 1 page */
if (!menu_is_multipage(menu, maxwidth, maxheight)) {
menu_item_ptr = menu->entries;
@@ -1047,16 +1058,16 @@ menu_win_size(nhmenu *menu)
if (lastline < maxheight) {
maxheight = lastline;
}
} else { /* If multipage, make sure we have enough width for page footer */
if (width < 20) {
width = 20;
}
}
height = maxheight;
menu->width = width;
menu->height = height;
/* avoid a tiny popup window; when it's shown over the endings of
old messsages rather than over the map, it is fairly easy for
the player to overlook it, particularly when walking around and
stepping on a pile of 2 items; also, multi-page menus need enough
room for "(Page M of N) => " even if all entries are narrower
than that; we specify same minimum width even when single page */
menu->width = max(maxwidth, 25);
menu->height = max(maxheight, 5);
}