diff --git a/src/botl.c b/src/botl.c index fb96cb688..5dfb8fc51 100644 --- a/src/botl.c +++ b/src/botl.c @@ -3886,7 +3886,7 @@ status_hilite_menu_fld(int fld) int count = status_hilite_linestr_countfield(fld); struct _status_hilite_line_str *hlstr; char buf[BUFSZ]; - boolean acted = FALSE; + boolean acted; if (!count) { if (status_hilite_menu_add(fld)) { @@ -3944,55 +3944,37 @@ status_hilite_menu_fld(int fld) any = cg.zeroany; any.a_int = -2; add_menu(tmpwin, &nul_glyphinfo, &any, 'Z', 0, ATR_NONE, - "Add a new hilite", MENU_ITEMFLAGS_NONE); + "Add new hilites", MENU_ITEMFLAGS_NONE); } Sprintf(buf, "Current %s hilites:", initblstats[fld].fldname); end_menu(tmpwin, buf); + acted = FALSE; if ((res = select_menu(tmpwin, PICK_ANY, &picks)) > 0) { - int mode = 0; + int idx; + unsigned mode = 0; for (i = 0; i < res; i++) { - int idx = picks[i].item.a_int; - - if (idx == -1) { - /* delete selected hilites */ - if (mode) - goto shlmenu_free; - mode = -1; - break; - } else if (idx == -2) { - /* create a new hilite */ - if (mode) - goto shlmenu_free; - mode = -2; - break; + idx = picks[i].item.a_int; + if (idx == -1) + mode |= 1; /* delete selected hilites */ + else if (idx == -2) + mode |= 2; /* create new hilites */ + } + if (mode & 1) { /* delete selected hilites */ + for (i = 0; i < res; i++) { + idx = picks[i].item.a_int; + if (idx > 0 && status_hilite_remove(idx)) + acted = TRUE; } } - - if (mode == -1) { - /* delete selected hilites */ - for (i = 0; i < res; i++) { - int idx = picks[i].item.a_int; - - if (idx > 0) - (void) status_hilite_remove(idx); - } - reset_status_hilites(); - acted = TRUE; - } else if (mode == -2) { - /* create a new hilite */ - if (status_hilite_menu_add(fld)) + if (mode & 2) { /* create new hilites */ + while (status_hilite_menu_add(fld)) acted = TRUE; } - - free((genericptr_t) picks); + free((genericptr_t) picks), picks = 0; } - - shlmenu_free: - - picks = (menu_item *) 0; destroy_nhwindow(tmpwin); return acted; } @@ -4072,10 +4054,12 @@ status_hilite_menu(void) end_menu(tmpwin, "Status hilites:"); if ((res = select_menu(tmpwin, PICK_ONE, &picks)) > 0) { i = picks->item.a_int - 1; - if (i < 0) + if (i < 0) { status_hilites_viewall(); - else - (void) status_hilite_menu_fld(i); + } else { + if (status_hilite_menu_fld(i)) + reset_status_hilites(); + } free((genericptr_t) picks), picks = (menu_item *) 0; redo = TRUE; }