Change menu_headings to accept color and attribute

Instead of just accepting an attribute, it's now possible to
use a color, or both color and attribute, for example:

OPTIONS=menu_headings:inverse
OPTIONS=menu_headings:red
OPTIONS=menu_headings:red&underline

Default is still just inverse.
This lets the player change the menu heading color without
needing to use menu colors for them.

Also makes it so the core uses NO_COLOR instead of 0, for all
the menu lines which don't have any prefedefined color.

Tested for tty, curses, x11, qt, and win32
This commit is contained in:
Pasi Kallinen
2023-11-13 07:33:56 +02:00
parent dd6c249a8c
commit dd5ca5b058
47 changed files with 251 additions and 150 deletions
+1 -1
View File
@@ -3622,7 +3622,7 @@ use_grapple(struct obj *obj)
anything any;
char buf[BUFSZ];
menu_item *selected;
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany; /* set all bits to zero */
any.a_int = 1; /* use index+1 (cant use 0) as identifier */
+2 -2
View File
@@ -1072,7 +1072,7 @@ dump_artifact_info(winid tmpwin)
char buf[BUFSZ], buf2[BUFSZ];
/* not a menu, but header uses same bold or whatever attribute as such */
putstr(tmpwin, iflags.menu_headings, "Artifacts");
putstr(tmpwin, iflags.menu_headings.attr, "Artifacts");
for (m = 1; m <= NROFARTIFACTS; ++m) {
Snprintf(buf2, sizeof buf2,
"[%s%s%s%s%s%s%s%s%s]", /* 9 bits overall */
@@ -1767,7 +1767,7 @@ arti_invoke(struct obj *obj)
d_level newlev;
winid tmpwin = create_nhwindow(NHW_MENU);
anything any;
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany; /* set all bits to zero */
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
+11 -11
View File
@@ -25,7 +25,7 @@ add_menu_heading(winid tmpwin, const char *buf)
anything any = cg.zeroany;
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
iflags.menu_headings, 0,
iflags.menu_headings.attr, iflags.menu_headings.color,
buf, MENU_ITEMFLAGS_NONE);
}
@@ -35,7 +35,7 @@ add_menu_str(winid tmpwin, const char *buf)
anything any = cg.zeroany;
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, 0,
ATR_NONE, NO_COLOR,
buf, MENU_ITEMFLAGS_NONE);
}
@@ -1124,7 +1124,7 @@ cond_menu(void)
menu_item *picks = (menu_item *) 0;
char mbuf[QBUFSZ];
boolean showmenu = TRUE;
int clr = 0;
int clr = NO_COLOR;
boolean changed = FALSE;
do {
@@ -2465,7 +2465,7 @@ query_arrayvalue(
anything any;
menu_item *picks = (menu_item *) 0;
int adj = (arrmin > 0) ? 1 : arrmax;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -2820,7 +2820,7 @@ query_conditions(void)
winid tmpwin;
anything any;
menu_item *picks = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -3296,7 +3296,7 @@ static char *
status_hilite2str(struct hilite_s *hl)
{
static char buf[BUFSZ];
int clr = 0, attr = 0;
int clr = NO_COLOR, attr = ATR_NONE;
char behavebuf[BUFSZ];
char clrbuf[BUFSZ];
char attrbuf[BUFSZ];
@@ -3381,7 +3381,7 @@ status_hilite_menu_choose_field(void)
int i, res, fld = BL_FLUSH;
anything any;
menu_item *picks = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -3419,7 +3419,7 @@ status_hilite_menu_choose_behavior(int fld)
char buf[BUFSZ];
int at;
int onlybeh = BL_TH_NONE, nopts = 0;
int clr = 0;
int clr = NO_COLOR;
if (fld < 0 || fld >= MAXBLSTATS)
return BL_TH_NONE;
@@ -3523,7 +3523,7 @@ status_hilite_menu_choose_updownboth(
char buf[BUFSZ];
anything any;
menu_item *picks = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -4060,7 +4060,7 @@ status_hilite_menu_fld(int fld)
struct _status_hilite_line_str *hlstr;
char buf[BUFSZ];
boolean acted;
int clr = 0;
int clr = NO_COLOR;
if (!count) {
if (status_hilite_menu_add(fld)) {
@@ -4200,7 +4200,7 @@ status_hilite_menu(void)
anything any;
boolean redo;
int countall;
int clr = 0;
int clr = NO_COLOR;
shlmenu_redo:
redo = FALSE;
+13 -10
View File
@@ -587,7 +587,7 @@ doextlist(void)
boolean redisplay = TRUE, search = FALSE;
static const char *const headings[] = { "Extended commands",
"Debugging Extended Commands" };
int clr = 0;
int clr = NO_COLOR;
searchbuf[0] = '\0';
menuwin = create_nhwindow(NHW_MENU);
@@ -778,7 +778,7 @@ extcmd_via_menu(void)
int accelerator, prevaccelerator;
int matchlevel = 0;
boolean wastoolong, one_per_line;
int clr = 0;
int clr = NO_COLOR;
ret = 0;
cbuf[0] = '\0';
@@ -2006,7 +2006,7 @@ wiz_intrinsic(void)
long oldtimeout, newtimeout;
const char *propname;
menu_item *pick_list = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany;
win = create_nhwindow(NHW_MENU);
@@ -2157,7 +2157,7 @@ doterrain(void)
anything any;
int n;
int which;
int clr = 0;
int clr = NO_COLOR;
/*
* normal play: choose between known map without mons, obj, and traps
@@ -3001,6 +3001,7 @@ handler_rebind_keys_add(boolean keyfirst)
char buf[BUFSZ];
char buf2[QBUFSZ];
uchar key = '\0';
int clr = NO_COLOR;
if (keyfirst) {
pline("Bind which key? ");
@@ -3027,7 +3028,8 @@ handler_rebind_keys_add(boolean keyfirst)
}
any.a_int = -1;
add_menu(win, &nul_glyphinfo, &any, '\0', 0, ATR_NONE, 0, "nothing: unbind the key",
add_menu(win, &nul_glyphinfo, &any, '\0', 0, ATR_NONE, clr,
"nothing: unbind the key",
MENU_ITEMFLAGS_NONE);
add_menu_str(win, "");
@@ -3040,7 +3042,7 @@ handler_rebind_keys_add(boolean keyfirst)
any.a_int = (i + 1);
Sprintf(buf, "%s: %s", ec->ef_txt, ec->ef_desc);
add_menu(win, &nul_glyphinfo, &any, '\0', 0, ATR_NONE, 0, buf,
add_menu(win, &nul_glyphinfo, &any, '\0', 0, ATR_NONE, clr, buf,
MENU_ITEMFLAGS_NONE);
}
if (key)
@@ -3096,6 +3098,7 @@ handler_rebind_keys(void)
anything any;
int i, npick;
menu_item *picks = (menu_item *) 0;
int clr = NO_COLOR;
redo_rebind:
@@ -3104,14 +3107,14 @@ redo_rebind:
any = cg.zeroany;
any.a_int = 1;
add_menu(win, &nul_glyphinfo, &any, '\0', 0, ATR_NONE, 0, "bind key to a command",
add_menu(win, &nul_glyphinfo, &any, '\0', 0, ATR_NONE, clr, "bind key to a command",
MENU_ITEMFLAGS_NONE);
any.a_int = 2;
add_menu(win, &nul_glyphinfo, &any, '\0', 0, ATR_NONE, 0, "bind command to a key",
add_menu(win, &nul_glyphinfo, &any, '\0', 0, ATR_NONE, clr, "bind command to a key",
MENU_ITEMFLAGS_NONE);
if (count_bind_keys()) {
any.a_int = 3;
add_menu(win, &nul_glyphinfo, &any, '\0', 0, ATR_NONE, 0, "view changed key binds",
add_menu(win, &nul_glyphinfo, &any, '\0', 0, ATR_NONE, clr, "view changed key binds",
MENU_ITEMFLAGS_NONE);
}
end_menu(win, "Do what?");
@@ -5647,7 +5650,7 @@ static void
mcmd_addmenu(winid win, int act, const char *txt)
{
anything any;
int clr = 0;
int clr = NO_COLOR;
/* TODO: fixed letters for the menu entries? */
any = cg.zeroany;
+2 -2
View File
@@ -643,7 +643,7 @@ getpos_menu(coord *ccp, int gloc)
int i, pick_cnt;
menu_item *picks = (menu_item *) 0;
char tmpbuf[BUFSZ];
int clr = 0;
int clr = NO_COLOR;
gather_locs(&garr, &gcount, gloc);
@@ -1635,7 +1635,7 @@ docallcmd(void)
char ch = 0;
/* if player wants a,b,c instead of i,o when looting, do that here too */
boolean abc = flags.lootabc;
int clr = 0;
int clr = NO_COLOR;
if ((cmdq = cmdq_pop()) != 0) {
cq = *cmdq;
+1 -1
View File
@@ -2281,7 +2281,7 @@ tport_menu(
{
char tmpbuf[BUFSZ];
anything any;
int clr = 0;
int clr = NO_COLOR;
lchoices->lev[lchoices->idx] = lvl_p->dlevel;
lchoices->dgn[lchoices->idx] = lvl_p->dnum;
+3 -2
View File
@@ -1081,11 +1081,12 @@ disclose(int how, boolean taken)
if (c == 'y') {
/* save and restore menu_headings in case something like
#saveoptions is ever allowed to be run at the very end */
int save_menu_headings = iflags.menu_headings;
color_attr save_menu_headings = iflags.menu_headings;
/* caller has already ID'd everything; we pass 'want_reply=True'
to force display_pickinv() to avoid using WIN_INVENT */
iflags.menu_headings = ATR_NONE; /* don't highlight class hdrs */
iflags.menu_headings.attr = ATR_NONE; /* don't highlight class hdrs */
iflags.menu_headings.color = NO_COLOR;
(void) display_inventory((char *) 0, TRUE);
iflags.menu_headings = save_menu_headings;
container_contents(gi.invent, TRUE, TRUE, FALSE);
+3 -3
View File
@@ -2639,7 +2639,7 @@ set_vanq_order(boolean for_vanq)
char buf[BUFSZ];
const char *desc;
int i, n, choice,
clr = 0;
clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -2760,7 +2760,7 @@ list_vanquished(char defquery, boolean ask)
Strcpy(buf, def_monsyms[(int) mlet].explain);
/* 'ask' implies final disclosure, where highlighting
of various header lines is suppressed */
putstr(klwin, ask ? ATR_NONE : iflags.menu_headings,
putstr(klwin, ask ? ATR_NONE : iflags.menu_headings.attr,
upstart(buf));
prev_mlet = mlet;
}
@@ -2971,7 +2971,7 @@ list_genocided(char defquery, boolean ask)
Strcpy(buf, def_monsyms[(int) mlet].explain);
/* 'ask' implies final disclosure, where highlighting
of various header lines is suppressed */
putstr(klwin, ask ? ATR_NONE : iflags.menu_headings,
putstr(klwin, ask ? ATR_NONE : iflags.menu_headings.attr,
upstart(buf));
prev_mlet = mlet;
}
+3 -3
View File
@@ -2763,7 +2763,7 @@ static void
ia_addmenu(winid win, int act, char let, const char *txt)
{
anything any;
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany;
any.a_int = act;
@@ -3295,7 +3295,7 @@ display_pickinv(
unsigned sortflags;
Loot *sortedinvent, *srtinv;
boolean wizid = (wizard && iflags.override_ID), gotsomething = FALSE;
int clr = 0, menu_behavior = MENU_BEHAVE_STANDARD;
int clr = NO_COLOR, menu_behavior = MENU_BEHAVE_STANDARD;
boolean show_gold = TRUE, inuse_only = FALSE,
skipped_gold = FALSE, skipped_noninuse = FALSE,
doing_perm_invent = FALSE, save_flags_sortpack = flags.sortpack;
@@ -3623,7 +3623,7 @@ display_used_invlets(char avoidlet)
winid win;
anything any;
menu_item *selected;
int clr = 0;
int clr = NO_COLOR;
if (gi.invent) {
win = create_nhwindow(NHW_MENU);
+1 -1
View File
@@ -703,7 +703,7 @@ nhl_menu(lua_State *L)
winid tmpwin;
anything any;
menu_item *picks = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
if (argc < 2 || argc > 4) {
nhl_error(L, "Wrong args");
+3 -3
View File
@@ -574,7 +574,7 @@ choose_disco_sort(
menu_item *selected;
anything any;
int i, n, choice;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -820,7 +820,7 @@ doclassdisco(void)
*sorted_lines[NUM_OBJECTS]; /* overkill */
int i, ct, dis, xtras, sorted_ct;
boolean traditional, alphabetized, lootsort;
int clr = 0;
int clr = NO_COLOR;
if (!flags.discosort || !(p = strchr(disco_order_let, flags.discosort)))
flags.discosort = 'o';
@@ -1025,7 +1025,7 @@ rename_disco(void)
winid tmpwin;
anything any;
menu_item *selected = 0;
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany;
tmpwin = create_nhwindow(NHW_MENU);
+108 -38
View File
@@ -423,10 +423,10 @@ ask_do_tutorial(void)
any = cg.zeroany;
any.a_char = 'y';
add_menu(win, &nul_glyphinfo, &any, any.a_char, 0,
ATR_NONE, 0, "Yes, do a tutorial", MENU_ITEMFLAGS_NONE);
ATR_NONE, NO_COLOR, "Yes, do a tutorial", MENU_ITEMFLAGS_NONE);
any.a_char = 'n';
add_menu(win, &nul_glyphinfo, &any, any.a_char, 0,
ATR_NONE, 0, "No, just start play", MENU_ITEMFLAGS_NONE);
ATR_NONE, NO_COLOR, "No, just start play", MENU_ITEMFLAGS_NONE);
add_menu_str(win, "");
add_menu_str(win, buf);
@@ -2090,30 +2090,83 @@ optfn_menu_shift_right(int optidx, int req, boolean negated,
/* end of shared key assignments for menu commands */
static char *
color_attr_to_str(color_attr *ca)
{
static char buf[BUFSZ];
Sprintf(buf, "%s&%s",
clr2colorname(ca->color),
attr2attrname(ca->attr));
return buf;
}
/* parse string like "color&attr" into color_attr */
static boolean
color_attr_parse_str(color_attr *ca, char *str)
{
char buf[BUFSZ];
char *amp = NULL;
int tmp, c = NO_COLOR, a = ATR_NONE;
(void) strncpy(buf, str, sizeof buf - 1);
buf[sizeof buf - 1] = '\0';
if ((amp = strchr(buf, '&')) != 0)
*amp = '\0';
if (amp) {
amp++;
c = match_str2clr(buf);
a = match_str2attr(amp, TRUE);
/* FIXME: match_str2clr & match_str2attr give config_error_add(), so this is useless */
if (c >= CLR_MAX && a == -1) {
/* try other way around */
c = match_str2clr(amp);
a = match_str2attr(buf, TRUE);
}
if (c >= CLR_MAX || a == -1)
return FALSE;
} else {
/* one param only */
tmp = match_str2attr(buf, FALSE);
if (tmp == -1) {
tmp = match_str2clr(buf);
if (tmp >= CLR_MAX)
return FALSE;
c = tmp;
} else {
a = tmp;
}
}
ca->attr = a;
ca->color = c;
return TRUE;
}
static int
optfn_menu_headings(int optidx, int req, boolean negated UNUSED,
char *opts, char *op UNUSED)
{
int tmpattr;
if (req == do_init) {
return optn_ok;
}
if (req == do_set) {
color_attr ca;
if ((opts = string_for_env_opt(allopt[optidx].name, opts, FALSE))
== empty_optstr) {
return optn_err;
}
tmpattr = match_str2attr(opts, TRUE);
if (tmpattr == -1)
if (!color_attr_parse_str(&ca, opts))
return optn_err;
iflags.menu_headings = tmpattr;
iflags.menu_headings = ca;
return optn_ok;
}
if (req == get_val || req == get_cnf_val) {
if (!opts)
return optn_err;
Sprintf(opts, "%s", attr2attrname(iflags.menu_headings));
Sprintf(opts, "%s", color_attr_to_str(&iflags.menu_headings));
return optn_ok;
}
if (req == do_handler) {
@@ -5316,7 +5369,7 @@ handler_menustyle(void)
int i, n, old_menu_style = flags.menu_style;
char buf[BUFSZ], sep = iflags.menu_tab_sep ? '\t' : ' ';
menu_item *style_pick = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -5356,7 +5409,7 @@ handler_align_misc(int optidx)
anything any;
menu_item *window_pick = (menu_item *) 0;
char abuf[BUFSZ];
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -5398,7 +5451,7 @@ handler_autounlock(int optidx)
char buf[BUFSZ], sep = iflags.menu_tab_sep ? '\t' : ' ';
menu_item *window_pick = (menu_item *) 0;
int i, n, presel, res = optn_ok;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -5455,7 +5508,7 @@ handler_disclose(void)
int pick_cnt, pick_idx, opt_idx;
char c;
menu_item *disclosure_pick = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -5546,10 +5599,10 @@ handler_disclose(void)
static int
handler_menu_headings(void)
{
int mhattr = query_attr("How to highlight menu headings:");
boolean gotca = query_color_attr(&iflags.menu_headings,
"How to highlight menu headings:");
if (mhattr != -1) {
iflags.menu_headings = mhattr;
if (gotca) {
/* header highlighting affects persistent inventory display */
if (iflags.perm_invent)
update_inventory();
@@ -5564,7 +5617,7 @@ handler_msg_window(void)
winid tmpwin;
anything any;
boolean is_tty = WINDOWPORT(tty), is_curses = WINDOWPORT(curses);
int clr = 0;
int clr = NO_COLOR;
if (is_tty || is_curses) {
/* by Christian W. Cooper */
@@ -5629,7 +5682,7 @@ handler_number_pad(void)
"-1 (off, 'z' to move upper-left, 'y' to zap wands)"
};
menu_item *mode_pick = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -5685,7 +5738,7 @@ handler_paranoid_confirmation(void)
char mkey, mbuf[QBUFSZ], ebuf[BUFSZ], cbuf[QBUFSZ];
const char *explain, *cmdnm;
menu_item *paranoia_picks = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -5816,7 +5869,7 @@ handler_pickup_burden(void)
int i;
const char *burden_name, *burden_letters = "ubsntl";
menu_item *burden_pick = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -5854,7 +5907,7 @@ handler_runmode(void)
int i;
const char *mode_name;
menu_item *mode_pick = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -5882,7 +5935,7 @@ handler_sortloot(void)
int i, n;
const char *sortl_name;
menu_item *sortl_pick = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -5922,7 +5975,7 @@ handler_whatis_coord(void)
menu_item *window_pick = (menu_item *) 0;
int pick_cnt;
char gpc = iflags.getpos_coords;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -5994,7 +6047,7 @@ handler_whatis_filter(void)
menu_item *window_pick = (menu_item *) 0;
int pick_cnt;
char gfilt = iflags.getloc_filter;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -6047,7 +6100,7 @@ handler_autopickup_exception(void)
int opt_idx, numapes = 0;
char apebuf[2 + BUFSZ]; /* so &apebuf[1] is BUFSZ long for getlin() */
struct autopickup_exception *ape;
int clr = 0;
int clr = NO_COLOR;
ape_again:
numapes = count_apes();
@@ -6122,7 +6175,7 @@ handler_menu_colors(void)
char buf[BUFSZ];
int opt_idx, nmc, mcclr, mcattr;
char mcbuf[BUFSZ];
int clr = 0;
int clr = NO_COLOR;
menucolors_again:
nmc = count_menucolors();
@@ -6242,7 +6295,7 @@ handler_msgtype(void)
const char *mtype;
menu_item *pick_list = (menu_item *) 0;
struct plinemsg_type *tmp = gp.plinemsg_types;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -6289,7 +6342,7 @@ handler_windowborders(void)
int i;
const char *mode_name;
menu_item *mode_pick = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
static const char *const windowborders_text[] = {
"Off, never show borders",
"On, always show borders",
@@ -6846,7 +6899,8 @@ initoptions_init(void)
#endif
#endif
iflags.menu_headings = ATR_INVERSE;
iflags.menu_headings.attr = ATR_INVERSE;
iflags.menu_headings.color = NO_COLOR;
iflags.getpos_coords = GPCOORDS_NONE;
/* hero's role, race, &c haven't been chosen yet */
@@ -7517,7 +7571,7 @@ query_color(const char *prompt)
anything any;
int i, pick_cnt;
menu_item *picks = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
/* replace user patterns with color name ones and force 'menucolors' On */
basic_menu_colors(TRUE);
@@ -7570,10 +7624,10 @@ query_attr(const char *prompt)
menu_item *picks = (menu_item *) 0;
boolean allow_many = (prompt && !strncmpi(prompt, "Choose", 6));
int default_attr = ATR_NONE;
int clr = 0;
int clr = NO_COLOR;
if (prompt && strstri(prompt, "menu headings"))
default_attr = iflags.menu_headings;
default_attr = iflags.menu_headings.attr;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
any = cg.zeroany;
@@ -7640,6 +7694,22 @@ query_attr(const char *prompt)
return -1;
}
boolean
query_color_attr(color_attr *ca, const char *prompt)
{
int c, a;
c = query_color(prompt);
if (c == -1)
return FALSE;
a = query_attr(prompt);
if (a == -1)
return FALSE;
ca->color = c;
ca->attr = a;
return TRUE;
}
static const struct {
const char *name;
xint8 msgtyp;
@@ -7671,7 +7741,7 @@ query_msgtype(void)
anything any;
int i, pick_cnt;
menu_item *picks = (menu_item *) 0;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -8675,7 +8745,7 @@ doset_simple_menu(void)
}
any = cg.zeroany;
any.a_int = -2 + 1;
add_menu(tmpwin, &nul_glyphinfo, &any, '?', 0, ATR_NONE, 0,
add_menu(tmpwin, &nul_glyphinfo, &any, '?', 0, ATR_NONE, NO_COLOR,
gs.simple_options_help ? "hide help" : "show help",
MENU_ITEMFLAGS_NONE);
@@ -8730,7 +8800,7 @@ doset_simple_menu(void)
|| allopt[i].idx == opt_pickup_thrown)
Strcat(buf, " (for autopickup)");
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, 0, buf, MENU_ITEMFLAGS_NONE);
ATR_NONE, NO_COLOR, buf, MENU_ITEMFLAGS_NONE);
if (gs.simple_options_help && allopt[i].descr) {
Sprintf(buf, " %s", allopt[i].descr);
add_menu_str(tmpwin, buf);
@@ -8870,7 +8940,7 @@ doset(void) /* changing options via menu by Per Liboriussen */
int indexoffset, startpass, endpass;
boolean setinitial = FALSE, fromfile = FALSE,
gavehelp = FALSE, skiphelp = !iflags.cmdassist;
int clr = 0;
int clr = NO_COLOR;
if (iflags.menu_requested) {
/* doset_simple() checks for 'm' and calls doset(); clear the
@@ -9103,7 +9173,7 @@ doset_add_menu(
#ifdef PREFIXES_IN_USE
int j;
#endif
int clr = 0;
int clr = NO_COLOR;
buf2[0] = '\0'; /* per opt functs may not guarantee this, so do it */
any = cg.zeroany;
@@ -9292,7 +9362,7 @@ handle_add_list_remove(const char *optname, int numtotal)
{ 'r', "remove existing %s" }, /* [2] */
{ 'x', "exit this menu" }, /* [3] */
};
int clr = 0;
int clr = NO_COLOR;
opt_idx = 0;
tmpwin = create_nhwindow(NHW_MENU);
@@ -9846,7 +9916,7 @@ choose_classes_menu(const char *prompt,
int i, n;
int ret;
int next_accelerator, accelerator;
int clr = 0;
int clr = NO_COLOR;
if (class_list == (char *) 0 || class_select == (char *) 0)
return 0;
+2 -2
View File
@@ -1543,7 +1543,7 @@ do_look(int mode, coord *click_cc)
coord cc; /* screen pos of unknown glyph */
boolean save_verbose; /* saved value of flags.verbose */
boolean from_screen; /* question from the screen */
int clr = 0;
int clr = NO_COLOR;
cc.x = 0;
cc.y = 0;
@@ -2601,7 +2601,7 @@ dohelp(void)
menu_item *selected;
anything any;
int sel;
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany; /* zero all bits */
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
+6 -6
View File
@@ -989,7 +989,7 @@ query_objlist(const char *qstr, /* query string */
unsigned sortflags;
glyph_info tmpglyphinfo = nul_glyphinfo;
Loot *sortedolist, *srtoli;
int clr = 0;
int clr = NO_COLOR;
*pick_list = (menu_item *) 0;
if (!olist && !engulfer)
@@ -1188,7 +1188,7 @@ query_category(
boolean (*ofilter)(OBJ_P) = (boolean (*)(OBJ_P)) 0;
boolean do_unpaid = FALSE, do_blessed = FALSE, do_cursed = FALSE,
do_uncursed = FALSE, do_buc_unknown = FALSE, verify_All = FALSE;
int num_buc_types = 0, num_justpicked = 0, clr = 0;
int num_buc_types = 0, num_justpicked = 0, clr = NO_COLOR;
*pick_list = (menu_item *) 0;
if (!olist)
@@ -2055,7 +2055,7 @@ doloot_core(void)
int prev_inquiry = 0;
boolean prev_loot = FALSE;
int num_conts = 0;
int clr = 0;
int clr = NO_COLOR;
ga.abort_looting = FALSE;
@@ -3251,7 +3251,7 @@ in_or_out_menu(
char buf[BUFSZ];
int n;
const char *menuselector = flags.lootabc ? abc_chars : lootchars;
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany;
win = create_nhwindow(NHW_MENU);
@@ -3378,7 +3378,7 @@ dotip(void)
anything any;
menu_item *pick_list = (menu_item *) 0;
struct obj dummyobj, *otmp;
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany;
win = create_nhwindow(NHW_MENU);
@@ -3701,7 +3701,7 @@ tipcontainer_gettarget(
menu_item *pick_list = (menu_item *) 0;
struct obj dummyobj, *otmp;
boolean hands_available = TRUE, exclude_it;
int clr = 0;
int clr = NO_COLOR;
#if 0 /* [skip potential early return so that menu response is needed
* regardless of whether other containers are being carried] */
+1 -1
View File
@@ -1403,7 +1403,7 @@ restore_menu(
char **saved;
menu_item *chosen_game = (menu_item *) 0;
int k, clet, ch = 0; /* ch: 0 => new game */
int clr = 0;
int clr = NO_COLOR;
*gp.plname = '\0';
saved = get_saved_games(); /* array of character names */
+6 -6
View File
@@ -1811,7 +1811,7 @@ role_menu_extra(int which, winid where, boolean preselect)
char buf[BUFSZ];
const char *what = 0, *constrainer = 0, *forcedvalue = 0;
int f = 0, r, c, gend, a, i, allowmask;
int clr = 0;
int clr = NO_COLOR;
r = flags.initrole;
c = flags.initrace;
@@ -2192,7 +2192,7 @@ genl_player_setup(int screenheight)
boolean getconfirmation, picksomething;
winid win = WIN_ERR;
menu_item *selected = 0;
int clr = 0;
int clr = NO_COLOR;
char pick4u = 'n';
int result = 0; /* assume failure (player chooses to 'quit') */
@@ -2837,7 +2837,7 @@ setup_rolemenu(
int i;
boolean role_ok;
char thisch, lastch = '\0', rolenamebuf[50];
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany; /* zero out all bits */
for (i = 0; roles[i].name.m; i++) {
@@ -2887,7 +2887,7 @@ setup_racemenu(
boolean race_ok;
int i;
char this_ch;
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany;
for (i = 0; races[i].noun; i++) {
@@ -2925,7 +2925,7 @@ setup_gendmenu(
boolean gend_ok;
int i;
char this_ch;
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany;
for (i = 0; i < ROLE_GENDERS; i++) {
@@ -2961,7 +2961,7 @@ setup_algnmenu(
boolean algn_ok;
int i;
char this_ch;
int clr = 0;
int clr = NO_COLOR;
any = cg.zeroany;
for (i = 0; i < ROLE_ALIGNS; i++) {
+4 -3
View File
@@ -773,7 +773,8 @@ dowizcast(void)
if (n >= SPE_BLANK_PAPER)
break;
any.a_int = n;
add_menu(win, &nul_glyphinfo, &any, 0, 0, ATR_NONE, 0, OBJ_NAME(objects[n]), MENU_ITEMFLAGS_NONE);
add_menu(win, &nul_glyphinfo, &any, 0, 0, ATR_NONE, NO_COLOR,
OBJ_NAME(objects[n]), MENU_ITEMFLAGS_NONE);
}
end_menu(win, "Cast which spell?");
n = select_menu(win, PICK_ONE, &selected);
@@ -1664,7 +1665,7 @@ spellsortmenu(void)
anything any;
char let;
int i, n, choice;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
@@ -1753,7 +1754,7 @@ dospellmenu(
const char *fmt;
menu_item *selected;
anything any;
int clr = 0;
int clr = NO_COLOR;
tmpwin = create_nhwindow(NHW_MENU);
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
+1 -1
View File
@@ -893,7 +893,7 @@ do_symset(boolean rogueflag)
char *symset_name, fmtstr[20];
struct symsetentry *sl;
int res, which_set, setcount = 0, chosen = -2, defindx = 0;
int clr = 0;
int clr = NO_COLOR;
which_set = rogueflag ? ROGUESET : PRIMARYSET;
gs.symset_list = (struct symsetentry *) 0;
+1 -1
View File
@@ -911,7 +911,7 @@ dotelecmd(void)
menu_item *picks = (menu_item *) 0;
anything any;
winid win;
int i, tmode, clr = 0;
int i, tmode, clr = NO_COLOR;
win = create_nhwindow(NHW_MENU);
start_menu(win, MENU_BEHAVE_STANDARD);
+1 -1
View File
@@ -1165,7 +1165,7 @@ enhance_weapon_skill(void)
anything any;
winid win;
boolean speedy = FALSE;
int clr = 0;
int clr = NO_COLOR;
/* player knows about #enhance, don't show tip anymore */
gc.context.tips[TIP_ENHANCE] = TRUE;