kconfig/lxdialog/yesno.c
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Thu Dec 27 12:45:22 2012 +0100 (2012-12-27)
changeset 3152 b286c7993be5
parent 1 eeea35fbf182
permissions -rw-r--r--
scripts/addToolsVersion: properly handle .in vs. .in.2

While most components have their version in the .in file, some
have it in the .in.2 (eg. elf2flt).

Currently, to handle this case, we indiscriminately munge both files,
but this is wrong: in the elf2flt case, if we add a binutils version,
we do not want it to be added to elf2flt, and conversely.

So, for each tool, we need to explicitly know what file to munge.

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