Merge branch 'NetHack-3.6' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.6

This commit is contained in:
nhmall
2019-11-11 18:13:19 -05:00
3 changed files with 24 additions and 61 deletions

View File

@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.168 $ $NHDT-Date: 1573290414 2019/11/09 09:06:54 $
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.171 $ $NHDT-Date: 1573505739 2019/11/11 20:55:39 $
This fixes36.3 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.2 in May 2019. Please note, however,
@@ -221,7 +221,8 @@ playing music while hallucinating: message misspelled "butterflies"
putting on gloves while having slippery fingers transfered slipperiness to
those gloves; taking off slippery gloves directly was disallowed but
losing them in other ways transfered slipperiness to bare fingers
fix use of bcsign on a freed obj
when a monster reads a scroll of fire to cure sliming, don't access that
scroll's memory after it has been used up (bcsign)
Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
@@ -329,6 +330,7 @@ curses: enable the 'use_inverse' boolean option (via wincap WC_INVERSE flag)
to override default of False (for tty's benefit)
curses: force 'O' command's menus for 'symset' and 'roguesymset' options to
be wider so that fewer entries with set descriptions will wrap
curses: stop restricting menu width to half the display width
curses+'perm_invent': entries were wrapping without any control; usually not
noticeable because next entry overwrote, but visible for final entry
when whole inventory fit within the available height; looked ok with

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 options.c $NHDT-Date: 1572303730 2019/10/28 23:02:10 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.383 $ */
/* NetHack 3.6 options.c $NHDT-Date: 1573505739 2019/11/11 20:55:39 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.386 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Michael Allison, 2008. */
/* NetHack may be freely redistributed. See license for details. */
@@ -5432,44 +5432,6 @@ boolean setinitial, setfromfile;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin);
any = zeroany;
#ifdef CURSES_GRAPHICS /* this ought to be handled within curses... */
/*
* Symbol sets are formatted in two columns, "name description",
* on selectable lines. curses bases menu width on the length
* of non-selectable lines (main header, separators if present,
* with trailing spaces ignored) and defaults to half the map.
* Without something like this separator (shown after the menu
* title and a blank line which follows that) to force a wider
* menu, entries with long descriptions wrap. That would be
* ok if wrapping operated on the same two columns, but the
* menu doesn't know anything about those and the description
* is wrapping into the next line's name column, making long
* descriptions--and menus containing them--hard to read.
*/
if (WINDOWPORT("curses")) {
char tmp1[BUFSZ], tmp2[BUFSZ], bigbuf[BUFSZ + 1 + BUFSZ];
/* 4: room for space+letter+paren+space, fake selector;
2: added to 'biggest' when constructing 'fmtstr';
1: space between symset name+2 and symset description */
if (4 + biggest + 2 + 1 > (int) sizeof tmp1 - 1)
biggest = (int) sizeof tmp1 - 1 - (4 + 2 + 1);
(void) memset((genericptr_t) tmp1, '-', biggest);
tmp1[biggest] = '\0';
if (big_desc > (int) sizeof tmp2 - 1)
big_desc = (int) sizeof tmp2 - 1;
(void) memset((genericptr_t) tmp2, '-', big_desc);
tmp2[big_desc] = '\0';
Sprintf(bigbuf, "%4s", "");
Sprintf(eos(bigbuf), fmtstr, tmp1, tmp2);
bigbuf[BUFSZ - 1] = '\0';
any.a_int = 0;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
bigbuf, MENU_UNSELECTED);
}
#else
nhUse(big_desc);
#endif
any.a_int = 1; /* -1 + 2 [see 'if (sl->name) {' below]*/
if (!symset_name)
defindx = any.a_int;

View File

@@ -759,11 +759,10 @@ curses_display_nhmenu(winid wid, int how, MENU_ITEM_P ** _selected)
menu_determine_pages(current_menu);
/* Display pre and post-game menus centered */
if (((moves <= 1) && !invent) || program_state.gameover) {
if ((moves <= 1 && !invent) || program_state.gameover) {
win = curses_create_window(current_menu->width,
current_menu->height, CENTER);
} else { /* Display during-game menus on the right out of the way */
win = curses_create_window(current_menu->width,
current_menu->height, RIGHT);
}
@@ -1000,13 +999,13 @@ static void
menu_win_size(nhmenu *menu)
{
int maxwidth, maxheight, curentrywidth, lastline;
int maxentrywidth = (int) strlen(menu->prompt);
int maxheaderwidth = 0;
int maxentrywidth = 0;
int maxheaderwidth = menu->prompt ? (int) strlen(menu->prompt) : 0;
nhmenu_item *menu_item_ptr;
if (program_state.gameover) {
/* for final inventory disclosure, use full width */
maxwidth = term_cols - 2;
maxwidth = term_cols - 2; /* +2: borders assumed */
} 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
@@ -1029,7 +1028,7 @@ menu_win_size(nhmenu *menu)
maxheaderwidth = curentrywidth;
}
} else {
/* Add space for accelerator */
/* Add space for accelerator (selector letter) */
curentrywidth += 4;
#if 0 /* FIXME: menu glyphs */
if (menu_item_ptr->glyph != NO_GLYPH && iflags.use_menu_glyphs)
@@ -1041,20 +1040,20 @@ menu_win_size(nhmenu *menu)
}
}
/* 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;
}
/* Try not to wrap headers/normal text lines if possible. We can
go wider than half the screen for this purpose if need be */
if (maxheaderwidth > maxwidth) {
if (maxheaderwidth < (term_cols - 2))
maxwidth = maxheaderwidth;
else
maxwidth = term_cols - 2;
/*
* 3.6.3: This used to set maxwidth to maxheaderwidth when that was
* bigger but only set it to maxentrywidth if the latter was smaller,
* so entries wider than the default would always wrap unless at
* least one header or separator line was long, even when there was
* lots of space available to display them without wrapping. The
* reason to force narrow menus isn't known. It may have been to
* reduce the amount of map rewriting when menu is dismissed, but if
* so, that was an issue due to excessive screen writing for the map
* (output was flushed for each character) which was fixed long ago.
*/
maxwidth = max(maxentrywidth, maxheaderwidth);
if (maxwidth > term_cols - 2) { /* -2: space for left and right borders */
maxwidth = term_cols - 2;
}
/* Possibly reduce height if only 1 page */