... in menus where those object symbols act as menu accelerators.
Toggleable via "menu_objsyms" boolean option, defaults to off.
Menu character accelerator to goto the next menu page.
Implemented by the Amiga, Gem and tty ports.
Default '>'.
+.lp menu_objsyms
+Show object symbols in menu headings in menus where
+the object symbols act as menu accelerators (default off).
.lp menu_previous_page
Menu character accelerator to goto the previous menu page.
Implemented by the Amiga, Gem and tty ports.
fix invalid pointer dereference in morguemon if ndemon returns NON_PM
after object loss through polyshudder don't get left hiding under nothing
if you're polymorphed into a hider
+show object symbols in menu headings in menus where those object symbols
+ act as menu accelerators, toggleable via "menu_objsyms" option
Platform- and/or Interface-Specific Fixes
E int NDECL(doprtool);
E int NDECL(doprinuse);
E void FDECL(useupf, (struct obj *,long));
-E char *FDECL(let_to_name, (CHAR_P,BOOLEAN_P));
+E char *FDECL(let_to_name, (CHAR_P,BOOLEAN_P,BOOLEAN_P));
E void NDECL(free_invbuf);
E void NDECL(reassign);
E int NDECL(doorganize);
boolean news; /* print news */
boolean mention_walls; /* give feedback when bumping walls */
boolean menu_tab_sep; /* Use tabs to separate option menu fields */
+ boolean menu_head_objsym; /* Show obj symbol in menu headings */
boolean menu_requested; /* Flag for overloaded use of 'm' prefix
* on some non-move commands */
boolean renameallowed; /* can change hero name during role selection */
if (!flags.sortpack || otmp->oclass == *invlet) {
if (flags.sortpack && !classcount) {
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
- let_to_name(*invlet, FALSE), MENU_UNSELECTED);
+ let_to_name(*invlet, FALSE, (want_reply && iflags.menu_head_objsym)), MENU_UNSELECTED);
classcount++;
}
any.a_char = ilet;
if (flags.sortpack && !classcount) {
any = zeroany; /* zero */
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
- let_to_name(*invlet, FALSE), MENU_UNSELECTED);
+ let_to_name(*invlet, FALSE, FALSE), MENU_UNSELECTED);
classcount++;
}
any.a_char = ilet;
if (otmp->unpaid) {
if (!flags.sortpack || otmp->oclass == *invlet) {
if (flags.sortpack && !classcount) {
- putstr(win, 0, let_to_name(*invlet, TRUE));
+ putstr(win, 0, let_to_name(*invlet, TRUE, FALSE));
classcount++;
}
if (count > num_so_far) {
/* something unpaid is contained */
if (flags.sortpack)
- putstr(win, 0, let_to_name(CONTAINED_SYM, TRUE));
+ putstr(win, 0, let_to_name(CONTAINED_SYM, TRUE, FALSE));
/*
* Search through the container objects in the inventory for
* unpaid items. The top level inventory items have already
static NEARDATA unsigned invbufsiz = 0;
char *
-let_to_name(let,unpaid)
+let_to_name(let,unpaid,showsym)
char let;
-boolean unpaid;
+boolean unpaid,showsym;
{
+ const char *ocsymfmt = " ('%c')";
+ const int invbuf_sympadding = 8; /* arbitrary */
const char *class_name;
const char *pos;
int oclass = (let >= 1 && let < MAXOCLASSES) ? let : 0;
else
class_name = names[0];
- len = strlen(class_name) + (unpaid ? sizeof "unpaid_" : sizeof "");
+ len = strlen(class_name) + (unpaid ? sizeof "unpaid_" : sizeof "") +
+ (oclass ? (strlen(ocsymfmt)+invbuf_sympadding) : 0);
if (len > invbufsiz) {
if (invbuf) free((genericptr_t)invbuf);
invbufsiz = len + 10; /* add slop to reduce incremental realloc */
Strcat(strcpy(invbuf, "Unpaid "), class_name);
else
Strcpy(invbuf, class_name);
+ if ((oclass != 0) && showsym) {
+ char *bp = eos(invbuf);
+ int mlen = invbuf_sympadding - strlen(class_name);
+ while (--mlen > 0) {
+ *bp = ' '; bp++;
+ }
+ *bp = '\0';
+ Sprintf(eos(invbuf), ocsymfmt, def_oc_syms[oclass].sym);
+ }
return invbuf;
}
if ((dis = disco[i]) != 0 && interesting_to_discover(dis)) {
ct++;
if (oclass != prev_class) {
- putstr(tmpwin, iflags.menu_headings, let_to_name(oclass, FALSE));
+ putstr(tmpwin, iflags.menu_headings, let_to_name(oclass, FALSE, FALSE));
prev_class = oclass;
}
Sprintf(buf, "%s %s",(objects[dis].oc_pre_discovered ? "*" : " "),
{
char *s;
- Strcpy(buf, let_to_name(oclass, FALSE));
+ Strcpy(buf, let_to_name(oclass, FALSE, FALSE));
for (s = buf; *s; ++s) *s = lowc(*s);
return buf;
}
break;
default:
oclass = def_char_to_objclass(c);
- Sprintf(buf, "Discovered %s", let_to_name(oclass, FALSE));
+ Sprintf(buf, "Discovered %s", let_to_name(oclass, FALSE, FALSE));
putstr(tmpwin, iflags.menu_headings, buf);
for (i = bases[(int)oclass];
i < NUM_OBJECTS && objects[i].oc_class == oclass; ++i) {
if (oclass != prev_class) {
any.a_int = 0;
add_menu(tmpwin, NO_GLYPH, &any, ' ', iflags.menu_headings,
- ATR_NONE, let_to_name(oclass, FALSE), MENU_UNSELECTED);
+ ATR_NONE, let_to_name(oclass, FALSE, FALSE), MENU_UNSELECTED);
prev_class = oclass;
}
any.a_int = dis;
{"mention_walls", &iflags.mention_walls, FALSE, SET_IN_GAME},
/* for menu debugging only*/
{"menu_tab_sep", &iflags.menu_tab_sep, FALSE, SET_IN_GAME},
+ {"menu_objsyms", &iflags.menu_head_objsym, FALSE, SET_IN_GAME},
{"mouse_support", &iflags.wc_mouse_support, TRUE, DISP_IN_GAME}, /*WC*/
#ifdef NEWS
{"news", &iflags.news, TRUE, DISP_IN_GAME},
if (sorted && !printed_type_name) {
any = zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
- let_to_name(*pack, FALSE), MENU_UNSELECTED);
+ let_to_name(*pack, FALSE,
+ (how != PICK_NONE) && iflags.menu_head_objsym),
+ MENU_UNSELECTED);
printed_type_name = TRUE;
}
any.a_int = curr->oclass;
add_menu(win, NO_GLYPH, &any, invlet++,
def_oc_syms[(int)objects[curr->otyp].oc_class].sym,
- ATR_NONE, let_to_name(*pack, FALSE),
- MENU_UNSELECTED);
+ ATR_NONE,
+ let_to_name(*pack, FALSE,
+ (how != PICK_NONE) && iflags.menu_head_objsym),
+ MENU_UNSELECTED);
collected_type_name = TRUE;
}
}