kconfig/lxdialog/yesno.c
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Wed Dec 05 20:31:43 2012 +0100 (2012-12-05)
changeset 3134 863723936e24
parent 1 eeea35fbf182
permissions -rw-r--r--
scripts/xldd: use user's sed and grep

xldd uses sed and grep as detected by ./configure. This works well if is
used on the machine that build the toolchain.

But if the user moves the toolchain to another machine where sed and grep
are not in the same directory (eg. /bin/sed vs. /usr/bin/sed), then xldd
will stop functionning.

Fix that by using ${SED} and ${GREP} if they are set in the environment.

Reported-by: Samuel Martin <s.martin49@gmail.com>
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
}