mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-03-19 05:24:11 +00:00
Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull kconfig changes from Michal Marek: "kconfig in v3.7 is going to - initialize ncurses only once in menuconfig - be able to jump to a search result in menuconfig - change the misnomer oldnoconfig to a more meaningful name olddefconfig, keeping the old name as alias" * 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: kconfig: replace 'oldnoconfig' with 'olddefconfig', and keep the old name as an alias menuconfig: Assign jump keys per-page instead of globally menuconfig: Do not open code textbox scroll up/down menuconfig: Add jump keys to search results menuconfig: Extend dialog_textbox so that it can return to a scrolled position menuconfig: Extend dialog_textbox so that it can exit on arbitrary keypresses menuconfig: Remove superfluous conditionnal kconfig: document oldnoconfig to what it really does in conf.c kconfig/mconf.c: revision of curses initialization.
This commit is contained in:
commit
35e9a274fd
11 changed files with 296 additions and 138 deletions
|
@ -76,11 +76,17 @@ PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
|
||||||
allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
|
allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
|
||||||
$< --$@ $(Kconfig)
|
$< --$@ $(Kconfig)
|
||||||
|
|
||||||
PHONY += listnewconfig oldnoconfig savedefconfig defconfig
|
PHONY += listnewconfig olddefconfig oldnoconfig savedefconfig defconfig
|
||||||
|
|
||||||
listnewconfig oldnoconfig: $(obj)/conf
|
listnewconfig olddefconfig: $(obj)/conf
|
||||||
$< --$@ $(Kconfig)
|
$< --$@ $(Kconfig)
|
||||||
|
|
||||||
|
# oldnoconfig is an alias of olddefconfig, because people already are dependent
|
||||||
|
# on its behavior(sets new symbols to their default value but not 'n') with the
|
||||||
|
# counter-intuitive name.
|
||||||
|
oldnoconfig: $(obj)/conf
|
||||||
|
$< --olddefconfig $(Kconfig)
|
||||||
|
|
||||||
savedefconfig: $(obj)/conf
|
savedefconfig: $(obj)/conf
|
||||||
$< --$@=defconfig $(Kconfig)
|
$< --$@=defconfig $(Kconfig)
|
||||||
|
|
||||||
|
@ -114,7 +120,7 @@ help:
|
||||||
@echo ' alldefconfig - New config with all symbols set to default'
|
@echo ' alldefconfig - New config with all symbols set to default'
|
||||||
@echo ' randconfig - New config with random answer to all options'
|
@echo ' randconfig - New config with random answer to all options'
|
||||||
@echo ' listnewconfig - List new options'
|
@echo ' listnewconfig - List new options'
|
||||||
@echo ' oldnoconfig - Same as silentoldconfig but sets new symbols to their default value'
|
@echo ' olddefconfig - Same as silentoldconfig but sets new symbols to their default value'
|
||||||
|
|
||||||
# lxdialog stuff
|
# lxdialog stuff
|
||||||
check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
|
check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
|
||||||
|
|
|
@ -32,7 +32,7 @@ enum input_mode {
|
||||||
defconfig,
|
defconfig,
|
||||||
savedefconfig,
|
savedefconfig,
|
||||||
listnewconfig,
|
listnewconfig,
|
||||||
oldnoconfig,
|
olddefconfig,
|
||||||
} input_mode = oldaskconfig;
|
} input_mode = oldaskconfig;
|
||||||
|
|
||||||
static int indent = 1;
|
static int indent = 1;
|
||||||
|
@ -365,7 +365,7 @@ static void conf(struct menu *menu)
|
||||||
case P_MENU:
|
case P_MENU:
|
||||||
if ((input_mode == silentoldconfig ||
|
if ((input_mode == silentoldconfig ||
|
||||||
input_mode == listnewconfig ||
|
input_mode == listnewconfig ||
|
||||||
input_mode == oldnoconfig) &&
|
input_mode == olddefconfig) &&
|
||||||
rootEntry != menu) {
|
rootEntry != menu) {
|
||||||
check_conf(menu);
|
check_conf(menu);
|
||||||
return;
|
return;
|
||||||
|
@ -429,7 +429,7 @@ static void check_conf(struct menu *menu)
|
||||||
if (sym->name && !sym_is_choice_value(sym)) {
|
if (sym->name && !sym_is_choice_value(sym)) {
|
||||||
printf("%s%s\n", CONFIG_, sym->name);
|
printf("%s%s\n", CONFIG_, sym->name);
|
||||||
}
|
}
|
||||||
} else if (input_mode != oldnoconfig) {
|
} else if (input_mode != olddefconfig) {
|
||||||
if (!conf_cnt++)
|
if (!conf_cnt++)
|
||||||
printf(_("*\n* Restart config...\n*\n"));
|
printf(_("*\n* Restart config...\n*\n"));
|
||||||
rootEntry = menu_get_parent_menu(menu);
|
rootEntry = menu_get_parent_menu(menu);
|
||||||
|
@ -454,7 +454,13 @@ static struct option long_opts[] = {
|
||||||
{"alldefconfig", no_argument, NULL, alldefconfig},
|
{"alldefconfig", no_argument, NULL, alldefconfig},
|
||||||
{"randconfig", no_argument, NULL, randconfig},
|
{"randconfig", no_argument, NULL, randconfig},
|
||||||
{"listnewconfig", no_argument, NULL, listnewconfig},
|
{"listnewconfig", no_argument, NULL, listnewconfig},
|
||||||
{"oldnoconfig", no_argument, NULL, oldnoconfig},
|
{"olddefconfig", no_argument, NULL, olddefconfig},
|
||||||
|
/*
|
||||||
|
* oldnoconfig is an alias of olddefconfig, because people already
|
||||||
|
* are dependent on its behavior(sets new symbols to their default
|
||||||
|
* value but not 'n') with the counter-intuitive name.
|
||||||
|
*/
|
||||||
|
{"oldnoconfig", no_argument, NULL, olddefconfig},
|
||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -467,7 +473,8 @@ static void conf_usage(const char *progname)
|
||||||
printf(" --oldaskconfig Start a new configuration using a line-oriented program\n");
|
printf(" --oldaskconfig Start a new configuration using a line-oriented program\n");
|
||||||
printf(" --oldconfig Update a configuration using a provided .config as base\n");
|
printf(" --oldconfig Update a configuration using a provided .config as base\n");
|
||||||
printf(" --silentoldconfig Same as oldconfig, but quietly, additionally update deps\n");
|
printf(" --silentoldconfig Same as oldconfig, but quietly, additionally update deps\n");
|
||||||
printf(" --oldnoconfig Same as silentoldconfig but set new symbols to no\n");
|
printf(" --olddefconfig Same as silentoldconfig but sets new symbols to their default value\n");
|
||||||
|
printf(" --oldnoconfig An alias of olddefconfig\n");
|
||||||
printf(" --defconfig <file> New config with default defined in <file>\n");
|
printf(" --defconfig <file> New config with default defined in <file>\n");
|
||||||
printf(" --savedefconfig <file> Save the minimal current configuration to <file>\n");
|
printf(" --savedefconfig <file> Save the minimal current configuration to <file>\n");
|
||||||
printf(" --allnoconfig New config where all options are answered with no\n");
|
printf(" --allnoconfig New config where all options are answered with no\n");
|
||||||
|
@ -520,7 +527,7 @@ int main(int ac, char **av)
|
||||||
case allmodconfig:
|
case allmodconfig:
|
||||||
case alldefconfig:
|
case alldefconfig:
|
||||||
case listnewconfig:
|
case listnewconfig:
|
||||||
case oldnoconfig:
|
case olddefconfig:
|
||||||
break;
|
break;
|
||||||
case '?':
|
case '?':
|
||||||
conf_usage(progname);
|
conf_usage(progname);
|
||||||
|
@ -565,7 +572,7 @@ int main(int ac, char **av)
|
||||||
case oldaskconfig:
|
case oldaskconfig:
|
||||||
case oldconfig:
|
case oldconfig:
|
||||||
case listnewconfig:
|
case listnewconfig:
|
||||||
case oldnoconfig:
|
case olddefconfig:
|
||||||
conf_read(NULL);
|
conf_read(NULL);
|
||||||
break;
|
break;
|
||||||
case allnoconfig:
|
case allnoconfig:
|
||||||
|
@ -645,7 +652,7 @@ int main(int ac, char **av)
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case oldconfig:
|
case oldconfig:
|
||||||
case listnewconfig:
|
case listnewconfig:
|
||||||
case oldnoconfig:
|
case olddefconfig:
|
||||||
case silentoldconfig:
|
case silentoldconfig:
|
||||||
/* Update until a loop caused no more changes */
|
/* Update until a loop caused no more changes */
|
||||||
do {
|
do {
|
||||||
|
@ -653,7 +660,7 @@ int main(int ac, char **av)
|
||||||
check_conf(&rootmenu);
|
check_conf(&rootmenu);
|
||||||
} while (conf_cnt &&
|
} while (conf_cnt &&
|
||||||
(input_mode != listnewconfig &&
|
(input_mode != listnewconfig &&
|
||||||
input_mode != oldnoconfig));
|
input_mode != olddefconfig));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ extern "C" {
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <sys/queue.h>
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -173,6 +174,16 @@ struct menu {
|
||||||
#define MENU_CHANGED 0x0001
|
#define MENU_CHANGED 0x0001
|
||||||
#define MENU_ROOT 0x0002
|
#define MENU_ROOT 0x0002
|
||||||
|
|
||||||
|
struct jump_key {
|
||||||
|
CIRCLEQ_ENTRY(jump_key) entries;
|
||||||
|
size_t offset;
|
||||||
|
struct menu *target;
|
||||||
|
int index;
|
||||||
|
};
|
||||||
|
CIRCLEQ_HEAD(jk_head, jump_key);
|
||||||
|
|
||||||
|
#define JUMP_NB 9
|
||||||
|
|
||||||
extern struct file *file_list;
|
extern struct file *file_list;
|
||||||
extern struct file *current_file;
|
extern struct file *current_file;
|
||||||
struct file *lookup_file(const char *name);
|
struct file *lookup_file(const char *name);
|
||||||
|
|
|
@ -21,8 +21,10 @@ P(menu_get_root_menu,struct menu *,(struct menu *menu));
|
||||||
P(menu_get_parent_menu,struct menu *,(struct menu *menu));
|
P(menu_get_parent_menu,struct menu *,(struct menu *menu));
|
||||||
P(menu_has_help,bool,(struct menu *menu));
|
P(menu_has_help,bool,(struct menu *menu));
|
||||||
P(menu_get_help,const char *,(struct menu *menu));
|
P(menu_get_help,const char *,(struct menu *menu));
|
||||||
P(get_symbol_str, void, (struct gstr *r, struct symbol *sym));
|
P(get_symbol_str, void, (struct gstr *r, struct symbol *sym, struct jk_head
|
||||||
P(get_relations_str, struct gstr, (struct symbol **sym_arr));
|
*head));
|
||||||
|
P(get_relations_str, struct gstr, (struct symbol **sym_arr, struct jk_head
|
||||||
|
*head));
|
||||||
P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));
|
P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));
|
||||||
|
|
||||||
/* symbol.c */
|
/* symbol.c */
|
||||||
|
|
|
@ -144,6 +144,7 @@ struct dialog_info {
|
||||||
*/
|
*/
|
||||||
extern struct dialog_info dlg;
|
extern struct dialog_info dlg;
|
||||||
extern char dialog_input_result[];
|
extern char dialog_input_result[];
|
||||||
|
extern int saved_x, saved_y; /* Needed in signal handler in mconf.c */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function prototypes
|
* Function prototypes
|
||||||
|
@ -209,7 +210,13 @@ int first_alpha(const char *string, const char *exempt);
|
||||||
int dialog_yesno(const char *title, const char *prompt, int height, int width);
|
int dialog_yesno(const char *title, const char *prompt, int height, int width);
|
||||||
int dialog_msgbox(const char *title, const char *prompt, int height,
|
int dialog_msgbox(const char *title, const char *prompt, int height,
|
||||||
int width, int pause);
|
int width, int pause);
|
||||||
int dialog_textbox(const char *title, const char *file, int height, int width);
|
|
||||||
|
|
||||||
|
typedef void (*update_text_fn)(char *buf, size_t start, size_t end, void
|
||||||
|
*_data);
|
||||||
|
int dialog_textbox(const char *title, char *tbuf, int initial_height,
|
||||||
|
int initial_width, int *keys, int *_vscroll, int *_hscroll,
|
||||||
|
update_text_fn update_text, void *data);
|
||||||
int dialog_menu(const char *title, const char *prompt,
|
int dialog_menu(const char *title, const char *prompt,
|
||||||
const void *selected, int *s_scroll);
|
const void *selected, int *s_scroll);
|
||||||
int dialog_checklist(const char *title, const char *prompt, int height,
|
int dialog_checklist(const char *title, const char *prompt, int height,
|
||||||
|
|
|
@ -22,23 +22,25 @@
|
||||||
#include "dialog.h"
|
#include "dialog.h"
|
||||||
|
|
||||||
static void back_lines(int n);
|
static void back_lines(int n);
|
||||||
static void print_page(WINDOW * win, int height, int width);
|
static void print_page(WINDOW *win, int height, int width, update_text_fn
|
||||||
static void print_line(WINDOW * win, int row, int width);
|
update_text, void *data);
|
||||||
|
static void print_line(WINDOW *win, int row, int width);
|
||||||
static char *get_line(void);
|
static char *get_line(void);
|
||||||
static void print_position(WINDOW * win);
|
static void print_position(WINDOW * win);
|
||||||
|
|
||||||
static int hscroll;
|
static int hscroll;
|
||||||
static int begin_reached, end_reached, page_length;
|
static int begin_reached, end_reached, page_length;
|
||||||
static const char *buf;
|
static char *buf;
|
||||||
static const char *page;
|
static char *page;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* refresh window content
|
* refresh window content
|
||||||
*/
|
*/
|
||||||
static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
|
static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
|
||||||
int cur_y, int cur_x)
|
int cur_y, int cur_x, update_text_fn update_text,
|
||||||
|
void *data)
|
||||||
{
|
{
|
||||||
print_page(box, boxh, boxw);
|
print_page(box, boxh, boxw, update_text, data);
|
||||||
print_position(dialog);
|
print_position(dialog);
|
||||||
wmove(dialog, cur_y, cur_x); /* Restore cursor position */
|
wmove(dialog, cur_y, cur_x); /* Restore cursor position */
|
||||||
wrefresh(dialog);
|
wrefresh(dialog);
|
||||||
|
@ -47,14 +49,18 @@ static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Display text from a file in a dialog box.
|
* Display text from a file in a dialog box.
|
||||||
|
*
|
||||||
|
* keys is a null-terminated array
|
||||||
|
* update_text() may not add or remove any '\n' or '\0' in tbuf
|
||||||
*/
|
*/
|
||||||
int dialog_textbox(const char *title, const char *tbuf,
|
int dialog_textbox(const char *title, char *tbuf, int initial_height,
|
||||||
int initial_height, int initial_width)
|
int initial_width, int *keys, int *_vscroll, int *_hscroll,
|
||||||
|
update_text_fn update_text, void *data)
|
||||||
{
|
{
|
||||||
int i, x, y, cur_x, cur_y, key = 0;
|
int i, x, y, cur_x, cur_y, key = 0;
|
||||||
int height, width, boxh, boxw;
|
int height, width, boxh, boxw;
|
||||||
int passed_end;
|
|
||||||
WINDOW *dialog, *box;
|
WINDOW *dialog, *box;
|
||||||
|
bool done = false;
|
||||||
|
|
||||||
begin_reached = 1;
|
begin_reached = 1;
|
||||||
end_reached = 0;
|
end_reached = 0;
|
||||||
|
@ -63,6 +69,15 @@ int dialog_textbox(const char *title, const char *tbuf,
|
||||||
buf = tbuf;
|
buf = tbuf;
|
||||||
page = buf; /* page is pointer to start of page to be displayed */
|
page = buf; /* page is pointer to start of page to be displayed */
|
||||||
|
|
||||||
|
if (_vscroll && *_vscroll) {
|
||||||
|
begin_reached = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < *_vscroll; i++)
|
||||||
|
get_line();
|
||||||
|
}
|
||||||
|
if (_hscroll)
|
||||||
|
hscroll = *_hscroll;
|
||||||
|
|
||||||
do_resize:
|
do_resize:
|
||||||
getmaxyx(stdscr, height, width);
|
getmaxyx(stdscr, height, width);
|
||||||
if (height < 8 || width < 8)
|
if (height < 8 || width < 8)
|
||||||
|
@ -120,9 +135,10 @@ do_resize:
|
||||||
|
|
||||||
/* Print first page of text */
|
/* Print first page of text */
|
||||||
attr_clear(box, boxh, boxw, dlg.dialog.atr);
|
attr_clear(box, boxh, boxw, dlg.dialog.atr);
|
||||||
refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x);
|
refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x, update_text,
|
||||||
|
data);
|
||||||
|
|
||||||
while ((key != KEY_ESC) && (key != '\n')) {
|
while (!done) {
|
||||||
key = wgetch(dialog);
|
key = wgetch(dialog);
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 'E': /* Exit */
|
case 'E': /* Exit */
|
||||||
|
@ -130,16 +146,17 @@ do_resize:
|
||||||
case 'X':
|
case 'X':
|
||||||
case 'x':
|
case 'x':
|
||||||
case 'q':
|
case 'q':
|
||||||
delwin(box);
|
case '\n':
|
||||||
delwin(dialog);
|
done = true;
|
||||||
return 0;
|
break;
|
||||||
case 'g': /* First page */
|
case 'g': /* First page */
|
||||||
case KEY_HOME:
|
case KEY_HOME:
|
||||||
if (!begin_reached) {
|
if (!begin_reached) {
|
||||||
begin_reached = 1;
|
begin_reached = 1;
|
||||||
page = buf;
|
page = buf;
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw,
|
||||||
cur_y, cur_x);
|
cur_y, cur_x, update_text,
|
||||||
|
data);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'G': /* Last page */
|
case 'G': /* Last page */
|
||||||
|
@ -149,45 +166,18 @@ do_resize:
|
||||||
/* point to last char in buf */
|
/* point to last char in buf */
|
||||||
page = buf + strlen(buf);
|
page = buf + strlen(buf);
|
||||||
back_lines(boxh);
|
back_lines(boxh);
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
cur_y, cur_x);
|
cur_x, update_text, data);
|
||||||
break;
|
break;
|
||||||
case 'K': /* Previous line */
|
case 'K': /* Previous line */
|
||||||
case 'k':
|
case 'k':
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
if (!begin_reached) {
|
if (begin_reached)
|
||||||
back_lines(page_length + 1);
|
break;
|
||||||
|
|
||||||
/* We don't call print_page() here but use
|
back_lines(page_length + 1);
|
||||||
* scrolling to ensure faster screen update.
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
* However, 'end_reached' and 'page_length'
|
cur_x, update_text, data);
|
||||||
* should still be updated, and 'page' should
|
|
||||||
* point to start of next page. This is done
|
|
||||||
* by calling get_line() in the following
|
|
||||||
* 'for' loop. */
|
|
||||||
scrollok(box, TRUE);
|
|
||||||
wscrl(box, -1); /* Scroll box region down one line */
|
|
||||||
scrollok(box, FALSE);
|
|
||||||
page_length = 0;
|
|
||||||
passed_end = 0;
|
|
||||||
for (i = 0; i < boxh; i++) {
|
|
||||||
if (!i) {
|
|
||||||
/* print first line of page */
|
|
||||||
print_line(box, 0, boxw);
|
|
||||||
wnoutrefresh(box);
|
|
||||||
} else
|
|
||||||
/* Called to update 'end_reached' and 'page' */
|
|
||||||
get_line();
|
|
||||||
if (!passed_end)
|
|
||||||
page_length++;
|
|
||||||
if (end_reached && !passed_end)
|
|
||||||
passed_end = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
print_position(dialog);
|
|
||||||
wmove(dialog, cur_y, cur_x); /* Restore cursor position */
|
|
||||||
wrefresh(dialog);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 'B': /* Previous page */
|
case 'B': /* Previous page */
|
||||||
case 'b':
|
case 'b':
|
||||||
|
@ -196,23 +186,18 @@ do_resize:
|
||||||
if (begin_reached)
|
if (begin_reached)
|
||||||
break;
|
break;
|
||||||
back_lines(page_length + boxh);
|
back_lines(page_length + boxh);
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
cur_y, cur_x);
|
cur_x, update_text, data);
|
||||||
break;
|
break;
|
||||||
case 'J': /* Next line */
|
case 'J': /* Next line */
|
||||||
case 'j':
|
case 'j':
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
if (!end_reached) {
|
if (end_reached)
|
||||||
begin_reached = 0;
|
break;
|
||||||
scrollok(box, TRUE);
|
|
||||||
scroll(box); /* Scroll box region up one line */
|
back_lines(page_length - 1);
|
||||||
scrollok(box, FALSE);
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
print_line(box, boxh - 1, boxw);
|
cur_x, update_text, data);
|
||||||
wnoutrefresh(box);
|
|
||||||
print_position(dialog);
|
|
||||||
wmove(dialog, cur_y, cur_x); /* Restore cursor position */
|
|
||||||
wrefresh(dialog);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case KEY_NPAGE: /* Next page */
|
case KEY_NPAGE: /* Next page */
|
||||||
case ' ':
|
case ' ':
|
||||||
|
@ -221,8 +206,8 @@ do_resize:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
begin_reached = 0;
|
begin_reached = 0;
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
cur_y, cur_x);
|
cur_x, update_text, data);
|
||||||
break;
|
break;
|
||||||
case '0': /* Beginning of line */
|
case '0': /* Beginning of line */
|
||||||
case 'H': /* Scroll left */
|
case 'H': /* Scroll left */
|
||||||
|
@ -237,8 +222,8 @@ do_resize:
|
||||||
hscroll--;
|
hscroll--;
|
||||||
/* Reprint current page to scroll horizontally */
|
/* Reprint current page to scroll horizontally */
|
||||||
back_lines(page_length);
|
back_lines(page_length);
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
cur_y, cur_x);
|
cur_x, update_text, data);
|
||||||
break;
|
break;
|
||||||
case 'L': /* Scroll right */
|
case 'L': /* Scroll right */
|
||||||
case 'l':
|
case 'l':
|
||||||
|
@ -248,11 +233,12 @@ do_resize:
|
||||||
hscroll++;
|
hscroll++;
|
||||||
/* Reprint current page to scroll horizontally */
|
/* Reprint current page to scroll horizontally */
|
||||||
back_lines(page_length);
|
back_lines(page_length);
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
cur_y, cur_x);
|
cur_x, update_text, data);
|
||||||
break;
|
break;
|
||||||
case KEY_ESC:
|
case KEY_ESC:
|
||||||
key = on_key_esc(dialog);
|
if (on_key_esc(dialog) == KEY_ESC)
|
||||||
|
done = true;
|
||||||
break;
|
break;
|
||||||
case KEY_RESIZE:
|
case KEY_RESIZE:
|
||||||
back_lines(height);
|
back_lines(height);
|
||||||
|
@ -260,11 +246,31 @@ do_resize:
|
||||||
delwin(dialog);
|
delwin(dialog);
|
||||||
on_key_resize();
|
on_key_resize();
|
||||||
goto do_resize;
|
goto do_resize;
|
||||||
|
default:
|
||||||
|
for (i = 0; keys[i]; i++) {
|
||||||
|
if (key == keys[i]) {
|
||||||
|
done = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delwin(box);
|
delwin(box);
|
||||||
delwin(dialog);
|
delwin(dialog);
|
||||||
return key; /* ESC pressed */
|
if (_vscroll) {
|
||||||
|
const char *s;
|
||||||
|
|
||||||
|
s = buf;
|
||||||
|
*_vscroll = 0;
|
||||||
|
back_lines(page_length);
|
||||||
|
while (s < page && (s = strchr(s, '\n'))) {
|
||||||
|
(*_vscroll)++;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_hscroll)
|
||||||
|
*_hscroll = hscroll;
|
||||||
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -301,12 +307,23 @@ static void back_lines(int n)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Print a new page of text. Called by dialog_textbox().
|
* Print a new page of text.
|
||||||
*/
|
*/
|
||||||
static void print_page(WINDOW * win, int height, int width)
|
static void print_page(WINDOW *win, int height, int width, update_text_fn
|
||||||
|
update_text, void *data)
|
||||||
{
|
{
|
||||||
int i, passed_end = 0;
|
int i, passed_end = 0;
|
||||||
|
|
||||||
|
if (update_text) {
|
||||||
|
char *end;
|
||||||
|
|
||||||
|
for (i = 0; i < height; i++)
|
||||||
|
get_line();
|
||||||
|
end = page;
|
||||||
|
back_lines(height);
|
||||||
|
update_text(buf, page - buf, end - buf, data);
|
||||||
|
}
|
||||||
|
|
||||||
page_length = 0;
|
page_length = 0;
|
||||||
for (i = 0; i < height; i++) {
|
for (i = 0; i < height; i++) {
|
||||||
print_line(win, i, width);
|
print_line(win, i, width);
|
||||||
|
@ -319,7 +336,7 @@ static void print_page(WINDOW * win, int height, int width)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Print a new line of text. Called by dialog_textbox() and print_page().
|
* Print a new line of text.
|
||||||
*/
|
*/
|
||||||
static void print_line(WINDOW * win, int row, int width)
|
static void print_line(WINDOW * win, int row, int width)
|
||||||
{
|
{
|
||||||
|
@ -357,10 +374,8 @@ static char *get_line(void)
|
||||||
end_reached = 0;
|
end_reached = 0;
|
||||||
while (*page != '\n') {
|
while (*page != '\n') {
|
||||||
if (*page == '\0') {
|
if (*page == '\0') {
|
||||||
if (!end_reached) {
|
end_reached = 1;
|
||||||
end_reached = 1;
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if (i < MAX_LEN)
|
} else if (i < MAX_LEN)
|
||||||
line[i++] = *(page++);
|
line[i++] = *(page++);
|
||||||
else {
|
else {
|
||||||
|
@ -373,7 +388,7 @@ static char *get_line(void)
|
||||||
if (i <= MAX_LEN)
|
if (i <= MAX_LEN)
|
||||||
line[i] = '\0';
|
line[i] = '\0';
|
||||||
if (!end_reached)
|
if (!end_reached)
|
||||||
page++; /* move pass '\n' */
|
page++; /* move past '\n' */
|
||||||
|
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,9 @@
|
||||||
|
|
||||||
#include "dialog.h"
|
#include "dialog.h"
|
||||||
|
|
||||||
|
/* Needed in signal handler in mconf.c */
|
||||||
|
int saved_x, saved_y;
|
||||||
|
|
||||||
struct dialog_info dlg;
|
struct dialog_info dlg;
|
||||||
|
|
||||||
static void set_mono_theme(void)
|
static void set_mono_theme(void)
|
||||||
|
@ -273,6 +276,10 @@ int init_dialog(const char *backtitle)
|
||||||
int height, width;
|
int height, width;
|
||||||
|
|
||||||
initscr(); /* Init curses */
|
initscr(); /* Init curses */
|
||||||
|
|
||||||
|
/* Get current cursor position for signal handler in mconf.c */
|
||||||
|
getyx(stdscr, saved_y, saved_x);
|
||||||
|
|
||||||
getmaxyx(stdscr, height, width);
|
getmaxyx(stdscr, height, width);
|
||||||
if (height < 19 || width < 80) {
|
if (height < 19 || width < 80) {
|
||||||
endwin();
|
endwin();
|
||||||
|
|
|
@ -236,16 +236,19 @@ search_help[] = N_(
|
||||||
"Result:\n"
|
"Result:\n"
|
||||||
"-----------------------------------------------------------------\n"
|
"-----------------------------------------------------------------\n"
|
||||||
"Symbol: FOO [=m]\n"
|
"Symbol: FOO [=m]\n"
|
||||||
|
"Type : tristate\n"
|
||||||
"Prompt: Foo bus is used to drive the bar HW\n"
|
"Prompt: Foo bus is used to drive the bar HW\n"
|
||||||
"Defined at drivers/pci/Kconfig:47\n"
|
" Defined at drivers/pci/Kconfig:47\n"
|
||||||
"Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
|
" Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
|
||||||
"Location:\n"
|
" Location:\n"
|
||||||
" -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
|
" -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
|
||||||
" -> PCI support (PCI [=y])\n"
|
" -> PCI support (PCI [=y])\n"
|
||||||
" -> PCI access mode (<choice> [=y])\n"
|
"(1) -> PCI access mode (<choice> [=y])\n"
|
||||||
"Selects: LIBCRC32\n"
|
" Selects: LIBCRC32\n"
|
||||||
"Selected by: BAR\n"
|
" Selected by: BAR\n"
|
||||||
"-----------------------------------------------------------------\n"
|
"-----------------------------------------------------------------\n"
|
||||||
|
"o The line 'Type:' shows the type of the configuration option for\n"
|
||||||
|
" this symbol (boolean, tristate, string, ...)\n"
|
||||||
"o The line 'Prompt:' shows the text used in the menu structure for\n"
|
"o The line 'Prompt:' shows the text used in the menu structure for\n"
|
||||||
" this symbol\n"
|
" this symbol\n"
|
||||||
"o The 'Defined at' line tell at what file / line number the symbol\n"
|
"o The 'Defined at' line tell at what file / line number the symbol\n"
|
||||||
|
@ -254,8 +257,12 @@ search_help[] = N_(
|
||||||
" this symbol to be visible in the menu (selectable)\n"
|
" this symbol to be visible in the menu (selectable)\n"
|
||||||
"o The 'Location:' lines tell where in the menu structure this symbol\n"
|
"o The 'Location:' lines tell where in the menu structure this symbol\n"
|
||||||
" is located\n"
|
" is located\n"
|
||||||
" A location followed by a [=y] indicate that this is a selectable\n"
|
" A location followed by a [=y] indicates that this is a\n"
|
||||||
" menu item - and current value is displayed inside brackets.\n"
|
" selectable menu item - and the current value is displayed inside\n"
|
||||||
|
" brackets.\n"
|
||||||
|
" Press the key in the (#) prefix to jump directly to that\n"
|
||||||
|
" location. You will be returned to the current search results\n"
|
||||||
|
" after exiting this new menu.\n"
|
||||||
"o The 'Selects:' line tell what symbol will be automatically\n"
|
"o The 'Selects:' line tell what symbol will be automatically\n"
|
||||||
" selected if this symbol is selected (y or m)\n"
|
" selected if this symbol is selected (y or m)\n"
|
||||||
"o The 'Selected by' line tell what symbol has selected this symbol\n"
|
"o The 'Selected by' line tell what symbol has selected this symbol\n"
|
||||||
|
@ -273,13 +280,15 @@ static struct menu *current_menu;
|
||||||
static int child_count;
|
static int child_count;
|
||||||
static int single_menu_mode;
|
static int single_menu_mode;
|
||||||
static int show_all_options;
|
static int show_all_options;
|
||||||
static int saved_x, saved_y;
|
|
||||||
|
|
||||||
static void conf(struct menu *menu);
|
static void conf(struct menu *menu, struct menu *active_menu);
|
||||||
static void conf_choice(struct menu *menu);
|
static void conf_choice(struct menu *menu);
|
||||||
static void conf_string(struct menu *menu);
|
static void conf_string(struct menu *menu);
|
||||||
static void conf_load(void);
|
static void conf_load(void);
|
||||||
static void conf_save(void);
|
static void conf_save(void);
|
||||||
|
static int show_textbox_ext(const char *title, char *text, int r, int c,
|
||||||
|
int *keys, int *vscroll, int *hscroll,
|
||||||
|
update_text_fn update_text, void *data);
|
||||||
static void show_textbox(const char *title, const char *text, int r, int c);
|
static void show_textbox(const char *title, const char *text, int r, int c);
|
||||||
static void show_helptext(const char *title, const char *text);
|
static void show_helptext(const char *title, const char *text);
|
||||||
static void show_help(struct menu *menu);
|
static void show_help(struct menu *menu);
|
||||||
|
@ -302,12 +311,47 @@ static void set_config_filename(const char *config_filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct search_data {
|
||||||
|
struct jk_head *head;
|
||||||
|
struct menu **targets;
|
||||||
|
int *keys;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void update_text(char *buf, size_t start, size_t end, void *_data)
|
||||||
|
{
|
||||||
|
struct search_data *data = _data;
|
||||||
|
struct jump_key *pos;
|
||||||
|
int k = 0;
|
||||||
|
|
||||||
|
CIRCLEQ_FOREACH(pos, data->head, entries) {
|
||||||
|
if (pos->offset >= start && pos->offset < end) {
|
||||||
|
char header[4];
|
||||||
|
|
||||||
|
if (k < JUMP_NB) {
|
||||||
|
int key = '0' + (pos->index % JUMP_NB) + 1;
|
||||||
|
|
||||||
|
sprintf(header, "(%c)", key);
|
||||||
|
data->keys[k] = key;
|
||||||
|
data->targets[k] = pos->target;
|
||||||
|
k++;
|
||||||
|
} else {
|
||||||
|
sprintf(header, " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(buf + pos->offset, header, sizeof(header) - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data->keys[k] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void search_conf(void)
|
static void search_conf(void)
|
||||||
{
|
{
|
||||||
struct symbol **sym_arr;
|
struct symbol **sym_arr;
|
||||||
struct gstr res;
|
struct gstr res;
|
||||||
char *dialog_input;
|
char *dialog_input;
|
||||||
int dres;
|
int dres, vscroll = 0, hscroll = 0;
|
||||||
|
bool again;
|
||||||
|
|
||||||
again:
|
again:
|
||||||
dialog_clear();
|
dialog_clear();
|
||||||
dres = dialog_inputbox(_("Search Configuration Parameter"),
|
dres = dialog_inputbox(_("Search Configuration Parameter"),
|
||||||
|
@ -330,10 +374,30 @@ again:
|
||||||
dialog_input += strlen(CONFIG_);
|
dialog_input += strlen(CONFIG_);
|
||||||
|
|
||||||
sym_arr = sym_re_search(dialog_input);
|
sym_arr = sym_re_search(dialog_input);
|
||||||
res = get_relations_str(sym_arr);
|
do {
|
||||||
|
struct jk_head head = CIRCLEQ_HEAD_INITIALIZER(head);
|
||||||
|
struct menu *targets[JUMP_NB];
|
||||||
|
int keys[JUMP_NB + 1], i;
|
||||||
|
struct search_data data = {
|
||||||
|
.head = &head,
|
||||||
|
.targets = targets,
|
||||||
|
.keys = keys,
|
||||||
|
};
|
||||||
|
|
||||||
|
res = get_relations_str(sym_arr, &head);
|
||||||
|
dres = show_textbox_ext(_("Search Results"), (char *)
|
||||||
|
str_get(&res), 0, 0, keys, &vscroll,
|
||||||
|
&hscroll, &update_text, (void *)
|
||||||
|
&data);
|
||||||
|
again = false;
|
||||||
|
for (i = 0; i < JUMP_NB && keys[i]; i++)
|
||||||
|
if (dres == keys[i]) {
|
||||||
|
conf(targets[i]->parent, targets[i]);
|
||||||
|
again = true;
|
||||||
|
}
|
||||||
|
str_free(&res);
|
||||||
|
} while (again);
|
||||||
free(sym_arr);
|
free(sym_arr);
|
||||||
show_textbox(_("Search Results"), str_get(&res), 0, 0);
|
|
||||||
str_free(&res);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void build_conf(struct menu *menu)
|
static void build_conf(struct menu *menu)
|
||||||
|
@ -514,12 +578,11 @@ conf_childs:
|
||||||
indent -= doint;
|
indent -= doint;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void conf(struct menu *menu)
|
static void conf(struct menu *menu, struct menu *active_menu)
|
||||||
{
|
{
|
||||||
struct menu *submenu;
|
struct menu *submenu;
|
||||||
const char *prompt = menu_get_prompt(menu);
|
const char *prompt = menu_get_prompt(menu);
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct menu *active_menu = NULL;
|
|
||||||
int res;
|
int res;
|
||||||
int s_scroll = 0;
|
int s_scroll = 0;
|
||||||
|
|
||||||
|
@ -562,13 +625,13 @@ static void conf(struct menu *menu)
|
||||||
if (single_menu_mode)
|
if (single_menu_mode)
|
||||||
submenu->data = (void *) (long) !submenu->data;
|
submenu->data = (void *) (long) !submenu->data;
|
||||||
else
|
else
|
||||||
conf(submenu);
|
conf(submenu, NULL);
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)
|
if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)
|
||||||
conf_choice(submenu);
|
conf_choice(submenu);
|
||||||
else if (submenu->prompt->type == P_MENU)
|
else if (submenu->prompt->type == P_MENU)
|
||||||
conf(submenu);
|
conf(submenu, NULL);
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
conf_string(submenu);
|
conf_string(submenu);
|
||||||
|
@ -607,7 +670,7 @@ static void conf(struct menu *menu)
|
||||||
if (item_is_tag('t'))
|
if (item_is_tag('t'))
|
||||||
sym_toggle_tristate_value(sym);
|
sym_toggle_tristate_value(sym);
|
||||||
else if (item_is_tag('m'))
|
else if (item_is_tag('m'))
|
||||||
conf(submenu);
|
conf(submenu, NULL);
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
search_conf();
|
search_conf();
|
||||||
|
@ -619,10 +682,19 @@ static void conf(struct menu *menu)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_textbox(const char *title, const char *text, int r, int c)
|
static int show_textbox_ext(const char *title, char *text, int r, int c, int
|
||||||
|
*keys, int *vscroll, int *hscroll, update_text_fn
|
||||||
|
update_text, void *data)
|
||||||
{
|
{
|
||||||
dialog_clear();
|
dialog_clear();
|
||||||
dialog_textbox(title, text, r, c);
|
return dialog_textbox(title, text, r, c, keys, vscroll, hscroll,
|
||||||
|
update_text, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void show_textbox(const char *title, const char *text, int r, int c)
|
||||||
|
{
|
||||||
|
show_textbox_ext(title, (char *) text, r, c, (int []) {0}, NULL, NULL,
|
||||||
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_helptext(const char *title, const char *text)
|
static void show_helptext(const char *title, const char *text)
|
||||||
|
@ -862,9 +934,6 @@ int main(int ac, char **av)
|
||||||
single_menu_mode = 1;
|
single_menu_mode = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
initscr();
|
|
||||||
|
|
||||||
getyx(stdscr, saved_y, saved_x);
|
|
||||||
if (init_dialog(NULL)) {
|
if (init_dialog(NULL)) {
|
||||||
fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
|
fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
|
||||||
fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
|
fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
|
||||||
|
@ -873,7 +942,7 @@ int main(int ac, char **av)
|
||||||
|
|
||||||
set_config_filename(conf_get_configname());
|
set_config_filename(conf_get_configname());
|
||||||
do {
|
do {
|
||||||
conf(&rootmenu);
|
conf(&rootmenu, NULL);
|
||||||
res = handle_exit();
|
res = handle_exit();
|
||||||
} while (res == KEY_ESC);
|
} while (res == KEY_ESC);
|
||||||
|
|
||||||
|
|
|
@ -507,10 +507,12 @@ const char *menu_get_help(struct menu *menu)
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_prompt_str(struct gstr *r, struct property *prop)
|
static void get_prompt_str(struct gstr *r, struct property *prop,
|
||||||
|
struct jk_head *head)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
struct menu *submenu[8], *menu;
|
struct menu *submenu[8], *menu, *location = NULL;
|
||||||
|
struct jump_key *jump;
|
||||||
|
|
||||||
str_printf(r, _("Prompt: %s\n"), _(prop->text));
|
str_printf(r, _("Prompt: %s\n"), _(prop->text));
|
||||||
str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
|
str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
|
||||||
|
@ -521,13 +523,43 @@ static void get_prompt_str(struct gstr *r, struct property *prop)
|
||||||
str_append(r, "\n");
|
str_append(r, "\n");
|
||||||
}
|
}
|
||||||
menu = prop->menu->parent;
|
menu = prop->menu->parent;
|
||||||
for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent)
|
for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) {
|
||||||
|
bool accessible = menu_is_visible(menu);
|
||||||
|
|
||||||
submenu[i++] = menu;
|
submenu[i++] = menu;
|
||||||
|
if (location == NULL && accessible)
|
||||||
|
location = menu;
|
||||||
|
}
|
||||||
|
if (head && location) {
|
||||||
|
jump = malloc(sizeof(struct jump_key));
|
||||||
|
|
||||||
|
if (menu_is_visible(prop->menu)) {
|
||||||
|
/*
|
||||||
|
* There is not enough room to put the hint at the
|
||||||
|
* beginning of the "Prompt" line. Put the hint on the
|
||||||
|
* last "Location" line even when it would belong on
|
||||||
|
* the former.
|
||||||
|
*/
|
||||||
|
jump->target = prop->menu;
|
||||||
|
} else
|
||||||
|
jump->target = location;
|
||||||
|
|
||||||
|
if (CIRCLEQ_EMPTY(head))
|
||||||
|
jump->index = 0;
|
||||||
|
else
|
||||||
|
jump->index = CIRCLEQ_LAST(head)->index + 1;
|
||||||
|
|
||||||
|
CIRCLEQ_INSERT_TAIL(head, jump, entries);
|
||||||
|
}
|
||||||
|
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
str_printf(r, _(" Location:\n"));
|
str_printf(r, _(" Location:\n"));
|
||||||
for (j = 4; --i >= 0; j += 2) {
|
for (j = 4; --i >= 0; j += 2) {
|
||||||
menu = submenu[i];
|
menu = submenu[i];
|
||||||
str_printf(r, "%*c-> %s", j, ' ', _(menu_get_prompt(menu)));
|
if (head && location && menu == location)
|
||||||
|
jump->offset = r->len - 1;
|
||||||
|
str_printf(r, "%*c-> %s", j, ' ',
|
||||||
|
_(menu_get_prompt(menu)));
|
||||||
if (menu->sym) {
|
if (menu->sym) {
|
||||||
str_printf(r, " (%s [=%s])", menu->sym->name ?
|
str_printf(r, " (%s [=%s])", menu->sym->name ?
|
||||||
menu->sym->name : _("<choice>"),
|
menu->sym->name : _("<choice>"),
|
||||||
|
@ -538,7 +570,10 @@ static void get_prompt_str(struct gstr *r, struct property *prop)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_symbol_str(struct gstr *r, struct symbol *sym)
|
/*
|
||||||
|
* head is optional and may be NULL
|
||||||
|
*/
|
||||||
|
void get_symbol_str(struct gstr *r, struct symbol *sym, struct jk_head *head)
|
||||||
{
|
{
|
||||||
bool hit;
|
bool hit;
|
||||||
struct property *prop;
|
struct property *prop;
|
||||||
|
@ -557,7 +592,7 @@ void get_symbol_str(struct gstr *r, struct symbol *sym)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for_all_prompts(sym, prop)
|
for_all_prompts(sym, prop)
|
||||||
get_prompt_str(r, prop);
|
get_prompt_str(r, prop, head);
|
||||||
hit = false;
|
hit = false;
|
||||||
for_all_properties(sym, prop, P_SELECT) {
|
for_all_properties(sym, prop, P_SELECT) {
|
||||||
if (!hit) {
|
if (!hit) {
|
||||||
|
@ -577,14 +612,14 @@ void get_symbol_str(struct gstr *r, struct symbol *sym)
|
||||||
str_append(r, "\n\n");
|
str_append(r, "\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
struct gstr get_relations_str(struct symbol **sym_arr)
|
struct gstr get_relations_str(struct symbol **sym_arr, struct jk_head *head)
|
||||||
{
|
{
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct gstr res = str_new();
|
struct gstr res = str_new();
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
|
for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
|
||||||
get_symbol_str(&res, sym);
|
get_symbol_str(&res, sym, head);
|
||||||
if (!i)
|
if (!i)
|
||||||
str_append(&res, _("No matches found.\n"));
|
str_append(&res, _("No matches found.\n"));
|
||||||
return res;
|
return res;
|
||||||
|
@ -603,5 +638,5 @@ void menu_get_ext_help(struct menu *menu, struct gstr *help)
|
||||||
}
|
}
|
||||||
str_printf(help, "%s\n", _(help_text));
|
str_printf(help, "%s\n", _(help_text));
|
||||||
if (sym)
|
if (sym)
|
||||||
get_symbol_str(help, sym);
|
get_symbol_str(help, sym, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -721,7 +721,7 @@ again:
|
||||||
dialog_input += strlen(CONFIG_);
|
dialog_input += strlen(CONFIG_);
|
||||||
|
|
||||||
sym_arr = sym_re_search(dialog_input);
|
sym_arr = sym_re_search(dialog_input);
|
||||||
res = get_relations_str(sym_arr);
|
res = get_relations_str(sym_arr, NULL);
|
||||||
free(sym_arr);
|
free(sym_arr);
|
||||||
show_scroll_win(main_window,
|
show_scroll_win(main_window,
|
||||||
_("Search Results"), str_get(&res));
|
_("Search Results"), str_get(&res));
|
||||||
|
|
|
@ -1873,10 +1873,10 @@ sub make_oldconfig {
|
||||||
apply_min_config;
|
apply_min_config;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!run_command "$make oldnoconfig") {
|
if (!run_command "$make olddefconfig") {
|
||||||
# Perhaps oldnoconfig doesn't exist in this version of the kernel
|
# Perhaps olddefconfig doesn't exist in this version of the kernel
|
||||||
# try a yes '' | oldconfig
|
# try a yes '' | oldconfig
|
||||||
doprint "oldnoconfig failed, trying yes '' | make oldconfig\n";
|
doprint "olddefconfig failed, trying yes '' | make oldconfig\n";
|
||||||
run_command "yes '' | $make oldconfig" or
|
run_command "yes '' | $make oldconfig" or
|
||||||
dodie "failed make config oldconfig";
|
dodie "failed make config oldconfig";
|
||||||
}
|
}
|
||||||
|
@ -1929,7 +1929,7 @@ sub build {
|
||||||
|
|
||||||
# old config can ask questions
|
# old config can ask questions
|
||||||
if ($type eq "oldconfig") {
|
if ($type eq "oldconfig") {
|
||||||
$type = "oldnoconfig";
|
$type = "olddefconfig";
|
||||||
|
|
||||||
# allow for empty configs
|
# allow for empty configs
|
||||||
run_command "touch $output_config";
|
run_command "touch $output_config";
|
||||||
|
@ -1959,7 +1959,7 @@ sub build {
|
||||||
load_force_config($minconfig);
|
load_force_config($minconfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($type ne "oldnoconfig") {
|
if ($type ne "olddefconfig") {
|
||||||
run_command "$make $type" or
|
run_command "$make $type" or
|
||||||
dodie "failed make config";
|
dodie "failed make config";
|
||||||
}
|
}
|
||||||
|
@ -2458,8 +2458,7 @@ my %config_set;
|
||||||
|
|
||||||
# config_off holds the set of configs that the bad config had disabled.
|
# config_off holds the set of configs that the bad config had disabled.
|
||||||
# We need to record them and set them in the .config when running
|
# We need to record them and set them in the .config when running
|
||||||
# oldnoconfig, because oldnoconfig does not turn off new symbols, but
|
# olddefconfig, because olddefconfig keeps the defaults.
|
||||||
# instead just keeps the defaults.
|
|
||||||
my %config_off;
|
my %config_off;
|
||||||
|
|
||||||
# config_off_tmp holds a set of configs to turn off for now
|
# config_off_tmp holds a set of configs to turn off for now
|
||||||
|
@ -3250,7 +3249,7 @@ sub test_this_config {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Remove this config from the list of configs
|
# Remove this config from the list of configs
|
||||||
# do a make oldnoconfig and then read the resulting
|
# do a make olddefconfig and then read the resulting
|
||||||
# .config to make sure it is missing the config that
|
# .config to make sure it is missing the config that
|
||||||
# we had before
|
# we had before
|
||||||
my %configs = %min_configs;
|
my %configs = %min_configs;
|
||||||
|
|
Loading…
Add table
Reference in a new issue