Annotation of qemu/roms/seabios/tools/kconfig/lxdialog/yesno.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *  yesno.c -- implements the yes/no box
                      3:  *
                      4:  *  ORIGINAL AUTHOR: Savio Lam ([email protected])
                      5:  *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap ([email protected])
                      6:  *
                      7:  *  This program is free software; you can redistribute it and/or
                      8:  *  modify it under the terms of the GNU General Public License
                      9:  *  as published by the Free Software Foundation; either version 2
                     10:  *  of the License, or (at your option) any later version.
                     11:  *
                     12:  *  This program is distributed in the hope that it will be useful,
                     13:  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
                     14:  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     15:  *  GNU General Public License for more details.
                     16:  *
                     17:  *  You should have received a copy of the GNU General Public License
                     18:  *  along with this program; if not, write to the Free Software
                     19:  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
                     20:  */
                     21: 
                     22: #include "dialog.h"
                     23: 
                     24: /*
                     25:  * Display termination buttons
                     26:  */
                     27: static void print_buttons(WINDOW * dialog, int height, int width, int selected)
                     28: {
                     29:        int x = width / 2 - 10;
                     30:        int y = height - 2;
                     31: 
                     32:        print_button(dialog, gettext(" Yes "), y, x, selected == 0);
                     33:        print_button(dialog, gettext("  No  "), y, x + 13, selected == 1);
                     34: 
                     35:        wmove(dialog, y, x + 1 + 13 * selected);
                     36:        wrefresh(dialog);
                     37: }
                     38: 
                     39: /*
                     40:  * Display a dialog box with two buttons - Yes and No
                     41:  */
                     42: int dialog_yesno(const char *title, const char *prompt, int height, int width)
                     43: {
                     44:        int i, x, y, key = 0, button = 0;
                     45:        WINDOW *dialog;
                     46: 
                     47: do_resize:
                     48:        if (getmaxy(stdscr) < (height + 4))
                     49:                return -ERRDISPLAYTOOSMALL;
                     50:        if (getmaxx(stdscr) < (width + 4))
                     51:                return -ERRDISPLAYTOOSMALL;
                     52: 
                     53:        /* center dialog box on screen */
                     54:        x = (COLS - width) / 2;
                     55:        y = (LINES - height) / 2;
                     56: 
                     57:        draw_shadow(stdscr, y, x, height, width);
                     58: 
                     59:        dialog = newwin(height, width, y, x);
                     60:        keypad(dialog, TRUE);
                     61: 
                     62:        draw_box(dialog, 0, 0, height, width,
                     63:                 dlg.dialog.atr, dlg.border.atr);
                     64:        wattrset(dialog, dlg.border.atr);
                     65:        mvwaddch(dialog, height - 3, 0, ACS_LTEE);
                     66:        for (i = 0; i < width - 2; i++)
                     67:                waddch(dialog, ACS_HLINE);
                     68:        wattrset(dialog, dlg.dialog.atr);
                     69:        waddch(dialog, ACS_RTEE);
                     70: 
                     71:        print_title(dialog, title, width);
                     72: 
                     73:        wattrset(dialog, dlg.dialog.atr);
                     74:        print_autowrap(dialog, prompt, width - 2, 1, 3);
                     75: 
                     76:        print_buttons(dialog, height, width, 0);
                     77: 
                     78:        while (key != KEY_ESC) {
                     79:                key = wgetch(dialog);
                     80:                switch (key) {
                     81:                case 'Y':
                     82:                case 'y':
                     83:                        delwin(dialog);
                     84:                        return 0;
                     85:                case 'N':
                     86:                case 'n':
                     87:                        delwin(dialog);
                     88:                        return 1;
                     89: 
                     90:                case TAB:
                     91:                case KEY_LEFT:
                     92:                case KEY_RIGHT:
                     93:                        button = ((key == KEY_LEFT ? --button : ++button) < 0) ? 1 : (button > 1 ? 0 : button);
                     94: 
                     95:                        print_buttons(dialog, height, width, button);
                     96:                        wrefresh(dialog);
                     97:                        break;
                     98:                case ' ':
                     99:                case '\n':
                    100:                        delwin(dialog);
                    101:                        return button;
                    102:                case KEY_ESC:
                    103:                        key = on_key_esc(dialog);
                    104:                        break;
                    105:                case KEY_RESIZE:
                    106:                        delwin(dialog);
                    107:                        on_key_resize();
                    108:                        goto do_resize;
                    109:                }
                    110:        }
                    111: 
                    112:        delwin(dialog);
                    113:        return key;             /* ESC pressed */
                    114: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.