| 783 | } |
| 784 | |
| 785 | static void conf(struct menu *menu, struct menu *active_menu) |
| 786 | { |
| 787 | struct menu *submenu; |
| 788 | const char *prompt = menu_get_prompt(menu); |
| 789 | struct subtitle_part stpart; |
| 790 | struct symbol *sym; |
| 791 | int res; |
| 792 | int s_scroll = 0; |
| 793 | |
| 794 | if (menu != &rootmenu) |
| 795 | stpart.text = menu_get_prompt(menu); |
| 796 | else |
| 797 | stpart.text = NULL; |
| 798 | list_add_tail(&stpart.entries, &trail); |
| 799 | |
| 800 | while (1) { |
| 801 | item_reset(); |
| 802 | current_menu = menu; |
| 803 | build_conf(menu); |
| 804 | if (!child_count) |
| 805 | break; |
| 806 | set_subtitle(); |
| 807 | dialog_clear(); |
| 808 | res = dialog_menu(prompt ? prompt : "Main Menu", |
| 809 | menu_instructions, |
| 810 | active_menu, &s_scroll); |
| 811 | if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL) |
| 812 | break; |
| 813 | if (item_count() != 0) { |
| 814 | if (!item_activate_selected()) |
| 815 | continue; |
| 816 | if (!item_tag()) |
| 817 | continue; |
| 818 | } |
| 819 | submenu = item_data(); |
| 820 | active_menu = item_data(); |
| 821 | if (submenu) |
| 822 | sym = submenu->sym; |
| 823 | else |
| 824 | sym = NULL; |
| 825 | |
| 826 | switch (res) { |
| 827 | case 0: |
| 828 | switch (item_tag()) { |
| 829 | case 'm': |
| 830 | if (single_menu_mode) |
| 831 | submenu->data = (void *) (long) !submenu->data; |
| 832 | else |
| 833 | conf(submenu, NULL); |
| 834 | break; |
| 835 | case 't': |
| 836 | if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes) |
| 837 | conf_choice(submenu); |
| 838 | else if (submenu->prompt->type == P_MENU) |
| 839 | conf(submenu, NULL); |
| 840 | break; |
| 841 | case 's': |
| 842 | conf_string(submenu); |
no test coverage detected