11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * menubox.c -- implements the menu box 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com) 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modify it under the terms of the GNU General Public License 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * as published by the Free Software Foundation; either version 2 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * of the License, or (at your option) any later version. 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful, 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License for more details. 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU General Public License 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * along with this program; if not, write to the Free Software 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Changes by Clifford Wolf (god@clifford.at) 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * [ 1998-06-13 ] 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * *) A bugfix for the Page-Down problem 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * *) Formerly when I used Page Down and Page Up, the cursor would be set 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * to the first position in the menu box. Now lxdialog is a bit 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * smarter and works more like other menu systems (just have a look at 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * it). 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * *) Formerly if I selected something my scrolling would be broken because 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * lxdialog is re-invoked by the Menuconfig shell script, can't 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * remember the last scrolling position, and just sets it so that the 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * cursor is at the bottom of the box. Now it writes the temporary file 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * lxdialog.scrltmp which contains this information. The file is 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * deleted by lxdialog if the user leaves a submenu or enters a new 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * one, but it would be nice if Menuconfig could make another "rm -f" 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * just to be sure. Just try it out - you will recognise a difference! 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * [ 1998-06-14 ] 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * *) Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * and menus change their size on the fly. 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * *) If for some reason the last scrolling position is not saved by 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * lxdialog, it sets the scrolling so that the selected item is in the 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * middle of the menu box, not at the bottom. 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 02 January 1999, Michael Elizabeth Chastain (mec@shout.net) 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus. 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This fixes a bug in Menuconfig where using ' ' to descend into menus 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * would leave mis-synchronized lxdialog.scrltmp files lying around, 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * fscanf would read in 'scroll', and eventually that value would get used. 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "dialog.h" 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6194f2505be3b6afaf50129e949b1840bc4dd0b3e8Roman Zippelstatic int menu_width, item_x; 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Print menu item 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 66737ecae264bc759e2033d99e99138f690f3beabfSam Ravnborgstatic void do_print_item(WINDOW * win, const char *item, int line_y, 6759d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg int selected, int hotkey) 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 69b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg int j; 70a06104af7dcf2f5bafaf18f373c8b2554cbfe014Sam Ravnborg char *menu_item = malloc(menu_width + 1); 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 7294f2505be3b6afaf50129e949b1840bc4dd0b3e8Roman Zippel strncpy(menu_item, item, menu_width - item_x); 73737ecae264bc759e2033d99e99138f690f3beabfSam Ravnborg menu_item[menu_width - item_x] = '\0'; 74b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg j = first_alpha(menu_item, "YyNnMmHh"); 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 76b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg /* Clear 'residue' of last item */ 7798e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg wattrset(win, dlg.menubox.atr); 78737ecae264bc759e2033d99e99138f690f3beabfSam Ravnborg wmove(win, line_y, 0); 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if OLD_NCURSES 80b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg { 81b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg int i; 82b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg for (i = 0; i < menu_width; i++) 83b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(win, ' '); 84b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 86b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg wclrtoeol(win); 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 8898e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr); 89737ecae264bc759e2033d99e99138f690f3beabfSam Ravnborg mvwaddstr(win, line_y, item_x, menu_item); 90b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (hotkey) { 9198e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg wattrset(win, selected ? dlg.tag_key_selected.atr 9298e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg : dlg.tag_key.atr); 93737ecae264bc759e2033d99e99138f690f3beabfSam Ravnborg mvwaddch(win, line_y, item_x + j, menu_item[j]); 94b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 95b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (selected) { 96737ecae264bc759e2033d99e99138f690f3beabfSam Ravnborg wmove(win, line_y, item_x + 1); 97b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 98a06104af7dcf2f5bafaf18f373c8b2554cbfe014Sam Ravnborg free(menu_item); 997c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg wrefresh(win); 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1022982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg#define print_item(index, choice, selected) \ 1032982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborgdo { \ 1042982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg item_set(index); \ 1052982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg do_print_item(menu, item_str(), choice, selected, !item_is_tag(':')); \ 10659d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg} while (0) 10759d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Print the scroll indicators. 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 111dec69da856653772d7ee7b2f98dc69da27274a22Sam Ravnborgstatic void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x, 112dec69da856653772d7ee7b2f98dc69da27274a22Sam Ravnborg int height) 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 114b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg int cur_y, cur_x; 115b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 116b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg getyx(win, cur_y, cur_x); 117b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 118b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg wmove(win, y, x); 119b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 120b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (scroll > 0) { 12198e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg wattrset(win, dlg.uarrow.atr); 122b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(win, ACS_UARROW); 123b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddstr(win, "(-)"); 124b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } else { 12598e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg wattrset(win, dlg.menubox.atr); 126b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(win, ACS_HLINE); 127b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(win, ACS_HLINE); 128b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(win, ACS_HLINE); 129b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(win, ACS_HLINE); 130b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 131b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 132b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg y = y + height + 1; 133b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg wmove(win, y, x); 1347c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg wrefresh(win); 135b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 136b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if ((height < item_no) && (scroll + height < item_no)) { 13798e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg wattrset(win, dlg.darrow.atr); 138b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(win, ACS_DARROW); 139b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddstr(win, "(+)"); 140b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } else { 14198e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg wattrset(win, dlg.menubox_border.atr); 142b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(win, ACS_HLINE); 143b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(win, ACS_HLINE); 144b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(win, ACS_HLINE); 145b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(win, ACS_HLINE); 146b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 147b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 148b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg wmove(win, cur_y, cur_x); 1497c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg wrefresh(win); 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Display the termination buttons. 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 155b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborgstatic void print_buttons(WINDOW * win, int height, int width, int selected) 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 157b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg int x = width / 2 - 16; 158b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg int y = height - 2; 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 16075c0a8a55c31c0a21f7e9e64bc45e87e228a98f6EGRY Gabor print_button(win, gettext("Select"), y, x, selected == 0); 16175c0a8a55c31c0a21f7e9e64bc45e87e228a98f6EGRY Gabor print_button(win, gettext(" Exit "), y, x + 12, selected == 1); 16275c0a8a55c31c0a21f7e9e64bc45e87e228a98f6EGRY Gabor print_button(win, gettext(" Help "), y, x + 24, selected == 2); 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 164b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg wmove(win, y, x + 1 + 12 * selected); 165b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg wrefresh(win); 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1687c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg/* scroll up n lines (n may be negative) */ 1697c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborgstatic void do_scroll(WINDOW *win, int *scroll, int n) 1707c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg{ 1717c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg /* Scroll menu up */ 1727c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg scrollok(win, TRUE); 1737c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg wscrl(win, n); 1747c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg scrollok(win, FALSE); 1757c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg *scroll = *scroll + n; 1767c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg wrefresh(win); 1777c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg} 1787c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Display a menu for choosing among a number of options 1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 182c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborgint dialog_menu(const char *title, const char *prompt, 183c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg const void *selected, int *s_scroll) 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 185b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg int i, j, x, y, box_x, box_y; 186c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg int height, width, menu_height; 187e067e1f98d54d62fd598126f95e7684e5b63e67fSam Ravnborg int key = 0, button = 0, scroll = 0, choice = 0; 188e067e1f98d54d62fd598126f95e7684e5b63e67fSam Ravnborg int first_item = 0, max_choice; 189b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg WINDOW *dialog, *menu; 190b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 191c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborgdo_resize: 192c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg height = getmaxy(stdscr); 193c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg width = getmaxx(stdscr); 194c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg if (height < 15 || width < 65) 195c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg return -ERRDISPLAYTOOSMALL; 196c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg 197c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg height -= 4; 198c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg width -= 5; 199c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg menu_height = height - 10; 200c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg 2012982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg max_choice = MIN(menu_height, item_count()); 202b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 203b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg /* center dialog box on screen */ 204b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg x = (COLS - width) / 2; 205b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg y = (LINES - height) / 2; 206b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 207b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg draw_shadow(stdscr, y, x, height, width); 208b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 209b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg dialog = newwin(height, width, y, x); 210b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg keypad(dialog, TRUE); 211b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 21298e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg draw_box(dialog, 0, 0, height, width, 21398e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg dlg.dialog.atr, dlg.border.atr); 21498e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg wattrset(dialog, dlg.border.atr); 215b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg mvwaddch(dialog, height - 3, 0, ACS_LTEE); 216b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg for (i = 0; i < width - 2; i++) 217b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(dialog, ACS_HLINE); 21898e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg wattrset(dialog, dlg.dialog.atr); 21998e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg wbkgdset(dialog, dlg.dialog.atr & A_COLOR); 220b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg waddch(dialog, ACS_RTEE); 221b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 222fa7009d5b59b8acd8071f7b3057d36eeeaf08146Sam Ravnborg print_title(dialog, title, width); 223b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 22498e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg wattrset(dialog, dlg.dialog.atr); 225b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg print_autowrap(dialog, prompt, width - 2, 1, 3); 226b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 227b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg menu_width = width - 6; 228b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg box_y = height - menu_height - 5; 229b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg box_x = (width - menu_width) / 2 - 1; 230b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 231b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg /* create new window for the menu */ 232b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg menu = subwin(dialog, menu_height, menu_width, 233b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg y + box_y + 1, x + box_x + 1); 234b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg keypad(menu, TRUE); 235b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 236b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg /* draw a box around the menu items */ 237b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg draw_box(dialog, box_y, box_x, menu_height + 2, menu_width + 2, 23898e5a1579e7d34fe3803240750a1c48efcd9cb15Sam Ravnborg dlg.menubox_border.atr, dlg.menubox.atr); 239b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 240c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg if (menu_width >= 80) 241c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg item_x = (menu_width - 70) / 2; 242c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg else 243c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg item_x = 4; 24494f2505be3b6afaf50129e949b1840bc4dd0b3e8Roman Zippel 2450e175d05a4e72f85918da3ea4bd9f5d3d78face4Sam Ravnborg /* Set choice to default item */ 2462982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg item_foreach() 2472982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg if (selected && (selected == item_data())) 2482982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg choice = item_n(); 2492982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg /* get the saved scroll info */ 2502982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg scroll = *s_scroll; 2512982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg if ((scroll <= choice) && (scroll + max_choice > choice) && 2522982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg (scroll >= 0) && (scroll + max_choice <= item_count())) { 2532982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg first_item = scroll; 2542982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg choice = choice - scroll; 2552982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg } else { 2562982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg scroll = 0; 2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 2582982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg if ((choice >= max_choice)) { 2592982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg if (choice >= item_count() - max_choice / 2) 2602982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg scroll = first_item = item_count() - max_choice; 261b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg else 262b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg scroll = first_item = choice - max_choice / 2; 263b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg choice = choice - scroll; 264b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 266b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg /* Print the menu */ 267b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg for (i = 0; i < max_choice; i++) { 26859d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg print_item(first_item + i, i, i == choice); 269b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 270b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 271b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg wnoutrefresh(menu); 272b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 2732982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg print_arrows(dialog, item_count(), scroll, 27494f2505be3b6afaf50129e949b1840bc4dd0b3e8Roman Zippel box_y, box_x + item_x + 1, menu_height); 275b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 276b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg print_buttons(dialog, height, width, 0); 27794f2505be3b6afaf50129e949b1840bc4dd0b3e8Roman Zippel wmove(menu, choice, item_x + 1); 278b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg wrefresh(menu); 279b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 280f3cbcdc955d0d2c8b4c52d6b73fc536b01b68c64Sam Ravnborg while (key != KEY_ESC) { 281b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg key = wgetch(menu); 282b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 283b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (key < 256 && isalpha(key)) 284b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg key = tolower(key); 285b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 286b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (strchr("ynmh", key)) 287b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg i = max_choice; 288b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg else { 289b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg for (i = choice + 1; i < max_choice; i++) { 2902982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg item_set(scroll + i); 2912982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg j = first_alpha(item_str(), "YyNnMmHh"); 2922982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg if (key == tolower(item_str()[j])) 293b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg break; 294b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 295b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (i == max_choice) 296b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg for (i = 0; i < max_choice; i++) { 2972982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg item_set(scroll + i); 2982982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg j = first_alpha(item_str(), "YyNnMmHh"); 2992982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg if (key == tolower(item_str()[j])) 300b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg break; 301b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 302b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 303b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 304b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (i < max_choice || 305b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg key == KEY_UP || key == KEY_DOWN || 306b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg key == '-' || key == '+' || 307b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg key == KEY_PPAGE || key == KEY_NPAGE) { 3080e175d05a4e72f85918da3ea4bd9f5d3d78face4Sam Ravnborg /* Remove highligt of current item */ 30959d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg print_item(scroll + choice, choice, FALSE); 310b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 311b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (key == KEY_UP || key == '-') { 312b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (choice < 2 && scroll) { 313b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg /* Scroll menu down */ 3147c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg do_scroll(menu, &scroll, -1); 315b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 31659d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg print_item(scroll, 0, FALSE); 317b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } else 318b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg choice = MAX(choice - 1, 0); 319b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 320b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } else if (key == KEY_DOWN || key == '+') { 32159d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg print_item(scroll+choice, choice, FALSE); 322b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 323b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if ((choice > max_choice - 3) && 3242982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg (scroll + max_choice < item_count())) { 325b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg /* Scroll menu up */ 3267c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg do_scroll(menu, &scroll, 1); 327b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 32859d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg print_item(scroll+max_choice - 1, 32959d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg max_choice - 1, FALSE); 330b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } else 331dec69da856653772d7ee7b2f98dc69da27274a22Sam Ravnborg choice = MIN(choice + 1, max_choice - 1); 332b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 333b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } else if (key == KEY_PPAGE) { 334b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg scrollok(menu, TRUE); 335b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg for (i = 0; (i < max_choice); i++) { 336b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (scroll > 0) { 3377c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg do_scroll(menu, &scroll, -1); 33859d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg print_item(scroll, 0, FALSE); 339b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } else { 340b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (choice > 0) 341b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg choice--; 342b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 343b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 344b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 345b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } else if (key == KEY_NPAGE) { 346b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg for (i = 0; (i < max_choice); i++) { 3472982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg if (scroll + max_choice < item_count()) { 3487c3badf96e0dc8aa89ebf8919653339a5ee8e035Sam Ravnborg do_scroll(menu, &scroll, 1); 34959d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg print_item(scroll+max_choice-1, 35059d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg max_choice - 1, FALSE); 351b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } else { 352b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg if (choice + 1 < max_choice) 353b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg choice++; 354b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 355b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 356b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } else 357b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg choice = i; 358b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 35959d3cf7a40dfdbb8e86758ade172831c19630050Sam Ravnborg print_item(scroll + choice, choice, TRUE); 360b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 3612982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg print_arrows(dialog, item_count(), scroll, 36294f2505be3b6afaf50129e949b1840bc4dd0b3e8Roman Zippel box_y, box_x + item_x + 1, menu_height); 363b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 364b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg wnoutrefresh(dialog); 365b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg wrefresh(menu); 366b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 367b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg continue; /* wait for another key press */ 368b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 369b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 370b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg switch (key) { 371b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case KEY_LEFT: 372b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case TAB: 373b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case KEY_RIGHT: 374b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg button = ((key == KEY_LEFT ? --button : ++button) < 0) 375b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg ? 2 : (button > 2 ? 0 : button); 376b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg 377b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg print_buttons(dialog, height, width, button); 378b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg wrefresh(menu); 379b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg break; 380b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case ' ': 381b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case 's': 382b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case 'y': 383b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case 'n': 384b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case 'm': 385b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case '/': 38622c7eca61e51296643bb0a379fc726fda8f3b015Li Zefan case 'h': 38722c7eca61e51296643bb0a379fc726fda8f3b015Li Zefan case '?': 38822c7eca61e51296643bb0a379fc726fda8f3b015Li Zefan case 'z': 38922c7eca61e51296643bb0a379fc726fda8f3b015Li Zefan case '\n': 390b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg /* save scroll info */ 3912982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg *s_scroll = scroll; 3922982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg delwin(menu); 393b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg delwin(dialog); 3942982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg item_set(scroll + choice); 3952982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg item_set_selected(1); 396b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg switch (key) { 39722c7eca61e51296643bb0a379fc726fda8f3b015Li Zefan case 'h': 39822c7eca61e51296643bb0a379fc726fda8f3b015Li Zefan case '?': 39922c7eca61e51296643bb0a379fc726fda8f3b015Li Zefan return 2; 400b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case 's': 401b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case 'y': 402b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg return 3; 403b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case 'n': 404b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg return 4; 405b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case 'm': 406b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg return 5; 407b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case ' ': 408b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg return 6; 409b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case '/': 410b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg return 7; 41122c7eca61e51296643bb0a379fc726fda8f3b015Li Zefan case 'z': 41222c7eca61e51296643bb0a379fc726fda8f3b015Li Zefan return 8; 41322c7eca61e51296643bb0a379fc726fda8f3b015Li Zefan case '\n': 41422c7eca61e51296643bb0a379fc726fda8f3b015Li Zefan return button; 415b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 416b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg return 0; 417b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case 'e': 418b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg case 'x': 419f3cbcdc955d0d2c8b4c52d6b73fc536b01b68c64Sam Ravnborg key = KEY_ESC; 420f3cbcdc955d0d2c8b4c52d6b73fc536b01b68c64Sam Ravnborg break; 421f3cbcdc955d0d2c8b4c52d6b73fc536b01b68c64Sam Ravnborg case KEY_ESC: 422f3cbcdc955d0d2c8b4c52d6b73fc536b01b68c64Sam Ravnborg key = on_key_esc(menu); 423b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg break; 424c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg case KEY_RESIZE: 425c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg on_key_resize(); 426c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg delwin(menu); 427c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg delwin(dialog); 428c8dc68ad0fbd934e78e913b8a8d7b45945db4930Sam Ravnborg goto do_resize; 429b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg } 4301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 4312982de6993e6d9944f2215d7cb9b558b465a0c99Sam Ravnborg delwin(menu); 432b1c5f1c635f4a821f834ed51ccd8a2a1515fffd2Sam Ravnborg delwin(dialog); 433f3cbcdc955d0d2c8b4c52d6b73fc536b01b68c64Sam Ravnborg return key; /* ESC pressed */ 4341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 435