int curses_character_dialog(const char** choices, const char *prompt) { int count, count2, ret, curletter; char used_letters[52]; anything identifier; menu_item *selected = NULL; winid wid = curses_get_wid(NHW_MENU); identifier.a_void = 0; curses_start_menu(wid); for (count=0; choices[count]; count++) { curletter=tolower(choices[count][0]); for (count2=0; count2<count; count2++) { if (curletter==used_letters[count2]) { curletter=toupper(curletter); } } identifier.a_int = (count + 1); /* Must be non-zero */ curses_add_menu(wid, NO_GLYPH, &identifier, curletter, 0, A_NORMAL, choices[count], FALSE); used_letters[count] = curletter; } /* Random Selection */ identifier.a_int = ROLE_RANDOM; curses_add_menu(wid, NO_GLYPH, &identifier, '*', 0, A_NORMAL, "Random", FALSE); /* Quit prompt */ identifier.a_int = ROLE_NONE; curses_add_menu(wid, NO_GLYPH, &identifier, 'q', 0, A_NORMAL, "Quit", FALSE); curses_end_menu(wid, prompt); ret = curses_select_menu(wid, PICK_ONE, &selected); if (ret == 1) { ret = (selected->item.a_int); } else /* Cancelled selection */ { ret = ROLE_NONE; } if (ret > 0) { ret--; } free(selected); return ret; }
/* Create a window of type "type" which can be NHW_MESSAGE (top line) NHW_STATUS (bottom lines) NHW_MAP (main dungeon) NHW_MENU (inventory or other "corner" windows) NHW_TEXT (help/text, full screen paged window) */ winid curses_create_nhwindow(int type) { winid wid = curses_get_wid(type); if (curses_is_menu(wid) || curses_is_text(wid)) { curses_start_menu(wid); curses_add_wid(wid); } return wid; }