kconfig/lxdialog/yesno.c
author Ray Donnelly <mingw.android@gmail.com>
Sat Sep 14 02:45:23 2013 +0100 (2013-09-14)
changeset 3231 69f5dc1ff327
parent 1 eeea35fbf182
permissions -rw-r--r--
configure: Add --with-gperf option

On OS X, Apple supply an old gperf (3.0.3) with xcode and
xcode commandline tools which causes build failures:

./zconf.hash.c:183:17: error: expected expression
{offsetof(struct kconf_id_strings_t, kconf_id_strings_str2),

.. upgrading to gperf 3.0.4 was sufficient to fix this,
so this option allows the user to specify the gperf
program that they wish to use.

To install gperf 3.0.4 from homebrew, I did:

brew tap homebrew/dupes
brew install homebrew/dupes/gperf

.. then passed --with-gperf=$BREWFIX/Cellar/gperf/3.0.4/bin/gperf
to configure

Signed-off-by: Ray Donnelly <mingw.android@gmail.com>
Message-Id: <CAOYw7dtCmcJ9WiqmQ81MmZeRPcV-tDOqe9=kRDW4uQGuZNd2Ng@mail.gmail.com>
Patchwork-Id: 274892
     1 /*
     2  *  yesno.c -- implements the yes/no box
     3  *
     4  *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
     5  *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
     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 }