more window port interface adjustments

further adjustments to the window port interface to pass a pointer
to a glyph_info struct which describes not just the glyph number
itself, but also the ttychar, the color, the glyphflags, and the
symset index.

This affects two existing window port calls that get passed glyphs
and does the parameter consistently for both of them using the
glyph_info struct pointer:
	print_glyph()
	add_menu().

The recently added glyphmod parameter is now unnecessary and has been
removed.
This commit is contained in:
nhmall
2021-01-05 10:09:37 -05:00
parent 2a9a18fa2f
commit c9673b3d9e
63 changed files with 841 additions and 705 deletions
+4 -4
View File
@@ -3308,14 +3308,14 @@ struct obj *obj;
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
any.a_int++;
Sprintf(buf, "an object on the %s", surface(cc.x, cc.y));
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
any.a_int++;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "a monster",
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"a monster", MENU_ITEMFLAGS_NONE);
any.a_int++;
Sprintf(buf, "the %s", surface(cc.x, cc.y));
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
end_menu(tmpwin, "Aim for what?");
tohit = rn2(4);
+2 -2
View File
@@ -1545,8 +1545,8 @@ struct obj *obj;
if (!g.dungeons[i].dunlev_ureached)
continue;
any.a_int = i + 1;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
g.dungeons[i].dname, MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, g.dungeons[i].dname, MENU_ITEMFLAGS_NONE);
num_ok_dungeons++;
last_ok_dungeon = i;
}
+27 -27
View File
@@ -1075,19 +1075,19 @@ cond_menu(VOID_ARGS)
Sprintf(mbuf, "change sort order from \"%s\" to \"%s\"",
menutitle[g.condmenu_sortorder],
menutitle[1 - g.condmenu_sortorder]);
add_menu(tmpwin, NO_GLYPH, &any, 'S', 0, ATR_NONE, mbuf,
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 'S', 0, ATR_NONE,
mbuf, MENU_ITEMFLAGS_NONE);
any = cg.zeroany;
Sprintf(mbuf, "sorted %s", menutitle[g.condmenu_sortorder]);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, mbuf,
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings, mbuf, MENU_ITEMFLAGS_NONE);
for (i = 0; i < SIZE(condtests); i++) {
idx = sequence[i];
Sprintf(mbuf, "cond_%-14s", condtests[idx].useroption);
any = cg.zeroany;
any.a_int = idx + 2; /* avoid zero and the sort change pick */
condtests[idx].choice = FALSE;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
mbuf,
condtests[idx].enabled
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
@@ -2346,7 +2346,7 @@ int arrmin, arrmax;
for (i = arrmin; i < arrmax; i++) {
any = cg.zeroany;
any.a_int = i + adj;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
arr[i], MENU_ITEMFLAGS_NONE);
}
@@ -2691,7 +2691,7 @@ query_conditions()
for (i = 0; i < SIZE(conditions); i++) {
any = cg.zeroany;
any.a_ulong = conditions[i].mask;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
conditions[i].text[0], MENU_ITEMFLAGS_NONE);
}
@@ -3260,7 +3260,7 @@ status_hilite_menu_choose_field()
#endif
any = cg.zeroany;
any.a_int = (i + 1);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
initblstats[i].fldname, MENU_ITEMFLAGS_NONE);
}
@@ -3299,7 +3299,7 @@ int fld;
any = cg.zeroany;
any.a_int = onlybeh = BL_TH_ALWAYS_HILITE;
Sprintf(buf, "Always highlight %s", initblstats[fld].fldname);
add_menu(tmpwin, NO_GLYPH, &any, 'a', 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 'a', 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
nopts++;
}
@@ -3307,7 +3307,7 @@ int fld;
if (fld == BL_CONDITION) {
any = cg.zeroany;
any.a_int = onlybeh = BL_TH_CONDITION;
add_menu(tmpwin, NO_GLYPH, &any, 'b', 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 'b', 0, ATR_NONE,
"Bitmask of conditions", MENU_ITEMFLAGS_NONE);
nopts++;
}
@@ -3316,7 +3316,7 @@ int fld;
any = cg.zeroany;
any.a_int = onlybeh = BL_TH_UPDOWN;
Sprintf(buf, "%s value changes", initblstats[fld].fldname);
add_menu(tmpwin, NO_GLYPH, &any, 'c', 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 'c', 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
nopts++;
}
@@ -3325,7 +3325,7 @@ int fld;
&& (at == ANY_INT || at == ANY_LONG)) {
any = cg.zeroany;
any.a_int = onlybeh = BL_TH_VAL_ABSOLUTE;
add_menu(tmpwin, NO_GLYPH, &any, 'n', 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 'n', 0, ATR_NONE,
"Number threshold", MENU_ITEMFLAGS_NONE);
nopts++;
}
@@ -3333,7 +3333,7 @@ int fld;
if (initblstats[fld].idxmax >= 0) {
any = cg.zeroany;
any.a_int = onlybeh = BL_TH_VAL_PERCENTAGE;
add_menu(tmpwin, NO_GLYPH, &any, 'p', 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 'p', 0, ATR_NONE,
"Percentage threshold", MENU_ITEMFLAGS_NONE);
nopts++;
}
@@ -3343,7 +3343,7 @@ int fld;
any = cg.zeroany;
any.a_int = onlybeh = BL_TH_TEXTMATCH;
Sprintf(buf, "%s text match", initblstats[fld].fldname);
add_menu(tmpwin, NO_GLYPH, &any, 't', 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 't', 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
nopts++;
}
@@ -3390,7 +3390,7 @@ boolean ltok, gtok;
Sprintf(buf, "Value goes down");
any = cg.zeroany;
any.a_int = 10 + LT_VALUE;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
if (str) {
@@ -3398,7 +3398,7 @@ boolean ltok, gtok;
str, (fld == BL_AC) ? "better (lower)" : "less");
any = cg.zeroany;
any.a_int = 10 + LE_VALUE;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
}
}
@@ -3409,7 +3409,7 @@ boolean ltok, gtok;
Sprintf(buf, "Value changes");
any = cg.zeroany;
any.a_int = 10 + EQ_VALUE;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
if (gtok) {
@@ -3418,7 +3418,7 @@ boolean ltok, gtok;
str, (fld == BL_AC) ? "worse (higher)" : "more");
any = cg.zeroany;
any.a_int = 10 + GE_VALUE;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
}
@@ -3429,7 +3429,7 @@ boolean ltok, gtok;
Sprintf(buf, "Value goes up");
any = cg.zeroany;
any.a_int = 10 + GT_VALUE;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
}
Sprintf(buf, "Select field %s value:", initblstats[fld].fldname);
@@ -3931,7 +3931,7 @@ int fld;
if (hlstr->fld == fld) {
any = cg.zeroany;
any.a_int = hlstr->id;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
hlstr->str, MENU_ITEMFLAGS_NONE);
}
hlstr = hlstr->next;
@@ -3939,19 +3939,19 @@ int fld;
} else {
any = cg.zeroany;
Sprintf(buf, "No current hilites for %s", initblstats[fld].fldname);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
}
/* separator line */
any = cg.zeroany;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, "",
MENU_ITEMFLAGS_NONE);
if (count) {
any = cg.zeroany;
any.a_int = -1;
add_menu(tmpwin, NO_GLYPH, &any, 'X', 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 'X', 0, ATR_NONE,
"Remove selected hilites",
MENU_ITEMFLAGS_NONE);
}
@@ -3968,7 +3968,7 @@ int fld;
{
any = cg.zeroany;
any.a_int = -2;
add_menu(tmpwin, NO_GLYPH, &any, 'Z', 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 'Z', 0, ATR_NONE,
"Add a new hilite", MENU_ITEMFLAGS_NONE);
}
@@ -4064,12 +4064,12 @@ shlmenu_redo:
if (countall) {
any = cg.zeroany;
any.a_int = -1;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"View all hilites in config format",
MENU_ITEMFLAGS_NONE);
any = cg.zeroany;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, "",
MENU_ITEMFLAGS_NONE);
}
@@ -4090,7 +4090,7 @@ shlmenu_redo:
Sprintf(buf, "%-18s", initblstats[i].fldname);
if (count)
Sprintf(eos(buf), " (%d defined)", count);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
}
+27 -27
View File
@@ -356,11 +356,11 @@ const struct ext_func_tab *efp; /* if Null, add a footnote to the menu */
char qbuf[QBUFSZ];
anything any = cg.zeroany;
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(menuwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"[A] Command autocompletes", MENU_ITEMFLAGS_NONE);
Sprintf(qbuf, "[m] Command accepts '%c' prefix",
g.Cmd.spkeys[NHKF_REQMENU]);
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE, qbuf,
add_menu(menuwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, qbuf,
MENU_ITEMFLAGS_NONE);
return (char *) 0;
} else {
@@ -405,16 +405,16 @@ doextlist(VOID_ARGS)
redisplay = FALSE;
any = cg.zeroany;
start_menu(menuwin, MENU_BEHAVE_STANDARD);
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(menuwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"Extended Commands List",
MENU_ITEMFLAGS_NONE);
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(menuwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"", MENU_ITEMFLAGS_NONE);
Sprintf(buf, "Switch to %s commands that don't autocomplete",
menumode ? "including" : "excluding");
any.a_int = 1;
add_menu(menuwin, NO_GLYPH, &any, 'a', 0, ATR_NONE, buf,
add_menu(menuwin, &nul_glyphinfo, &any, 'a', 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
if (!*searchbuf) {
@@ -424,7 +424,7 @@ doextlist(VOID_ARGS)
actual list of extended commands shown via separator lines;
having ':' as an explicit selector overrides the default
menu behavior for it; we retain 's' as a group accelerator */
add_menu(menuwin, NO_GLYPH, &any, ':', 's', ATR_NONE,
add_menu(menuwin, &nul_glyphinfo, &any, ':', 's', ATR_NONE,
"Search extended commands",
MENU_ITEMFLAGS_NONE);
} else {
@@ -437,18 +437,18 @@ doextlist(VOID_ARGS)
also want to hide it from general menu use) because it won't
work for interfaces which support ':' to search; use as a
general menu command takes precedence over group accelerator */
add_menu(menuwin, NO_GLYPH, &any, 's', ':', ATR_NONE,
add_menu(menuwin, &nul_glyphinfo, &any, 's', ':', ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
}
if (wizard) {
any.a_int = 4;
add_menu(menuwin, NO_GLYPH, &any, 'z', 0, ATR_NONE,
add_menu(menuwin, &nul_glyphinfo, &any, 'z', 0, ATR_NONE,
onelist ? "Switch to showing debugging commands in separate section"
: "Switch to showing all alphabetically, including debugging commands",
MENU_ITEMFLAGS_NONE);
}
any = cg.zeroany;
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(menuwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"", MENU_ITEMFLAGS_NONE);
menushown[0] = menushown[1] = 0;
n = 0;
@@ -490,7 +490,7 @@ doextlist(VOID_ARGS)
results menu. */
if (!menushown[pass]) {
Strcpy(buf, headings[pass]);
add_menu(menuwin, NO_GLYPH, &any, 0, 0,
add_menu(menuwin, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings, buf,
MENU_ITEMFLAGS_NONE);
menushown[pass] = 1;
@@ -499,16 +499,16 @@ doextlist(VOID_ARGS)
2nd field will be " " or " [A]" or " [m]" or "[mA]" */
Sprintf(buf, " %-14s %4s %s", efp->ef_txt,
doc_extcmd_flagstr(menuwin, efp), efp->ef_desc);
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(menuwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
++n;
}
if (n)
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(menuwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"", MENU_ITEMFLAGS_NONE);
}
if (*searchbuf && !n)
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(menuwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"no matches", MENU_ITEMFLAGS_NONE);
else
(void) doc_extcmd_flagstr(menuwin, (struct ext_func_tab *) 0);
@@ -647,8 +647,8 @@ extcmd_via_menu()
/* flush extended cmds for that letter already in buf */
Sprintf(buf, fmtstr, prompt);
any.a_char = prevaccelerator;
add_menu(win, NO_GLYPH, &any, any.a_char, 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, any.a_char,
0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
acount = 0;
if (!(accelerator != prevaccelerator || one_per_line))
wastoolong = TRUE;
@@ -671,8 +671,8 @@ extcmd_via_menu()
/* flush buf */
Sprintf(buf, fmtstr, prompt);
any.a_char = prevaccelerator;
add_menu(win, NO_GLYPH, &any, any.a_char, 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, any.a_char, 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
Sprintf(prompt, "Extended Command: %s", cbuf);
end_menu(win, prompt);
@@ -1584,8 +1584,8 @@ wiz_intrinsic(VOID_ARGS)
ordering, not their numerical PROP values), can only be
set to timed values here so show a separator */
any.a_int = 0;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "--",
MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, "--", MENU_ITEMFLAGS_NONE);
}
any.a_int = i + 1; /* +1: avoid 0 */
oldtimeout = u.uprops[p].intrinsic & TIMEOUT;
@@ -1593,7 +1593,7 @@ wiz_intrinsic(VOID_ARGS)
Sprintf(buf, "%-27s [%li]", propname, oldtimeout);
else
Sprintf(buf, "%s", propname);
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
add_menu(win, &nul_glyphinfo, &any, 0, 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
}
end_menu(win, "Which intrinsics?");
@@ -1719,29 +1719,29 @@ doterrain(VOID_ARGS)
start_menu(men, MENU_BEHAVE_STANDARD);
any = cg.zeroany;
any.a_int = 1;
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(men, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"known map without monsters, objects, and traps",
MENU_ITEMFLAGS_SELECTED);
any.a_int = 2;
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(men, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"known map without monsters and objects",
MENU_ITEMFLAGS_NONE);
any.a_int = 3;
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(men, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"known map without monsters",
MENU_ITEMFLAGS_NONE);
if (discover || wizard) {
any.a_int = 4;
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(men, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"full map without monsters, objects, and traps",
MENU_ITEMFLAGS_NONE);
if (wizard) {
any.a_int = 5;
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(men, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"internal levl[][].typ codes in base-36",
MENU_ITEMFLAGS_NONE);
any.a_int = 6;
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(men, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"legend of base-36 levl[][].typ codes",
MENU_ITEMFLAGS_NONE);
}
@@ -4072,7 +4072,7 @@ const char *text;
if ((ch = cmd_from_func(func)) != '\0') {
any = cg.zeroany;
any.a_nfunc = func;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, text,
add_menu(win, &nul_glyphinfo, &any, 0, 0, ATR_NONE, text,
MENU_ITEMFLAGS_NONE);
}
}
+4
View File
@@ -700,6 +700,10 @@ const struct const_globals cg = {
DUMMY, /* zeroany */
};
/* glyph, color, ttychar, symidx, glyphflags */
const glyph_info nul_glyphinfo =
{ NO_GLYPH, NO_COLOR, ' ', 0, MG_UNEXPL };
#define ZERO(x) memset(&x, 0, sizeof(x))
void
+3 -3
View File
@@ -2006,12 +2006,12 @@ dump_map()
lastnonblank = -1; /* buf[] index rather than map's x */
for (x = 1; x < COLNO; x++) {
int ch;
unsigned glyphmod[NUM_GLYPHMOD];
glyph_info glyphinfo;
glyph = reveal_terrain_getglyph(x, y, FALSE, u.uswallow,
default_glyph, subset);
map_glyphmod(x, y, glyph, 0, glyphmod);
ch = (int) glyphmod[GM_TTYCHAR];
map_glyphinfo(x, y, glyph, 0, &glyphinfo);
ch = glyphinfo.ttychar;
buf[x - 1] = ch;
if (ch != ' ') {
blankrow = FALSE;
+78 -68
View File
@@ -132,8 +132,8 @@ static void FDECL(display_warning, (struct monst *));
static int FDECL(check_pos, (int, int, int));
static int FDECL(get_bk_glyph, (XCHAR_P, XCHAR_P));
static int FDECL(tether_glyph, (int, int));
#ifdef UNBUFFERED_GLYPHMOD
static unsigned *FDECL(glyphmod_at, (XCHAR_P, XCHAR_P, int));
#ifdef UNBUFFERED_GLYPHINFO
static glyph_info *FDECL(glyphinfo_at, (XCHAR_P, XCHAR_P, int));
#endif
/*#define WA_VERBOSE*/ /* give (x,y) locations for all "bad" spots */
@@ -1370,16 +1370,16 @@ see_traps()
}
}
static unsigned no_gm[NUM_GLYPHMOD] = {
MG_BADXY, (unsigned) ' ', (unsigned) NO_COLOR
static glyph_info no_ginfo = {
NO_GLYPH, 0, NO_COLOR, ' ', MG_BADXY
};
#ifndef UNBUFFERED_GLYPHMOD
#define Glyphmod_at(x, y, glyph) \
(((x) < 0 || (y) < 0 || (x) >= COLNO || (y) >= ROWNO) ? &no_gm[0] \
: &g.gbuf[(y)][(x)].glyphmod[0])
#ifndef UNBUFFERED_GLYPHINFO
#define Glyphinfo_at(x, y, glyph) \
(((x) < 0 || (y) < 0 || (x) >= COLNO || (y) >= ROWNO) ? &no_ginfo \
: &g.gbuf[(y)][(x)].glyphinfo)
#else
static unsigned gm[NUM_GLYPHMOD];
#define Glyphmod_at(x, y, glyph) glyphmod_at(x, y, glyph)
static glyph_info ginfo;
#define Glyphinfo_at(x, y, glyph) glyphinfo_at(x, y, glyph)
#endif
/*
@@ -1457,6 +1457,7 @@ void
redraw_map()
{
int x, y, glyph;
glyph_info bkglyphinfo = nul_glyphinfo;
/*
* Not sure whether this is actually necessary; save and restore did
@@ -1477,8 +1478,9 @@ redraw_map()
for (y = 0; y < ROWNO; ++y)
for (x = 1; x < COLNO; ++x) {
glyph = glyph_at(x, y); /* not levl[x][y].glyph */
print_glyph(WIN_MAP, x, y, glyph, get_bk_glyph(x, y),
Glyphmod_at(x, y, glyph));
bkglyphinfo.glyph = get_bk_glyph(x, y);
print_glyph(WIN_MAP, x, y,
Glyphinfo_at(x, y, glyph), &bkglyphinfo);
}
flush_screen(1);
}
@@ -1540,8 +1542,8 @@ void
show_glyph(x, y, glyph)
int x, y, glyph;
{
#ifndef UNBUFFERED_GLYPHMOD
unsigned glyphmod[NUM_GLYPHMOD];
#ifndef UNBUFFERED_GLYPHINFO
glyph_info glyphinfo;
#endif
/*
@@ -1608,26 +1610,27 @@ int x, y, glyph;
MAX_GLYPH, x, y);
return;
}
#ifndef UNBUFFERED_GLYPHMOD
/* without UNBUFFERED_GLYPHMOD defined the glyphmod values are buffered
#ifndef UNBUFFERED_GLYPHINFO
/* without UNBUFFERED_GLYPHINFO defined the glyphinfo values are buffered
alongside the glyphs themselves for better performance, increased
buffer size */
map_glyphmod(x, y, glyph, 0, glyphmod);
map_glyphinfo(x, y, glyph, 0, &glyphinfo);
#endif
if (g.gbuf[y][x].glyph != glyph
#ifndef UNBUFFERED_GLYPHMOD
#ifndef UNBUFFERED_GLYPHINFO
/* I don't think we have to test for changes in TTYCHAR or COLOR
because they typically only change if the glyph changed */
|| g.gbuf[y][x].glyphmod[GM_FLAGS] != glyphmod[GM_FLAGS]
|| g.gbuf[y][x].glyphinfo.glyphflags != glyphinfo.glyphflags
#endif
|| iflags.use_background_glyph ) {
g.gbuf[y][x].glyph = glyph;
g.gbuf[y][x].gnew = 1;
#ifndef UNBUFFERED_GLYPHMOD
g.gbuf[y][x].glyphmod[GM_FLAGS] = glyphmod[GM_FLAGS];
g.gbuf[y][x].glyphmod[GM_TTYCHAR] = glyphmod[GM_TTYCHAR];
g.gbuf[y][x].glyphmod[GM_COLOR] = glyphmod[GM_COLOR];
#ifndef UNBUFFERED_GLYPHINFO
g.gbuf[y][x].glyphinfo.glyph = glyphinfo.glyph;
g.gbuf[y][x].glyphinfo.glyphflags = glyphinfo.glyphflags;
g.gbuf[y][x].glyphinfo.ttychar = glyphinfo.ttychar;
g.gbuf[y][x].glyphinfo.color = glyphinfo.color;
#endif
if (g.gbuf_start[y] > x)
g.gbuf_start[y] = x;
@@ -1653,7 +1656,7 @@ int x, y, glyph;
static gbuf_entry nul_gbuf = {
0, /* gnew */
GLYPH_UNEXPLORED, /* glyph */
#ifndef UNBUFFERED_GLYPHMOD
#ifndef UNBUFFERED_GLYPHINFO
{(unsigned) ' ', (unsigned) NO_COLOR, MG_UNEXPL},
#endif
};
@@ -1666,22 +1669,22 @@ clear_glyph_buffer()
{
register int x, y;
gbuf_entry *gptr = &g.gbuf[0][0];
unsigned *gmptr =
#ifndef UNBUFFERED_GLYPHMOD
&gptr->glyphmod[0];
glyph_info *giptr =
#ifndef UNBUFFERED_GLYPHINFO
&gptr->glyphinfo;
#else
&gm[0];
&ginfo;
map_glyphmod(0, 0, GLYPH_UNEXPLORED, 0, gmptr);
map_glyphinfo(0, 0, GLYPH_UNEXPLORED, 0, giptr);
#endif
#ifndef UNBUFFERED_GLYPHMOD
nul_gbuf.gnew = (gmptr[GM_TTYCHAR] != nul_gbuf.glyphmod[GM_TTYCHAR]
|| gmptr[GM_COLOR] != nul_gbuf.glyphmod[GM_COLOR]
|| gmptr[GM_FLAGS] != nul_gbuf.glyphmod[GM_FLAGS])
#ifndef UNBUFFERED_GLYPHINFO
nul_gbuf.gnew = (giptr->ttychar != nul_gbuf.glyphinfo.ttychar
|| giptr->color != nul_gbuf.glyphinfo.color
|| giptr->glyphflags != nul_gbuf.glyphinfo.glyphflags)
#else
nul_gbuf.gnew = (gmptr[GM_TTYCHAR] != ' '
|| gmptr[GM_COLOR] != NO_COLOR
|| (gmptr[GM_FLAGS] & ~MG_UNEXPL) != 0)
nul_gbuf.gnew = (giptr->ttychar != ' '
|| giptr->color != NO_COLOR
|| (giptr->glyphflags & ~MG_UNEXPL) != 0)
#endif
? 1 : 0;
for (y = 0; y < ROWNO; y++) {
@@ -1703,30 +1706,33 @@ int start, stop, y;
register int x, glyph;
register boolean force;
gbuf_entry *gptr = &g.gbuf[0][0];
unsigned *gmptr =
#ifndef UNBUFFERED_GLYPHMOD
&gptr->glyphmod[0];
glyph_info bkglyphinfo = nul_glyphinfo;
glyph_info *giptr =
#ifndef UNBUFFERED_GLYPHINFO
&gptr->glyphinfo;
#else
&gm[0];
&ginfo;
map_glyphmod(0, 0, GLYPH_UNEXPLORED, 0, gmptr);
map_glyphinfo(0, 0, GLYPH_UNEXPLORED, 0U, giptr);
#endif
#ifndef UNBUFFERED_GLYPHMOD
force = (gmptr[GM_TTYCHAR] != nul_gbuf.glyphmod[GM_TTYCHAR]
|| gmptr[GM_COLOR] != nul_gbuf.glyphmod[GM_COLOR]
|| gmptr[GM_FLAGS] != nul_gbuf.glyphmod[GM_FLAGS])
#ifndef UNBUFFERED_GLYPHINFO
force = (giptr->ttychar != nul_gbuf.glyphinfo.ttychar
|| giptr->color != nul_gbuf.glyphinfo.color
|| giptr->glyphflags != nul_gbuf.glyphinfo.glyphflags)
#else
force = (gmptr[GM_TTYCHAR] != ' '
|| gmptr[GM_COLOR] != NO_COLOR
|| (gmptr[GM_FLAGS] & ~MG_UNEXPL) != 0)
force = (giptr->ttychar != ' '
|| giptr->color != NO_COLOR
|| (giptr->glyphflags & ~MG_UNEXPL) != 0)
#endif
? 1 : 0;
for (x = start; x <= stop; x++) {
gptr = &g.gbuf[y][x];
glyph = gptr->glyph;
if (force || glyph != GLYPH_UNEXPLORED)
print_glyph(WIN_MAP, x, y, glyph,
get_bk_glyph(x, y), Glyphmod_at(x, y, glyph));
if (force || glyph != GLYPH_UNEXPLORED) {
bkglyphinfo.glyph = get_bk_glyph(x, y);
print_glyph(WIN_MAP, x, y,
Glyphinfo_at(x, y, glyph), &bkglyphinfo);
}
}
}
@@ -1759,6 +1765,7 @@ int cursor_on_u;
static int flushing = 0;
static int delay_flushing = 0;
register int x, y;
glyph_info bkglyphinfo = nul_glyphinfo;
/* 3.7: don't update map, status, or perm_invent during save/restore */
if (g.program_state.saving || g.program_state.restoring)
@@ -1781,8 +1788,9 @@ int cursor_on_u;
for (; x <= g.gbuf_stop[y]; gptr++, x++)
if (gptr->gnew) {
print_glyph(WIN_MAP, x, y, gptr->glyph,
get_bk_glyph(x, y), Glyphmod_at(x, y, gptr->glyph));
bkglyphinfo.glyph = get_bk_glyph(x, y);
print_glyph(WIN_MAP, x, y,
Glyphinfo_at(x, y, gptr->glyph), &bkglyphinfo);
gptr->gnew = 0;
}
}
@@ -2000,14 +2008,14 @@ xchar x, y;
return g.gbuf[y][x].glyph;
}
#ifdef UNBUFFERED_GLYPHMOD
unsigned *
glyphmod_at(x, y, glyph)
#ifdef UNBUFFERED_GLYPHINFO
glyph_info *
glyphinfo_at(x, y, glyph)
xchar x, y;
int glyph;
{
map_glyphmod(x, y, glyph, 0, gm);
return &gm[0];
map_glyphinfo(x, y, glyph, 0, &ginfo);
return &ginfo;
}
#endif
@@ -2133,10 +2141,11 @@ static const int explcolors[] = {
#define GMAP_ALTARCOLOR 0x00000004
void
map_glyphmod(x, y, glyph, mgflags, glyphmod)
map_glyphinfo(x, y, glyph, mgflags, glyphinfo)
xchar x, y;
int glyph;
unsigned mgflags, *glyphmod;
unsigned mgflags;
glyph_info *glyphinfo;
{
register int offset, idx;
int color = NO_COLOR;
@@ -2151,9 +2160,10 @@ unsigned mgflags, *glyphmod;
do_mon_checks = FALSE;
if (x < 0 || y < 0 || x >= COLNO || y >= ROWNO) {
glyphmod[GM_FLAGS] = MG_BADXY;
glyphmod[GM_COLOR] = NO_COLOR;
glyphmod[GM_TTYCHAR] = ' ';
glyphinfo->glyph = NO_GLYPH;
glyphinfo->glyphflags = MG_BADXY;
glyphinfo->color = NO_COLOR;
glyphinfo->ttychar = ' ';
return;
}
@@ -2426,17 +2436,17 @@ unsigned mgflags, *glyphmod;
}
}
glyphmod[GM_TTYCHAR] = ((mgflags & MG_FLAG_RETURNIDX) != 0) ? idx
: g.showsyms[idx];
glyphinfo->symidx = idx;
glyphinfo->ttychar = g.showsyms[idx];
#ifdef TEXTCOLOR
/* Turn off color if no color defined, or rogue level w/o PC graphics. */
if (!has_color(color)
|| ((g.glyphmap_perlevel_flags & GMAP_ROGUELEVEL) && !has_rogue_color))
#endif
color = NO_COLOR;
glyphmod[GM_COLOR] = color;
glyphmod[GM_FLAGS] = special;
glyphinfo->color = color;
glyphinfo->glyphflags = special;
glyphinfo->glyph = glyph;
}
/* ------------------------------------------------------------------------ */
+1 -1
View File
@@ -1617,7 +1617,7 @@ boolean at_stairs, falling, portal;
/* Reset the screen. */
vision_reset(); /* reset the blockages */
g.glyphmap_perlevel_flags = 0L; /* force per-level map_glyphmod() changes */
g.glyphmap_perlevel_flags = 0L; /* force per-level map_glyphinfo() changes */
docrt(); /* does a full vision recalc */
flush_screen(-1);
+19 -14
View File
@@ -612,8 +612,8 @@ int gloc;
iflags.getpos_coords);
Sprintf(fullbuf, "%s%s%s", firstmatch,
(*tmpbuf ? " " : ""), tmpbuf);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, fullbuf,
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, fullbuf, MENU_ITEMFLAGS_NONE);
}
}
@@ -1364,27 +1364,32 @@ docallcmd()
start_menu(win, MENU_BEHAVE_STANDARD);
any = cg.zeroany;
any.a_char = 'm'; /* group accelerator 'C' */
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, 'C', ATR_NONE,
"a monster", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, abc ? 0 : any.a_char, 'C',
ATR_NONE, "a monster", MENU_ITEMFLAGS_NONE);
if (g.invent) {
/* we use y and n as accelerators so that we can accept user's
response keyed to old "name an individual object?" prompt */
any.a_char = 'i'; /* group accelerator 'y' */
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, 'y', ATR_NONE,
"a particular object in inventory", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, abc ? 0 : any.a_char, 'y',
ATR_NONE, "a particular object in inventory",
MENU_ITEMFLAGS_NONE);
any.a_char = 'o'; /* group accelerator 'n' */
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, 'n', ATR_NONE,
"the type of an object in inventory", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, abc ? 0 : any.a_char, 'n',
ATR_NONE, "the type of an object in inventory",
MENU_ITEMFLAGS_NONE);
}
any.a_char = 'f'; /* group accelerator ',' (or ':' instead?) */
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, ',', ATR_NONE,
"the type of an object upon the floor", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, abc ? 0 : any.a_char, ',',
ATR_NONE, "the type of an object upon the floor",
MENU_ITEMFLAGS_NONE);
any.a_char = 'd'; /* group accelerator '\' */
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, '\\', ATR_NONE,
"the type of an object on discoveries list", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, abc ? 0 : any.a_char, '\\',
ATR_NONE, "the type of an object on discoveries list",
MENU_ITEMFLAGS_NONE);
any.a_char = 'a'; /* group accelerator 'l' */
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, 'l', ATR_NONE,
"record an annotation for the current level", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, abc ? 0 : any.a_char, 'l',
ATR_NONE, "record an annotation for the current level",
MENU_ITEMFLAGS_NONE);
end_menu(win, "What do you want to name?");
if (select_menu(win, PICK_ONE, &pick_list) > 0) {
ch = pick_list[0].item.a_char;
+4 -4
View File
@@ -152,7 +152,7 @@ const struct symdef defsyms[MAXPCHARS] = {
{ '.', "floor of a room", C(CLR_GRAY) }, /* room */
/*20*/ { '.', "dark part of a room", C(CLR_BLACK) }, /* dark room */
{ '#', "corridor", C(CLR_GRAY) }, /* dark corr */
{ '#', "lit corridor", C(CLR_GRAY) }, /* lit corr, see map_glyphmod() */
{ '#', "lit corridor", C(CLR_GRAY) }, /* lit corr, see map_glyphinfo() */
{ '<', "staircase up", C(CLR_GRAY) }, /* upstair */
{ '>', "staircase down", C(CLR_GRAY) }, /* dnstair */
{ '<', "ladder up", C(CLR_BROWN) }, /* upladder */
@@ -195,7 +195,7 @@ const struct symdef defsyms[MAXPCHARS] = {
{ '^', "anti-magic field", C(HI_ZAP) }, /* trap */
{ '^', "polymorph trap", C(CLR_BRIGHT_GREEN) }, /* trap */
{ '~', "vibrating square", C(CLR_MAGENTA) }, /* "trap" */
/* zap colors are changed by map_glyphmod() to match type of beam */
/* zap colors are changed by map_glyphinfo() to match type of beam */
{ '|', "", C(CLR_GRAY) }, /* vbeam */
{ '-', "", C(CLR_GRAY) }, /* hbeam */
{ '\\', "", C(CLR_GRAY) }, /* lslant */
@@ -210,7 +210,7 @@ const struct symdef defsyms[MAXPCHARS] = {
{ '*', "", C(HI_ZAP) },
{ '#', "poison cloud", C(CLR_BRIGHT_GREEN) }, /* part of a cloud */
{ '?', "valid position", C(CLR_BRIGHT_GREEN) }, /* target position */
/* swallow colors are changed by map_glyphmod() to match engulfing monst */
/* swallow colors are changed by map_glyphinfo() to match engulfing monst */
{ '/', "", C(CLR_GREEN) }, /* swallow top left */
{ '-', "", C(CLR_GREEN) }, /* swallow top center */
{ '\\', "", C(CLR_GREEN) }, /* swallow top right */
@@ -219,7 +219,7 @@ const struct symdef defsyms[MAXPCHARS] = {
{ '\\', "", C(CLR_GREEN) }, /* swallow bottom left */
{ '-', "", C(CLR_GREEN) }, /* swallow bottom center */
{ '/', "", C(CLR_GREEN) }, /* swallow bottom right */
/* explosion colors are changed by map_glyphmod() to match type of expl. */
/* explosion colors are changed by map_glyphinfo() to match type of expl. */
{ '/', "", C(CLR_ORANGE) }, /* explosion top left */
{ '-', "", C(CLR_ORANGE) }, /* explosion top center */
{ '\\', "", C(CLR_ORANGE) }, /* explosion top right */
+4 -4
View File
@@ -2183,8 +2183,8 @@ boolean unreachable;
} else {
any.a_int = lchoices->idx + 1;
}
add_menu(win, NO_GLYPH, &any, lchoices->menuletter, 0, ATR_NONE, entry,
MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, lchoices->menuletter, 0,
ATR_NONE, entry, MENU_ITEMFLAGS_NONE);
/* this assumes there are at most 52 interesting levels */
if (lchoices->menuletter == 'z')
lchoices->menuletter = 'A';
@@ -2295,8 +2295,8 @@ xchar *rdgn;
}
if (bymenu) {
any = cg.zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, buf,
MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings, buf, MENU_ITEMFLAGS_NONE);
} else
putstr(win, 0, buf);
+3 -2
View File
@@ -63,7 +63,7 @@ const char *buf;
anything any;
any = cg.zeroany;
add_menu(g.en_win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
add_menu(g.en_win, &nul_glyphinfo, &any, 0, 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
} else
putstr(g.en_win, 0, buf);
@@ -2307,7 +2307,8 @@ set_vanq_order()
if (i == VANQ_ALPHA_MIX || i == VANQ_MCLS_HTOL) /* skip these */
continue;
any.a_int = i + 1;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, vanqorders[i],
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
vanqorders[i],
(i == g.vanq_sortmode)
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
}
+33 -21
View File
@@ -2747,9 +2747,10 @@ long *out_cnt;
Sprintf(eos(prompt),
" -- unidentified or partially identified item%s",
plur(unid_cnt));
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, prompt, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0, ATR_NONE, prompt,
MENU_ITEMFLAGS_NONE);
if (!unid_cnt) {
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"(all items are permanently identified already)",
MENU_ITEMFLAGS_NONE);
gotsomething = TRUE;
@@ -2765,23 +2766,27 @@ long *out_cnt;
if (unid_cnt > 1)
Sprintf(eos(prompt), " (%s for all)",
visctrl(iflags.override_ID));
add_menu(win, NO_GLYPH, &any, '_', iflags.override_ID, ATR_NONE,
prompt, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, '_', iflags.override_ID,
ATR_NONE, prompt, MENU_ITEMFLAGS_NONE);
gotsomething = TRUE;
}
} else if (xtra_choice) {
/* wizard override ID and xtra_choice are mutually exclusive */
if (flags.sortpack)
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
"Miscellaneous", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings,
"Miscellaneous", MENU_ITEMFLAGS_NONE);
any.a_char = HANDS_SYM; /* '-' */
add_menu(win, NO_GLYPH, &any, HANDS_SYM, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, HANDS_SYM, 0, ATR_NONE,
xtra_choice, MENU_ITEMFLAGS_NONE);
gotsomething = TRUE;
}
nextclass:
classcount = 0;
for (srtinv = sortedinvent; (otmp = srtinv->obj) != 0; ++srtinv) {
int tmpglyph;
glyph_info tmpglyphinfo = nul_glyphinfo;
if (lets && !index(lets, otmp->invlet))
continue;
if (!flags.sortpack || otmp->oclass == *invlet) {
@@ -2790,7 +2795,8 @@ long *out_cnt;
any = cg.zeroany; /* all bits zero */
ilet = otmp->invlet;
if (flags.sortpack && !classcount) {
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
add_menu(win, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings,
let_to_name(*invlet, FALSE,
(want_reply && iflags.menu_head_objsym)),
MENU_ITEMFLAGS_NONE);
@@ -2800,7 +2806,9 @@ long *out_cnt;
any.a_obj = otmp;
else
any.a_char = ilet;
add_menu(win, obj_to_glyph(otmp, rn2_on_display_rng), &any, ilet,
tmpglyph = obj_to_glyph(otmp, rn2_on_display_rng);
map_glyphinfo(0, 0, tmpglyph, 0U, &tmpglyphinfo);
add_menu(win, &tmpglyphinfo, &any, ilet,
wizid ? def_oc_syms[(int) otmp->oclass].sym : 0,
ATR_NONE, doname(otmp), MENU_ITEMFLAGS_NONE);
gotsomething = TRUE;
@@ -2816,10 +2824,10 @@ long *out_cnt;
}
if (iflags.force_invmenu && lets && want_reply) {
any = cg.zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
"Special", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings, "Special", MENU_ITEMFLAGS_NONE);
any.a_char = '*';
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, '*', 0, ATR_NONE,
"(list everything)", MENU_ITEMFLAGS_NONE);
gotsomething = TRUE;
}
@@ -2830,7 +2838,7 @@ long *out_cnt;
into the menu */
if (iflags.perm_invent && !lets && !gotsomething) {
any = cg.zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, 0,
add_menu(win, &nul_glyphinfo, &any, 0, 0, 0,
not_carrying_anything, MENU_ITEMFLAGS_NONE);
want_reply = FALSE;
}
@@ -2896,7 +2904,8 @@ char avoidlet;
struct obj *otmp;
char ilet, ret = 0;
char *invlet = flags.inv_order;
int n, classcount, invdone = 0;
int n, classcount, invdone = 0, tmpglyph;
glyph_info tmpglyphinfo = nul_glyphinfo;
winid win;
anything any;
menu_item *selected;
@@ -2914,16 +2923,17 @@ char avoidlet;
if (!flags.sortpack || otmp->oclass == *invlet) {
if (flags.sortpack && !classcount) {
any = cg.zeroany; /* zero */
add_menu(win, NO_GLYPH, &any, 0, 0,
add_menu(win, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings,
let_to_name(*invlet, FALSE, FALSE),
MENU_ITEMFLAGS_NONE);
classcount++;
}
any.a_char = ilet;
add_menu(win, obj_to_glyph(otmp, rn2_on_display_rng),
&any, ilet, 0, ATR_NONE,
doname(otmp), MENU_ITEMFLAGS_NONE);
tmpglyph = obj_to_glyph(otmp, rn2_on_display_rng);
map_glyphinfo(0, 0, tmpglyph, 0U, &tmpglyphinfo);
add_menu(win, &tmpglyphinfo, &any, ilet, 0,
ATR_NONE, doname(otmp), MENU_ITEMFLAGS_NONE);
}
}
if (flags.sortpack && *++invlet)
@@ -4383,10 +4393,12 @@ const char *hdr, *txt;
any = cg.zeroany;
win = create_nhwindow(NHW_MENU);
start_menu(win, MENU_BEHAVE_STANDARD);
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, hdr,
add_menu(win, &nul_glyphinfo, &any, 0, 0, iflags.menu_headings,
hdr, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0, ATR_NONE, txt,
MENU_ITEMFLAGS_NONE);
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, txt, MENU_ITEMFLAGS_NONE);
end_menu(win, (char *) 0);
if (select_menu(win, PICK_NONE, &selected) > 0)
free((genericptr_t) selected);
+1 -1
View File
@@ -518,7 +518,7 @@ lua_State *L;
any = cg.zeroany;
if (*key)
any.a_char = key[0];
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, str,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, str,
(*defval && *key && defval[0] == key[0])
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
+17 -13
View File
@@ -541,7 +541,8 @@ int mode; /* 0 => 'O' cmd, 1 => full discoveries; 2 => class discoveries */
any = cg.zeroany; /* zero out all bits */
for (i = 0; disco_orders_descr[i]; ++i) {
any.a_int = disco_order_let[i];
add_menu(tmpwin, NO_GLYPH, &any, (char) any.a_int, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, (char) any.a_int,
0, ATR_NONE,
disco_orders_descr[i],
(disco_order_let[i] == flags.discosort)
? MENU_ITEMFLAGS_SELECTED
@@ -552,15 +553,15 @@ int mode; /* 0 => 'O' cmd, 1 => full discoveries; 2 => class discoveries */
(only showing one class so can't span all classes) but the
chosen sort will stick and also apply to '\' usage */
any = cg.zeroany;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"Note: full alphabetical and alphabetical within class",
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
" are equivalent for single class discovery, but",
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
" will matter for future use of total discoveries.",
MENU_ITEMFLAGS_NONE);
}
@@ -756,8 +757,8 @@ doclassdisco()
Strcat(discosyms, "u");
if (!traditional) {
any.a_int = 'u';
add_menu(tmpwin, NO_GLYPH, &any, menulet++, 0, ATR_NONE,
unique_items, MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, menulet++,
0, ATR_NONE, unique_items, MENU_ITEMFLAGS_NONE);
}
break;
}
@@ -767,8 +768,8 @@ doclassdisco()
Strcat(discosyms, "a");
if (!traditional) {
any.a_int = 'a';
add_menu(tmpwin, NO_GLYPH, &any, menulet++, 0, ATR_NONE,
artifact_items, MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, menulet++,
0, ATR_NONE, artifact_items, MENU_ITEMFLAGS_NONE);
}
}
@@ -788,8 +789,9 @@ doclassdisco()
Sprintf(eos(discosyms), "%c", c);
if (!traditional) {
any.a_int = c;
add_menu(tmpwin, NO_GLYPH, &any, menulet++, c,
ATR_NONE, oclass_to_name(oclass, buf),
add_menu(tmpwin, &nul_glyphinfo, &any,
menulet++, c, ATR_NONE,
oclass_to_name(oclass, buf),
MENU_ITEMFLAGS_NONE);
}
}
@@ -950,13 +952,15 @@ rename_disco()
if (oclass != prev_class) {
any.a_int = 0;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings,
let_to_name(oclass, FALSE, FALSE),
MENU_ITEMFLAGS_NONE);
prev_class = oclass;
}
any.a_int = dis;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE,
obj_typename(dis), MENU_ITEMFLAGS_NONE);
}
}
+104 -79
View File
@@ -4766,8 +4766,8 @@ handler_menustyle()
/* note: separate `style_name' variable used
to avoid an optimizer bug in VAX C V2.3 */
any.a_int = i + 1;
add_menu(tmpwin, NO_GLYPH, &any, *style_name, 0, ATR_NONE,
style_name, MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, *style_name, 0,
ATR_NONE, style_name, MENU_ITEMFLAGS_NONE);
}
end_menu(tmpwin, "Select menustyle:");
if (select_menu(tmpwin, PICK_ONE, &style_pick) > 0) {
@@ -4791,16 +4791,16 @@ int optidx;
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
any = cg.zeroany;
any.a_int = ALIGN_TOP;
add_menu(tmpwin, NO_GLYPH, &any, 't', 0, ATR_NONE, "top",
add_menu(tmpwin, &nul_glyphinfo, &any, 't', 0, ATR_NONE, "top",
MENU_ITEMFLAGS_NONE);
any.a_int = ALIGN_BOTTOM;
add_menu(tmpwin, NO_GLYPH, &any, 'b', 0, ATR_NONE, "bottom",
add_menu(tmpwin, &nul_glyphinfo, &any, 'b', 0, ATR_NONE, "bottom",
MENU_ITEMFLAGS_NONE);
any.a_int = ALIGN_LEFT;
add_menu(tmpwin, NO_GLYPH, &any, 'l', 0, ATR_NONE, "left",
add_menu(tmpwin, &nul_glyphinfo, &any, 'l', 0, ATR_NONE, "left",
MENU_ITEMFLAGS_NONE);
any.a_int = ALIGN_RIGHT;
add_menu(tmpwin, NO_GLYPH, &any, 'r', 0, ATR_NONE, "right",
add_menu(tmpwin, &nul_glyphinfo, &any, 'r', 0, ATR_NONE, "right",
MENU_ITEMFLAGS_NONE);
Sprintf(abuf, "Select %s window placement relative to the map:",
(optidx == opt_align_message) ? "message" : "status");
@@ -4841,8 +4841,8 @@ handler_disclose(VOID_ARGS)
Sprintf(buf, "%-12s[%c%c]", disclosure_names[i],
flags.end_disclose[i], disclosure_options[i]);
any.a_int = i + 1;
add_menu(tmpwin, NO_GLYPH, &any, disclosure_options[i], 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, disclosure_options[i],
0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
disc_cat[i] = 0;
}
end_menu(tmpwin, "Change which disclosure options categories:");
@@ -4867,35 +4867,41 @@ handler_disclose(VOID_ARGS)
any = cg.zeroany;
/* 'y','n',and '+' work as alternate selectors; '-' doesn't */
any.a_char = DISCLOSE_NO_WITHOUT_PROMPT;
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0,
any.a_char, ATR_NONE,
"Never disclose, without prompting",
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
any.a_char = DISCLOSE_YES_WITHOUT_PROMPT;
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0,
any.a_char, ATR_NONE,
"Always disclose, without prompting",
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
if (*disclosure_names[i] == 'v') {
any.a_char = DISCLOSE_SPECIAL_WITHOUT_PROMPT; /* '#' */
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0,
any.a_char, ATR_NONE,
"Always disclose, pick sort order from menu",
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
}
any.a_char = DISCLOSE_PROMPT_DEFAULT_NO;
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0,
any.a_char, ATR_NONE,
"Prompt, with default answer of \"No\"",
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
any.a_char = DISCLOSE_PROMPT_DEFAULT_YES;
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0,
any.a_char, ATR_NONE,
"Prompt, with default answer of \"Yes\"",
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
if (*disclosure_names[i] == 'v') {
any.a_char = DISCLOSE_PROMPT_DEFAULT_SPECIAL; /* '?' */
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0,
any.a_char, ATR_NONE,
"Prompt, with default answer of \"Ask\" to request sort menu",
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
@@ -4940,18 +4946,18 @@ handler_msg_window(VOID_ARGS)
any = cg.zeroany;
if (!WINDOWPORT("curses")) {
any.a_char = 's';
add_menu(tmpwin, NO_GLYPH, &any, 's', 0, ATR_NONE,
"single", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 's',
0, ATR_NONE, "single", MENU_ITEMFLAGS_NONE);
any.a_char = 'c';
add_menu(tmpwin, NO_GLYPH, &any, 'c', 0, ATR_NONE,
"combination", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 'c',
0, ATR_NONE, "combination", MENU_ITEMFLAGS_NONE);
}
any.a_char = 'f';
add_menu(tmpwin, NO_GLYPH, &any, 'f', 0, ATR_NONE, "full",
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 'f',
0, ATR_NONE, "full", MENU_ITEMFLAGS_NONE);
any.a_char = 'r';
add_menu(tmpwin, NO_GLYPH, &any, 'r', 0, ATR_NONE, "reversed",
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 'r',
0, ATR_NONE, "reversed", MENU_ITEMFLAGS_NONE);
end_menu(tmpwin, "Select message history display type:");
if (select_menu(tmpwin, PICK_ONE, &window_pick) > 0) {
iflags.prevmsg_window = window_pick->item.a_char;
@@ -4984,8 +4990,8 @@ handler_number_pad(VOID_ARGS)
any = cg.zeroany;
for (i = 0; i < SIZE(npchoices); i++) {
any.a_int = i + 1;
add_menu(tmpwin, NO_GLYPH, &any, 'a' + i, 0, ATR_NONE,
npchoices[i], MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 'a' + i,
0, ATR_NONE, npchoices[i], MENU_ITEMFLAGS_NONE);
}
end_menu(tmpwin, "Select number_pad mode:");
if (select_menu(tmpwin, PICK_ONE, &mode_pick) > 0) {
@@ -5039,8 +5045,8 @@ handler_paranoid_confirmation(VOID_ARGS)
if (paranoia[i].flagmask == PARANOID_BONES && !wizard)
continue;
any.a_int = paranoia[i].flagmask;
add_menu(tmpwin, NO_GLYPH, &any, *paranoia[i].argname, 0,
ATR_NONE, paranoia[i].explain,
add_menu(tmpwin, &nul_glyphinfo, &any, *paranoia[i].argname,
0, ATR_NONE, paranoia[i].explain,
(flags.paranoia_bits & paranoia[i].flagmask)
? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
@@ -5078,8 +5084,8 @@ handler_pickup_burden(VOID_ARGS)
for (i = 0; i < SIZE(burdentype); i++) {
burden_name = burdentype[i];
any.a_int = i + 1;
add_menu(tmpwin, NO_GLYPH, &any, burden_letters[i], 0, ATR_NONE,
burden_name, MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, burden_letters[i],
0, ATR_NONE, burden_name, MENU_ITEMFLAGS_NONE);
}
end_menu(tmpwin, "Select encumbrance level:");
if (select_menu(tmpwin, PICK_ONE, &burden_pick) > 0) {
@@ -5116,8 +5122,8 @@ handler_runmode(VOID_ARGS)
for (i = 0; i < SIZE(runmodes); i++) {
mode_name = runmodes[i];
any.a_int = i + 1;
add_menu(tmpwin, NO_GLYPH, &any, *mode_name, 0, ATR_NONE,
mode_name, MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, *mode_name,
0, ATR_NONE, mode_name, MENU_ITEMFLAGS_NONE);
}
end_menu(tmpwin, "Select run/travel display mode:");
if (select_menu(tmpwin, PICK_ONE, &mode_pick) > 0) {
@@ -5143,7 +5149,8 @@ handler_sortloot(VOID_ARGS)
for (i = 0; i < SIZE(sortltype); i++) {
sortl_name = sortltype[i];
any.a_char = *sortl_name;
add_menu(tmpwin, NO_GLYPH, &any, *sortl_name, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, *sortl_name,
0, ATR_NONE,
sortl_name, (flags.sortloot == *sortl_name)
? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
@@ -5176,38 +5183,42 @@ handler_whatis_coord(VOID_ARGS)
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
any = cg.zeroany;
any.a_char = GPCOORDS_COMPASS;
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_COMPASS, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, GPCOORDS_COMPASS,
0, ATR_NONE,
"compass ('east' or '3s' or '2n,4w')",
(gp == GPCOORDS_COMPASS)
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
any.a_char = GPCOORDS_COMFULL;
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_COMFULL, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, GPCOORDS_COMFULL,
0, ATR_NONE,
"full compass ('east' or '3south' or '2north,4west')",
(gp == GPCOORDS_COMFULL)
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
any.a_char = GPCOORDS_MAP;
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_MAP, 0, ATR_NONE,
"map <x,y>",
add_menu(tmpwin, &nul_glyphinfo, &any, GPCOORDS_MAP,
0, ATR_NONE, "map <x,y>",
(gp == GPCOORDS_MAP)
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
any.a_char = GPCOORDS_SCREEN;
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_SCREEN, 0, ATR_NONE,
"screen [row,column]",
add_menu(tmpwin, &nul_glyphinfo, &any, GPCOORDS_SCREEN,
0, ATR_NONE, "screen [row,column]",
(gp == GPCOORDS_SCREEN)
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
any.a_char = GPCOORDS_NONE;
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_NONE, 0, ATR_NONE,
"none (no coordinates displayed)",
add_menu(tmpwin, &nul_glyphinfo, &any, GPCOORDS_NONE,
0, ATR_NONE, "none (no coordinates displayed)",
(gp == GPCOORDS_NONE)
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
any.a_long = 0L;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"", MENU_ITEMFLAGS_NONE);
Sprintf(buf, "map: upper-left: <%d,%d>, lower-right: <%d,%d>%s",
1, 0, COLNO - 1, ROWNO - 1,
flags.verbose ? "; column 0 unused, off left edge" : "");
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
if (strcmp(windowprocs.name, "tty")) /* only show for non-tty */
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"screen: row is offset to accommodate tty interface's use of top line",
MENU_ITEMFLAGS_NONE);
#if COLNO == 80
@@ -5218,8 +5229,10 @@ handler_whatis_coord(VOID_ARGS)
Sprintf(buf, "screen: upper-left: [%02d,%02d], lower-right: [%d,%d]%s",
0 + 2, 1, ROWNO - 1 + 2, COLNO - 1, COL80ARG);
#undef COL80ARG
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"", MENU_ITEMFLAGS_NONE);
end_menu(tmpwin,
"Select coordinate display when auto-describing a map position:");
if ((pick_cnt = select_menu(tmpwin, PICK_ONE, &window_pick)) > 0) {
@@ -5247,17 +5260,17 @@ handler_whatis_filter(VOID_ARGS)
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
any = cg.zeroany;
any.a_char = (GFILTER_NONE + 1);
add_menu(tmpwin, NO_GLYPH, &any, 'n',
add_menu(tmpwin, &nul_glyphinfo, &any, 'n',
0, ATR_NONE, "no filtering",
(gf == GFILTER_NONE)
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
any.a_char = (GFILTER_VIEW + 1);
add_menu(tmpwin, NO_GLYPH, &any, 'v',
add_menu(tmpwin, &nul_glyphinfo, &any, 'v',
0, ATR_NONE, "in view only",
(gf == GFILTER_VIEW)
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
any.a_char = (GFILTER_AREA + 1);
add_menu(tmpwin, NO_GLYPH, &any, 'a',
add_menu(tmpwin, &nul_glyphinfo, &any, 'a',
0, ATR_NONE, "in same area",
(gf == GFILTER_AREA)
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
@@ -5337,7 +5350,7 @@ int optidx;
any.a_int = 1; /* -1 + 2 [see 'if (sl->name) {' below]*/
if (!symset_name)
defindx = any.a_int;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"Default Symbols",
(any.a_int == defindx) ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
@@ -5358,7 +5371,8 @@ int optidx;
if (symset_name && !strcmpi(sl->name, symset_name))
defindx = any.a_int;
Sprintf(buf, fmtstr, sl->name, sl->desc ? sl->desc : "");
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, buf,
(any.a_int == defindx) ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
}
@@ -5494,7 +5508,8 @@ handler_autopickup_exception(VOID_ARGS)
if (numapes) {
ape = g.apelist;
any = cg.zeroany;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings,
"Always pickup '<'; never pickup '>'",
MENU_ITEMFLAGS_NONE);
for (i = 0; i < numapes && ape; i++) {
@@ -5503,8 +5518,8 @@ handler_autopickup_exception(VOID_ARGS)
less than BUFSZ */
Sprintf(apebuf, "\"%c%s\"", ape->grab ? '<' : '>',
ape->pattern);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, apebuf,
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, apebuf, MENU_ITEMFLAGS_NONE);
ape = ape->next;
}
}
@@ -5602,8 +5617,8 @@ handler_menu_colors(VOID_ARGS)
Strcat(mcbuf, tmp->origstr);
/* combine main string and suffix */
Strcat(mcbuf, &buf[1]); /* skip buf[]'s initial quote */
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, mcbuf,
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, mcbuf, MENU_ITEMFLAGS_NONE);
tmp = tmp->next;
}
Sprintf(mcbuf, "%s menu colors",
@@ -5672,8 +5687,8 @@ handler_msgtype(VOID_ARGS)
Strcat(strncat(mtbuf, tmp->pattern, ln - 3), "...\"");
else
Strcat(strcat(mtbuf, tmp->pattern), "\"");
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, mtbuf,
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, mtbuf, MENU_ITEMFLAGS_NONE);
tmp = tmp->next;
}
Sprintf(mtbuf, "%s message types",
@@ -6679,7 +6694,8 @@ const char *prompt;
if (!colornames[i].name)
break;
any.a_int = i + 1;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, colornames[i].name,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, colornames[i].name,
(colornames[i].color == NO_COLOR) ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
}
@@ -6730,8 +6746,8 @@ const char *prompt;
if (!attrnames[i].name)
break;
any.a_int = i + 1;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, attrnames[i].attr,
attrnames[i].name,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
attrnames[i].attr, attrnames[i].name,
(attrnames[i].attr == default_attr) ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
}
@@ -6828,8 +6844,8 @@ query_msgtype()
for (i = 0; i < SIZE(msgtype_names); i++)
if (msgtype_names[i].descr) {
any.a_int = msgtype_names[i].msgtyp + 1;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
msgtype_names[i].descr, MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, msgtype_names[i].descr, MENU_ITEMFLAGS_NONE);
}
end_menu(tmpwin, "How to show the message");
pick_cnt = select_menu(tmpwin, PICK_ONE, &picks);
@@ -7537,7 +7553,7 @@ doset() /* changing options via menu by Per Liboriussen */
indexoffset = 1;
any = cg.zeroany;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, iflags.menu_headings,
"Booleans (selecting will toggle value):", MENU_ITEMFLAGS_NONE);
any.a_int = 0;
/* first list any other non-modifiable booleans, then modifiable ones */
@@ -7562,13 +7578,14 @@ doset() /* changing options via menu by Per Liboriussen */
else
Sprintf(buf, fmtstr_doset_tab,
name, *bool_p ? "true" : "false");
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
any = cg.zeroany;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, iflags.menu_headings,
"Compounds (selecting will prompt for new value):",
MENU_ITEMFLAGS_NONE);
@@ -7599,9 +7616,10 @@ doset() /* changing options via menu by Per Liboriussen */
}
any = cg.zeroany;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
"Other settings:", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings, "Other settings:", MENU_ITEMFLAGS_NONE);
for (i = 0; (name = othropt[i].name) != 0; i++) {
if ((is_wc_option(name) && !wc_supported(name))
@@ -7613,8 +7631,10 @@ doset() /* changing options via menu by Per Liboriussen */
#ifdef PREFIXES_IN_USE
any = cg.zeroany;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings,
"Variable playground locations:", MENU_ITEMFLAGS_NONE);
for (i = 0; i < PREFIX_COUNT; i++)
doset_add_menu(tmpwin, fqn_prefix_names[i], -1, 0);
@@ -7745,7 +7765,8 @@ int indexoffset; /* value to add to index in allopt[], or zero
value);
else
Sprintf(buf, fmtstr_doset_tab, option, value);
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
static void
@@ -7769,7 +7790,8 @@ int nset;
name, buf2);
else
Sprintf(buf, fmtstr_doset_tab, name, buf2);
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
/* display keys for menu actions; used by cmd.c '?i' and pager.c '?k' */
@@ -7924,8 +7946,9 @@ int numtotal;
continue;
Sprintf(tmpbuf, action_titles[i].desc,
(i == 1) ? makeplural(optname) : optname);
add_menu(tmpwin, NO_GLYPH, &any, action_titles[i].letr, 0, ATR_NONE,
tmpbuf, (i == 3) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo,&any, action_titles[i].letr,
0, ATR_NONE, tmpbuf,
(i == 3) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
}
end_menu(tmpwin, "Do what?");
if ((pick_cnt = select_menu(tmpwin, PICK_ONE, &pick_list)) > 0) {
@@ -8411,8 +8434,8 @@ char *class_select;
}
}
any.a_int = *class_list;
add_menu(win, NO_GLYPH, &any, accelerator, category ? *class_list : 0,
ATR_NONE, buf,
add_menu(win, &nul_glyphinfo, &any, accelerator,
category ? *class_list : 0, ATR_NONE, buf,
selected ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
++class_list;
if (category > 0) {
@@ -8426,13 +8449,15 @@ char *class_select;
if (category == 1 && next_accelerator <= 'z') {
/* for objects, add "A - ' ' all classes", after a separator */
any = cg.zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, "", MENU_ITEMFLAGS_NONE);
any.a_int = (int) ' ';
Sprintf(buf, "%c %s", (char) any.a_int, "all classes of objects");
/* we won't preselect this even if the incoming list is empty;
having it selected means that it would have to be explicitly
de-selected in order to select anything else */
add_menu(win, NO_GLYPH, &any, 'A', 0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 'A', 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
end_menu(win, prompt);
n = select_menu(win, way ? PICK_ANY : PICK_ONE, &pick_list);
+15 -16
View File
@@ -893,16 +893,15 @@ struct permonst **for_supplement;
hallucinate = (Hallucination && !g.program_state.gameover);
const char *x_str;
nhsym tmpsym;
unsigned glyphmod[NUM_GLYPHMOD];
glyph_info glyphinfo = nul_glyphinfo;
gobbledygook[0] = '\0'; /* no hallucinatory liquid (yet) */
if (looked) {
glyph = glyph_at(cc.x, cc.y);
/* Convert glyph at selected position to a symbol for use below. */
map_glyphmod(cc.x, cc.y, glyph, 0, glyphmod);
sym = glyphmod[GM_TTYCHAR];
Sprintf(prefix, "%s ", encglyph(glyph));
map_glyphinfo(cc.x, cc.y, glyph, 0, &glyphinfo);
sym = glyphinfo.symidx;
Sprintf(prefix, "%s ", encglyph(glyphinfo.glyph));
} else
Sprintf(prefix, "%c ", sym);
@@ -1154,8 +1153,8 @@ struct permonst **for_supplement;
case SYM_PET_OVERRIDE + SYM_OFF_X:
if (looked) {
/* convert to symbol without override in effect */
map_glyphmod(cc.x, cc.y, glyph, MG_FLAG_NOOVERRIDE, glyphmod);
sym = (int) glyphmod[GM_TTYCHAR];
map_glyphinfo(cc.x, cc.y, glyph, 0, &glyphinfo);
sym = glyphinfo.ttychar;
goto check_monsters;
}
break;
@@ -1264,21 +1263,21 @@ coord *click_cc;
any.a_char = '/';
/* 'y' and 'n' to keep backwards compatibility with previous
versions: "Specify unknown object by cursor?" */
add_menu(win, NO_GLYPH, &any,
add_menu(win, &nul_glyphinfo, &any,
flags.lootabc ? 0 : any.a_char, 'y', ATR_NONE,
"something on the map", MENU_ITEMFLAGS_NONE);
any.a_char = 'i';
add_menu(win, NO_GLYPH, &any,
add_menu(win, &nul_glyphinfo, &any,
flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
"something you're carrying", MENU_ITEMFLAGS_NONE);
any.a_char = '?';
add_menu(win, NO_GLYPH, &any,
add_menu(win, &nul_glyphinfo, &any,
flags.lootabc ? 0 : any.a_char, 'n', ATR_NONE,
"something else (by symbol or name)",
MENU_ITEMFLAGS_NONE);
if (!u.uswallow && !Hallucination) {
any = cg.zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"", MENU_ITEMFLAGS_NONE);
/* these options work sensibly for the swallowed case,
but there's no reason for the player to use them then;
@@ -1286,19 +1285,19 @@ coord *click_cc;
symbol/monster class letter doesn't match up with
bogus monster type, so suppress when hallucinating */
any.a_char = 'm';
add_menu(win, NO_GLYPH, &any,
add_menu(win, &nul_glyphinfo, &any,
flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
"nearby monsters", MENU_ITEMFLAGS_NONE);
any.a_char = 'M';
add_menu(win, NO_GLYPH, &any,
add_menu(win, &nul_glyphinfo, &any,
flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
"all monsters shown on map", MENU_ITEMFLAGS_NONE);
any.a_char = 'o';
add_menu(win, NO_GLYPH, &any,
add_menu(win, &nul_glyphinfo, &any,
flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
"nearby objects", MENU_ITEMFLAGS_NONE);
any.a_char = 'O';
add_menu(win, NO_GLYPH, &any,
add_menu(win, &nul_glyphinfo, &any,
flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
"all objects shown on map", MENU_ITEMFLAGS_NONE);
}
@@ -2154,7 +2153,7 @@ dohelp()
Strcpy(helpbuf, help_menu_items[i].text);
}
any.a_int = i + 1;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
helpbuf, MENU_ITEMFLAGS_NONE);
}
end_menu(tmpwin, "Select one item:");
+49 -39
View File
@@ -907,7 +907,7 @@ menu_item **pick_list; /* return list of items picked */
int how; /* type of query */
boolean FDECL((*allow), (OBJ_P)); /* allow function */
{
int i, n;
int i, n, tmpglyph;
winid win;
struct obj *curr, *last, fake_hero_object, *olist = *olist_p;
char *pack, packbuf[MAXOCLASSES + 1];
@@ -917,6 +917,7 @@ boolean FDECL((*allow), (OBJ_P)); /* allow function */
engulfer = (qflags & INCLUDE_HERO) != 0,
engulfer_minvent;
unsigned sortflags;
glyph_info tmpglyphinfo = nul_glyphinfo;
Loot *sortedolist, *srtoli;
*pick_list = (menu_item *) 0;
@@ -990,7 +991,8 @@ boolean FDECL((*allow), (OBJ_P)); /* allow function */
/* if sorting, print type name (once only) */
if (sorted && !printed_type_name) {
any = cg.zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
add_menu(win, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings,
let_to_name(*pack, FALSE,
((how != PICK_NONE)
&& iflags.menu_head_objsym)),
@@ -999,7 +1001,9 @@ boolean FDECL((*allow), (OBJ_P)); /* allow function */
}
any.a_obj = curr;
add_menu(win, obj_to_glyph(curr, rn2_on_display_rng), &any,
tmpglyph = obj_to_glyph(curr, rn2_on_display_rng);
map_glyphinfo(0, 0, tmpglyph, 0U, &tmpglyphinfo);
add_menu(win, &tmpglyphinfo, &any,
(qflags & USE_INVLET) ? curr->invlet
: (first && curr->oclass == COIN_CLASS) ? '$' : 0,
def_oc_syms[(int) objects[curr->otyp].oc_class].sym,
@@ -1018,13 +1022,15 @@ boolean FDECL((*allow), (OBJ_P)); /* allow function */
if (sorted && n > 1) {
Sprintf(buf, "%s Creatures",
is_animal(u.ustuck->data) ? "Swallowed" : "Engulfed");
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, buf,
add_menu(win, &nul_glyphinfo, &any, 0, 0, iflags.menu_headings, buf,
MENU_ITEMFLAGS_NONE);
}
fake_hero_object = cg.zeroobj;
fake_hero_object.quan = 1L; /* not strictly necessary... */
any.a_obj = &fake_hero_object;
add_menu(win, mon_to_glyph(&g.youmonst, rn2_on_display_rng), &any,
tmpglyph = mon_to_glyph(&g.youmonst, rn2_on_display_rng);
map_glyphinfo(0, 0, tmpglyph, 0U, &tmpglyphinfo);
add_menu(win, &tmpglyphinfo, &any,
/* fake inventory letter, no group accelerator */
CONTAINED_SYM, 0, ATR_NONE, an(self_lookat(buf)),
MENU_ITEMFLAGS_NONE);
@@ -1166,13 +1172,14 @@ int how; /* type of query */
any = cg.zeroany;
any.a_int = 'A';
itemflags = MENU_ITEMFLAGS_SKIPINVERT;
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE,
(qflags & WORN_TYPES) ? "Auto-select every item being worn"
: "Auto-select every item",
itemflags);
any = cg.zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, "", MENU_ITEMFLAGS_NONE);
}
if ((qflags & ALL_TYPES) && (ccount > 1)) {
@@ -1180,7 +1187,7 @@ int how; /* type of query */
any = cg.zeroany;
any.a_int = ALL_TYPES_SELECTED;
itemflags = MENU_ITEMFLAGS_SKIPINVERT;
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE,
(qflags & WORN_TYPES) ? "All worn types" : "All types",
itemflags);
invlet = 'b';
@@ -1196,7 +1203,7 @@ int how; /* type of query */
any = cg.zeroany;
any.a_int = curr->oclass;
add_menu(
win, NO_GLYPH, &any, invlet++,
win, &nul_glyphinfo, &any, invlet++,
def_oc_syms[(int) objects[curr->otyp].oc_class].sym,
ATR_NONE, let_to_name(*pack, FALSE,
(how != PICK_NONE)
@@ -1217,7 +1224,8 @@ int how; /* type of query */
if (do_unpaid || (qflags & BILLED_TYPES) || do_blessed || do_cursed
|| do_uncursed || do_buc_unknown) {
any = cg.zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, "", MENU_ITEMFLAGS_NONE);
}
/* unpaid items if there are any */
@@ -1225,15 +1233,15 @@ int how; /* type of query */
invlet = 'u';
any = cg.zeroany;
any.a_int = 'u';
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE, "Unpaid items",
MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, invlet, 0,
ATR_NONE, "Unpaid items", MENU_ITEMFLAGS_NONE);
}
/* billed items: checked by caller, so always include if BILLED_TYPES */
if (qflags & BILLED_TYPES) {
invlet = 'x';
any = cg.zeroany;
any.a_int = 'x';
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE,
"Unpaid items already used up", MENU_ITEMFLAGS_NONE);
}
@@ -1245,28 +1253,28 @@ int how; /* type of query */
invlet = 'B';
any = cg.zeroany;
any.a_int = 'B';
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE,
"Items known to be Blessed", itemflags);
}
if (do_cursed) {
invlet = 'C';
any = cg.zeroany;
any.a_int = 'C';
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE,
"Items known to be Cursed", itemflags);
}
if (do_uncursed) {
invlet = 'U';
any = cg.zeroany;
any.a_int = 'U';
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE,
"Items known to be Uncursed", itemflags);
}
if (do_buc_unknown) {
invlet = 'X';
any = cg.zeroany;
any.a_int = 'X';
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE,
"Items of unknown Bless/Curse status", itemflags);
}
end_menu(win, qstr);
@@ -1943,8 +1951,8 @@ doloot()
cobj = cobj->nexthere)
if (Is_container(cobj)) {
any.a_obj = cobj;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
doname(cobj), MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, doname(cobj), MENU_ITEMFLAGS_NONE);
}
end_menu(win, "Loot which containers?");
n = select_menu(win, PICK_ANY, &pick_list);
@@ -3055,47 +3063,49 @@ boolean outokay, inokay, alreadyused, more_containers;
any.a_int = 1; /* ':' */
Sprintf(buf, "Look inside %s", thesimpleoname(obj));
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, menuselector[any.a_int], 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
if (outokay) {
any.a_int = 2; /* 'o' */
Sprintf(buf, "take %s out", something);
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, menuselector[any.a_int], 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
if (inokay) {
any.a_int = 3; /* 'i' */
Sprintf(buf, "put %s in", something);
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, menuselector[any.a_int], 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
if (outokay) {
any.a_int = 4; /* 'b' */
Sprintf(buf, "%stake out, then put in", inokay ? "both; " : "");
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, menuselector[any.a_int], 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
if (inokay) {
any.a_int = 5; /* 'r' */
Sprintf(buf, "%sput in, then take out",
outokay ? "both reversed; " : "");
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, menuselector[any.a_int], 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
any.a_int = 6; /* 's' */
Sprintf(buf, "stash one item into %s", thesimpleoname(obj));
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
buf, MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, menuselector[any.a_int], 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
any.a_int = 0;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, "", MENU_ITEMFLAGS_NONE);
if (more_containers) {
any.a_int = 7; /* 'n' */
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
"loot next container", MENU_ITEMFLAGS_SELECTED);
add_menu(win, &nul_glyphinfo, &any, menuselector[any.a_int], 0,
ATR_NONE, "loot next container", MENU_ITEMFLAGS_SELECTED);
}
any.a_int = 8; /* 'q' */
Strcpy(buf, alreadyused ? "done" : "do nothing");
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE, buf,
add_menu(win, &nul_glyphinfo, &any, menuselector[any.a_int], 0,
ATR_NONE, buf,
more_containers ? MENU_ITEMFLAGS_NONE : MENU_ITEMFLAGS_SELECTED);
end_menu(win, prompt);
@@ -3155,18 +3165,18 @@ dotip()
if (Is_container(cobj)) {
++i;
any.a_obj = cobj;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
doname(cobj), MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, doname(cobj), MENU_ITEMFLAGS_NONE);
}
if (g.invent) {
any = cg.zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"", MENU_ITEMFLAGS_NONE);
any.a_obj = &dummyobj;
/* use 'i' for inventory unless there are so many
containers that it's already being used */
i = (i <= 'i' - 'a' && !flags.lootabc) ? 'i' : 0;
add_menu(win, NO_GLYPH, &any, i, 0, ATR_NONE,
add_menu(win, &nul_glyphinfo, &any, i, 0, ATR_NONE,
"tip something being carried", MENU_ITEMFLAGS_SELECTED);
}
end_menu(win, "Tip which container?");
+7 -7
View File
@@ -1390,25 +1390,25 @@ winid bannerwin; /* if not WIN_ERR, clear window and show copyright in menu */
clear_nhwindow(bannerwin);
/* COPYRIGHT_BANNER_[ABCD] */
for (k = 1; k <= 4; ++k)
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
copyright_banner_line(k), MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, "",
MENU_ITEMFLAGS_NONE);
}
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE,
"Select one of your saved games", MENU_ITEMFLAGS_NONE);
for (k = 0; saved[k]; ++k) {
any.a_int = k + 1;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, saved[k],
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, saved[k], MENU_ITEMFLAGS_NONE);
}
clet = (k <= 'n' - 'a') ? 'n' : 0; /* new game */
any.a_int = -1; /* not >= 0 */
add_menu(tmpwin, NO_GLYPH, &any, clet, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, clet, 0, ATR_NONE,
"Start a new character", MENU_ITEMFLAGS_NONE);
clet = (k + 1 <= 'q' - 'a') ? 'q' : 0; /* quit */
any.a_int = -2;
add_menu(tmpwin, NO_GLYPH, &any, clet, 0, ATR_NONE,
add_menu(tmpwin, &nul_glyphinfo, &any, clet, 0, ATR_NONE,
"Never mind (quit)", MENU_ITEMFLAGS_SELECTED);
/* no prompt on end_menu, as we've done our own at the top */
end_menu(tmpwin, (char *) 0);
+8 -6
View File
@@ -1904,28 +1904,30 @@ boolean preselect;
any.a_int = 0;
/* use four spaces of padding to fake a grayed out menu choice */
Sprintf(buf, "%4s%s forces %s", "", constrainer, forcedvalue);
add_menu(where, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
add_menu(where, &nul_glyphinfo, &any, 0, 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
} else if (what) {
any.a_int = RS_menu_arg(which);
Sprintf(buf, "Pick%s %s first", (f >= 0) ? " another" : "", what);
add_menu(where, NO_GLYPH, &any, RS_menu_let[which], 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
add_menu(where, &nul_glyphinfo, &any, RS_menu_let[which], 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
} else if (which == RS_filter) {
char setfiltering[40];
any.a_int = RS_menu_arg(RS_filter);
Sprintf(setfiltering, "%s role/race/&c filtering",
gotrolefilter() ? "Reset" : "Set");
add_menu(where, NO_GLYPH, &any, '~', 0, ATR_NONE,
add_menu(where, &nul_glyphinfo, &any, '~', 0, ATR_NONE,
setfiltering, MENU_ITEMFLAGS_NONE);
} else if (which == ROLE_RANDOM) {
any.a_int = ROLE_RANDOM;
add_menu(where, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
add_menu(where, &nul_glyphinfo, &any, '*', 0,
ATR_NONE, "Random",
preselect ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
} else if (which == ROLE_NONE) {
any.a_int = ROLE_NONE;
add_menu(where, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
add_menu(where, &nul_glyphinfo, &any, 'q', 0,
ATR_NONE, "Quit",
preselect ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
} else {
impossible("role_menu_extra: bad arg (%d)", which);
+12 -9
View File
@@ -1583,13 +1583,14 @@ spellsortmenu()
let = 'z'; /* assumes fewer than 26 sort choices... */
/* separate final choice from others with a blank line */
any.a_int = 0;
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, "", MENU_ITEMFLAGS_NONE);
} else {
let = 'a' + i;
}
any.a_int = i + 1;
add_menu(tmpwin, NO_GLYPH, &any, let, 0, ATR_NONE, spl_sortchoices[i],
add_menu(tmpwin, &nul_glyphinfo, &any, let, 0,
ATR_NONE, spl_sortchoices[i],
(i == g.spl_sortmode) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
}
end_menu(tmpwin, "View known spells list sorted");
@@ -1676,8 +1677,8 @@ int *spell_no;
Sprintf(buf, "Name\tLevel\tCategory\tFail\tRetention");
fmt = "%s\t%-d\t%s\t%-d%%\t%s";
}
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, buf,
MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings, buf, MENU_ITEMFLAGS_NONE);
for (i = 0; i < MAXSPELL && spellid(i) != NO_SPELL; i++) {
splnum = !g.spl_orderindx ? i : g.spl_orderindx[i];
Sprintf(buf, fmt, spellname(splnum), spellev(splnum),
@@ -1686,8 +1687,10 @@ int *spell_no;
spellretention(splnum, retentionbuf));
any.a_int = splnum + 1; /* must be non-zero */
add_menu(tmpwin, NO_GLYPH, &any, spellet(splnum), 0, ATR_NONE, buf,
(splnum == splaction) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, spellet(splnum), 0,
ATR_NONE, buf,
(splnum == splaction)
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
}
how = PICK_ONE;
if (splaction == SPELLMENU_VIEW) {
@@ -1697,8 +1700,8 @@ int *spell_no;
} else {
/* more than 1 spell, add an extra menu entry */
any.a_int = SPELLMENU_SORT + 1;
add_menu(tmpwin, NO_GLYPH, &any, '+', 0, ATR_NONE,
"[sort spells]", MENU_ITEMFLAGS_NONE);
add_menu(tmpwin, &nul_glyphinfo, &any, '+', 0,
ATR_NONE, "[sort spells]", MENU_ITEMFLAGS_NONE);
}
}
end_menu(tmpwin, prompt);
+2 -2
View File
@@ -617,8 +617,8 @@ dotelecmd()
any = cg.zeroany;
for (i = 0; i < SIZE(tports); ++i) {
any.a_int = (int) tports[i].menulet;
add_menu(win, NO_GLYPH, &any, (char) any.a_int, 0, ATR_NONE,
tports[i].menudesc,
add_menu(win, &nul_glyphinfo, &any, (char) any.a_int, 0,
ATR_NONE, tports[i].menudesc,
(tports[i].menulet == 'w') ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
}
+10 -9
View File
@@ -1220,18 +1220,18 @@ enhance_weapon_skill()
(u.ulevel < MAXULEV)
? "when you're more experienced"
: "if skill slots become available");
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
if (maxxed_cnt > 0) {
Sprintf(buf,
"(Skill%s flagged by \"#\" cannot be enhanced any further.)",
plur(maxxed_cnt));
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, "", MENU_ITEMFLAGS_NONE);
}
/* List the skills, making ones that could be advanced
@@ -1244,7 +1244,8 @@ enhance_weapon_skill()
/* Print headings for skill types */
any = cg.zeroany;
if (i == skill_ranges[pass].first)
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
add_menu(win, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings,
skill_ranges[pass].name, MENU_ITEMFLAGS_NONE);
if (P_RESTRICTED(i))
@@ -1286,8 +1287,8 @@ enhance_weapon_skill()
sklnambuf);
}
any.a_int = can_advance(i, speedy) ? i + 1 : 0;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
}
Strcpy(buf, (to_advance > 0) ? "Pick a skill to advance:"
+31 -24
View File
@@ -70,7 +70,7 @@ static void FDECL(dump_clear_nhwindow, (winid));
static void FDECL(dump_display_nhwindow, (winid, BOOLEAN_P));
static void FDECL(dump_destroy_nhwindow, (winid));
static void FDECL(dump_start_menu, (winid, unsigned long));
static void FDECL(dump_add_menu, (winid, int, const ANY_P *, CHAR_P,
static void FDECL(dump_add_menu, (winid, const glyph_info *, const ANY_P *, CHAR_P,
CHAR_P, int, const char *, unsigned int));
static void FDECL(dump_end_menu, (winid, const char *));
static int FDECL(dump_select_menu, (winid, int, MENU_ITEM_P **));
@@ -516,11 +516,13 @@ static void FDECL(hup_init_nhwindows, (int *, char **));
static void FDECL(hup_exit_nhwindows, (const char *));
static winid FDECL(hup_create_nhwindow, (int));
static int FDECL(hup_select_menu, (winid, int, MENU_ITEM_P **));
static void FDECL(hup_add_menu, (winid, int, const anything *, CHAR_P, CHAR_P,
int, const char *, unsigned int));
static void FDECL(hup_add_menu, (winid, const glyph_info *, const anything *,
CHAR_P, CHAR_P, int, const char *,
unsigned int));
static void FDECL(hup_end_menu, (winid, const char *));
static void FDECL(hup_putstr, (winid, int, const char *));
static void FDECL(hup_print_glyph, (winid, XCHAR_P, XCHAR_P, int, int, unsigned *));
static void FDECL(hup_print_glyph, (winid, XCHAR_P, XCHAR_P,
const glyph_info *, const glyph_info *));
static void FDECL(hup_outrip, (winid, int, time_t));
static void FDECL(hup_curs, (winid, int, int));
static void FDECL(hup_display_nhwindow, (winid, BOOLEAN_P));
@@ -704,9 +706,10 @@ struct mi **menu_list UNUSED;
/*ARGSUSED*/
static void
hup_add_menu(window, glyph, identifier, sel, grpsel, attr, txt, itemflags)
hup_add_menu(window, glyphinfo, identifier, sel, grpsel, attr, txt, itemflags)
winid window UNUSED;
int glyph UNUSED, attr UNUSED;
const glyph_info *glyphinfo UNUSED;
int attr UNUSED;
const anything *identifier UNUSED;
char sel UNUSED, grpsel UNUSED;
const char *txt UNUSED;
@@ -736,12 +739,11 @@ const char *text UNUSED;
/*ARGSUSED*/
static void
hup_print_glyph(window, x, y, glyph, bkglyph, glyphmod)
hup_print_glyph(window, x, y, glyphinfo, bkglyphinfo)
winid window UNUSED;
xchar x UNUSED, y UNUSED;
int glyph UNUSED;
int bkglyph UNUSED;
unsigned *glyphmod UNUSED;
const glyph_info *glyphinfo UNUSED;
const glyph_info *bkglyphinfo UNUSED;
{
return;
}
@@ -1340,9 +1342,9 @@ unsigned long mbehavior UNUSED;
/*ARGSUSED*/
static void
dump_add_menu(win, glyph, identifier, ch, gch, attr, str, itemflags)
dump_add_menu(win, glyphinfo, identifier, ch, gch, attr, str, itemflags)
winid win UNUSED;
int glyph;
const glyph_info *glyphinfo;
const anything *identifier UNUSED;
char ch;
char gch UNUSED;
@@ -1351,7 +1353,7 @@ const char *str;
unsigned int itemflags UNUSED;
{
if (dumplog_file) {
if (glyph == NO_GLYPH)
if (glyphinfo->glyph == NO_GLYPH)
fprintf(dumplog_file, " %s\n", str);
else
fprintf(dumplog_file, " %c - %s\n", ch, str);
@@ -1434,15 +1436,20 @@ int
glyph2ttychar(glyph)
int glyph;
{
int so;
unsigned glyphmod[NUM_GLYPHMOD];
glyph_info glyphinfo;
map_glyphmod(0, 0, glyph, MG_FLAG_RETURNIDX, glyphmod);
so = (int) glyphmod[GM_TTYCHAR];
if (so >= 0 && so < SYM_MAX)
return (int) g.showsyms[so];
else
return ' ';
map_glyphinfo(0, 0, glyph, 0, &glyphinfo);
return glyphinfo.ttychar;
}
int
glyph2symidx(glyph)
int glyph;
{
glyph_info glyphinfo;
map_glyphinfo(0, 0, glyph, 0, &glyphinfo);
return glyphinfo.symidx;
}
char *
@@ -1462,7 +1469,7 @@ const char *str;
{
static const char hex[] = "00112233445566778899aAbBcCdDeEfF";
char *put = buf;
unsigned glyphmod[NUM_GLYPHMOD];
glyph_info glyphinfo = nul_glyphinfo;
if (!str)
return strcpy(buf, "");
@@ -1488,8 +1495,8 @@ const char *str;
gv = (gv * 16) + ((int) (dp - hex) / 2);
else
break;
map_glyphmod(0, 0, gv, MG_FLAG_RETURNIDX, glyphmod);
so = glyphmod[GM_TTYCHAR];
map_glyphinfo(0, 0, gv, 0, &glyphinfo);
so = glyphinfo.symidx;
*put++ = g.showsyms[so];
/* 'str' is ready for the next loop iteration and '*str'
should not be copied at the end of this iteration */