Prompt user for character race, role, alignment, or gender */
| 686 | |
| 687 | /* Prompt user for character race, role, alignment, or gender */ |
| 688 | int |
| 689 | curses_character_dialog(const char **choices, const char *prompt) |
| 690 | { |
| 691 | int count, count2, ret, curletter; |
| 692 | char used_letters[invlet_basic]; /* a..zA..Z */ |
| 693 | anything identifier; |
| 694 | menu_item *selected = NULL; |
| 695 | winid wid = curses_get_wid(NHW_MENU); |
| 696 | int clr = NO_COLOR; |
| 697 | |
| 698 | identifier.a_void = 0; |
| 699 | curses_start_menu(wid, MENU_BEHAVE_STANDARD); |
| 700 | |
| 701 | for (count = 0; choices[count]; count++) { |
| 702 | curletter = tolower(choices[count][0]); |
| 703 | for (count2 = 0; count2 < count; count2++) { |
| 704 | if (curletter == used_letters[count2]) { |
| 705 | curletter = toupper(curletter); |
| 706 | } |
| 707 | } |
| 708 | |
| 709 | identifier.a_int = (count + 1); /* Must be non-zero */ |
| 710 | curses_add_menu(wid, &nul_glyphinfo, &identifier, curletter, 0, |
| 711 | A_NORMAL, clr, choices[count], MENU_ITEMFLAGS_NONE); |
| 712 | used_letters[count] = curletter; |
| 713 | } |
| 714 | |
| 715 | /* Random Selection */ |
| 716 | identifier.a_int = ROLE_RANDOM; |
| 717 | curses_add_menu(wid, &nul_glyphinfo, &identifier, '*', 0, |
| 718 | A_NORMAL, clr, "Random", MENU_ITEMFLAGS_NONE); |
| 719 | |
| 720 | /* Quit prompt */ |
| 721 | identifier.a_int = ROLE_NONE; |
| 722 | curses_add_menu(wid, &nul_glyphinfo, &identifier, 'q', 0, |
| 723 | A_NORMAL, clr, "Quit", MENU_ITEMFLAGS_NONE); |
| 724 | curses_end_menu(wid, prompt); |
| 725 | ret = curses_select_menu(wid, PICK_ONE, &selected); |
| 726 | if (ret == 1) { |
| 727 | ret = (selected->item.a_int); |
| 728 | } else { /* Cancelled selection */ |
| 729 | |
| 730 | ret = ROLE_NONE; |
| 731 | } |
| 732 | |
| 733 | if (ret > 0) { |
| 734 | ret--; |
| 735 | } |
| 736 | |
| 737 | free((genericptr_t) selected); |
| 738 | return ret; |
| 739 | } |
| 740 | |
| 741 | #endif /* 0 */ |
| 742 |
no test coverage detected