symbol set reorganization
Change the way symbol sets are loaded to make them have the same order as they appear in the symbols file rather than being reversed. Revise dat/symbols so that the new ordering yields a result similar to the old ordering, more or less. I've added a few set descriptions. The only substantive change is marking DECgraphics as primary-only (not available on rogue level) and adding new set DECgraphics_2 which is commented out near the end. Define symbol handling H_MAC since one of the sets specifies 'handling: MAC'. All H_MAC is used for now is to avoid showing MACgraphics as a symset when compiled without MAC_GRAPHICS_ENV (which was used for pre-OSX Mac by the old code in sys/mac/), so it will be hidden for everyone. I left handling H_CURS even though curses doesn't implement anything for it. It could do something when rendering the map or assign a function to 'cursesgraphics_mode_callback' for special init or both but hasn't needed to. Since curses is now supporting DECgraphics, define 'decgraphics_mode_callback' for it. No value is being assigned so that doesn't do anything; curses seems to be setting up the primary character set as text and secondary one as line-drawing without the need for that hook. With the added set descriptions, 'O's symset menu looked horrible for curses due to the way curses decides to set the width of menus and the resulting line wrapping which took place because of a too-narrow menu. I've added a chunk of code to the options handling code which shouldn't really be there but makes the menu much easier to read. Lastly, do some formatting cleanup in files.c.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 options.c $NHDT-Date: 1571045295 2019/10/14 09:28:15 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.376 $ */
|
||||
/* NetHack 3.6 options.c $NHDT-Date: 1571313653 2019/10/17 12:00:53 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.378 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2008. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -5336,8 +5336,8 @@ boolean setinitial, setfromfile;
|
||||
MENU_UNSELECTED);
|
||||
for (i = 0; i < numapes && ape; i++) {
|
||||
any.a_void = (opt_idx == 1) ? 0 : ape;
|
||||
/* length of pattern plus quotes (plus '<'/'>') is less than
|
||||
BUFSZ */
|
||||
/* length of pattern plus quotes (plus '<'/'>') is
|
||||
less than BUFSZ */
|
||||
Sprintf(apebuf, "\"%c%s\"", ape->grab ? '<' : '>',
|
||||
ape->pattern);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, apebuf,
|
||||
@@ -5383,18 +5383,27 @@ boolean setinitial, setfromfile;
|
||||
symset[which_set].name = symset_name;
|
||||
|
||||
if (res && symset_list) {
|
||||
int thissize, biggest = 0;
|
||||
int thissize,
|
||||
biggest = (int) (sizeof "Default Symbols" - sizeof ""),
|
||||
big_desc = 0;
|
||||
|
||||
for (sl = symset_list; sl; sl = sl->next) {
|
||||
/* check restrictions */
|
||||
if (rogueflag ? sl->primary : sl->rogue)
|
||||
continue;
|
||||
#ifndef MAC_GRAPHICS_ENV
|
||||
if (sl->handling == H_MAC)
|
||||
continue;
|
||||
#endif
|
||||
|
||||
setcount++;
|
||||
/* find biggest name */
|
||||
thissize = sl->name ? (int) strlen(sl->name) : 0;
|
||||
if (thissize > biggest)
|
||||
biggest = thissize;
|
||||
thissize = sl->desc ? (int) strlen(sl->desc) : 0;
|
||||
if (thissize > big_desc)
|
||||
big_desc = thissize;
|
||||
}
|
||||
if (!setcount) {
|
||||
pline("There are no appropriate %s symbol sets available.",
|
||||
@@ -5402,10 +5411,48 @@ boolean setinitial, setfromfile;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Sprintf(fmtstr, "%%-%ds %%s", biggest + 5);
|
||||
Sprintf(fmtstr, "%%-%ds %%s", biggest + 2);
|
||||
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;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"Default Symbols", MENU_UNSELECTED);
|
||||
@@ -5414,6 +5461,10 @@ boolean setinitial, setfromfile;
|
||||
/* check restrictions */
|
||||
if (rogueflag ? sl->primary : sl->rogue)
|
||||
continue;
|
||||
#ifndef MAC_GRAPHICS_ENV
|
||||
if (sl->handling == H_MAC)
|
||||
continue;
|
||||
#endif
|
||||
|
||||
if (sl->name) {
|
||||
any.a_int = sl->idx + 2;
|
||||
|
||||
Reference in New Issue
Block a user