mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 07:04:10 +08:00
Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull kconfig changes from Michal Marek: "I forgot to send a pull request in time for the v3.8-rc1 merge window, so the list is a bit longer this time: - menuconfig enables extended colors in ncurses if the wide-character version is used. - CONFIG_ prefix can be specified in the environment to make life easier for people using kconfig multiple times in a single tree (no functional change in the kernel kconfig usage). - kconfig aborts on OOM. - inputboxes in menuconfig allow to move the cursor. - menuconfig has Save/Load buttons now. - xconfig build fix with new g++ and Qt3. - nconfig color scheme fix and help text update. - make oldconfig prints newlines when output is redirected. - some other minor fixes." * 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: kbuild: Fix missing '\n' for NEW symbols in yes "" | make oldconfig >conf.new kconfig: nconf: rewrite labels of function keys line kconfig: nconf: rewrite help texts kconfig: fix a compiliation error when using make xconfig nconf: function keys line, change background color for better readability menuconfig: Get rid of the top-level entries for "Load an Alternate/Save an Alternate" menuconfig: Add Save/Load buttons kconfig:lxdialog: remove duplicate code menuconfig:inputbox: support navigate input position kconfig: document use of CONFIG_ environment variable scripts/kconfig: ensure we use proper CONFIG_ prefix merge_config.sh: Add option to specify output dir Revert "kconfig-language: add to hints" kconfig: Regenerate lexer kconfig: Fix malloc handling in conf tools kconfig: get CONFIG_ prefix from the environment kconfig: add a function to get the CONFIG_ prefix kconfig: remove CONFIG_ from string constants menuconfig: fix extended colors ncurses support
This commit is contained in:
commit
309667e53f
@ -388,26 +388,3 @@ config FOO
|
||||
depends on BAR && m
|
||||
|
||||
limits FOO to module (=m) or disabled (=n).
|
||||
|
||||
Kconfig symbol existence
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
The following two methods produce the same kconfig symbol dependencies
|
||||
but differ greatly in kconfig symbol existence (production) in the
|
||||
generated config file.
|
||||
|
||||
case 1:
|
||||
|
||||
config FOO
|
||||
tristate "about foo"
|
||||
depends on BAR
|
||||
|
||||
vs. case 2:
|
||||
|
||||
if BAR
|
||||
config FOO
|
||||
tristate "about foo"
|
||||
endif
|
||||
|
||||
In case 1, the symbol FOO will always exist in the config file (given
|
||||
no other dependencies). In case 2, the symbol FOO will only exist in
|
||||
the config file if BAR is enabled.
|
||||
|
@ -46,6 +46,12 @@ KCONFIG_OVERWRITECONFIG
|
||||
If you set KCONFIG_OVERWRITECONFIG in the environment, Kconfig will not
|
||||
break symlinks when .config is a symlink to somewhere else.
|
||||
|
||||
CONFIG_
|
||||
--------------------------------------------------
|
||||
If you set CONFIG_ in the environment, Kconfig will prefix all symbols
|
||||
with its value when saving the configuration, instead of using the default,
|
||||
"CONFIG_".
|
||||
|
||||
______________________________________________________________________
|
||||
Environment variables for '{allyes/allmod/allno/rand}config'
|
||||
|
||||
|
@ -11,6 +11,9 @@ else
|
||||
Kconfig := Kconfig
|
||||
endif
|
||||
|
||||
# We need this, in case the user has it in its environment
|
||||
unexport CONFIG_
|
||||
|
||||
xconfig: $(obj)/qconf
|
||||
$< $(Kconfig)
|
||||
|
||||
|
@ -36,6 +36,7 @@ enum input_mode {
|
||||
} input_mode = oldaskconfig;
|
||||
|
||||
static int indent = 1;
|
||||
static int tty_stdio;
|
||||
static int valid_stdin = 1;
|
||||
static int sync_kconfig;
|
||||
static int conf_cnt;
|
||||
@ -108,6 +109,8 @@ static int conf_askvalue(struct symbol *sym, const char *def)
|
||||
case oldaskconfig:
|
||||
fflush(stdout);
|
||||
xfgets(line, 128, stdin);
|
||||
if (!tty_stdio)
|
||||
printf("\n");
|
||||
return 1;
|
||||
default:
|
||||
break;
|
||||
@ -495,6 +498,8 @@ int main(int ac, char **av)
|
||||
bindtextdomain(PACKAGE, LOCALEDIR);
|
||||
textdomain(PACKAGE);
|
||||
|
||||
tty_stdio = isatty(0) && isatty(1) && isatty(2);
|
||||
|
||||
while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1) {
|
||||
input_mode = (enum input_mode)opt;
|
||||
switch (opt) {
|
||||
@ -621,7 +626,7 @@ int main(int ac, char **av)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
valid_stdin = isatty(0) && isatty(1) && isatty(2);
|
||||
valid_stdin = tty_stdio;
|
||||
}
|
||||
|
||||
switch (input_mode) {
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
struct expr *expr_alloc_symbol(struct symbol *sym)
|
||||
{
|
||||
struct expr *e = calloc(1, sizeof(*e));
|
||||
struct expr *e = xcalloc(1, sizeof(*e));
|
||||
e->type = E_SYMBOL;
|
||||
e->left.sym = sym;
|
||||
return e;
|
||||
@ -21,7 +21,7 @@ struct expr *expr_alloc_symbol(struct symbol *sym)
|
||||
|
||||
struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
|
||||
{
|
||||
struct expr *e = calloc(1, sizeof(*e));
|
||||
struct expr *e = xcalloc(1, sizeof(*e));
|
||||
e->type = type;
|
||||
e->left.expr = ce;
|
||||
return e;
|
||||
@ -29,7 +29,7 @@ struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
|
||||
|
||||
struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2)
|
||||
{
|
||||
struct expr *e = calloc(1, sizeof(*e));
|
||||
struct expr *e = xcalloc(1, sizeof(*e));
|
||||
e->type = type;
|
||||
e->left.expr = e1;
|
||||
e->right.expr = e2;
|
||||
@ -38,7 +38,7 @@ struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e
|
||||
|
||||
struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2)
|
||||
{
|
||||
struct expr *e = calloc(1, sizeof(*e));
|
||||
struct expr *e = xcalloc(1, sizeof(*e));
|
||||
e->type = type;
|
||||
e->left.sym = s1;
|
||||
e->right.sym = s2;
|
||||
@ -66,7 +66,7 @@ struct expr *expr_copy(const struct expr *org)
|
||||
if (!org)
|
||||
return NULL;
|
||||
|
||||
e = malloc(sizeof(*org));
|
||||
e = xmalloc(sizeof(*org));
|
||||
memcpy(e, org, sizeof(*org));
|
||||
switch (org->type) {
|
||||
case E_SYMBOL:
|
||||
|
@ -10,6 +10,7 @@
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "lkc.h"
|
||||
#include "images.c"
|
||||
|
||||
@ -22,7 +23,6 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
//#define DEBUG
|
||||
|
||||
|
@ -39,6 +39,12 @@ extern "C" {
|
||||
#ifndef CONFIG_
|
||||
#define CONFIG_ "CONFIG_"
|
||||
#endif
|
||||
static inline const char *CONFIG_prefix(void)
|
||||
{
|
||||
return getenv( "CONFIG_" ) ?: CONFIG_;
|
||||
}
|
||||
#undef CONFIG_
|
||||
#define CONFIG_ CONFIG_prefix()
|
||||
|
||||
#define TF_COMMAND 0x0001
|
||||
#define TF_PARAM 0x0002
|
||||
@ -116,6 +122,8 @@ void menu_set_type(int type);
|
||||
/* util.c */
|
||||
struct file *file_lookup(const char *name);
|
||||
int file_write_dep(const char *name);
|
||||
void *xmalloc(size_t size);
|
||||
void *xcalloc(size_t nmemb, size_t size);
|
||||
|
||||
struct gstr {
|
||||
size_t len;
|
||||
|
@ -21,6 +21,7 @@ ccflags()
|
||||
{
|
||||
if [ -f /usr/include/ncursesw/curses.h ]; then
|
||||
echo '-I/usr/include/ncursesw -DCURSES_LOC="<ncursesw/curses.h>"'
|
||||
echo ' -DNCURSES_WIDECHAR=1'
|
||||
elif [ -f /usr/include/ncurses/ncurses.h ]; then
|
||||
echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"'
|
||||
elif [ -f /usr/include/ncurses/curses.h ]; then
|
||||
|
@ -221,7 +221,6 @@ int dialog_menu(const char *title, const char *prompt,
|
||||
const void *selected, int *s_scroll);
|
||||
int dialog_checklist(const char *title, const char *prompt, int height,
|
||||
int width, int list_height);
|
||||
extern char dialog_input_result[];
|
||||
int dialog_inputbox(const char *title, const char *prompt, int height,
|
||||
int width, const char *init);
|
||||
|
||||
|
@ -45,7 +45,8 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
|
||||
const char *init)
|
||||
{
|
||||
int i, x, y, box_y, box_x, box_width;
|
||||
int input_x = 0, scroll = 0, key = 0, button = -1;
|
||||
int input_x = 0, key = 0, button = -1;
|
||||
int show_x, len, pos;
|
||||
char *instr = dialog_input_result;
|
||||
WINDOW *dialog;
|
||||
|
||||
@ -97,14 +98,17 @@ do_resize:
|
||||
wmove(dialog, box_y, box_x);
|
||||
wattrset(dialog, dlg.inputbox.atr);
|
||||
|
||||
input_x = strlen(instr);
|
||||
len = strlen(instr);
|
||||
pos = len;
|
||||
|
||||
if (input_x >= box_width) {
|
||||
scroll = input_x - box_width + 1;
|
||||
if (len >= box_width) {
|
||||
show_x = len - box_width + 1;
|
||||
input_x = box_width - 1;
|
||||
for (i = 0; i < box_width - 1; i++)
|
||||
waddch(dialog, instr[scroll + i]);
|
||||
waddch(dialog, instr[show_x + i]);
|
||||
} else {
|
||||
show_x = 0;
|
||||
input_x = len;
|
||||
waddstr(dialog, instr);
|
||||
}
|
||||
|
||||
@ -121,45 +125,104 @@ do_resize:
|
||||
case KEY_UP:
|
||||
case KEY_DOWN:
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
continue;
|
||||
case KEY_RIGHT:
|
||||
continue;
|
||||
case KEY_BACKSPACE:
|
||||
case 127:
|
||||
if (input_x || scroll) {
|
||||
if (pos) {
|
||||
wattrset(dialog, dlg.inputbox.atr);
|
||||
if (!input_x) {
|
||||
scroll = scroll < box_width - 1 ? 0 : scroll - (box_width - 1);
|
||||
wmove(dialog, box_y, box_x);
|
||||
for (i = 0; i < box_width; i++)
|
||||
waddch(dialog,
|
||||
instr[scroll + input_x + i] ?
|
||||
instr[scroll + input_x + i] : ' ');
|
||||
input_x = strlen(instr) - scroll;
|
||||
if (input_x == 0) {
|
||||
show_x--;
|
||||
} else
|
||||
input_x--;
|
||||
instr[scroll + input_x] = '\0';
|
||||
mvwaddch(dialog, box_y, input_x + box_x, ' ');
|
||||
|
||||
if (pos < len) {
|
||||
for (i = pos - 1; i < len; i++) {
|
||||
instr[i] = instr[i+1];
|
||||
}
|
||||
}
|
||||
|
||||
pos--;
|
||||
len--;
|
||||
instr[len] = '\0';
|
||||
wmove(dialog, box_y, box_x);
|
||||
for (i = 0; i < box_width; i++) {
|
||||
if (!instr[show_x + i]) {
|
||||
waddch(dialog, ' ');
|
||||
break;
|
||||
}
|
||||
waddch(dialog, instr[show_x + i]);
|
||||
}
|
||||
wmove(dialog, box_y, input_x + box_x);
|
||||
wrefresh(dialog);
|
||||
}
|
||||
continue;
|
||||
case KEY_LEFT:
|
||||
if (pos > 0) {
|
||||
if (input_x > 0) {
|
||||
wmove(dialog, box_y, --input_x + box_x);
|
||||
} else if (input_x == 0) {
|
||||
show_x--;
|
||||
wmove(dialog, box_y, box_x);
|
||||
for (i = 0; i < box_width; i++) {
|
||||
if (!instr[show_x + i]) {
|
||||
waddch(dialog, ' ');
|
||||
break;
|
||||
}
|
||||
waddch(dialog, instr[show_x + i]);
|
||||
}
|
||||
wmove(dialog, box_y, box_x);
|
||||
}
|
||||
pos--;
|
||||
}
|
||||
continue;
|
||||
case KEY_RIGHT:
|
||||
if (pos < len) {
|
||||
if (input_x < box_width - 1) {
|
||||
wmove(dialog, box_y, ++input_x + box_x);
|
||||
} else if (input_x == box_width - 1) {
|
||||
show_x++;
|
||||
wmove(dialog, box_y, box_x);
|
||||
for (i = 0; i < box_width; i++) {
|
||||
if (!instr[show_x + i]) {
|
||||
waddch(dialog, ' ');
|
||||
break;
|
||||
}
|
||||
waddch(dialog, instr[show_x + i]);
|
||||
}
|
||||
wmove(dialog, box_y, input_x + box_x);
|
||||
}
|
||||
pos++;
|
||||
}
|
||||
continue;
|
||||
default:
|
||||
if (key < 0x100 && isprint(key)) {
|
||||
if (scroll + input_x < MAX_LEN) {
|
||||
if (len < MAX_LEN) {
|
||||
wattrset(dialog, dlg.inputbox.atr);
|
||||
instr[scroll + input_x] = key;
|
||||
instr[scroll + input_x + 1] = '\0';
|
||||
if (input_x == box_width - 1) {
|
||||
scroll++;
|
||||
wmove(dialog, box_y, box_x);
|
||||
for (i = 0; i < box_width - 1; i++)
|
||||
waddch(dialog, instr [scroll + i]);
|
||||
if (pos < len) {
|
||||
for (i = len; i > pos; i--)
|
||||
instr[i] = instr[i-1];
|
||||
instr[pos] = key;
|
||||
} else {
|
||||
wmove(dialog, box_y, input_x++ + box_x);
|
||||
waddch(dialog, key);
|
||||
instr[len] = key;
|
||||
}
|
||||
pos++;
|
||||
len++;
|
||||
instr[len] = '\0';
|
||||
|
||||
if (input_x == box_width - 1) {
|
||||
show_x++;
|
||||
} else {
|
||||
input_x++;
|
||||
}
|
||||
|
||||
wmove(dialog, box_y, box_x);
|
||||
for (i = 0; i < box_width; i++) {
|
||||
if (!instr[show_x + i]) {
|
||||
waddch(dialog, ' ');
|
||||
break;
|
||||
}
|
||||
waddch(dialog, instr[show_x + i]);
|
||||
}
|
||||
wmove(dialog, box_y, input_x + box_x);
|
||||
wrefresh(dialog);
|
||||
} else
|
||||
flash(); /* Alarm user about overflow */
|
||||
|
@ -26,7 +26,7 @@
|
||||
*
|
||||
* *) A bugfix for the Page-Down problem
|
||||
*
|
||||
* *) Formerly when I used Page Down and Page Up, the cursor would be set
|
||||
* *) Formerly when I used Page Down and Page Up, the cursor would be set
|
||||
* to the first position in the menu box. Now lxdialog is a bit
|
||||
* smarter and works more like other menu systems (just have a look at
|
||||
* it).
|
||||
@ -154,12 +154,14 @@ static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x,
|
||||
*/
|
||||
static void print_buttons(WINDOW * win, int height, int width, int selected)
|
||||
{
|
||||
int x = width / 2 - 16;
|
||||
int x = width / 2 - 28;
|
||||
int y = height - 2;
|
||||
|
||||
print_button(win, gettext("Select"), y, x, selected == 0);
|
||||
print_button(win, gettext(" Exit "), y, x + 12, selected == 1);
|
||||
print_button(win, gettext(" Help "), y, x + 24, selected == 2);
|
||||
print_button(win, gettext(" Save "), y, x + 36, selected == 3);
|
||||
print_button(win, gettext(" Load "), y, x + 48, selected == 4);
|
||||
|
||||
wmove(win, y, x + 1 + 12 * selected);
|
||||
wrefresh(win);
|
||||
@ -372,7 +374,7 @@ do_resize:
|
||||
case TAB:
|
||||
case KEY_RIGHT:
|
||||
button = ((key == KEY_LEFT ? --button : ++button) < 0)
|
||||
? 2 : (button > 2 ? 0 : button);
|
||||
? 4 : (button > 4 ? 0 : button);
|
||||
|
||||
print_buttons(dialog, height, width, button);
|
||||
wrefresh(menu);
|
||||
@ -399,17 +401,17 @@ do_resize:
|
||||
return 2;
|
||||
case 's':
|
||||
case 'y':
|
||||
return 3;
|
||||
case 'n':
|
||||
return 4;
|
||||
case 'm':
|
||||
return 5;
|
||||
case ' ':
|
||||
case 'n':
|
||||
return 6;
|
||||
case '/':
|
||||
case 'm':
|
||||
return 7;
|
||||
case 'z':
|
||||
case ' ':
|
||||
return 8;
|
||||
case '/':
|
||||
return 9;
|
||||
case 'z':
|
||||
return 10;
|
||||
case '\n':
|
||||
return button;
|
||||
}
|
||||
|
@ -280,6 +280,7 @@ static struct menu *current_menu;
|
||||
static int child_count;
|
||||
static int single_menu_mode;
|
||||
static int show_all_options;
|
||||
static int save_and_exit;
|
||||
|
||||
static void conf(struct menu *menu, struct menu *active_menu);
|
||||
static void conf_choice(struct menu *menu);
|
||||
@ -348,15 +349,19 @@ static void search_conf(void)
|
||||
{
|
||||
struct symbol **sym_arr;
|
||||
struct gstr res;
|
||||
struct gstr title;
|
||||
char *dialog_input;
|
||||
int dres, vscroll = 0, hscroll = 0;
|
||||
bool again;
|
||||
|
||||
title = str_new();
|
||||
str_printf( &title, _("Enter %s (sub)string to search for "
|
||||
"(with or without \"%s\")"), CONFIG_, CONFIG_);
|
||||
|
||||
again:
|
||||
dialog_clear();
|
||||
dres = dialog_inputbox(_("Search Configuration Parameter"),
|
||||
_("Enter " CONFIG_ " (sub)string to search for "
|
||||
"(with or without \"" CONFIG_ "\")"),
|
||||
str_get(&title),
|
||||
10, 75, "");
|
||||
switch (dres) {
|
||||
case 0:
|
||||
@ -365,6 +370,7 @@ again:
|
||||
show_helptext(_("Search Configuration"), search_help);
|
||||
goto again;
|
||||
default:
|
||||
str_free(&title);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -398,6 +404,7 @@ again:
|
||||
str_free(&res);
|
||||
} while (again);
|
||||
free(sym_arr);
|
||||
str_free(&title);
|
||||
}
|
||||
|
||||
static void build_conf(struct menu *menu)
|
||||
@ -592,14 +599,6 @@ static void conf(struct menu *menu, struct menu *active_menu)
|
||||
build_conf(menu);
|
||||
if (!child_count)
|
||||
break;
|
||||
if (menu == &rootmenu) {
|
||||
item_make("--- ");
|
||||
item_set_tag(':');
|
||||
item_make(_(" Load an Alternate Configuration File"));
|
||||
item_set_tag('L');
|
||||
item_make(_(" Save an Alternate Configuration File"));
|
||||
item_set_tag('S');
|
||||
}
|
||||
dialog_clear();
|
||||
res = dialog_menu(prompt ? _(prompt) : _("Main Menu"),
|
||||
_(menu_instructions),
|
||||
@ -636,12 +635,6 @@ static void conf(struct menu *menu, struct menu *active_menu)
|
||||
case 's':
|
||||
conf_string(submenu);
|
||||
break;
|
||||
case 'L':
|
||||
conf_load();
|
||||
break;
|
||||
case 'S':
|
||||
conf_save();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@ -651,6 +644,12 @@ static void conf(struct menu *menu, struct menu *active_menu)
|
||||
show_helptext(_("README"), _(mconf_readme));
|
||||
break;
|
||||
case 3:
|
||||
conf_save();
|
||||
break;
|
||||
case 4:
|
||||
conf_load();
|
||||
break;
|
||||
case 5:
|
||||
if (item_is_tag('t')) {
|
||||
if (sym_set_tristate_value(sym, yes))
|
||||
break;
|
||||
@ -658,24 +657,24 @@ static void conf(struct menu *menu, struct menu *active_menu)
|
||||
show_textbox(NULL, setmod_text, 6, 74);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
case 6:
|
||||
if (item_is_tag('t'))
|
||||
sym_set_tristate_value(sym, no);
|
||||
break;
|
||||
case 5:
|
||||
case 7:
|
||||
if (item_is_tag('t'))
|
||||
sym_set_tristate_value(sym, mod);
|
||||
break;
|
||||
case 6:
|
||||
case 8:
|
||||
if (item_is_tag('t'))
|
||||
sym_toggle_tristate_value(sym);
|
||||
else if (item_is_tag('m'))
|
||||
conf(submenu, NULL);
|
||||
break;
|
||||
case 7:
|
||||
case 9:
|
||||
search_conf();
|
||||
break;
|
||||
case 8:
|
||||
case 10:
|
||||
show_all_options = !show_all_options;
|
||||
break;
|
||||
}
|
||||
@ -702,6 +701,17 @@ static void show_helptext(const char *title, const char *text)
|
||||
show_textbox(title, text, 0, 0);
|
||||
}
|
||||
|
||||
static void conf_message_callback(const char *fmt, va_list ap)
|
||||
{
|
||||
char buf[PATH_MAX+1];
|
||||
|
||||
vsnprintf(buf, sizeof(buf), fmt, ap);
|
||||
if (save_and_exit)
|
||||
printf("%s", buf);
|
||||
else
|
||||
show_textbox(NULL, buf, 6, 60);
|
||||
}
|
||||
|
||||
static void show_help(struct menu *menu)
|
||||
{
|
||||
struct gstr help = str_new();
|
||||
@ -870,6 +880,7 @@ static int handle_exit(void)
|
||||
{
|
||||
int res;
|
||||
|
||||
save_and_exit = 1;
|
||||
dialog_clear();
|
||||
if (conf_get_changed())
|
||||
res = dialog_yesno(NULL,
|
||||
@ -941,6 +952,7 @@ int main(int ac, char **av)
|
||||
}
|
||||
|
||||
set_config_filename(conf_get_configname());
|
||||
conf_set_message_callback(conf_message_callback);
|
||||
do {
|
||||
conf(&rootmenu, NULL);
|
||||
res = handle_exit();
|
||||
|
@ -48,7 +48,7 @@ void menu_add_entry(struct symbol *sym)
|
||||
{
|
||||
struct menu *menu;
|
||||
|
||||
menu = malloc(sizeof(*menu));
|
||||
menu = xmalloc(sizeof(*menu));
|
||||
memset(menu, 0, sizeof(*menu));
|
||||
menu->sym = sym;
|
||||
menu->parent = current_menu;
|
||||
@ -531,7 +531,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
|
||||
location = menu;
|
||||
}
|
||||
if (head && location) {
|
||||
jump = malloc(sizeof(struct jump_key));
|
||||
jump = xmalloc(sizeof(struct jump_key));
|
||||
|
||||
if (menu_is_visible(prop->menu)) {
|
||||
/*
|
||||
|
@ -32,11 +32,13 @@ usage() {
|
||||
echo " -m only merge the fragments, do not execute the make command"
|
||||
echo " -n use allnoconfig instead of alldefconfig"
|
||||
echo " -r list redundant entries when merging fragments"
|
||||
echo " -O dir to put generated output files"
|
||||
}
|
||||
|
||||
MAKE=true
|
||||
ALLTARGET=alldefconfig
|
||||
WARNREDUN=false
|
||||
OUTPUT=.
|
||||
|
||||
while true; do
|
||||
case $1 in
|
||||
@ -59,6 +61,16 @@ while true; do
|
||||
shift
|
||||
continue
|
||||
;;
|
||||
"-O")
|
||||
if [ -d $2 ];then
|
||||
OUTPUT=$(echo $2 | sed 's/\/*$//')
|
||||
else
|
||||
echo "output directory $2 does not exist" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
shift 2
|
||||
continue
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
@ -100,9 +112,9 @@ for MERGE_FILE in $MERGE_LIST ; do
|
||||
done
|
||||
|
||||
if [ "$MAKE" = "false" ]; then
|
||||
cp $TMP_FILE .config
|
||||
cp $TMP_FILE $OUTPUT/.config
|
||||
echo "#"
|
||||
echo "# merged configuration written to .config (needs make)"
|
||||
echo "# merged configuration written to $OUTPUT/.config (needs make)"
|
||||
echo "#"
|
||||
clean_up
|
||||
exit
|
||||
@ -111,14 +123,14 @@ fi
|
||||
# Use the merged file as the starting point for:
|
||||
# alldefconfig: Fills in any missing symbols with Kconfig default
|
||||
# allnoconfig: Fills in any missing symbols with # CONFIG_* is not set
|
||||
make KCONFIG_ALLCONFIG=$TMP_FILE $ALLTARGET
|
||||
make KCONFIG_ALLCONFIG=$TMP_FILE O=$OUTPUT $ALLTARGET
|
||||
|
||||
|
||||
# Check all specified config values took (might have missed-dependency issues)
|
||||
for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
|
||||
|
||||
REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
|
||||
ACTUAL_VAL=$(grep -w -e "$CFG" .config)
|
||||
ACTUAL_VAL=$(grep -w -e "$CFG" $OUTPUT/.config)
|
||||
if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
|
||||
echo "Value requested for $CFG not in final .config"
|
||||
echo "Requested value: $REQUESTED_VAL"
|
||||
|
@ -7,215 +7,208 @@
|
||||
*/
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "lkc.h"
|
||||
#include "nconf.h"
|
||||
#include <ctype.h>
|
||||
|
||||
static const char nconf_readme[] = N_(
|
||||
"Overview\n"
|
||||
"--------\n"
|
||||
"This interface let you select features and parameters for the build.\n"
|
||||
"Features can either be built-in, modularized, or ignored. Parameters\n"
|
||||
"must be entered in as decimal or hexadecimal numbers or text.\n"
|
||||
static const char nconf_global_help[] = N_(
|
||||
"Help windows\n"
|
||||
"------------\n"
|
||||
"o Global help: Unless in a data entry window, pressing <F1> will give \n"
|
||||
" you the global help window, which you are just reading.\n"
|
||||
"\n"
|
||||
"Menu items beginning with following braces represent features that\n"
|
||||
" [ ] can be built in or removed\n"
|
||||
" < > can be built in, modularized or removed\n"
|
||||
" { } can be built in or modularized (selected by other feature)\n"
|
||||
" - - are selected by other feature,\n"
|
||||
" XXX cannot be selected. Use Symbol Info to find out why,\n"
|
||||
"while *, M or whitespace inside braces means to build in, build as\n"
|
||||
"a module or to exclude the feature respectively.\n"
|
||||
"o A short version of the global help is available by pressing <F3>.\n"
|
||||
"\n"
|
||||
"To change any of these features, highlight it with the cursor\n"
|
||||
"keys and press <Y> to build it in, <M> to make it a module or\n"
|
||||
"<N> to removed it. You may also press the <Space Bar> to cycle\n"
|
||||
"through the available options (ie. Y->N->M->Y).\n"
|
||||
"o Local help: To get help related to the current menu entry, use any\n"
|
||||
" of <?> <h>, or if in a data entry window then press <F1>.\n"
|
||||
"\n"
|
||||
"Some additional keyboard hints:\n"
|
||||
"\n"
|
||||
"Menus\n"
|
||||
"Menu entries\n"
|
||||
"------------\n"
|
||||
"This interface lets you select features and parameters for the kernel\n"
|
||||
"build. Kernel features can either be built-in, modularized, or removed.\n"
|
||||
"Parameters must be entered as text or decimal or hexadecimal numbers.\n"
|
||||
"\n"
|
||||
"Menu entries beginning with following braces represent features that\n"
|
||||
" [ ] can be built in or removed\n"
|
||||
" < > can be built in, modularized or removed\n"
|
||||
" { } can be built in or modularized, are selected by another feature\n"
|
||||
" - - are selected by another feature\n"
|
||||
" XXX cannot be selected. Symbol Info <F2> tells you why.\n"
|
||||
"*, M or whitespace inside braces means to build in, build as a module\n"
|
||||
"or to exclude the feature respectively.\n"
|
||||
"\n"
|
||||
"To change any of these features, highlight it with the movement keys\n"
|
||||
"listed below and press <y> to build it in, <m> to make it a module or\n"
|
||||
"<n> to remove it. You may press the <Space> key to cycle through the\n"
|
||||
"available options.\n"
|
||||
"\n"
|
||||
"A trailing \"--->\" designates a submenu.\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Menu navigation keys\n"
|
||||
"----------------------------------------------------------------------\n"
|
||||
"Linewise up <Up>\n"
|
||||
"Linewise down <Down>\n"
|
||||
"Pagewise up <Page Up>\n"
|
||||
"Pagewise down <Page Down>\n"
|
||||
"First entry <Home>\n"
|
||||
"Last entry <End>\n"
|
||||
"Enter a submenu <Right> <Enter>\n"
|
||||
"Go back to parent menu <Left> <Esc> <F5>\n"
|
||||
"Close a help window <Enter> <Esc> <F5>\n"
|
||||
"Close entry window, apply <Enter>\n"
|
||||
"Close entry window, forget <Esc> <F5>\n"
|
||||
"Start incremental, case-insensitive search for STRING in menu entries,\n"
|
||||
" no regex support, STRING is displayed in upper left corner\n"
|
||||
" </>STRING\n"
|
||||
" Remove last character <Backspace>\n"
|
||||
" Jump to next hit <Down>\n"
|
||||
" Jump to previous hit <Up>\n"
|
||||
"Exit menu search mode </> <Esc>\n"
|
||||
"Search for configuration variables with or without leading CONFIG_\n"
|
||||
" <F8>RegExpr<Enter>\n"
|
||||
"Verbose search help <F8><F1>\n"
|
||||
"----------------------------------------------------------------------\n"
|
||||
"\n"
|
||||
"Unless in a data entry window, key <1> may be used instead of <F1>,\n"
|
||||
"<2> instead of <F2>, etc.\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Radiolist (Choice list)\n"
|
||||
"-----------------------\n"
|
||||
"Use the movement keys listed above to select the option you wish to set\n"
|
||||
"and press <Space>.\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Data entry\n"
|
||||
"----------\n"
|
||||
"o Use the Up/Down arrow keys (cursor keys) to highlight the item\n"
|
||||
" you wish to change use <Enter> or <Space>. Goto submenu by \n"
|
||||
" pressing <Enter> of <right-arrow>. Use <Esc> or <left-arrow> to go back.\n"
|
||||
" Submenus are designated by \"--->\".\n"
|
||||
"\n"
|
||||
" Searching: pressing '/' triggers interactive search mode.\n"
|
||||
" nconfig performs a case insensitive search for the string\n"
|
||||
" in the menu prompts (no regex support).\n"
|
||||
" Pressing the up/down keys highlights the previous/next\n"
|
||||
" matching item. Backspace removes one character from the\n"
|
||||
" match string. Pressing either '/' again or ESC exits\n"
|
||||
" search mode. All other keys behave normally.\n"
|
||||
"\n"
|
||||
" You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
|
||||
" unseen options into view.\n"
|
||||
"\n"
|
||||
"o To exit a menu use the just press <ESC> <F5> <F8> or <left-arrow>.\n"
|
||||
"\n"
|
||||
"o To get help with an item, press <F1>\n"
|
||||
" Shortcut: Press <h> or <?>.\n"
|
||||
"Enter the requested information and press <Enter>. Hexadecimal values\n"
|
||||
"may be entered without the \"0x\" prefix.\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Radiolists (Choice lists)\n"
|
||||
"-----------\n"
|
||||
"o Use the cursor keys to select the option you wish to set and press\n"
|
||||
" <S> or the <SPACE BAR>.\n"
|
||||
"Text Box (Help Window)\n"
|
||||
"----------------------\n"
|
||||
"Use movement keys as listed in table above.\n"
|
||||
"\n"
|
||||
" Shortcut: Press the first letter of the option you wish to set then\n"
|
||||
" press <S> or <SPACE BAR>.\n"
|
||||
"\n"
|
||||
"o To see available help for the item, press <F1>\n"
|
||||
" Shortcut: Press <H> or <?>.\n"
|
||||
"Press any of <Enter> <Esc> <q> <F5> <F9> to exit.\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Data Entry\n"
|
||||
"-----------\n"
|
||||
"o Enter the requested information and press <ENTER>\n"
|
||||
" If you are entering hexadecimal values, it is not necessary to\n"
|
||||
" add the '0x' prefix to the entry.\n"
|
||||
"\n"
|
||||
"o For help, press <F1>.\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Text Box (Help Window)\n"
|
||||
"--------\n"
|
||||
"o Use the cursor keys to scroll up/down/left/right. The VI editor\n"
|
||||
" keys h,j,k,l function here as do <u>, <d> and <SPACE BAR> for\n"
|
||||
" those who are familiar with less and lynx.\n"
|
||||
"\n"
|
||||
"o Press <Enter>, <F1>, <F5>, <F9>, <q> or <Esc> to exit.\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Alternate Configuration Files\n"
|
||||
"Alternate configuration files\n"
|
||||
"-----------------------------\n"
|
||||
"nconfig supports the use of alternate configuration files for\n"
|
||||
"those who, for various reasons, find it necessary to switch\n"
|
||||
"between different configurations.\n"
|
||||
"nconfig supports switching between different configurations.\n"
|
||||
"Press <F6> to save your current configuration. Press <F7> and enter\n"
|
||||
"a file name to load a previously saved configuration.\n"
|
||||
"\n"
|
||||
"At the end of the main menu you will find two options. One is\n"
|
||||
"for saving the current configuration to a file of your choosing.\n"
|
||||
"The other option is for loading a previously saved alternate\n"
|
||||
"configuration.\n"
|
||||
"\n"
|
||||
"Even if you don't use alternate configuration files, but you\n"
|
||||
"find during a nconfig session that you have completely messed\n"
|
||||
"up your settings, you may use the \"Load Alternate...\" option to\n"
|
||||
"restore your previously saved settings from \".config\" without\n"
|
||||
"restarting nconfig.\n"
|
||||
"Terminal configuration\n"
|
||||
"----------------------\n"
|
||||
"If you use nconfig in a xterm window, make sure your TERM environment\n"
|
||||
"variable specifies a terminal configuration which supports at least\n"
|
||||
"16 colors. Otherwise nconfig will look rather bad.\n"
|
||||
"\n"
|
||||
"Other information\n"
|
||||
"-----------------\n"
|
||||
"If you use nconfig in an XTERM window make sure you have your\n"
|
||||
"$TERM variable set to point to a xterm definition which supports color.\n"
|
||||
"Otherwise, nconfig will look rather bad. nconfig will not\n"
|
||||
"display correctly in a RXVT window because rxvt displays only one\n"
|
||||
"intensity of color, bright.\n"
|
||||
"If the \"stty size\" command reports the current terminalsize correctly,\n"
|
||||
"nconfig will adapt to sizes larger than the traditional 80x25 \"standard\"\n"
|
||||
"and display longer menus properly.\n"
|
||||
"\n"
|
||||
"nconfig will display larger menus on screens or xterms which are\n"
|
||||
"set to display more than the standard 25 row by 80 column geometry.\n"
|
||||
"In order for this to work, the \"stty size\" command must be able to\n"
|
||||
"display the screen's current row and column geometry. I STRONGLY\n"
|
||||
"RECOMMEND that you make sure you do NOT have the shell variables\n"
|
||||
"LINES and COLUMNS exported into your environment. Some distributions\n"
|
||||
"export those variables via /etc/profile. Some ncurses programs can\n"
|
||||
"become confused when those variables (LINES & COLUMNS) don't reflect\n"
|
||||
"the true screen size.\n"
|
||||
"\n"
|
||||
"Optional personality available\n"
|
||||
"------------------------------\n"
|
||||
"If you prefer to have all of the options listed in a single menu, rather\n"
|
||||
"than the default multimenu hierarchy, run the nconfig with NCONFIG_MODE\n"
|
||||
"environment variable set to single_menu. Example:\n"
|
||||
"Single menu mode\n"
|
||||
"----------------\n"
|
||||
"If you prefer to have all of the menu entries listed in a single menu,\n"
|
||||
"rather than the default multimenu hierarchy, run nconfig with\n"
|
||||
"NCONFIG_MODE environment variable set to single_menu. Example:\n"
|
||||
"\n"
|
||||
"make NCONFIG_MODE=single_menu nconfig\n"
|
||||
"\n"
|
||||
"<Enter> will then unroll the appropriate category, or enfold it if it\n"
|
||||
"is already unrolled.\n"
|
||||
"<Enter> will then unfold the appropriate category, or fold it if it\n"
|
||||
"is already unfolded. Folded menu entries will be designated by a\n"
|
||||
"leading \"++>\" and unfolded entries by a leading \"-->\".\n"
|
||||
"\n"
|
||||
"Note that this mode can eventually be a little more CPU expensive\n"
|
||||
"(especially with a larger number of unrolled categories) than the\n"
|
||||
"default mode.\n"
|
||||
"Note that this mode can eventually be a little more CPU expensive than\n"
|
||||
"the default mode, especially with a larger number of unfolded submenus.\n"
|
||||
"\n"),
|
||||
menu_no_f_instructions[] = N_(
|
||||
" You do not have function keys support. Please follow the\n"
|
||||
" following instructions:\n"
|
||||
" Arrow keys navigate the menu.\n"
|
||||
" <Enter> or <right-arrow> selects submenus --->.\n"
|
||||
" Capital Letters are hotkeys.\n"
|
||||
" Pressing <Y> includes, <N> excludes, <M> modularizes features.\n"
|
||||
" Pressing SpaceBar toggles between the above options.\n"
|
||||
" Press <Esc> or <left-arrow> to go back one menu,\n"
|
||||
" <?> or <h> for Help, </> for Search.\n"
|
||||
" <1> is interchangeable with <F1>, <2> with <F2>, etc.\n"
|
||||
" Legend: [*] built-in [ ] excluded <M> module < > module capable.\n"
|
||||
" <Esc> always leaves the current window.\n"),
|
||||
"Legend: [*] built-in [ ] excluded <M> module < > module capable.\n"
|
||||
"Submenus are designated by a trailing \"--->\".\n"
|
||||
"\n"
|
||||
"Use the following keys to navigate the menus:\n"
|
||||
"Move up or down with <Up> and <Down>.\n"
|
||||
"Enter a submenu with <Enter> or <Right>.\n"
|
||||
"Exit a submenu to its parent menu with <Esc> or <Left>.\n"
|
||||
"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
|
||||
"Pressing <Space> cycles through the available options.\n"
|
||||
"To search for menu entries press </>.\n"
|
||||
"<Esc> always leaves the current window.\n"
|
||||
"\n"
|
||||
"You do not have function keys support.\n"
|
||||
"Press <1> instead of <F1>, <2> instead of <F2>, etc.\n"
|
||||
"For verbose global help use key <1>.\n"
|
||||
"For help related to the current menu entry press <?> or <h>.\n"),
|
||||
menu_instructions[] = N_(
|
||||
" Arrow keys navigate the menu.\n"
|
||||
" <Enter> or <right-arrow> selects submenus --->.\n"
|
||||
" Capital Letters are hotkeys.\n"
|
||||
" Pressing <Y> includes, <N> excludes, <M> modularizes features.\n"
|
||||
" Pressing SpaceBar toggles between the above options\n"
|
||||
" Press <Esc>, <F5> or <left-arrow> to go back one menu,\n"
|
||||
" <?>, <F1> or <h> for Help, </> for Search.\n"
|
||||
" <1> is interchangeable with <F1>, <2> with <F2>, etc.\n"
|
||||
" Legend: [*] built-in [ ] excluded <M> module < > module capable.\n"
|
||||
" <Esc> always leaves the current window\n"),
|
||||
"Legend: [*] built-in [ ] excluded <M> module < > module capable.\n"
|
||||
"Submenus are designated by a trailing \"--->\".\n"
|
||||
"\n"
|
||||
"Use the following keys to navigate the menus:\n"
|
||||
"Move up or down with <Up> or <Down>.\n"
|
||||
"Enter a submenu with <Enter> or <Right>.\n"
|
||||
"Exit a submenu to its parent menu with <Esc> or <Left>.\n"
|
||||
"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
|
||||
"Pressing <Space> cycles through the available options.\n"
|
||||
"To search for menu entries press </>.\n"
|
||||
"<Esc> always leaves the current window.\n"
|
||||
"\n"
|
||||
"Pressing <1> may be used instead of <F1>, <2> instead of <F2>, etc.\n"
|
||||
"For verbose global help press <F1>.\n"
|
||||
"For help related to the current menu entry press <?> or <h>.\n"),
|
||||
radiolist_instructions[] = N_(
|
||||
" Use the arrow keys to navigate this window or\n"
|
||||
" press the hotkey of the item you wish to select\n"
|
||||
" followed by the <SPACE BAR>.\n"
|
||||
" Press <?>, <F1> or <h> for additional information about this option.\n"),
|
||||
"Press <Up>, <Down>, <Home> or <End> to navigate a radiolist, select\n"
|
||||
"with <Space>.\n"
|
||||
"For help related to the current entry press <?> or <h>.\n"
|
||||
"For global help press <F1>.\n"),
|
||||
inputbox_instructions_int[] = N_(
|
||||
"Please enter a decimal value.\n"
|
||||
"Fractions will not be accepted.\n"
|
||||
"Press <RETURN> to accept, <ESC> to cancel."),
|
||||
"Press <Enter> to apply, <Esc> to cancel."),
|
||||
inputbox_instructions_hex[] = N_(
|
||||
"Please enter a hexadecimal value.\n"
|
||||
"Press <RETURN> to accept, <ESC> to cancel."),
|
||||
"Press <Enter> to apply, <Esc> to cancel."),
|
||||
inputbox_instructions_string[] = N_(
|
||||
"Please enter a string value.\n"
|
||||
"Press <RETURN> to accept, <ESC> to cancel."),
|
||||
"Press <Enter> to apply, <Esc> to cancel."),
|
||||
setmod_text[] = N_(
|
||||
"This feature depends on another which\n"
|
||||
"has been configured as a module.\n"
|
||||
"As a result, this feature will be built as a module."),
|
||||
"This feature depends on another feature which has been configured as a\n"
|
||||
"module. As a result, the current feature will be built as a module too."),
|
||||
load_config_text[] = N_(
|
||||
"Enter the name of the configuration file you wish to load.\n"
|
||||
"Accept the name shown to restore the configuration you\n"
|
||||
"last retrieved. Leave blank to abort."),
|
||||
"Accept the name shown to restore the configuration you last\n"
|
||||
"retrieved. Leave empty to abort."),
|
||||
load_config_help[] = N_(
|
||||
"\n"
|
||||
"For various reasons, one may wish to keep several different\n"
|
||||
"configurations available on a single machine.\n"
|
||||
"\n"
|
||||
"If you have saved a previous configuration in a file other than the\n"
|
||||
"default one, entering its name here will allow you to modify that\n"
|
||||
"configuration.\n"
|
||||
"default one, entering its name here will allow you to load and modify\n"
|
||||
"that configuration.\n"
|
||||
"\n"
|
||||
"If you are uncertain, then you have probably never used alternate\n"
|
||||
"configuration files. You should therefor leave this blank to abort.\n"),
|
||||
"Leave empty to abort.\n"),
|
||||
save_config_text[] = N_(
|
||||
"Enter a filename to which this configuration should be saved\n"
|
||||
"as an alternate. Leave blank to abort."),
|
||||
"as an alternate. Leave empty to abort."),
|
||||
save_config_help[] = N_(
|
||||
"\n"
|
||||
"For various reasons, one may wish to keep different configurations\n"
|
||||
"available on a single machine.\n"
|
||||
"For various reasons, one may wish to keep several different\n"
|
||||
"configurations available on a single machine.\n"
|
||||
"\n"
|
||||
"Entering a file name here will allow you to later retrieve, modify\n"
|
||||
"and use the current configuration as an alternate to whatever\n"
|
||||
"configuration options you have selected at that time.\n"
|
||||
"\n"
|
||||
"If you are uncertain what all this means then you should probably\n"
|
||||
"leave this blank.\n"),
|
||||
"Leave empty to abort.\n"),
|
||||
search_help[] = N_(
|
||||
"\n"
|
||||
"Search for symbols and display their relations. Regular expressions\n"
|
||||
"are allowed.\n"
|
||||
"Example: search for \"^FOO\"\n"
|
||||
"Search for symbols (configuration variable names CONFIG_*) and display\n"
|
||||
"their relations. Regular expressions are supported.\n"
|
||||
"Example: Search for \"^FOO\".\n"
|
||||
"Result:\n"
|
||||
"-----------------------------------------------------------------\n"
|
||||
"Symbol: FOO [ = m]\n"
|
||||
@ -229,26 +222,26 @@ search_help[] = N_(
|
||||
"Selects: LIBCRC32\n"
|
||||
"Selected by: BAR\n"
|
||||
"-----------------------------------------------------------------\n"
|
||||
"o The line 'Prompt:' shows the text used in the menu structure for\n"
|
||||
" this symbol\n"
|
||||
"o The 'Defined at' line tell at what file / line number the symbol\n"
|
||||
" is defined\n"
|
||||
"o The 'Depends on:' line tell what symbols needs to be defined for\n"
|
||||
" this symbol to be visible in the menu (selectable)\n"
|
||||
"o The 'Location:' lines tell where in the menu structure this symbol\n"
|
||||
" is located\n"
|
||||
" A location followed by a [ = y] indicate that this is a selectable\n"
|
||||
" menu item - and current value is displayed inside brackets.\n"
|
||||
"o The 'Selects:' line tell what symbol will be automatically\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 line 'Prompt:' shows the text displayed for this symbol in\n"
|
||||
" the menu hierarchy.\n"
|
||||
"o The 'Defined at' line tells at what file / line number the symbol is\n"
|
||||
" defined.\n"
|
||||
"o The 'Depends on:' line lists symbols that need to be defined for\n"
|
||||
" this symbol to be visible and selectable in the menu.\n"
|
||||
"o The 'Location:' lines tell, where in the menu structure this symbol\n"
|
||||
" is located. A location followed by a [ = y] indicates that this is\n"
|
||||
" a selectable menu item, and the current value is displayed inside\n"
|
||||
" brackets.\n"
|
||||
"o The 'Selects:' line tells, what symbol will be automatically selected\n"
|
||||
" if this symbol is selected (y or m).\n"
|
||||
"o The 'Selected by' line tells what symbol has selected this symbol.\n"
|
||||
"\n"
|
||||
"Only relevant lines are shown.\n"
|
||||
"\n\n"
|
||||
"Search examples:\n"
|
||||
"Examples: USB => find all symbols containing USB\n"
|
||||
" ^USB => find all symbols starting with USB\n"
|
||||
" USB$ => find all symbols ending with USB\n"
|
||||
"USB => find all symbols containing USB\n"
|
||||
"^USB => find all symbols starting with USB\n"
|
||||
"USB$ => find all symbols ending with USB\n"
|
||||
"\n");
|
||||
|
||||
struct mitem {
|
||||
@ -319,19 +312,19 @@ struct function_keys function_keys[] = {
|
||||
},
|
||||
{
|
||||
.key_str = "F2",
|
||||
.func = "Sym Info",
|
||||
.func = "SymInfo",
|
||||
.key = F_SYMBOL,
|
||||
.handler = handle_f2,
|
||||
},
|
||||
{
|
||||
.key_str = "F3",
|
||||
.func = "Insts",
|
||||
.func = "Help 2",
|
||||
.key = F_INSTS,
|
||||
.handler = handle_f3,
|
||||
},
|
||||
{
|
||||
.key_str = "F4",
|
||||
.func = "Config",
|
||||
.func = "ShowAll",
|
||||
.key = F_CONF,
|
||||
.handler = handle_f4,
|
||||
},
|
||||
@ -355,7 +348,7 @@ struct function_keys function_keys[] = {
|
||||
},
|
||||
{
|
||||
.key_str = "F8",
|
||||
.func = "Sym Search",
|
||||
.func = "SymSearch",
|
||||
.key = F_SEARCH,
|
||||
.handler = handle_f8,
|
||||
},
|
||||
@ -392,7 +385,7 @@ static void print_function_line(void)
|
||||
static void handle_f1(int *key, struct menu *current_item)
|
||||
{
|
||||
show_scroll_win(main_window,
|
||||
_("README"), _(nconf_readme));
|
||||
_("Global help"), _(nconf_global_help));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -407,7 +400,7 @@ static void handle_f2(int *key, struct menu *current_item)
|
||||
static void handle_f3(int *key, struct menu *current_item)
|
||||
{
|
||||
show_scroll_win(main_window,
|
||||
_("Instructions"),
|
||||
_("Short help"),
|
||||
_(current_instructions));
|
||||
return;
|
||||
}
|
||||
@ -696,13 +689,18 @@ static void search_conf(void)
|
||||
{
|
||||
struct symbol **sym_arr;
|
||||
struct gstr res;
|
||||
struct gstr title;
|
||||
char *dialog_input;
|
||||
int dres;
|
||||
|
||||
title = str_new();
|
||||
str_printf( &title, _("Enter %s (sub)string to search for "
|
||||
"(with or without \"%s\")"), CONFIG_, CONFIG_);
|
||||
|
||||
again:
|
||||
dres = dialog_inputbox(main_window,
|
||||
_("Search Configuration Parameter"),
|
||||
_("Enter " CONFIG_ " (sub)string to search for "
|
||||
"(with or without \"" CONFIG_ "\")"),
|
||||
str_get(&title),
|
||||
"", &dialog_input_result, &dialog_input_result_len);
|
||||
switch (dres) {
|
||||
case 0:
|
||||
@ -712,6 +710,7 @@ again:
|
||||
_("Search Configuration"), search_help);
|
||||
goto again;
|
||||
default:
|
||||
str_free(&title);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -726,6 +725,7 @@ again:
|
||||
show_scroll_win(main_window,
|
||||
_("Search Results"), str_get(&res));
|
||||
str_free(&res);
|
||||
str_free(&title);
|
||||
}
|
||||
|
||||
|
||||
|
@ -48,7 +48,7 @@ static void set_normal_colors(void)
|
||||
init_pair(INPUT_FIELD, -1, -1);
|
||||
|
||||
init_pair(FUNCTION_HIGHLIGHT, -1, -1);
|
||||
init_pair(FUNCTION_TEXT, COLOR_BLUE, -1);
|
||||
init_pair(FUNCTION_TEXT, COLOR_YELLOW, -1);
|
||||
}
|
||||
|
||||
/* available attributes:
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <qglobal.h>
|
||||
|
||||
#if QT_VERSION < 0x040000
|
||||
#include <stddef.h>
|
||||
#include <qmainwindow.h>
|
||||
#include <qvbox.h>
|
||||
#include <qvaluelist.h>
|
||||
|
@ -656,11 +656,11 @@ bool sym_set_string_value(struct symbol *sym, const char *newval)
|
||||
size = strlen(newval) + 1;
|
||||
if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
|
||||
size += 2;
|
||||
sym->def[S_DEF_USER].val = val = malloc(size);
|
||||
sym->def[S_DEF_USER].val = val = xmalloc(size);
|
||||
*val++ = '0';
|
||||
*val++ = 'x';
|
||||
} else if (!oldval || strcmp(oldval, newval))
|
||||
sym->def[S_DEF_USER].val = val = malloc(size);
|
||||
sym->def[S_DEF_USER].val = val = xmalloc(size);
|
||||
else
|
||||
return true;
|
||||
|
||||
@ -812,7 +812,7 @@ struct symbol *sym_lookup(const char *name, int flags)
|
||||
hash = 0;
|
||||
}
|
||||
|
||||
symbol = malloc(sizeof(*symbol));
|
||||
symbol = xmalloc(sizeof(*symbol));
|
||||
memset(symbol, 0, sizeof(*symbol));
|
||||
symbol->name = new_name;
|
||||
symbol->type = S_UNKNOWN;
|
||||
@ -863,7 +863,7 @@ const char *sym_expand_string_value(const char *in)
|
||||
size_t reslen;
|
||||
|
||||
reslen = strlen(in) + 1;
|
||||
res = malloc(reslen);
|
||||
res = xmalloc(reslen);
|
||||
res[0] = '\0';
|
||||
|
||||
while ((src = strchr(in, '$'))) {
|
||||
@ -921,7 +921,7 @@ const char *sym_escape_string_value(const char *in)
|
||||
p++;
|
||||
}
|
||||
|
||||
res = malloc(reslen);
|
||||
res = xmalloc(reslen);
|
||||
res[0] = '\0';
|
||||
|
||||
strcat(res, "\"");
|
||||
@ -1228,7 +1228,7 @@ struct property *prop_alloc(enum prop_type type, struct symbol *sym)
|
||||
struct property *prop;
|
||||
struct property **propp;
|
||||
|
||||
prop = malloc(sizeof(*prop));
|
||||
prop = xmalloc(sizeof(*prop));
|
||||
memset(prop, 0, sizeof(*prop));
|
||||
prop->type = type;
|
||||
prop->sym = sym;
|
||||
|
@ -23,7 +23,7 @@ struct file *file_lookup(const char *name)
|
||||
}
|
||||
}
|
||||
|
||||
file = malloc(sizeof(*file));
|
||||
file = xmalloc(sizeof(*file));
|
||||
memset(file, 0, sizeof(*file));
|
||||
file->name = file_name;
|
||||
file->next = file_list;
|
||||
@ -81,7 +81,7 @@ int file_write_dep(const char *name)
|
||||
struct gstr str_new(void)
|
||||
{
|
||||
struct gstr gs;
|
||||
gs.s = malloc(sizeof(char) * 64);
|
||||
gs.s = xmalloc(sizeof(char) * 64);
|
||||
gs.len = 64;
|
||||
gs.max_width = 0;
|
||||
strcpy(gs.s, "\0");
|
||||
@ -138,3 +138,22 @@ const char *str_get(struct gstr *gs)
|
||||
return gs->s;
|
||||
}
|
||||
|
||||
void *xmalloc(size_t size)
|
||||
{
|
||||
void *p = malloc(size);
|
||||
if (p)
|
||||
return p;
|
||||
fprintf(stderr, "Out of memory.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
void *xcalloc(size_t nmemb, size_t size)
|
||||
{
|
||||
void *p = calloc(nmemb, size);
|
||||
if (p)
|
||||
return p;
|
||||
fprintf(stderr, "Out of memory.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -40,7 +40,7 @@ static void zconf_endfile(void);
|
||||
|
||||
static void new_string(void)
|
||||
{
|
||||
text = malloc(START_STRSIZE);
|
||||
text = xmalloc(START_STRSIZE);
|
||||
text_asize = START_STRSIZE;
|
||||
text_size = 0;
|
||||
*text = 0;
|
||||
@ -62,7 +62,7 @@ static void append_string(const char *str, int size)
|
||||
|
||||
static void alloc_string(const char *str, int size)
|
||||
{
|
||||
text = malloc(size + 1);
|
||||
text = xmalloc(size + 1);
|
||||
memcpy(text, str, size);
|
||||
text[size] = 0;
|
||||
}
|
||||
@ -288,7 +288,7 @@ void zconf_initscan(const char *name)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
current_buf = malloc(sizeof(*current_buf));
|
||||
current_buf = xmalloc(sizeof(*current_buf));
|
||||
memset(current_buf, 0, sizeof(*current_buf));
|
||||
|
||||
current_file = file_lookup(name);
|
||||
@ -299,7 +299,7 @@ void zconf_nextfile(const char *name)
|
||||
{
|
||||
struct file *iter;
|
||||
struct file *file = file_lookup(name);
|
||||
struct buffer *buf = malloc(sizeof(*buf));
|
||||
struct buffer *buf = xmalloc(sizeof(*buf));
|
||||
memset(buf, 0, sizeof(*buf));
|
||||
|
||||
current_buf->state = YY_CURRENT_BUFFER;
|
||||
|
@ -802,7 +802,7 @@ static void zconf_endfile(void);
|
||||
|
||||
static void new_string(void)
|
||||
{
|
||||
text = malloc(START_STRSIZE);
|
||||
text = xmalloc(START_STRSIZE);
|
||||
text_asize = START_STRSIZE;
|
||||
text_size = 0;
|
||||
*text = 0;
|
||||
@ -824,7 +824,7 @@ static void append_string(const char *str, int size)
|
||||
|
||||
static void alloc_string(const char *str, int size)
|
||||
{
|
||||
text = malloc(size + 1);
|
||||
text = xmalloc(size + 1);
|
||||
memcpy(text, str, size);
|
||||
text[size] = 0;
|
||||
}
|
||||
@ -2343,7 +2343,7 @@ void zconf_initscan(const char *name)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
current_buf = malloc(sizeof(*current_buf));
|
||||
current_buf = xmalloc(sizeof(*current_buf));
|
||||
memset(current_buf, 0, sizeof(*current_buf));
|
||||
|
||||
current_file = file_lookup(name);
|
||||
@ -2354,7 +2354,7 @@ void zconf_nextfile(const char *name)
|
||||
{
|
||||
struct file *iter;
|
||||
struct file *file = file_lookup(name);
|
||||
struct buffer *buf = malloc(sizeof(*buf));
|
||||
struct buffer *buf = xmalloc(sizeof(*buf));
|
||||
memset(buf, 0, sizeof(*buf));
|
||||
|
||||
current_buf->state = YY_CURRENT_BUFFER;
|
||||
|
Loading…
Reference in New Issue
Block a user