package/config: rebase against 2.6.37-rc1

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
This commit is contained in:
Peter Korsgaard 2011-02-02 11:48:58 +01:00
parent 359a922659
commit 72daa122b6
35 changed files with 1079 additions and 1179 deletions

View File

@ -8,7 +8,7 @@ PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-c
ifdef KBUILD_KCONFIG
Kconfig := $(KBUILD_KCONFIG)
else
Kconfig := arch/$(SRCARCH)/Kconfig
Kconfig := Kconfig
endif
xconfig: $(obj)/qconf
@ -145,11 +145,8 @@ check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
# Use recursively expanded variables so we do not call gcc unless
# we really need to do so. (Do not call gcc as part of make mrproper)
HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
HOST_EXTRACFLAGS += -DLOCALE
HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
-DLOCALE
# ===========================================================================
# Shared Makefile for the various kconfig executables:
@ -226,7 +223,7 @@ clean-files += $(kxgettext-objs)
PHONY += $(obj)/dochecklxdialog
$(addprefix $(obj)/,$(lxdialog)): $(obj)/dochecklxdialog
$(obj)/dochecklxdialog:
$(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOST_LOADLIBES)
$(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTLOADLIBES_mconf)
always := dochecklxdialog
@ -244,6 +241,8 @@ HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0` -ldl
HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
-D LKC_DIRECT_LINK
HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
HOSTLOADLIBES_nconf = -lmenu -lpanel -lncurses
$(obj)/qconf.o: $(obj)/.tmp_qtcheck
@ -254,40 +253,48 @@ $(obj)/.tmp_qtcheck: $(src)/Makefile
# QT needs some extra effort...
$(obj)/.tmp_qtcheck:
@set -e; echo " CHECK qt"; dir=""; pkg=""; \
pkg-config --exists qt 2> /dev/null && pkg=qt; \
pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
if [ -n "$$pkg" ]; then \
cflags="\$$(shell pkg-config $$pkg --cflags)"; \
libs="\$$(shell pkg-config $$pkg --libs)"; \
moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
dir="$$(pkg-config $$pkg --variable=prefix)"; \
if ! pkg-config --exists QtCore 2> /dev/null; then \
echo "* Unable to find the QT4 tool qmake. Trying to use QT3"; \
pkg-config --exists qt 2> /dev/null && pkg=qt; \
pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
if [ -n "$$pkg" ]; then \
cflags="\$$(shell pkg-config $$pkg --cflags)"; \
libs="\$$(shell pkg-config $$pkg --libs)"; \
moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
dir="$$(pkg-config $$pkg --variable=prefix)"; \
else \
for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
done; \
if [ -z "$$dir" ]; then \
echo "*"; \
echo "* Unable to find any QT installation. Please make sure that"; \
echo "* the QT4 or QT3 development package is correctly installed and"; \
echo "* either qmake can be found or install pkg-config or set"; \
echo "* the QTDIR environment variable to the correct location."; \
echo "*"; \
false; \
fi; \
libpath=$$dir/lib; lib=qt; osdir=""; \
$(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
test -f $$libpath/libqt-mt.so && lib=qt-mt; \
cflags="-I$$dir/include"; \
libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
moc="$$dir/bin/moc"; \
fi; \
if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
echo "*"; \
echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
echo "*"; \
moc="/usr/bin/moc"; \
fi; \
else \
for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
done; \
if [ -z "$$dir" ]; then \
echo "*"; \
echo "* Unable to find the QT3 installation. Please make sure that"; \
echo "* the QT3 development package is correctly installed and"; \
echo "* either install pkg-config or set the QTDIR environment"; \
echo "* variable to the correct location."; \
echo "*"; \
false; \
fi; \
libpath=$$dir/lib; lib=qt; osdir=""; \
$(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
test -f $$libpath/libqt-mt.so && lib=qt-mt; \
cflags="-I$$dir/include"; \
libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
moc="$$dir/bin/moc"; \
fi; \
if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
echo "*"; \
echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
echo "*"; \
moc="/usr/bin/moc"; \
cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
binpath="\$$(shell pkg-config QtCore --variable=prefix)"; \
moc="$$binpath/bin/moc"; \
fi; \
echo "KC_QT_CFLAGS=$$cflags" > $@; \
echo "KC_QT_LIBS=$$libs" >> $@; \

View File

@ -425,7 +425,7 @@ static void check_conf(struct menu *menu)
(sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
if (input_mode == listnewconfig) {
if (sym->name && !sym_is_choice_value(sym)) {
printf("CONFIG_%s\n", sym->name);
printf("%s%s\n", CONFIG_, sym->name);
}
} else if (input_mode != oldnoconfig) {
if (!conf_cnt++)
@ -466,7 +466,7 @@ int main(int ac, char **av)
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
while ((opt = getopt_long_only(ac, av, "", long_opts, NULL)) != -1) {
while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1) {
input_mode = (enum input_mode)opt;
switch (opt) {
case silentoldconfig:
@ -507,8 +507,7 @@ int main(int ac, char **av)
name = conf_get_configname();
if (stat(name, &tmpstat)) {
fprintf(stderr, _("***\n"
"*** You have not yet configured your Buildroot!\n"
"*** (missing .config file \"%s\")\n"
"*** Configuration file \"%s\" not found!\n"
"***\n"
"*** Please run some configurator (e.g. \"make oldconfig\" or\n"
"*** \"make menuconfig\" or \"make xconfig\").\n"
@ -570,7 +569,7 @@ int main(int ac, char **av)
name = getenv("KCONFIG_NOSILENTUPDATE");
if (name && *name) {
fprintf(stderr,
_("\n*** Buildroot configuration requires explicit update.\n\n"));
_("\n*** The configuration requires explicit update.\n\n"));
return 1;
}
}
@ -622,11 +621,11 @@ int main(int ac, char **av)
* All other commands are only used to generate a config.
*/
if (conf_get_changed() && conf_write(NULL)) {
fprintf(stderr, _("\n*** Error during writing of the Buildroot configuration.\n\n"));
fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n"));
exit(1);
}
if (conf_write_autoconf()) {
fprintf(stderr, _("\n*** Error during update of the Buildroot configuration.\n\n"));
fprintf(stderr, _("\n*** Error during update of the configuration.\n\n"));
return 1;
}
} else if (input_mode == savedefconfig) {
@ -637,7 +636,7 @@ int main(int ac, char **av)
}
} else if (input_mode != listnewconfig) {
if (conf_write(NULL)) {
fprintf(stderr, _("\n*** Error during writing of the Buildroot configuration.\n\n"));
fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n"));
exit(1);
}
}

View File

@ -5,6 +5,7 @@
#include <sys/stat.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
@ -19,6 +20,9 @@
static void conf_warning(const char *fmt, ...)
__attribute__ ((format (printf, 1, 2)));
static void conf_message(const char *fmt, ...)
__attribute__ ((format (printf, 1, 2)));
static const char *conf_filename;
static int conf_lineno, conf_warnings, conf_unsaved;
@ -35,6 +39,29 @@ static void conf_warning(const char *fmt, ...)
conf_warnings++;
}
static void conf_default_message_callback(const char *fmt, va_list ap)
{
printf("#\n# ");
vprintf(fmt, ap);
printf("\n#\n");
}
static void (*conf_message_callback) (const char *fmt, va_list ap) =
conf_default_message_callback;
void conf_set_message_callback(void (*fn) (const char *fmt, va_list ap))
{
conf_message_callback = fn;
}
static void conf_message(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
if (conf_message_callback)
conf_message_callback(fmt, ap);
}
const char *conf_get_configname(void)
{
char *name = getenv("BUILDROOT_CONFIG");
@ -182,9 +209,8 @@ int conf_read_simple(const char *name, int def)
name = conf_expand_value(prop->expr->left.sym->name);
in = zconf_fopen(name);
if (in) {
printf(_("#\n"
"# using defaults found in %s\n"
"#\n"), name);
conf_message(_("using defaults found in %s"),
name);
goto load;
}
}
@ -219,9 +245,8 @@ load:
while (fgets(line, sizeof(line), in)) {
conf_lineno++;
sym = NULL;
switch (line[0]) {
case '#':
if (line[1]!=' ')
if (line[0] == '#') {
if (memcmp(line + 2, CONFIG_, strlen(CONFIG_)))
continue;
p = strchr(line + 2, ' ');
if (!p)
@ -233,7 +258,7 @@ load:
sym = sym_find(line + 2);
if (!sym) {
sym_add_change_count(1);
break;
goto setsym;
}
} else {
sym = sym_lookup(line + 2, 0);
@ -252,8 +277,7 @@ load:
default:
;
}
break;
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
} else if (isupper(line[0])) {
p = strchr(line, '=');
if (!p)
continue;
@ -268,7 +292,7 @@ load:
sym = sym_find(line);
if (!sym) {
sym_add_change_count(1);
break;
goto setsym;
}
} else {
sym = sym_lookup(line, 0);
@ -280,14 +304,12 @@ load:
}
if (conf_set_sym_val(sym, def, def_flags, p))
continue;
break;
case '\r':
case '\n':
break;
default:
conf_warning("unexpected data");
} else {
if (line[0] != '\r' && line[0] != '\n')
conf_warning("unexpected data");
continue;
}
setsym:
if (sym && sym_is_choice_value(sym)) {
struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
switch (sym->def[def].tri) {
@ -428,7 +450,8 @@ static void conf_write_symbol(struct symbol *sym, enum symbol_type type,
switch (sym_get_tristate_value(sym)) {
case no:
if (write_no)
fprintf(out, "# %s is not set\n", sym->name);
fprintf(out, "# %s is not set\n",
sym->name);
break;
case mod:
fprintf(out, "%s=m\n", sym->name);
@ -579,8 +602,6 @@ int conf_write(const char *name)
if (!out)
return 1;
sym = sym_lookup("BR2_VERSION", 0);
sym_calc_value(sym);
time(&now);
env = getenv("KCONFIG_NOTIMESTAMP");
if (env && *env)
@ -588,10 +609,10 @@ int conf_write(const char *name)
fprintf(out, _("#\n"
"# Automatically generated make config: don't edit\n"
"# Buildroot version: %s\n"
"# %s\n"
"%s%s"
"#\n"),
sym_get_string_value(sym),
rootmenu.prompt->text,
use_timestamp ? "# " : "",
use_timestamp ? ctime(&now) : "");
@ -648,9 +669,7 @@ next:
return 1;
}
printf(_("#\n"
"# configuration written to %s\n"
"#\n"), newname);
conf_message(_("configuration written to %s"), newname);
sym_set_change_count(0);
@ -830,24 +849,22 @@ int conf_write_autoconf(void)
return 1;
}
sym = sym_lookup("BR2_VERSION", 0);
sym_calc_value(sym);
time(&now);
fprintf(out, "#\n"
"# Automatically generated make config: don't edit\n"
"# Buildroot version: %s\n"
"# %s\n"
"# %s"
"#\n",
sym_get_string_value(sym),
ctime(&now));
rootmenu.prompt->text, ctime(&now));
fprintf(tristate, "#\n"
"# Automatically generated - do not edit\n"
"\n");
fprintf(out_h, "/*\n"
" * Automatically generated C config: don't edit\n"
" * %s\n"
" * %s"
" */\n",
ctime(&now));
rootmenu.prompt->text, ctime(&now));
for_all_symbols(i, sym) {
sym_calc_value(sym);
@ -865,14 +882,17 @@ int conf_write_autoconf(void)
case no:
break;
case mod:
fprintf(tristate, "%s=M\n", sym->name);
fprintf(out_h, "#define %s_MODULE 1\n", sym->name);
fprintf(tristate, "%s=M\n",
sym->name);
fprintf(out_h, "#define %s_MODULE 1\n",
sym->name);
break;
case yes:
if (sym->type == S_TRISTATE)
fprintf(tristate, "%s=Y\n",
sym->name);
fprintf(out_h, "#define %s 1\n", sym->name);
fprintf(tristate,"%s=Y\n",
sym->name);
fprintf(out_h, "#define %s 1\n",
sym->name);
break;
}
break;
@ -882,12 +902,14 @@ int conf_write_autoconf(void)
case S_HEX:
str = sym_get_string_value(sym);
if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
fprintf(out_h, "#define %s 0x%s\n", sym->name, str);
fprintf(out_h, "#define %s 0x%s\n",
sym->name, str);
break;
}
case S_INT:
str = sym_get_string_value(sym);
fprintf(out_h, "#define %s %s\n", sym->name, str);
fprintf(out_h, "#define %s %s\n",
sym->name, str);
break;
default:
break;

View File

@ -18,7 +18,7 @@ extern "C" {
struct file {
struct file *next;
struct file *parent;
char *name;
const char *name;
int lineno;
int flags;
};

View File

@ -133,7 +133,6 @@ void init_main_window(const gchar * glade_file)
GladeXML *xml;
GtkWidget *widget;
GtkTextBuffer *txtbuf;
char title[256];
GtkStyle *style;
xml = glade_xml_new(glade_file, "window1", NULL);
@ -210,9 +209,7 @@ void init_main_window(const gchar * glade_file)
/*"style", PANGO_STYLE_OBLIQUE, */
NULL);
sprintf(title, _("Buildroot v%s Configuration"),
getenv("BR2_VERSION"));
gtk_window_set_title(GTK_WINDOW(main_wnd), title);
gtk_window_set_title(GTK_WINDOW(main_wnd), rootmenu.prompt->text);
gtk_widget_show(main_wnd);
}
@ -671,8 +668,7 @@ void on_introduction1_activate(GtkMenuItem * menuitem, gpointer user_data)
{
GtkWidget *dialog;
const gchar *intro_text = _(
"Welcome to gkc, the GTK+ graphical kernel configuration tool\n"
"for Linux.\n"
"Welcome to gkc, the GTK+ graphical configuration tool\n"
"For each option, a blank box indicates the feature is disabled, a\n"
"check indicates it is enabled, and a dot indicates that it is to\n"
"be compiled as a module. Clicking on the box will cycle through the three states.\n"
@ -1531,12 +1527,6 @@ int main(int ac, char *av[])
else
glade_file = g_strconcat(g_get_current_dir(), "/", av[0], ".glade", NULL);
/* Load the interface and connect signals */
init_main_window(glade_file);
init_tree_model();
init_left_tree();
init_right_tree();
/* Conf stuffs */
if (ac > 1 && av[1][0] == '-') {
switch (av[1][1]) {
@ -1556,6 +1546,12 @@ int main(int ac, char *av[])
fixup_rootmenu(&rootmenu);
conf_read(NULL);
/* Load the interface and connect signals */
init_main_window(glade_file);
init_tree_model();
init_left_tree();
init_right_tree();
switch (view_mode) {
case SINGLE_VIEW:
display_tree_part();

View File

@ -1,5 +1,4 @@
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
<glade-interface>

View File

@ -63,11 +63,11 @@ next:
struct file_line {
struct file_line *next;
char* file;
int lineno;
const char *file;
int lineno;
};
static struct file_line *file_line__new(char *file, int lineno)
static struct file_line *file_line__new(const char *file, int lineno)
{
struct file_line *self = malloc(sizeof(*self));
@ -90,7 +90,8 @@ struct message {
static struct message *message__list;
static struct message *message__new(const char *msg, char *option, char *file, int lineno)
static struct message *message__new(const char *msg, char *option,
const char *file, int lineno)
{
struct message *self = malloc(sizeof(*self));
@ -130,7 +131,8 @@ static struct message *mesage__find(const char *msg)
return m;
}
static int message__add_file_line(struct message *self, char *file, int lineno)
static int message__add_file_line(struct message *self, const char *file,
int lineno)
{
int rc = -1;
struct file_line *fl = file_line__new(file, lineno);
@ -145,7 +147,8 @@ out:
return rc;
}
static int message__add(const char *msg, char *option, char *file, int lineno)
static int message__add(const char *msg, char *option, const char *file,
int lineno)
{
int rc = 0;
char bf[16384];

View File

@ -2373,9 +2373,10 @@ void zconf_nextfile(const char *name)
memset(buf, 0, sizeof(*buf));
current_buf->state = YY_CURRENT_BUFFER;
zconfin = zconf_fopen(name);
zconfin = zconf_fopen(file->name);
if (!zconfin) {
printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
printf("%s:%d: can't open file \"%s\"\n",
zconf_curname(), zconf_lineno(), file->name);
exit(1);
}
zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
@ -2422,7 +2423,7 @@ int zconf_lineno(void)
return current_pos.lineno;
}
char *zconf_curname(void)
const char *zconf_curname(void)
{
return current_pos.file ? current_pos.file->name : "<none>";
}

View File

@ -31,12 +31,18 @@ extern "C" {
#define SRCTREE "srctree"
#ifndef PACKAGE
#define PACKAGE "linux"
#endif
#define LOCALEDIR "/usr/share/locale"
#define _(text) gettext(text)
#define N_(text) (text)
#ifndef CONFIG_
#define CONFIG_ "BR2_"
#endif
#define TF_COMMAND 0x0001
#define TF_PARAM 0x0002
@ -70,7 +76,7 @@ FILE *zconf_fopen(const char *name);
void zconf_initscan(const char *name);
void zconf_nextfile(const char *name);
int zconf_lineno(void);
char *zconf_curname(void);
const char *zconf_curname(void);
/* conf.c */
void xfgets(char *str, int size, FILE *in);

View File

@ -1,3 +1,4 @@
#include <stdarg.h>
/* confdata.c */
P(conf_parse,void,(const char *name));
@ -8,6 +9,7 @@ P(conf_write,int,(const char *name));
P(conf_write_autoconf,int,(void));
P(conf_get_changed,bool,(void));
P(conf_set_changed_callback, void,(void (*fn)(void)));
P(conf_set_message_callback, void,(void (*fn)(const char *fmt, va_list ap)));
/* menu.c */
P(rootmenu,struct menu,);
@ -28,6 +30,7 @@ P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
P(sym_lookup,struct symbol *,(const char *name, int flags));
P(sym_find,struct symbol *,(const char *name));
P(sym_expand_string_value,const char *,(const char *in));
P(sym_re_search,struct symbol **,(const char *pattern));
P(sym_type_name,const char *,(enum symbol_type type));
P(sym_calc_value,void,(struct symbol *sym));

View File

@ -23,6 +23,8 @@ ccflags()
echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"'
elif [ -f /usr/include/ncurses/curses.h ]; then
echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"'
elif [ -f /usr/include/ncursesw/curses.h ]; then
echo '-I/usr/include/ncursesw -DCURSES_LOC="<ncursesw/curses.h>"'
elif [ -f /usr/include/ncurses.h ]; then
echo '-DCURSES_LOC="<ncurses.h>"'
else

View File

@ -25,10 +25,9 @@
static const char mconf_readme[] = N_(
"Overview\n"
"--------\n"
"Some features may be built directly into Buildroot. Some features\n"
"may be completely removed altogether. There are also certain\n"
"parameters which are not really features, but must be\n"
"entered in as decimal or hexadecimal numbers or possibly text.\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"
"\n"
"Menu items beginning with following braces represent features that\n"
" [ ] can be built in or removed\n"
@ -149,9 +148,9 @@ static const char mconf_readme[] = N_(
"\n"
"Optional personality available\n"
"------------------------------\n"
"If you prefer to have all of the options listed in a single\n"
"menu, rather than the default multimenu hierarchy, run the menuconfig\n"
"with MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
"If you prefer to have all of the options listed in a single menu, rather\n"
"than the default multimenu hierarchy, run the menuconfig with\n"
"MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
"\n"
"make MENUCONFIG_MODE=single_menu menuconfig\n"
"\n"
@ -206,12 +205,12 @@ load_config_text[] = N_(
"last retrieved. Leave blank to abort."),
load_config_help[] = N_(
"\n"
"For various reasons, one may wish to keep several different Buildroot\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"
"Buildroot's default, entering the name of the file here will allow you\n"
"to modify that configuration.\n"
"default one, entering its name here will allow you to modify that\n"
"configuration.\n"
"\n"
"If you are uncertain, then you have probably never used alternate\n"
"configuration files. You should therefore leave this blank to abort.\n"),
@ -220,8 +219,8 @@ save_config_text[] = N_(
"as an alternate. Leave blank to abort."),
save_config_help[] = N_(
"\n"
"For various reasons, one may wish to keep different Buildroot\n"
"configurations available on a single machine.\n"
"For various reasons, one may wish to keep different configurations\n"
"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"
@ -231,7 +230,7 @@ save_config_help[] = N_(
"leave this blank.\n"),
search_help[] = N_(
"\n"
"Search for CONFIG_ symbols and display their relations.\n"
"Search for symbols and display their relations.\n"
"Regular expressions are allowed.\n"
"Example: search for \"^FOO\"\n"
"Result:\n"
@ -248,7 +247,7 @@ search_help[] = N_(
"Selected by: BAR\n"
"-----------------------------------------------------------------\n"
"o The line 'Prompt:' shows the text used in the menu structure for\n"
" this CONFIG_ symbol\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"
@ -264,9 +263,9 @@ search_help[] = N_(
"Only relevant lines are shown.\n"
"\n\n"
"Search examples:\n"
"Examples: USB => find all CONFIG_ symbols containing USB\n"
" ^USB => find all CONFIG_ symbols starting with USB\n"
" USB$ => find all CONFIG_ symbols ending with USB\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"
"\n");
static int indent;
@ -289,13 +288,9 @@ static void set_config_filename(const char *config_filename)
{
static char menu_backtitle[PATH_MAX+128];
int size;
struct symbol *sym;
sym = sym_lookup("BR2_VERSION", 0);
sym_calc_value(sym);
size = snprintf(menu_backtitle, sizeof(menu_backtitle),
_("%s - buildroot v%s Configuration"),
config_filename, sym_get_string_value(sym));
"%s - %s", config_filename, rootmenu.prompt->text);
if (size >= sizeof(menu_backtitle))
menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
set_dialog_backtitle(menu_backtitle);
@ -315,7 +310,8 @@ static void search_conf(void)
again:
dialog_clear();
dres = dialog_inputbox(_("Search Configuration Parameter"),
_("Enter (sub)string to search for"),
_("Enter " CONFIG_ " (sub)string to search for "
"(with or without \"" CONFIG_ "\")"),
10, 75, "");
switch (dres) {
case 0:
@ -327,10 +323,10 @@ again:
return;
}
/* strip CONFIG_ if necessary */
/* strip the prefix if necessary */
dialog_input = dialog_input_result;
if (strncasecmp(dialog_input_result, "CONFIG_", 7) == 0)
dialog_input += 7;
if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
dialog_input += strlen(CONFIG_);
sym_arr = sym_re_search(dialog_input);
res = get_relations_str(sym_arr);
@ -832,7 +828,7 @@ int main(int ac, char **av)
if (conf_get_changed())
res = dialog_yesno(NULL,
_("Do you wish to save your "
"new Buildroot configuration?\n"
"new configuration?\n"
"<ESC><ESC> to continue."),
6, 60);
else
@ -844,20 +840,20 @@ int main(int ac, char **av)
case 0:
if (conf_write(filename)) {
fprintf(stderr, _("\n\n"
"Error during writing of the Buildroot configuration.\n"
"Your Buildroot configuration changes were NOT saved."
"Error while writing of the configuration.\n"
"Your configuration changes were NOT saved."
"\n\n"));
return 1;
}
case -1:
printf(_("\n\n"
"*** End of Buildroot configuration.\n"
"*** Execute 'make' to build Buildroot or try 'make help'."
"*** End of the configuration.\n"
"*** Execute 'make' to start the build or try 'make help'."
"\n\n"));
break;
default:
fprintf(stderr, _("\n\n"
"Your Buildroot configuration changes were NOT saved."
"Your configuration changes were NOT saved."
"\n\n"));
}

View File

@ -10,7 +10,7 @@
#include "lkc.h"
static const char nohelp_text[] = N_(
"There is no help available for this kernel option.\n");
"There is no help available for this option.\n");
struct menu rootmenu;
static struct menu **last_entry_ptr;
@ -138,7 +138,7 @@ struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *e
while (isspace(*prompt))
prompt++;
}
if (current_entry->prompt)
if (current_entry->prompt && current_entry != &rootmenu)
prop_warn(prop, "prompt redefined");
current_entry->prompt = prop;
}
@ -563,7 +563,7 @@ void menu_get_ext_help(struct menu *menu, struct gstr *help)
if (menu_has_help(menu)) {
if (sym->name) {
str_printf(help, "CONFIG_%s:\n\n", sym->name);
str_printf(help, "%s:\n\n", sym->name);
str_append(help, _(menu_get_help(menu)));
str_append(help, "\n");
}

View File

@ -5,25 +5,26 @@
* Derived from menuconfig.
*
*/
#define _GNU_SOURCE
#include <string.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
#include "nconf.h"
#include <ctype.h>
static const char nconf_readme[] = N_(
"Overview\n"
"--------\n"
"Some kernel features may be built directly into the kernel.\n"
"Some may be made into loadable runtime modules. Some features\n"
"may be completely removed altogether. There are also certain\n"
"kernel parameters which are not really features, but must be\n"
"entered in as decimal or hexadecimal numbers or possibly text.\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"
"\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"
" 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"
"\n"
@ -41,9 +42,13 @@ static const char nconf_readme[] = N_(
" pressing <Enter> of <right-arrow>. Use <Esc> or <left-arrow> to go back.\n"
" Submenus are designated by \"--->\".\n"
"\n"
" Shortcut: Press the option's highlighted letter (hotkey).\n"
" Pressing a hotkey more than once will sequence\n"
" through all visible items which use that hotkey.\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"
@ -88,7 +93,7 @@ static const char nconf_readme[] = 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 kernel configurations.\n"
"between different configurations.\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"
@ -121,9 +126,9 @@ static const char nconf_readme[] = N_(
"\n"
"Optional personality available\n"
"------------------------------\n"
"If you prefer to have all of the kernel options listed in a single\n"
"menu, rather than the default multimenu hierarchy, run the nconfig\n"
"with NCONFIG_MODE environment variable set to single_menu. Example:\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"
"\n"
"make NCONFIG_MODE=single_menu nconfig\n"
"\n"
@ -141,21 +146,21 @@ menu_no_f_instructions[] = 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"
" 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 interchangable with <F1>, <2> with <F2>, etc.\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"),
" <Esc> always leaves the current window.\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>, <F3> or <left-arrow> to go back one menu, \n"
" Press <Esc>, <F5> or <left-arrow> to go back one menu,\n"
" <?>, <F1> or <h> for Help, </> for Search.\n"
" <1> is interchangable with <F1>, <2> with <F2>, etc.\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"),
radiolist_instructions[] = N_(
@ -178,19 +183,19 @@ setmod_text[] = N_(
"has been configured as a module.\n"
"As a result, this feature will be built as a module."),
nohelp_text[] = N_(
"There is no help available for this kernel option.\n"),
"There is no help available for this option.\n"),
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."),
load_config_help[] = N_(
"\n"
"For various reasons, one may wish to keep several different kernel\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"
"kernel's default, entering the name of the file here will allow you\n"
"to modify that configuration.\n"
"default one, entering its name here will allow you to modify that\n"
"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"),
@ -199,8 +204,8 @@ save_config_text[] = N_(
"as an alternate. Leave blank to abort."),
save_config_help[] = N_(
"\n"
"For various reasons, one may wish to keep different kernel\n"
"configurations available on a single machine.\n"
"For various reasons, one may wish to keep different configurations\n"
"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"
@ -210,8 +215,8 @@ save_config_help[] = N_(
"leave this blank.\n"),
search_help[] = N_(
"\n"
"Search for CONFIG_ symbols and display their relations.\n"
"Regular expressions are allowed.\n"
"Search for symbols and display their relations. Regular expressions\n"
"are allowed.\n"
"Example: search for \"^FOO\"\n"
"Result:\n"
"-----------------------------------------------------------------\n"
@ -227,7 +232,7 @@ search_help[] = N_(
"Selected by: BAR\n"
"-----------------------------------------------------------------\n"
"o The line 'Prompt:' shows the text used in the menu structure for\n"
" this CONFIG_ symbol\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"
@ -243,16 +248,15 @@ search_help[] = N_(
"Only relevant lines are shown.\n"
"\n\n"
"Search examples:\n"
"Examples: USB = > find all CONFIG_ symbols containing USB\n"
" ^USB => find all CONFIG_ symbols starting with USB\n"
" USB$ => find all CONFIG_ symbols ending with USB\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"
"\n");
struct mitem {
char str[256];
char tag;
void *usrptr;
int is_hot;
int is_visible;
};
@ -275,14 +279,6 @@ static int items_num;
static int global_exit;
/* the currently selected button */
const char *current_instructions = menu_instructions;
/* this array is used to implement hot keys. it is updated in item_make and
* resetted in clean_items. It would be better to use a hash, but lets keep it
* simple... */
#define MAX_SAME_KEY MAX_MENU_ITEMS
struct {
int count;
int ptrs[MAX_MENU_ITEMS];
} hotkeys[1<<(sizeof(char)*8)];
static void conf(struct menu *menu);
static void conf_choice(struct menu *menu);
@ -292,6 +288,7 @@ static void conf_save(void);
static void show_help(struct menu *menu);
static int do_exit(void);
static void setup_windows(void);
static void search_conf(void);
typedef void (*function_key_handler_t)(int *key, struct menu *menu);
static void handle_f1(int *key, struct menu *current_item);
@ -302,6 +299,7 @@ static void handle_f5(int *key, struct menu *current_item);
static void handle_f6(int *key, struct menu *current_item);
static void handle_f7(int *key, struct menu *current_item);
static void handle_f8(int *key, struct menu *current_item);
static void handle_f9(int *key, struct menu *current_item);
struct function_keys {
const char *key_str;
@ -310,7 +308,7 @@ struct function_keys {
function_key_handler_t handler;
};
static const int function_keys_num = 8;
static const int function_keys_num = 9;
struct function_keys function_keys[] = {
{
.key_str = "F1",
@ -320,13 +318,13 @@ struct function_keys function_keys[] = {
},
{
.key_str = "F2",
.func = "Symbol Info",
.func = "Sym Info",
.key = F_SYMBOL,
.handler = handle_f2,
},
{
.key_str = "F3",
.func = "Instructions",
.func = "Insts",
.key = F_INSTS,
.handler = handle_f3,
},
@ -356,9 +354,15 @@ struct function_keys function_keys[] = {
},
{
.key_str = "F8",
.func = "Sym Search",
.key = F_SEARCH,
.handler = handle_f8,
},
{
.key_str = "F9",
.func = "Exit",
.key = F_EXIT,
.handler = handle_f8,
.handler = handle_f9,
},
};
@ -444,8 +448,15 @@ static void handle_f7(int *key, struct menu *current_item)
return;
}
/* exit */
/* search */
static void handle_f8(int *key, struct menu *current_item)
{
search_conf();
return;
}
/* exit */
static void handle_f9(int *key, struct menu *current_item)
{
do_exit();
return;
@ -479,110 +490,44 @@ static void clean_items(void)
free_item(curses_menu_items[i]);
bzero(curses_menu_items, sizeof(curses_menu_items));
bzero(k_menu_items, sizeof(k_menu_items));
bzero(hotkeys, sizeof(hotkeys));
items_num = 0;
}
/* return the index of the next hot item, or -1 if no such item exists */
static int get_next_hot(int c)
typedef enum {MATCH_TINKER_PATTERN_UP, MATCH_TINKER_PATTERN_DOWN,
FIND_NEXT_MATCH_DOWN, FIND_NEXT_MATCH_UP} match_f;
/* return the index of the matched item, or -1 if no such item exists */
static int get_mext_match(const char *match_str, match_f flag)
{
static int hot_index;
static int hot_char;
int match_start = item_index(current_item(curses_menu));
int index;
if (c < 0 || c > 255 || hotkeys[c].count <= 0)
return -1;
if (flag == FIND_NEXT_MATCH_DOWN)
++match_start;
else if (flag == FIND_NEXT_MATCH_UP)
--match_start;
if (hot_char == c) {
hot_index = (hot_index+1)%hotkeys[c].count;
return hotkeys[c].ptrs[hot_index];
} else {
hot_char = c;
hot_index = 0;
return hotkeys[c].ptrs[0];
index = match_start;
index = (index + items_num) % items_num;
while (true) {
char *str = k_menu_items[index].str;
if (strcasestr(str, match_str) != 0)
return index;
if (flag == FIND_NEXT_MATCH_UP ||
flag == MATCH_TINKER_PATTERN_UP)
--index;
else
++index;
index = (index + items_num) % items_num;
if (index == match_start)
return -1;
}
}
/* can the char c be a hot key? no, if c is a common shortcut used elsewhere */
static int canbhot(char c)
{
c = tolower(c);
return isalnum(c) && c != 'y' && c != 'm' && c != 'h' &&
c != 'n' && c != '?';
}
/* check if str already contains a hot key. */
static int is_hot(int index)
{
return k_menu_items[index].is_hot;
}
/* find the first possible hot key, and mark it.
* index is the index of the item in the menu
* return 0 on success*/
static int make_hot(char *dest, int len, const char *org, int index)
{
int position = -1;
int i;
int tmp;
int c;
int org_len = strlen(org);
if (org == NULL || is_hot(index))
return 1;
/* make sure not to make hot keys out of markers.
* find where to start looking for a hot key
*/
i = 0;
/* skip white space */
while (i < org_len && org[i] == ' ')
i++;
if (i == org_len)
return -1;
/* if encountering '(' or '<' or '[', find the match and look from there
**/
if (org[i] == '[' || org[i] == '<' || org[i] == '(') {
i++;
for (; i < org_len; i++)
if (org[i] == ']' || org[i] == '>' || org[i] == ')')
break;
}
if (i == org_len)
return -1;
for (; i < org_len; i++) {
if (canbhot(org[i]) && org[i-1] != '<' && org[i-1] != '(') {
position = i;
break;
}
}
if (position == -1)
return 1;
/* ok, char at org[position] should be a hot key to this item */
c = tolower(org[position]);
tmp = hotkeys[c].count;
hotkeys[c].ptrs[tmp] = index;
hotkeys[c].count++;
/*
snprintf(dest, len, "%.*s(%c)%s", position, org, org[position],
&org[position+1]);
*/
/* make org[position] uppercase, and all leading letter small case */
strncpy(dest, org, len);
for (i = 0; i < position; i++)
dest[i] = tolower(dest[i]);
dest[position] = toupper(dest[position]);
k_menu_items[index].is_hot = 1;
return 0;
}
/* Make a new item. Add a hotkey mark in the first possible letter.
* As ncurses does not allow any attributes inside menue item, we mark the
* hot key as the first capitalized letter in the string */
/* Make a new item. */
static void item_make(struct menu *menu, char tag, const char *fmt, ...)
{
va_list ap;
char tmp_str[256];
if (items_num > MAX_MENU_ITEMS-1)
return;
@ -597,16 +542,13 @@ static void item_make(struct menu *menu, char tag, const char *fmt, ...)
k_menu_items[items_num].is_visible = 1;
va_start(ap, fmt);
vsnprintf(tmp_str, sizeof(tmp_str), fmt, ap);
if (!k_menu_items[items_num].is_visible)
memcpy(tmp_str, "XXX", 3);
vsnprintf(k_menu_items[items_num].str,
sizeof(k_menu_items[items_num].str),
fmt, ap);
va_end(ap);
if (make_hot(
k_menu_items[items_num].str,
sizeof(k_menu_items[items_num].str), tmp_str, items_num) != 0)
strncpy(k_menu_items[items_num].str,
tmp_str,
sizeof(k_menu_items[items_num].str));
if (!k_menu_items[items_num].is_visible)
memcpy(k_menu_items[items_num].str, "XXX", 3);
curses_menu_items[items_num] = new_item(
k_menu_items[items_num].str,
@ -638,11 +580,9 @@ static void item_add_str(const char *fmt, ...)
va_end(ap);
snprintf(tmp_str, sizeof(tmp_str), "%s%s",
k_menu_items[index].str, new_str);
if (make_hot(k_menu_items[index].str,
sizeof(k_menu_items[index].str), tmp_str, index) != 0)
strncpy(k_menu_items[index].str,
tmp_str,
sizeof(k_menu_items[index].str));
strncpy(k_menu_items[index].str,
tmp_str,
sizeof(k_menu_items[index].str));
free_item(curses_menu_items[index]);
curses_menu_items[index] = new_item(
@ -693,13 +633,9 @@ static char menu_backtitle[PATH_MAX+128];
static const char *set_config_filename(const char *config_filename)
{
int size;
struct symbol *sym;
sym = sym_lookup("KERNELVERSION", 0);
sym_calc_value(sym);
size = snprintf(menu_backtitle, sizeof(menu_backtitle),
_("%s - Linux Kernel v%s Configuration"),
config_filename, sym_get_string_value(sym));
"%s - %s", config_filename, rootmenu.prompt->text);
if (size >= sizeof(menu_backtitle))
menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
@ -709,25 +645,6 @@ static const char *set_config_filename(const char *config_filename)
return menu_backtitle;
}
/* command = 0 is supress, 1 is restore */
static void supress_stdout(int command)
{
static FILE *org_stdout;
static FILE *org_stderr;
if (command == 0) {
org_stdout = stdout;
org_stderr = stderr;
stdout = fopen("/dev/null", "a");
stderr = fopen("/dev/null", "a");
} else {
fclose(stdout);
fclose(stderr);
stdout = org_stdout;
stderr = org_stderr;
}
}
/* return = 0 means we are successful.
* -1 means go on doing what you were doing
*/
@ -739,8 +656,7 @@ static int do_exit(void)
return 0;
}
res = btn_dialog(main_window,
_("Do you wish to save your "
"new kernel configuration?\n"
_("Do you wish to save your new configuration?\n"
"<ESC> to cancel and resume nconfig."),
2,
" <save> ",
@ -753,36 +669,19 @@ static int do_exit(void)
/* if we got here, the user really wants to exit */
switch (res) {
case 0:
supress_stdout(0);
res = conf_write(filename);
supress_stdout(1);
if (res)
btn_dialog(
main_window,
_("Error during writing of the kernel "
"configuration.\n"
"Your kernel configuration "
"changes were NOT saved."),
_("Error during writing of configuration.\n"
"Your configuration changes were NOT saved."),
1,
"<OK>");
else {
char buf[1024];
snprintf(buf, 1024,
_("Configuration written to %s\n"
"End of Linux kernel configuration.\n"
"Execute 'make' to build the kernel or try"
" 'make help'."), filename);
btn_dialog(
main_window,
buf,
1,
"<OK>");
}
break;
default:
btn_dialog(
main_window,
_("Your kernel configuration changes were NOT saved."),
_("Your configuration changes were NOT saved."),
1,
"<OK>");
break;
@ -802,8 +701,8 @@ static void search_conf(void)
again:
dres = dialog_inputbox(main_window,
_("Search Configuration Parameter"),
_("Enter CONFIG_ (sub)string to search for "
"(with or without \"CONFIG\")"),
_("Enter " CONFIG_ " (sub)string to search for "
"(with or without \"" CONFIG_ "\")"),
"", dialog_input_result, 99);
switch (dres) {
case 0:
@ -816,10 +715,10 @@ again:
return;
}
/* strip CONFIG_ if necessary */
/* strip the prefix if necessary */
dialog_input = dialog_input_result;
if (strncasecmp(dialog_input_result, "CONFIG_", 7) == 0)
dialog_input += 7;
if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
dialog_input += strlen(CONFIG_);
sym_arr = sym_re_search(dialog_input);
res = get_relations_str(sym_arr);
@ -1027,23 +926,18 @@ static void reset_menu(void)
static void center_item(int selected_index, int *last_top_row)
{
int toprow;
int maxy, maxx;
scale_menu(curses_menu, &maxy, &maxx);
set_top_row(curses_menu, *last_top_row);
toprow = top_row(curses_menu);
if (selected_index >= toprow && selected_index < toprow+maxy) {
/* we can only move the selected item. no need to scroll */
set_current_item(curses_menu,
curses_menu_items[selected_index]);
} else {
toprow = max(selected_index-maxy/2, 0);
if (toprow >= item_count(curses_menu)-maxy)
if (selected_index < toprow ||
selected_index >= toprow+mwin_max_lines) {
toprow = max(selected_index-mwin_max_lines/2, 0);
if (toprow >= item_count(curses_menu)-mwin_max_lines)
toprow = item_count(curses_menu)-mwin_max_lines;
set_top_row(curses_menu, toprow);
set_current_item(curses_menu,
curses_menu_items[selected_index]);
}
set_current_item(curses_menu,
curses_menu_items[selected_index]);
*last_top_row = toprow;
post_menu(curses_menu);
refresh_all_windows(main_window);
@ -1075,7 +969,7 @@ static void show_menu(const char *prompt, const char *instructions,
/* position the menu at the middle of the screen */
scale_menu(curses_menu, &maxy, &maxx);
maxx = min(maxx, mwin_max_cols-2);
maxy = mwin_max_lines-2;
maxy = mwin_max_lines;
menu_window = derwin(main_window,
maxy,
maxx,
@ -1099,10 +993,77 @@ static void show_menu(const char *prompt, const char *instructions,
refresh_all_windows(main_window);
}
static void adj_match_dir(match_f *match_direction)
{
if (*match_direction == FIND_NEXT_MATCH_DOWN)
*match_direction =
MATCH_TINKER_PATTERN_DOWN;
else if (*match_direction == FIND_NEXT_MATCH_UP)
*match_direction =
MATCH_TINKER_PATTERN_UP;
/* else, do no change.. */
}
struct match_state
{
int in_search;
match_f match_direction;
char pattern[256];
};
/* Return 0 means I have handled the key. In such a case, ans should hold the
* item to center, or -1 otherwise.
* Else return -1 .
*/
static int do_match(int key, struct match_state *state, int *ans)
{
char c = (char) key;
int terminate_search = 0;
*ans = -1;
if (key == '/' || (state->in_search && key == 27)) {
move(0, 0);
refresh();
clrtoeol();
state->in_search = 1-state->in_search;
bzero(state->pattern, sizeof(state->pattern));
state->match_direction = MATCH_TINKER_PATTERN_DOWN;
return 0;
} else if (!state->in_search)
return 1;
if (isalnum(c) || isgraph(c) || c == ' ') {
state->pattern[strlen(state->pattern)] = c;
state->pattern[strlen(state->pattern)] = '\0';
adj_match_dir(&state->match_direction);
*ans = get_mext_match(state->pattern,
state->match_direction);
} else if (key == KEY_DOWN) {
state->match_direction = FIND_NEXT_MATCH_DOWN;
*ans = get_mext_match(state->pattern,
state->match_direction);
} else if (key == KEY_UP) {
state->match_direction = FIND_NEXT_MATCH_UP;
*ans = get_mext_match(state->pattern,
state->match_direction);
} else if (key == KEY_BACKSPACE || key == 127) {
state->pattern[strlen(state->pattern)-1] = '\0';
adj_match_dir(&state->match_direction);
} else
terminate_search = 1;
if (terminate_search) {
state->in_search = 0;
bzero(state->pattern, sizeof(state->pattern));
move(0, 0);
refresh();
clrtoeol();
return -1;
}
return 0;
}
static void conf(struct menu *menu)
{
char pattern[256];
struct menu *submenu = 0;
const char *prompt = menu_get_prompt(menu);
struct symbol *sym;
@ -1110,8 +1071,11 @@ static void conf(struct menu *menu)
int res;
int current_index = 0;
int last_top_row = 0;
bzero(pattern, sizeof(pattern));
struct match_state match_state = {
.in_search = 0,
.match_direction = MATCH_TINKER_PATTERN_DOWN,
.pattern = "",
};
while (!global_exit) {
reset_menu();
@ -1124,7 +1088,22 @@ static void conf(struct menu *menu)
_(menu_instructions),
current_index, &last_top_row);
keypad((menu_win(curses_menu)), TRUE);
while (!global_exit && (res = wgetch(menu_win(curses_menu)))) {
while (!global_exit) {
if (match_state.in_search) {
mvprintw(0, 0,
"searching: %s", match_state.pattern);
clrtoeol();
}
refresh_all_windows(main_window);
res = wgetch(menu_win(curses_menu));
if (!res)
break;
if (do_match(res, &match_state, &current_index) == 0) {
if (current_index != -1)
center_item(current_index,
&last_top_row);
continue;
}
if (process_special_keys(&res,
(struct menu *) item_data()))
break;
@ -1155,19 +1134,13 @@ static void conf(struct menu *menu)
if (res == 10 || res == 27 ||
res == 32 || res == 'n' || res == 'y' ||
res == KEY_LEFT || res == KEY_RIGHT ||
res == 'm' || res == '/')
res == 'm')
break;
else if (canbhot(res)) {
/* check for hot keys: */
int tmp = get_next_hot(res);
if (tmp != -1)
center_item(tmp, &last_top_row);
}
refresh_all_windows(main_window);
}
refresh_all_windows(main_window);
/* if ESC or left*/
/* if ESC or left*/
if (res == 27 || (menu != &rootmenu && res == KEY_LEFT))
break;
@ -1235,23 +1208,30 @@ static void conf(struct menu *menu)
if (item_is_tag('t'))
sym_set_tristate_value(sym, mod);
break;
case '/':
search_conf();
break;
}
}
}
static void conf_message_callback(const char *fmt, va_list ap)
{
char buf[1024];
vsnprintf(buf, sizeof(buf), fmt, ap);
btn_dialog(main_window, buf, 1, "<OK>");
}
static void show_help(struct menu *menu)
{
struct gstr help = str_new();
if (menu && menu->sym && menu_has_help(menu)) {
if (menu->sym->name) {
str_printf(&help, "CONFIG_%s:\n\n", menu->sym->name);
str_printf(&help, "%s%s:\n\n", CONFIG_, menu->sym->name);
str_append(&help, _(menu_get_help(menu)));
str_append(&help, "\n");
get_symbol_str(&help, menu->sym);
} else {
str_append(&help, _(menu_get_help(menu)));
}
} else {
str_append(&help, nohelp_text);
@ -1268,6 +1248,11 @@ static void conf_choice(struct menu *menu)
int selected_index = 0;
int last_top_row = 0;
int res, i = 0;
struct match_state match_state = {
.in_search = 0,
.match_direction = MATCH_TINKER_PATTERN_DOWN,
.pattern = "",
};
active = sym_get_choice_value(menu->sym);
/* this is mostly duplicated from the conf() function. */
@ -1294,7 +1279,22 @@ static void conf_choice(struct menu *menu)
_(radiolist_instructions),
selected_index,
&last_top_row);
while (!global_exit && (res = wgetch(menu_win(curses_menu)))) {
while (!global_exit) {
if (match_state.in_search) {
mvprintw(0, 0, "searching: %s",
match_state.pattern);
clrtoeol();
}
refresh_all_windows(main_window);
res = wgetch(menu_win(curses_menu));
if (!res)
break;
if (do_match(res, &match_state, &selected_index) == 0) {
if (selected_index != -1)
center_item(selected_index,
&last_top_row);
continue;
}
if (process_special_keys(
&res,
(struct menu *) item_data()))
@ -1324,13 +1324,8 @@ static void conf_choice(struct menu *menu)
break;
}
if (res == 10 || res == 27 || res == ' ' ||
res == KEY_LEFT)
res == KEY_LEFT){
break;
else if (canbhot(res)) {
/* check for hot keys: */
int tmp = get_next_hot(res);
if (tmp != -1)
center_item(tmp, &last_top_row);
}
refresh_all_windows(main_window);
}
@ -1449,16 +1444,8 @@ static void conf_save(void)
case 0:
if (!dialog_input_result[0])
return;
supress_stdout(0);
res = conf_write(dialog_input_result);
supress_stdout(1);
if (!res) {
char buf[1024];
sprintf(buf, "%s %s",
_("configuration file saved to: "),
dialog_input_result);
btn_dialog(main_window,
buf, 1, "<OK>");
set_config_filename(dialog_input_result);
return;
}
@ -1485,7 +1472,7 @@ void setup_windows(void)
/* set up the menu and menu window */
main_window = newwin(LINES-2, COLS-2, 2, 1);
keypad(main_window, TRUE);
mwin_max_lines = LINES-6;
mwin_max_lines = LINES-7;
mwin_max_cols = COLS-6;
/* panels order is from bottom to top */
@ -1532,9 +1519,10 @@ int main(int ac, char **av)
/* set btns menu */
curses_menu = new_menu(curses_menu_items);
menu_opts_off(curses_menu, O_SHOWDESC);
menu_opts_off(curses_menu, O_SHOWMATCH);
menu_opts_on(curses_menu, O_SHOWMATCH);
menu_opts_on(curses_menu, O_ONEVALUE);
menu_opts_on(curses_menu, O_NONCYCLIC);
menu_opts_on(curses_menu, O_IGNORECASE);
set_menu_mark(curses_menu, " ");
set_menu_fore(curses_menu, attributes[MAIN_MENU_FORE]);
set_menu_back(curses_menu, attributes[MAIN_MENU_BACK]);
@ -1550,8 +1538,7 @@ int main(int ac, char **av)
_(menu_no_f_instructions));
}
conf_set_message_callback(conf_message_callback);
/* do the work */
while (!global_exit) {
conf(&rootmenu);

View File

@ -137,7 +137,7 @@ void set_colors()
if (has_colors()) {
normal_color_theme();
} else {
/* give deafults */
/* give defaults */
no_colors_theme();
}
}
@ -167,7 +167,7 @@ void print_in_middle(WINDOW *win,
length = strlen(string);
temp = (width - length) / 2;
x = startx + (int)temp;
wattrset(win, color);
(void) wattrset(win, color);
mvwprintw(win, y, x, "%s", string);
refresh();
}
@ -297,11 +297,11 @@ int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...)
set_menu_fore(menu, attributes[DIALOG_MENU_FORE]);
set_menu_back(menu, attributes[DIALOG_MENU_BACK]);
wattrset(win, attributes[DIALOG_BOX]);
(void) wattrset(win, attributes[DIALOG_BOX]);
box(win, 0, 0);
/* print message */
wattrset(msg_win, attributes[DIALOG_TEXT]);
(void) wattrset(msg_win, attributes[DIALOG_TEXT]);
fill_window(msg_win, msg);
set_menu_win(menu, win);
@ -392,16 +392,16 @@ int dialog_inputbox(WINDOW *main_window,
form_win = derwin(win, 1, prompt_width, prompt_lines+3, 2);
keypad(form_win, TRUE);
wattrset(form_win, attributes[INPUT_FIELD]);
(void) wattrset(form_win, attributes[INPUT_FIELD]);
wattrset(win, attributes[INPUT_BOX]);
(void) wattrset(win, attributes[INPUT_BOX]);
box(win, 0, 0);
wattrset(win, attributes[INPUT_HEADING]);
(void) wattrset(win, attributes[INPUT_HEADING]);
if (title)
mvwprintw(win, 0, 3, "%s", title);
/* print message */
wattrset(prompt_win, attributes[INPUT_TEXT]);
(void) wattrset(prompt_win, attributes[INPUT_TEXT]);
fill_window(prompt_win, prompt);
mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
@ -531,7 +531,7 @@ void show_scroll_win(WINDOW *main_window,
/* create the pad */
pad = newpad(total_lines+10, total_cols+10);
wattrset(pad, attributes[SCROLLWIN_TEXT]);
(void) wattrset(pad, attributes[SCROLLWIN_TEXT]);
fill_window(pad, text);
win_lines = min(total_lines+4, LINES-2);
@ -546,9 +546,9 @@ void show_scroll_win(WINDOW *main_window,
win = newwin(win_lines, win_cols, y, x);
keypad(win, TRUE);
/* show the help in the help window, and show the help panel */
wattrset(win, attributes[SCROLLWIN_BOX]);
(void) wattrset(win, attributes[SCROLLWIN_BOX]);
box(win, 0, 0);
wattrset(win, attributes[SCROLLWIN_HEADING]);
(void) wattrset(win, attributes[SCROLLWIN_HEADING]);
mvwprintw(win, 0, 3, " %s ", title);
panel = new_panel(win);

View File

@ -69,7 +69,8 @@ typedef enum {
F_BACK = 5,
F_SAVE = 6,
F_LOAD = 7,
F_EXIT = 8
F_SEARCH = 8,
F_EXIT = 9,
} function_key;
void set_colors(void);

View File

@ -1,134 +1,15 @@
---
conf.c | 12 ++++++------
confdata.c | 14 +++++++-------
gconf.c | 4 ++--
gconf.glade | 2 +-
mconf.c | 38 ++++++++++++++++++--------------------
qconf.cc | 4 ++--
mconf.c | 4 ++--
zconf.tab.c_shipped | 2 +-
zconf.y | 2 +-
8 files changed, 38 insertions(+), 40 deletions(-)
4 files changed, 5 insertions(+), 5 deletions(-)
Index: config/conf.c
===================================================================
--- config.orig/conf.c
+++ config/conf.c
@@ -508,8 +508,8 @@
name = conf_get_configname();
if (stat(name, &tmpstat)) {
fprintf(stderr, _("***\n"
- "*** You have not yet configured your kernel!\n"
- "*** (missing kernel config file \"%s\")\n"
+ "*** You have not yet configured your Buildroot!\n"
+ "*** (missing .config file \"%s\")\n"
"***\n"
"*** Please run some configurator (e.g. \"make oldconfig\" or\n"
"*** \"make menuconfig\" or \"make xconfig\").\n"
@@ -571,7 +571,7 @@
name = getenv("KCONFIG_NOSILENTUPDATE");
if (name && *name) {
fprintf(stderr,
- _("\n*** Kernel configuration requires explicit update.\n\n"));
+ _("\n*** Buildroot configuration requires explicit update.\n\n"));
return 1;
}
}
@@ -623,11 +623,11 @@
* All other commands are only used to generate a config.
*/
if (conf_get_changed() && conf_write(NULL)) {
- fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
+ fprintf(stderr, _("\n*** Error during writing of the Buildroot configuration.\n\n"));
exit(1);
}
if (conf_write_autoconf()) {
- fprintf(stderr, _("\n*** Error during update of the kernel configuration.\n\n"));
+ fprintf(stderr, _("\n*** Error during update of the Buildroot configuration.\n\n"));
return 1;
}
} else if (input_mode == savedefconfig) {
@@ -638,7 +638,7 @@
}
} else if (input_mode != listnewconfig) {
if (conf_write(NULL)) {
- fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
+ fprintf(stderr, _("\n*** Error during writing of the Buildroot configuration.\n\n"));
exit(1);
}
}
Index: config/confdata.c
===================================================================
--- config.orig/confdata.c
+++ config/confdata.c
@@ -581,7 +581,7 @@
if (!out)
return 1;
- sym = sym_lookup("KERNELVERSION", 0);
+ sym = sym_lookup("BR2_VERSION", 0);
sym_calc_value(sym);
time(&now);
env = getenv("KCONFIG_NOTIMESTAMP");
@@ -590,7 +590,7 @@
fprintf(out, _("#\n"
"# Automatically generated make config: don't edit\n"
- "# Linux kernel version: %s\n"
+ "# Buildroot version: %s\n"
"%s%s"
"#\n"),
sym_get_string_value(sym),
@@ -804,25 +804,25 @@
return 1;
}
- sym = sym_lookup("KERNELVERSION", 0);
+ sym = sym_lookup("BR2_VERSION", 0);
sym_calc_value(sym);
time(&now);
fprintf(out, "#\n"
"# Automatically generated make config: don't edit\n"
- "# Linux kernel version: %s\n"
+ "# Buildroot version: %s\n"
"# %s"
"#\n",
- sym_get_string_value(sym), ctime(&now));
+ sym_get_string_value(sym),
+ ctime(&now));
fprintf(tristate, "#\n"
"# Automatically generated - do not edit\n"
"\n");
fprintf(out_h, "/*\n"
" * Automatically generated C config: don't edit\n"
- " * Linux kernel version: %s\n"
" * %s"
" */\n"
"#define AUTOCONF_INCLUDED\n",
- sym_get_string_value(sym), ctime(&now));
+ ctime(&now));
for_all_symbols(i, sym) {
sym_calc_value(sym);
Index: config/gconf.c
===================================================================
--- config.orig/gconf.c
+++ config/gconf.c
@@ -210,8 +210,8 @@
/*"style", PANGO_STYLE_OBLIQUE, */
NULL);
- sprintf(title, _("Linux Kernel v%s Configuration"),
- getenv("KERNELVERSION"));
+ sprintf(title, _("Buildroot v%s Configuration"),
+ getenv("BR2_VERSION"));
gtk_window_set_title(GTK_WINDOW(main_wnd), title);
gtk_widget_show(main_wnd);
Index: config/gconf.glade
===================================================================
--- config.orig/gconf.glade
+++ config/gconf.glade
@@ -5,7 +5,7 @@
@@ -4,7 +4,7 @@
<widget class="GtkWindow" id="window1">
<property name="visible">True</property>
@ -141,38 +22,7 @@ Index: config/mconf.c
===================================================================
--- config.orig/mconf.c
+++ config/mconf.c
@@ -25,10 +25,9 @@
static const char mconf_readme[] = N_(
"Overview\n"
"--------\n"
-"Some kernel features may be built directly into the kernel.\n"
-"Some may be made into loadable runtime modules. Some features\n"
+"Some features may be built directly into Buildroot. Some features\n"
"may be completely removed altogether. There are also certain\n"
-"kernel parameters which are not really features, but must be\n"
+"parameters which are not really features, but must be\n"
"entered in as decimal or hexadecimal numbers or possibly text.\n"
"\n"
"Menu items beginning with following braces represent features that\n"
@@ -117,7 +116,7 @@
"-----------------------------\n"
"Menuconfig supports the use of alternate configuration files for\n"
"those who, for various reasons, find it necessary to switch\n"
-"between different kernel configurations.\n"
+"between different configurations.\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"
@@ -150,7 +149,7 @@
"\n"
"Optional personality available\n"
"------------------------------\n"
-"If you prefer to have all of the kernel options listed in a single\n"
+"If you prefer to have all of the options listed in a single\n"
"menu, rather than the default multimenu hierarchy, run the menuconfig\n"
"with MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
"\n"
@@ -180,9 +179,9 @@
@@ -178,9 +178,9 @@
"Arrow keys navigate the menu. "
"<Enter> selects submenus --->. "
"Highlighted letters are hotkeys. "
@ -184,107 +34,11 @@ Index: config/mconf.c
radiolist_instructions[] = N_(
"Use the arrow keys to navigate this window or "
"press the hotkey of the item you wish to select "
@@ -207,11 +206,11 @@
"last retrieved. Leave blank to abort."),
load_config_help[] = N_(
"\n"
- "For various reasons, one may wish to keep several different kernel\n"
+ "For various reasons, one may wish to keep several different Buildroot\n"
"configurations available on a single machine.\n"
"\n"
"If you have saved a previous configuration in a file other than the\n"
- "kernel's default, entering the name of the file here will allow you\n"
+ "Buildroot's default, entering the name of the file here will allow you\n"
"to modify that configuration.\n"
"\n"
"If you are uncertain, then you have probably never used alternate\n"
@@ -221,7 +220,7 @@
"as an alternate. Leave blank to abort."),
save_config_help[] = N_(
"\n"
- "For various reasons, one may wish to keep different kernel\n"
+ "For various reasons, one may wish to keep different Buildroot\n"
"configurations available on a single machine.\n"
"\n"
"Entering a file name here will allow you to later retrieve, modify\n"
@@ -292,10 +291,10 @@
int size;
struct symbol *sym;
- sym = sym_lookup("KERNELVERSION", 0);
+ sym = sym_lookup("BR2_VERSION", 0);
sym_calc_value(sym);
size = snprintf(menu_backtitle, sizeof(menu_backtitle),
- _("%s - Linux Kernel v%s Configuration"),
+ _("%s - buildroot v%s Configuration"),
config_filename, sym_get_string_value(sym));
if (size >= sizeof(menu_backtitle))
menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
@@ -316,8 +315,7 @@
again:
dialog_clear();
dres = dialog_inputbox(_("Search Configuration Parameter"),
- _("Enter CONFIG_ (sub)string to search for "
- "(with or without \"CONFIG\")"),
+ _("Enter (sub)string to search for"),
10, 75, "");
switch (dres) {
case 0:
@@ -834,7 +832,7 @@
if (conf_get_changed())
res = dialog_yesno(NULL,
_("Do you wish to save your "
- "new kernel configuration?\n"
+ "new Buildroot configuration?\n"
"<ESC><ESC> to continue."),
6, 60);
else
@@ -846,20 +844,20 @@
case 0:
if (conf_write(filename)) {
fprintf(stderr, _("\n\n"
- "Error during writing of the kernel configuration.\n"
- "Your kernel configuration changes were NOT saved."
+ "Error during writing of the Buildroot configuration.\n"
+ "Your Buildroot configuration changes were NOT saved."
"\n\n"));
return 1;
}
case -1:
printf(_("\n\n"
- "*** End of Linux kernel configuration.\n"
- "*** Execute 'make' to build the kernel or try 'make help'."
+ "*** End of Buildroot configuration.\n"
+ "*** Execute 'make' to build Buildroot or try 'make help'."
"\n\n"));
break;
default:
fprintf(stderr, _("\n\n"
- "Your kernel configuration changes were NOT saved."
+ "Your Buildroot configuration changes were NOT saved."
"\n\n"));
}
Index: config/qconf.cc
===================================================================
--- config.orig/qconf.cc
+++ config/qconf.cc
@@ -1263,8 +1263,8 @@
char title[256];
QDesktopWidget *d = configApp->desktop();
- snprintf(title, sizeof(title), _("Linux Kernel v%s Configuration"),
- getenv("KERNELVERSION"));
+ snprintf(title, sizeof(title), _("Buildroot v%s Configuration"),
+ getenv("BR2_VERSION"));
setCaption(title);
width = configSettings->readNumEntry("/window width", d->width() - 64);
Index: config/zconf.tab.c_shipped
===================================================================
--- config.orig/zconf.tab.c_shipped
+++ config/zconf.tab.c_shipped
@@ -2224,7 +2224,7 @@
@@ -2239,7 +2239,7 @@
modules_sym = sym_lookup(NULL, 0);
modules_sym->type = S_BOOLEAN;
modules_sym->flags |= SYMBOL_AUTO;
@ -297,7 +51,7 @@ Index: config/zconf.y
===================================================================
--- config.orig/zconf.y
+++ config/zconf.y
@@ -479,7 +479,7 @@
@@ -487,7 +487,7 @@
modules_sym = sym_lookup(NULL, 0);
modules_sym->type = S_BOOLEAN;
modules_sym->flags |= SYMBOL_AUTO;

View File

@ -1,12 +1,14 @@
---
confdata.c | 49 +++++++++++++++++++++++--------------------------
1 file changed, 23 insertions(+), 26 deletions(-)
confdata.c | 57 +++++++++++++++++++++++++++++----------------------------
lkc.h | 2 +-
menu.c | 2 +-
3 files changed, 31 insertions(+), 30 deletions(-)
Index: config/confdata.c
===================================================================
--- config.orig/confdata.c
+++ config/confdata.c
@@ -11,6 +11,7 @@
@@ -12,6 +12,7 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
@ -14,7 +16,7 @@ Index: config/confdata.c
#define LKC_DIRECT_LINK
#include "lkc.h"
@@ -21,7 +22,7 @@
@@ -25,7 +26,7 @@
static const char *conf_filename;
static int conf_lineno, conf_warnings, conf_unsaved;
@ -23,7 +25,7 @@ Index: config/confdata.c
static void conf_warning(const char *fmt, ...)
{
@@ -36,7 +37,7 @@
@@ -63,7 +64,7 @@
const char *conf_get_configname(void)
{
@ -32,14 +34,11 @@ Index: config/confdata.c
return name ? name : ".config";
}
@@ -222,22 +223,22 @@
sym = NULL;
switch (line[0]) {
case '#':
- if (memcmp(line + 2, "CONFIG_", 7))
+ if (line[1]!=' ')
@@ -249,20 +250,20 @@
if (line[0] == '#') {
if (memcmp(line + 2, CONFIG_, strlen(CONFIG_)))
continue;
- p = strchr(line + 9, ' ');
- p = strchr(line + 2 + strlen(CONFIG_), ' ');
+ p = strchr(line + 2, ' ');
if (!p)
continue;
@ -47,118 +46,153 @@ Index: config/confdata.c
if (strncmp(p, "is not set", 10))
continue;
if (def == S_DEF_USER) {
- sym = sym_find(line + 9);
- sym = sym_find(line + 2 + strlen(CONFIG_));
+ sym = sym_find(line + 2);
if (!sym) {
sym_add_change_count(1);
break;
goto setsym;
}
} else {
- sym = sym_lookup(line + 9, 0);
- sym = sym_lookup(line + 2 + strlen(CONFIG_), 0);
+ sym = sym_lookup(line + 2, 0);
if (sym->type == S_UNKNOWN)
sym->type = S_BOOLEAN;
}
@@ -254,12 +255,8 @@
@@ -278,8 +279,8 @@
default:
;
}
break;
- case 'C':
- if (memcmp(line, "CONFIG_", 7)) {
- conf_warning("unexpected data");
- continue;
- }
- p = strchr(line + 7, '=');
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
- } else if (memcmp(line, CONFIG_, strlen(CONFIG_)) == 0) {
- p = strchr(line + strlen(CONFIG_), '=');
+ } else if (isupper(line[0])) {
+ p = strchr(line, '=');
if (!p)
continue;
*p++ = 0;
@@ -270,13 +267,13 @@
@@ -290,13 +291,13 @@
*p2 = 0;
}
if (def == S_DEF_USER) {
- sym = sym_find(line + 7);
- sym = sym_find(line + strlen(CONFIG_));
+ sym = sym_find(line);
if (!sym) {
sym_add_change_count(1);
break;
goto setsym;
}
} else {
- sym = sym_lookup(line + 7, 0);
- sym = sym_lookup(line + strlen(CONFIG_), 0);
+ sym = sym_lookup(line, 0);
if (sym->type == S_UNKNOWN)
sym->type = S_OTHER;
}
@@ -405,9 +402,9 @@
@@ -423,9 +424,9 @@
{
int l;
if (headerfile)
- fprintf(out, "#define CONFIG_%s \"", name);
- fprintf(out, "#define %s%s \"", CONFIG_, name);
+ fprintf(out, "#define %s \"", name);
else
- fprintf(out, "CONFIG_%s=\"", name);
- fprintf(out, "%s%s=\"", CONFIG_, name);
+ fprintf(out, "%s=\"", name);
while (1) {
l = strcspn(str, "\"\\");
@@ -433,13 +430,13 @@
@@ -451,14 +452,14 @@
switch (sym_get_tristate_value(sym)) {
case no:
if (write_no)
- fprintf(out, "# CONFIG_%s is not set\n", sym->name);
+ fprintf(out, "# %s is not set\n", sym->name);
- fprintf(out, "# %s%s is not set\n",
- CONFIG_, sym->name);
+ fprintf(out, "# %s is not set\n",
+ sym->name);
break;
case mod:
- fprintf(out, "CONFIG_%s=m\n", sym->name);
- fprintf(out, "%s%s=m\n", CONFIG_, sym->name);
+ fprintf(out, "%s=m\n", sym->name);
break;
case yes:
- fprintf(out, "CONFIG_%s=y\n", sym->name);
- fprintf(out, "%s%s=y\n", CONFIG_, sym->name);
+ fprintf(out, "%s=y\n", sym->name);
break;
}
break;
@@ -449,7 +446,7 @@
@@ -468,7 +469,7 @@
case S_HEX:
case S_INT:
str = sym_get_string_value(sym);
- fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
- fprintf(out, "%s%s=%s\n", CONFIG_, sym->name, str);
+ fprintf(out, "%s=%s\n", sym->name, str);
break;
case S_OTHER:
case S_UNKNOWN:
@@ -840,14 +837,14 @@
@@ -853,17 +854,17 @@
case no:
break;
case mod:
- fprintf(tristate, "CONFIG_%s=M\n", sym->name);
- fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name);
+ fprintf(tristate, "%s=M\n", sym->name);
+ fprintf(out_h, "#define %s_MODULE 1\n", sym->name);
- fprintf(tristate, "%s%s=M\n",
- CONFIG_, sym->name);
- fprintf(out_h, "#define %s%s_MODULE 1\n",
- CONFIG_, sym->name);
+ fprintf(tristate, "%s=M\n",
+ sym->name);
+ fprintf(out_h, "#define %s_MODULE 1\n",
+ sym->name);
break;
case yes:
if (sym->type == S_TRISTATE)
- fprintf(tristate, "CONFIG_%s=Y\n",
+ fprintf(tristate, "%s=Y\n",
sym->name);
- fprintf(out_h, "#define CONFIG_%s 1\n", sym->name);
+ fprintf(out_h, "#define %s 1\n", sym->name);
- fprintf(tristate,"%s%s=Y\n",
- CONFIG_, sym->name);
- fprintf(out_h, "#define %s%s 1\n",
- CONFIG_, sym->name);
+ fprintf(tristate,"%s=Y\n",
+ sym->name);
+ fprintf(out_h, "#define %s 1\n",
+ sym->name);
break;
}
break;
@@ -857,12 +854,12 @@
@@ -873,14 +874,14 @@
case S_HEX:
str = sym_get_string_value(sym);
if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
- fprintf(out_h, "#define CONFIG_%s 0x%s\n", sym->name, str);
+ fprintf(out_h, "#define %s 0x%s\n", sym->name, str);
- fprintf(out_h, "#define %s%s 0x%s\n",
- CONFIG_, sym->name, str);
+ fprintf(out_h, "#define %s 0x%s\n",
+ sym->name, str);
break;
}
case S_INT:
str = sym_get_string_value(sym);
- fprintf(out_h, "#define CONFIG_%s %s\n", sym->name, str);
+ fprintf(out_h, "#define %s %s\n", sym->name, str);
- fprintf(out_h, "#define %s%s %s\n",
- CONFIG_, sym->name, str);
+ fprintf(out_h, "#define %s %s\n",
+ sym->name, str);
break;
default:
break;
Index: config/lkc.h
===================================================================
--- config.orig/lkc.h
+++ config/lkc.h
@@ -41,7 +41,7 @@
#define N_(text) (text)
#ifndef CONFIG_
-#define CONFIG_ "CONFIG_"
+#define CONFIG_ "BR2_"
#endif
#define TF_COMMAND 0x0001
Index: config/menu.c
===================================================================
--- config.orig/menu.c
+++ config/menu.c
@@ -563,7 +563,7 @@
if (menu_has_help(menu)) {
if (sym->name) {
- str_printf(help, "%s%s:\n\n", CONFIG_, sym->name);
+ str_printf(help, "%s:\n\n", sym->name);
str_append(help, _(menu_get_help(menu)));
str_append(help, "\n");
}

View File

@ -6,7 +6,7 @@ Index: config/Makefile
===================================================================
--- config.orig/Makefile
+++ config/Makefile
@@ -199,10 +199,16 @@
@@ -196,10 +196,16 @@
gconf-objs := gconf.o kconfig_load.o zconf.tab.o
endif

View File

@ -6,7 +6,7 @@ Index: config/Makefile
===================================================================
--- config.orig/Makefile
+++ config/Makefile
@@ -177,18 +177,30 @@
@@ -174,18 +174,30 @@
ifeq ($(MAKECMDGOALS),nconfig)
hostprogs-y += nconf
endif

View File

@ -6,7 +6,7 @@ Index: config/util.c
===================================================================
--- config.orig/util.c
+++ config/util.c
@@ -26,6 +26,121 @@
@@ -29,6 +29,121 @@
return file;
}
@ -128,7 +128,7 @@ Index: config/util.c
/* write a dependency file as used by kbuild to track dependencies */
int file_write_dep(const char *name)
{
@@ -68,7 +183,7 @@
@@ -71,7 +186,7 @@
fprintf(out, "\n$(deps_config): ;\n");
fclose(out);
rename("..config.tmp", name);

View File

@ -6,7 +6,7 @@ Index: config/confdata.c
===================================================================
--- config.orig/confdata.c
+++ config/confdata.c
@@ -983,7 +983,16 @@
@@ -1005,7 +1005,16 @@
void conf_set_all_new_symbols(enum conf_def_mode mode)
{
struct symbol *sym, *csym;
@ -24,7 +24,7 @@ Index: config/confdata.c
for_all_symbols(i, sym) {
if (sym_has_value(sym))
@@ -1002,8 +1011,15 @@
@@ -1024,8 +1033,15 @@
sym->def[S_DEF_USER].tri = no;
break;
case def_random:

View File

@ -6,7 +6,7 @@ Index: config/lxdialog/check-lxdialog.sh
===================================================================
--- config.orig/lxdialog/check-lxdialog.sh
+++ config/lxdialog/check-lxdialog.sh
@@ -31,7 +31,7 @@
@@ -33,7 +33,7 @@
}
# Temp file, try to clean up after us

View File

@ -6,7 +6,7 @@ Index: config/gconf.c
===================================================================
--- config.orig/gconf.c
+++ config/gconf.c
@@ -1525,7 +1525,7 @@
@@ -1521,7 +1521,7 @@
/* Determine GUI path */
env = getenv(SRCTREE);
if (env)

View File

@ -20,7 +20,7 @@ Index: config/confdata.c
===================================================================
--- config.orig/confdata.c
+++ config/confdata.c
@@ -44,9 +44,7 @@
@@ -71,9 +71,7 @@
const char *conf_get_autoconfig_name(void)
{
@ -31,7 +31,7 @@ Index: config/confdata.c
}
static char *conf_expand_value(const char *in)
@@ -544,6 +542,9 @@
@@ -567,6 +565,9 @@
int use_timestamp = 1;
char *env;
@ -41,15 +41,15 @@ Index: config/confdata.c
dirname[0] = 0;
if (name && name[0]) {
struct stat st;
@@ -660,6 +661,7 @@
@@ -679,6 +680,7 @@
{
const char *name;
char path[128];
char path[PATH_MAX+1];
+ char *opwd, *dir, *_name;
char *s, *d, c;
struct symbol *sym;
struct stat sb;
@@ -668,8 +670,20 @@
@@ -687,8 +689,20 @@
name = conf_get_autoconfig_name();
conf_read_simple(name, S_DEF_AUTO);
@ -72,7 +72,7 @@ Index: config/confdata.c
res = 0;
for_all_symbols(i, sym) {
@@ -762,9 +776,11 @@
@@ -781,9 +795,11 @@
close(fd);
}
out:
@ -87,7 +87,7 @@ Index: config/confdata.c
return res;
}
@@ -776,25 +792,38 @@
@@ -795,25 +811,38 @@
FILE *out, *tristate, *out_h;
time_t now;
int i;
@ -130,17 +130,17 @@ Index: config/confdata.c
if (!out_h) {
fclose(out);
fclose(tristate);
@@ -817,8 +846,7 @@
fprintf(out_h, "/*\n"
@@ -834,8 +863,7 @@
" * Automatically generated C config: don't edit\n"
" * %s\n"
" * %s"
- " */\n"
- "#define AUTOCONF_INCLUDED\n",
+ " */\n",
ctime(&now));
rootmenu.prompt->text, ctime(&now));
for_all_symbols(i, sym) {
@@ -872,19 +900,22 @@
@@ -894,19 +922,22 @@
name = getenv("KCONFIG_AUTOHEADER");
if (!name)
name = "include/generated/autoconf.h";
@ -170,7 +170,7 @@ Index: config/util.c
===================================================================
--- config.orig/util.c
+++ config/util.c
@@ -144,6 +144,8 @@
@@ -147,6 +147,8 @@
/* write a dependency file as used by kbuild to track dependencies */
int file_write_dep(const char *name)
{
@ -179,7 +179,7 @@ Index: config/util.c
struct symbol *sym, *env_sym;
struct expr *e;
struct file *file;
@@ -151,7 +153,16 @@
@@ -154,7 +156,16 @@
if (!name)
name = ".kconfig.d";
@ -197,7 +197,7 @@ Index: config/util.c
if (!out)
return 1;
fprintf(out, "deps_config := \\\n");
@@ -182,7 +193,8 @@
@@ -185,7 +196,8 @@
fprintf(out, "\n$(deps_config): ;\n");
fclose(out);

View File

@ -1,38 +0,0 @@
From 1408b15b98635a13bad2e2a50b3c2ae2ccdf625b Mon Sep 17 00:00:00 2001
From: Will Newton <will.newton@gmail.com>
Date: Wed, 22 Sep 2010 15:59:13 +0100
Subject: [PATCH] kconfig: Use PATH_MAX instead of 128 for path buffer sizes.
This prevents the buffers being overflowed when using a config
file with a long name. PATH_MAX is used elsewhere in the same
file, so use it here as well.
Signed-off-by: Will Newton <will.newton@imgtec.com>
Acked-by: WANG Cong <xiyou.wangcong@gmail.com>
Signed-off-by: Michal Marek <mmarek@suse.cz>
---
confdata.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: config/confdata.c
===================================================================
--- config.orig/confdata.c
+++ config/confdata.c
@@ -536,7 +536,7 @@
struct menu *menu;
const char *basename;
const char *str;
- char dirname[128], tmpname[128], newname[128];
+ char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1];
enum symbol_type type;
time_t now;
int use_timestamp = 1;
@@ -660,7 +660,7 @@
static int conf_split_config(void)
{
const char *name;
- char path[128];
+ char path[PATH_MAX+1];
char *opwd, *dir, *_name;
char *s, *d, c;
struct symbol *sym;

View File

@ -9,4 +9,3 @@
11-use-mktemp-for-lxdialog.patch
12-fix-glade-file-path.patch
14-support-out-of-tree-config.patch
15-use-PATH_MAX-for-path-buffer.patch

View File

@ -3,25 +3,42 @@
* Released under the terms of the GNU GPL v2.0.
*/
#include <qapplication.h>
#include <qglobal.h>
#if QT_VERSION < 0x040000
#include <qmainwindow.h>
#include <qvbox.h>
#include <qvaluelist.h>
#include <qtextbrowser.h>
#include <qaction.h>
#include <qheader.h>
#include <qfiledialog.h>
#include <qdragobject.h>
#include <qpopupmenu.h>
#else
#include <q3mainwindow.h>
#include <q3vbox.h>
#include <q3valuelist.h>
#include <q3textbrowser.h>
#include <q3action.h>
#include <q3header.h>
#include <q3filedialog.h>
#include <q3dragobject.h>
#include <q3popupmenu.h>
#endif
#include <qapplication.h>
#include <qdesktopwidget.h>
#include <qtoolbar.h>
#include <qlayout.h>
#include <qvbox.h>
#include <qsplitter.h>
#include <qlistview.h>
#include <qtextbrowser.h>
#include <qlineedit.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qmenubar.h>
#include <qmessagebox.h>
#include <qaction.h>
#include <qheader.h>
#include <qfiledialog.h>
#include <qdragobject.h>
#include <qregexp.h>
#include <qevent.h>
#include <stdlib.h>
@ -39,7 +56,7 @@
static QApplication *configApp;
static ConfigSettings *configSettings;
QAction *ConfigMainWindow::saveAction;
Q3Action *ConfigMainWindow::saveAction;
static inline QString qgettext(const char* str)
{
@ -54,9 +71,9 @@ static inline QString qgettext(const QString& str)
/**
* Reads a list of integer values from the application settings.
*/
QValueList<int> ConfigSettings::readSizes(const QString& key, bool *ok)
Q3ValueList<int> ConfigSettings::readSizes(const QString& key, bool *ok)
{
QValueList<int> result;
Q3ValueList<int> result;
QStringList entryList = readListEntry(key, ok);
QStringList::Iterator it;
@ -69,10 +86,10 @@ QValueList<int> ConfigSettings::readSizes(const QString& key, bool *ok)
/**
* Writes a list of integer values to the application settings.
*/
bool ConfigSettings::writeSizes(const QString& key, const QValueList<int>& value)
bool ConfigSettings::writeSizes(const QString& key, const Q3ValueList<int>& value)
{
QStringList stringList;
QValueList<int>::ConstIterator it;
Q3ValueList<int>::ConstIterator it;
for (it = value.begin(); it != value.end(); ++it)
stringList.push_back(QString::number(*it));
@ -80,7 +97,6 @@ bool ConfigSettings::writeSizes(const QString& key, const QValueList<int>& value
}
#if QT_VERSION >= 300
/*
* set the new data
* TODO check the value
@ -91,7 +107,6 @@ void ConfigItem::okRename(int col)
sym_set_string_value(menu->sym, text(dataColIdx).latin1());
listView()->updateList(this);
}
#endif
/*
* update the displayed of a menu entry
@ -195,11 +210,9 @@ void ConfigItem::updateMenu(void)
data = sym_get_string_value(sym);
#if QT_VERSION >= 300
int i = list->mapIdx(dataColIdx);
if (i >= 0)
setRenameEnabled(i, TRUE);
#endif
setText(dataColIdx, data);
if (type == S_STRING)
prompt = QString("%1: %2").arg(prompt).arg(data);
@ -432,7 +445,7 @@ void ConfigList::updateList(ConfigItem* item)
if (!rootEntry) {
if (mode != listMode)
goto update;
QListViewItemIterator it(this);
Q3ListViewItemIterator it(this);
ConfigItem* item;
for (; it.current(); ++it) {
@ -527,11 +540,9 @@ void ConfigList::changeValue(ConfigItem* item)
case S_INT:
case S_HEX:
case S_STRING:
#if QT_VERSION >= 300
if (colMap[dataColIdx] >= 0)
item->startRename(colMap[dataColIdx]);
else
#endif
parent()->lineEdit->show(item);
break;
}
@ -563,7 +574,7 @@ void ConfigList::setParentMenu(void)
return;
setRootMenu(menu_get_parent_menu(rootEntry->parent));
QListViewItemIterator it(this);
Q3ListViewItemIterator it(this);
for (; (item = (ConfigItem*)it.current()); it++) {
if (item->menu == oldroot) {
setCurrentItem(item);
@ -645,7 +656,7 @@ void ConfigList::updateMenuList(P* parent, struct menu* menu)
void ConfigList::keyPressEvent(QKeyEvent* ev)
{
QListViewItem* i = currentItem();
Q3ListViewItem* i = currentItem();
ConfigItem* item;
struct menu *menu;
enum prop_type type;
@ -811,10 +822,10 @@ void ConfigList::contextMenuEvent(QContextMenuEvent *e)
{
if (e->y() <= header()->geometry().bottom()) {
if (!headerPopup) {
QAction *action;
Q3Action *action;
headerPopup = new QPopupMenu(this);
action = new QAction(NULL, _("Show Name"), 0, this);
headerPopup = new Q3PopupMenu(this);
action = new Q3Action(NULL, _("Show Name"), 0, this);
action->setToggleAction(TRUE);
connect(action, SIGNAL(toggled(bool)),
parent(), SLOT(setShowName(bool)));
@ -822,7 +833,7 @@ void ConfigList::contextMenuEvent(QContextMenuEvent *e)
action, SLOT(setOn(bool)));
action->setOn(showName);
action->addTo(headerPopup);
action = new QAction(NULL, _("Show Range"), 0, this);
action = new Q3Action(NULL, _("Show Range"), 0, this);
action->setToggleAction(TRUE);
connect(action, SIGNAL(toggled(bool)),
parent(), SLOT(setShowRange(bool)));
@ -830,7 +841,7 @@ void ConfigList::contextMenuEvent(QContextMenuEvent *e)
action, SLOT(setOn(bool)));
action->setOn(showRange);
action->addTo(headerPopup);
action = new QAction(NULL, _("Show Data"), 0, this);
action = new Q3Action(NULL, _("Show Data"), 0, this);
action->setToggleAction(TRUE);
connect(action, SIGNAL(toggled(bool)),
parent(), SLOT(setShowData(bool)));
@ -914,7 +925,7 @@ void ConfigView::setShowData(bool b)
void ConfigList::setAllOpen(bool open)
{
QListViewItemIterator it(this);
Q3ListViewItemIterator it(this);
for (; it.current(); it++)
it.current()->setOpen(open);
@ -937,7 +948,7 @@ void ConfigView::updateListAll(void)
}
ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name)
: Parent(parent, name), sym(0), menu(0)
: Parent(parent, name), sym(0), _menu(0)
{
if (name) {
configSettings->beginGroup(name);
@ -960,7 +971,7 @@ void ConfigInfoView::setShowDebug(bool b)
{
if (_showDebug != b) {
_showDebug = b;
if (menu)
if (_menu)
menuInfo();
else if (sym)
symbolInfo();
@ -970,11 +981,11 @@ void ConfigInfoView::setShowDebug(bool b)
void ConfigInfoView::setInfo(struct menu *m)
{
if (menu == m)
if (_menu == m)
return;
menu = m;
_menu = m;
sym = NULL;
if (!menu)
if (!_menu)
clear();
else
menuInfo();
@ -1001,11 +1012,11 @@ void ConfigInfoView::menuInfo(void)
struct symbol* sym;
QString head, debug, help;
sym = menu->sym;
sym = _menu->sym;
if (sym) {
if (menu->prompt) {
if (_menu->prompt) {
head += "<big><b>";
head += print_filter(_(menu->prompt->text));
head += print_filter(_(_menu->prompt->text));
head += "</b></big>";
if (sym->name) {
head += " (";
@ -1031,23 +1042,23 @@ void ConfigInfoView::menuInfo(void)
debug = debug_info(sym);
struct gstr help_gstr = str_new();
menu_get_ext_help(menu, &help_gstr);
menu_get_ext_help(_menu, &help_gstr);
help = print_filter(str_get(&help_gstr));
str_free(&help_gstr);
} else if (menu->prompt) {
} else if (_menu->prompt) {
head += "<big><b>";
head += print_filter(_(menu->prompt->text));
head += print_filter(_(_menu->prompt->text));
head += "</b></big><br><br>";
if (showDebug()) {
if (menu->prompt->visible.expr) {
if (_menu->prompt->visible.expr) {
debug += "&nbsp;&nbsp;dep: ";
expr_print(menu->prompt->visible.expr, expr_print_help, &debug, E_NONE);
expr_print(_menu->prompt->visible.expr, expr_print_help, &debug, E_NONE);
debug += "<br><br>";
}
}
}
if (showDebug())
debug += QString().sprintf("defined at %s:%d<br><br>", menu->file->name, menu->lineno);
debug += QString().sprintf("defined at %s:%d<br><br>", _menu->file->name, _menu->lineno);
setText(head + debug + help);
}
@ -1150,10 +1161,10 @@ void ConfigInfoView::expr_print_help(void *data, struct symbol *sym, const char
*text += str2;
}
QPopupMenu* ConfigInfoView::createPopupMenu(const QPoint& pos)
Q3PopupMenu* ConfigInfoView::createPopupMenu(const QPoint& pos)
{
QPopupMenu* popup = Parent::createPopupMenu(pos);
QAction* action = new QAction(NULL, _("Show Debug Info"), 0, popup);
Q3PopupMenu* popup = Parent::createPopupMenu(pos);
Q3Action* action = new Q3Action(NULL, _("Show Debug Info"), 0, popup);
action->setToggleAction(TRUE);
connect(action, SIGNAL(toggled(bool)), SLOT(setShowDebug(bool)));
connect(this, SIGNAL(showDebugChanged(bool)), action, SLOT(setOn(bool)));
@ -1210,7 +1221,7 @@ ConfigSearchWindow::ConfigSearchWindow(ConfigMainWindow* parent, const char *nam
y = configSettings->readNumEntry("/window y", 0, &ok);
if (ok)
move(x, y);
QValueList<int> sizes = configSettings->readSizes("/split", &ok);
Q3ValueList<int> sizes = configSettings->readSizes("/split", &ok);
if (ok)
split->setSizes(sizes);
configSettings->endGroup();
@ -1263,8 +1274,14 @@ ConfigMainWindow::ConfigMainWindow(void)
char title[256];
QDesktopWidget *d = configApp->desktop();
snprintf(title, sizeof(title), _("Buildroot v%s Configuration"),
getenv("BR2_VERSION"));
snprintf(title, sizeof(title), "%s%s",
rootmenu.prompt->text,
#if QT_VERSION < 0x040000
" (Qt3)"
#else
""
#endif
);
setCaption(title);
width = configSettings->readNumEntry("/window width", d->width() - 64);
@ -1297,42 +1314,42 @@ ConfigMainWindow::ConfigMainWindow(void)
configList->setFocus();
menu = menuBar();
toolBar = new QToolBar("Tools", this);
toolBar = new Q3ToolBar("Tools", this);
backAction = new QAction("Back", QPixmap(xpm_back), _("Back"), 0, this);
backAction = new Q3Action("Back", QPixmap(xpm_back), _("Back"), 0, this);
connect(backAction, SIGNAL(activated()), SLOT(goBack()));
backAction->setEnabled(FALSE);
QAction *quitAction = new QAction("Quit", _("&Quit"), Qt::CTRL + Qt::Key_Q, this);
Q3Action *quitAction = new Q3Action("Quit", _("&Quit"), Qt::CTRL + Qt::Key_Q, this);
connect(quitAction, SIGNAL(activated()), SLOT(close()));
QAction *loadAction = new QAction("Load", QPixmap(xpm_load), _("&Load"), Qt::CTRL + Qt::Key_L, this);
Q3Action *loadAction = new Q3Action("Load", QPixmap(xpm_load), _("&Load"), Qt::CTRL + Qt::Key_L, this);
connect(loadAction, SIGNAL(activated()), SLOT(loadConfig()));
saveAction = new QAction("Save", QPixmap(xpm_save), _("&Save"), Qt::CTRL + Qt::Key_S, this);
saveAction = new Q3Action("Save", QPixmap(xpm_save), _("&Save"), Qt::CTRL + Qt::Key_S, this);
connect(saveAction, SIGNAL(activated()), SLOT(saveConfig()));
conf_set_changed_callback(conf_changed);
// Set saveAction's initial state
conf_changed();
QAction *saveAsAction = new QAction("Save As...", _("Save &As..."), 0, this);
Q3Action *saveAsAction = new Q3Action("Save As...", _("Save &As..."), 0, this);
connect(saveAsAction, SIGNAL(activated()), SLOT(saveConfigAs()));
QAction *searchAction = new QAction("Find", _("&Find"), Qt::CTRL + Qt::Key_F, this);
Q3Action *searchAction = new Q3Action("Find", _("&Find"), Qt::CTRL + Qt::Key_F, this);
connect(searchAction, SIGNAL(activated()), SLOT(searchConfig()));
QAction *singleViewAction = new QAction("Single View", QPixmap(xpm_single_view), _("Single View"), 0, this);
Q3Action *singleViewAction = new Q3Action("Single View", QPixmap(xpm_single_view), _("Single View"), 0, this);
connect(singleViewAction, SIGNAL(activated()), SLOT(showSingleView()));
QAction *splitViewAction = new QAction("Split View", QPixmap(xpm_split_view), _("Split View"), 0, this);
Q3Action *splitViewAction = new Q3Action("Split View", QPixmap(xpm_split_view), _("Split View"), 0, this);
connect(splitViewAction, SIGNAL(activated()), SLOT(showSplitView()));
QAction *fullViewAction = new QAction("Full View", QPixmap(xpm_tree_view), _("Full View"), 0, this);
Q3Action *fullViewAction = new Q3Action("Full View", QPixmap(xpm_tree_view), _("Full View"), 0, this);
connect(fullViewAction, SIGNAL(activated()), SLOT(showFullView()));
QAction *showNameAction = new QAction(NULL, _("Show Name"), 0, this);
Q3Action *showNameAction = new Q3Action(NULL, _("Show Name"), 0, this);
showNameAction->setToggleAction(TRUE);
connect(showNameAction, SIGNAL(toggled(bool)), configView, SLOT(setShowName(bool)));
connect(configView, SIGNAL(showNameChanged(bool)), showNameAction, SLOT(setOn(bool)));
showNameAction->setOn(configView->showName());
QAction *showRangeAction = new QAction(NULL, _("Show Range"), 0, this);
Q3Action *showRangeAction = new Q3Action(NULL, _("Show Range"), 0, this);
showRangeAction->setToggleAction(TRUE);
connect(showRangeAction, SIGNAL(toggled(bool)), configView, SLOT(setShowRange(bool)));
connect(configView, SIGNAL(showRangeChanged(bool)), showRangeAction, SLOT(setOn(bool)));
showRangeAction->setOn(configList->showRange);
QAction *showDataAction = new QAction(NULL, _("Show Data"), 0, this);
Q3Action *showDataAction = new Q3Action(NULL, _("Show Data"), 0, this);
showDataAction->setToggleAction(TRUE);
connect(showDataAction, SIGNAL(toggled(bool)), configView, SLOT(setShowData(bool)));
connect(configView, SIGNAL(showDataChanged(bool)), showDataAction, SLOT(setOn(bool)));
@ -1345,9 +1362,15 @@ ConfigMainWindow::ConfigMainWindow(void)
connect(optGroup, SIGNAL(selected(QAction *)), menuView,
SLOT(setOptionMode(QAction *)));
configView->showNormalAction = new QAction(NULL, _("Show Normal Options"), 0, optGroup);
configView->showAllAction = new QAction(NULL, _("Show All Options"), 0, optGroup);
configView->showPromptAction = new QAction(NULL, _("Show Prompt Options"), 0, optGroup);
#if QT_VERSION >= 0x040000
configView->showNormalAction = new QAction(_("Show Normal Options"), optGroup);
configView->showAllAction = new QAction(_("Show All Options"), optGroup);
configView->showPromptAction = new QAction(_("Show Prompt Options"), optGroup);
#else
configView->showNormalAction = new QAction(_("Show Normal Options"), 0, optGroup);
configView->showAllAction = new QAction(_("Show All Options"), 0, optGroup);
configView->showPromptAction = new QAction(_("Show Prompt Options"), 0, optGroup);
#endif
configView->showNormalAction->setToggleAction(TRUE);
configView->showNormalAction->setOn(configList->optMode == normalOpt);
configView->showAllAction->setToggleAction(TRUE);
@ -1355,15 +1378,15 @@ ConfigMainWindow::ConfigMainWindow(void)
configView->showPromptAction->setToggleAction(TRUE);
configView->showPromptAction->setOn(configList->optMode == promptOpt);
QAction *showDebugAction = new QAction(NULL, _("Show Debug Info"), 0, this);
Q3Action *showDebugAction = new Q3Action(NULL, _("Show Debug Info"), 0, this);
showDebugAction->setToggleAction(TRUE);
connect(showDebugAction, SIGNAL(toggled(bool)), helpText, SLOT(setShowDebug(bool)));
connect(helpText, SIGNAL(showDebugChanged(bool)), showDebugAction, SLOT(setOn(bool)));
showDebugAction->setOn(helpText->showDebug());
QAction *showIntroAction = new QAction(NULL, _("Introduction"), 0, this);
Q3Action *showIntroAction = new Q3Action(NULL, _("Introduction"), 0, this);
connect(showIntroAction, SIGNAL(activated()), SLOT(showIntro()));
QAction *showAboutAction = new QAction(NULL, _("About"), 0, this);
Q3Action *showAboutAction = new Q3Action(NULL, _("About"), 0, this);
connect(showAboutAction, SIGNAL(activated()), SLOT(showAbout()));
// init tool bar
@ -1377,7 +1400,7 @@ ConfigMainWindow::ConfigMainWindow(void)
fullViewAction->addTo(toolBar);
// create config menu
QPopupMenu* config = new QPopupMenu(this);
Q3PopupMenu* config = new Q3PopupMenu(this);
menu->insertItem(_("&File"), config);
loadAction->addTo(config);
saveAction->addTo(config);
@ -1386,12 +1409,12 @@ ConfigMainWindow::ConfigMainWindow(void)
quitAction->addTo(config);
// create edit menu
QPopupMenu* editMenu = new QPopupMenu(this);
Q3PopupMenu* editMenu = new Q3PopupMenu(this);
menu->insertItem(_("&Edit"), editMenu);
searchAction->addTo(editMenu);
// create options menu
QPopupMenu* optionMenu = new QPopupMenu(this);
Q3PopupMenu* optionMenu = new Q3PopupMenu(this);
menu->insertItem(_("&Option"), optionMenu);
showNameAction->addTo(optionMenu);
showRangeAction->addTo(optionMenu);
@ -1399,10 +1422,9 @@ ConfigMainWindow::ConfigMainWindow(void)
optionMenu->insertSeparator();
optGroup->addTo(optionMenu);
optionMenu->insertSeparator();
showDebugAction->addTo(optionMenu);
// create help menu
QPopupMenu* helpMenu = new QPopupMenu(this);
Q3PopupMenu* helpMenu = new Q3PopupMenu(this);
menu->insertSeparator();
menu->insertItem(_("&Help"), helpMenu);
showIntroAction->addTo(helpMenu);
@ -1437,7 +1459,7 @@ ConfigMainWindow::ConfigMainWindow(void)
showSplitView();
// UI setup done, restore splitter positions
QValueList<int> sizes = configSettings->readSizes("/split1", &ok);
Q3ValueList<int> sizes = configSettings->readSizes("/split1", &ok);
if (ok)
split1->setSizes(sizes);
@ -1448,7 +1470,7 @@ ConfigMainWindow::ConfigMainWindow(void)
void ConfigMainWindow::loadConfig(void)
{
QString s = QFileDialog::getOpenFileName(conf_get_configname(), NULL, this);
QString s = Q3FileDialog::getOpenFileName(conf_get_configname(), NULL, this);
if (s.isNull())
return;
if (conf_read(QFile::encodeName(s)))
@ -1464,7 +1486,7 @@ void ConfigMainWindow::saveConfig(void)
void ConfigMainWindow::saveConfigAs(void)
{
QString s = QFileDialog::getSaveFileName(conf_get_configname(), NULL, this);
QString s = Q3FileDialog::getSaveFileName(conf_get_configname(), NULL, this);
if (s.isNull())
return;
if (conf_write(QFile::encodeName(s)))
@ -1633,7 +1655,7 @@ void ConfigMainWindow::closeEvent(QCloseEvent* e)
void ConfigMainWindow::showIntro(void)
{
static const QString str = _("Welcome to the qconf graphical kernel configuration tool for Linux.\n\n"
static const QString str = _("Welcome to the qconf graphical configuration tool.\n\n"
"For each option, a blank box indicates the feature is disabled, a check\n"
"indicates it is enabled, and a dot indicates that it is to be compiled\n"
"as a module. Clicking on the box will cycle through the three states.\n\n"

View File

@ -3,26 +3,25 @@
* Released under the terms of the GNU GPL v2.0.
*/
#if QT_VERSION < 0x040000
#include <qlistview.h>
#if QT_VERSION >= 300
#include <qsettings.h>
#else
class QSettings {
public:
void beginGroup(const QString& group) { }
void endGroup(void) { }
bool readBoolEntry(const QString& key, bool def = FALSE, bool* ok = 0) const
{ if (ok) *ok = FALSE; return def; }
int readNumEntry(const QString& key, int def = 0, bool* ok = 0) const
{ if (ok) *ok = FALSE; return def; }
QString readEntry(const QString& key, const QString& def = QString::null, bool* ok = 0) const
{ if (ok) *ok = FALSE; return def; }
QStringList readListEntry(const QString& key, bool* ok = 0) const
{ if (ok) *ok = FALSE; return QStringList(); }
template <class t>
bool writeEntry(const QString& key, t value)
{ return TRUE; }
};
#include <q3listview.h>
#endif
#include <qsettings.h>
#if QT_VERSION < 0x040000
#define Q3ValueList QValueList
#define Q3PopupMenu QPopupMenu
#define Q3ListView QListView
#define Q3ListViewItem QListViewItem
#define Q3VBox QVBox
#define Q3TextBrowser QTextBrowser
#define Q3MainWindow QMainWindow
#define Q3Action QAction
#define Q3ToolBar QToolBar
#define Q3ListViewItemIterator QListViewItemIterator
#define Q3FileDialog QFileDialog
#endif
class ConfigView;
@ -31,11 +30,10 @@ class ConfigItem;
class ConfigLineEdit;
class ConfigMainWindow;
class ConfigSettings : public QSettings {
public:
QValueList<int> readSizes(const QString& key, bool *ok);
bool writeSizes(const QString& key, const QValueList<int>& value);
Q3ValueList<int> readSizes(const QString& key, bool *ok);
bool writeSizes(const QString& key, const Q3ValueList<int>& value);
};
enum colIdx {
@ -48,9 +46,9 @@ enum optionMode {
normalOpt = 0, allOpt, promptOpt
};
class ConfigList : public QListView {
class ConfigList : public Q3ListView {
Q_OBJECT
typedef class QListView Parent;
typedef class Q3ListView Parent;
public:
ConfigList(ConfigView* p, const char *name = 0);
void reinit(void);
@ -135,17 +133,17 @@ public:
struct menu *rootEntry;
QColorGroup disabledColorGroup;
QColorGroup inactivedColorGroup;
QPopupMenu* headerPopup;
Q3PopupMenu* headerPopup;
private:
int colMap[colNr];
int colRevMap[colNr];
};
class ConfigItem : public QListViewItem {
typedef class QListViewItem Parent;
class ConfigItem : public Q3ListViewItem {
typedef class Q3ListViewItem Parent;
public:
ConfigItem(QListView *parent, ConfigItem *after, struct menu *m, bool v)
ConfigItem(Q3ListView *parent, ConfigItem *after, struct menu *m, bool v)
: Parent(parent, after), menu(m), visible(v), goParent(false)
{
init();
@ -155,16 +153,14 @@ public:
{
init();
}
ConfigItem(QListView *parent, ConfigItem *after, bool v)
ConfigItem(Q3ListView *parent, ConfigItem *after, bool v)
: Parent(parent, after), menu(0), visible(v), goParent(true)
{
init();
}
~ConfigItem(void);
void init(void);
#if QT_VERSION >= 300
void okRename(int col);
#endif
void updateMenu(void);
void testUpdateMenu(bool v);
ConfigList* listView() const
@ -219,9 +215,9 @@ public:
ConfigItem *item;
};
class ConfigView : public QVBox {
class ConfigView : public Q3VBox {
Q_OBJECT
typedef class QVBox Parent;
typedef class Q3VBox Parent;
public:
ConfigView(QWidget* parent, const char *name = 0);
~ConfigView(void);
@ -252,9 +248,9 @@ public:
static QAction *showPromptAction;
};
class ConfigInfoView : public QTextBrowser {
class ConfigInfoView : public Q3TextBrowser {
Q_OBJECT
typedef class QTextBrowser Parent;
typedef class Q3TextBrowser Parent;
public:
ConfigInfoView(QWidget* parent, const char *name = 0);
bool showDebug(void) const { return _showDebug; }
@ -274,11 +270,11 @@ protected:
QString debug_info(struct symbol *sym);
static QString print_filter(const QString &str);
static void expr_print_help(void *data, struct symbol *sym, const char *str);
QPopupMenu* createPopupMenu(const QPoint& pos);
Q3PopupMenu* createPopupMenu(const QPoint& pos);
void contentsContextMenuEvent(QContextMenuEvent *e);
struct symbol *sym;
struct menu *menu;
struct menu *_menu;
bool _showDebug;
};
@ -302,10 +298,10 @@ protected:
struct symbol **result;
};
class ConfigMainWindow : public QMainWindow {
class ConfigMainWindow : public Q3MainWindow {
Q_OBJECT
static QAction *saveAction;
static Q3Action *saveAction;
static void conf_changed(void);
public:
ConfigMainWindow(void);
@ -334,8 +330,8 @@ protected:
ConfigView *configView;
ConfigList *configList;
ConfigInfoView *helpText;
QToolBar *toolBar;
QAction *backAction;
Q3ToolBar *toolBar;
Q3Action *backAction;
QSplitter* split1;
QSplitter* split2;
};

View File

@ -42,6 +42,8 @@
# mv config_strip .config
# make oldconfig
#
use strict;
my $config = ".config";
my $uname = `uname -r`;
@ -123,7 +125,6 @@ my %selects;
my %prompts;
my %objects;
my $var;
my $cont = 0;
my $iflevel = 0;
my @ifdeps;
@ -137,19 +138,45 @@ sub read_kconfig {
my $config;
my @kconfigs;
open(KIN, "$ksource/$kconfig") || die "Can't open $kconfig";
my $cont = 0;
my $line;
my $source = "$ksource/$kconfig";
my $last_source = "";
# Check for any environment variables used
while ($source =~ /\$(\w+)/ && $last_source ne $source) {
my $env = $1;
$last_source = $source;
$source =~ s/\$$env/$ENV{$env}/;
}
open(KIN, "$source") || die "Can't open $kconfig";
while (<KIN>) {
chomp;
# Make sure that lines ending with \ continue
if ($cont) {
$_ = $line . " " . $_;
}
if (s/\\$//) {
$cont = 1;
$line = $_;
next;
}
$cont = 0;
# collect any Kconfig sources
if (/^source\s*"(.*)"/) {
$kconfigs[$#kconfigs+1] = $1;
}
# configs found
if (/^\s*config\s+(\S+)\s*$/) {
if (/^\s*(menu)?config\s+(\S+)\s*$/) {
$state = "NEW";
$config = $1;
$config = $2;
for (my $i = 0; $i < $iflevel; $i++) {
if ($i) {
@ -178,7 +205,7 @@ sub read_kconfig {
# configs without prompts must be selected
} elsif ($state ne "NONE" && /^\s*tristate\s\S/) {
# note if the config has a prompt
$prompt{$config} = 1;
$prompts{$config} = 1;
# Check for if statements
} elsif (/^if\s+(.*\S)\s*$/) {
@ -218,6 +245,8 @@ if ($kconfig) {
# Read all Makefiles to map the configs to the objects
foreach my $makefile (@makefiles) {
my $cont = 0;
open(MIN,$makefile) || die "Can't open $makefile";
while (<MIN>) {
my $objs;
@ -281,7 +310,7 @@ if (defined($lsmod_file)) {
# see what modules are loaded on this system
my $lsmod;
foreach $dir ( ("/sbin", "/bin", "/usr/sbin", "/usr/bin") ) {
foreach my $dir ( ("/sbin", "/bin", "/usr/sbin", "/usr/bin") ) {
if ( -x "$dir/lsmod" ) {
$lsmod = "$dir/lsmod";
last;
@ -363,7 +392,7 @@ while ($repeat) {
parse_config_dep_select $depends{$config};
}
if (defined($prompt{$config}) || !defined($selects{$config})) {
if (defined($prompts{$config}) || !defined($selects{$config})) {
next;
}

View File

@ -350,7 +350,6 @@ void sym_calc_value(struct symbol *sym)
}
}
calc_newval:
#if 0
if (sym->dir_dep.tri == no && sym->rev_dep.tri != no) {
fprintf(stderr, "warning: (");
expr_fprint(sym->rev_dep.expr, stderr);
@ -359,7 +358,6 @@ void sym_calc_value(struct symbol *sym)
expr_fprint(sym->dir_dep.expr, stderr);
fprintf(stderr, ")\n");
}
#endif
newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
}
if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
@ -842,6 +840,55 @@ struct symbol *sym_find(const char *name)
return symbol;
}
/*
* Expand symbol's names embedded in the string given in argument. Symbols'
* name to be expanded shall be prefixed by a '$'. Unknown symbol expands to
* the empty string.
*/
const char *sym_expand_string_value(const char *in)
{
const char *src;
char *res;
size_t reslen;
reslen = strlen(in) + 1;
res = malloc(reslen);
res[0] = '\0';
while ((src = strchr(in, '$'))) {
char *p, name[SYMBOL_MAXLENGTH];
const char *symval = "";
struct symbol *sym;
size_t newlen;
strncat(res, in, src - in);
src++;
p = name;
while (isalnum(*src) || *src == '_')
*p++ = *src++;
*p = '\0';
sym = sym_find(name);
if (sym != NULL) {
sym_calc_value(sym);
symval = sym_get_string_value(sym);
}
newlen = strlen(res) + strlen(symval) + strlen(src);
if (newlen > reslen) {
reslen = newlen;
res = realloc(res, reslen);
}
strcat(res, symval);
in = src;
}
strcat(res, in);
return res;
}
struct symbol **sym_re_search(const char *pattern)
{
struct symbol *sym, **sym_arr = NULL;

View File

@ -12,15 +12,18 @@
struct file *file_lookup(const char *name)
{
struct file *file;
const char *file_name = sym_expand_string_value(name);
for (file = file_list; file; file = file->next) {
if (!strcmp(name, file->name))
if (!strcmp(name, file->name)) {
free((void *)file_name);
return file;
}
}
file = malloc(sizeof(*file));
memset(file, 0, sizeof(*file));
file->name = strdup(name);
file->name = file_name;
file->next = file_list;
file_list = file;
return file;

View File

@ -304,9 +304,10 @@ void zconf_nextfile(const char *name)
memset(buf, 0, sizeof(*buf));
current_buf->state = YY_CURRENT_BUFFER;
yyin = zconf_fopen(name);
yyin = zconf_fopen(file->name);
if (!yyin) {
printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
printf("%s:%d: can't open file \"%s\"\n",
zconf_curname(), zconf_lineno(), file->name);
exit(1);
}
yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
@ -353,7 +354,7 @@ int zconf_lineno(void)
return current_pos.lineno;
}
char *zconf_curname(void)
const char *zconf_curname(void)
{
return current_pos.file ? current_pos.file->name : "<none>";
}

View File

@ -417,18 +417,18 @@ union yyalloc
#endif
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 3
#define YYFINAL 11
/* YYLAST -- Last index in YYTABLE. */
#define YYLAST 259
#define YYLAST 277
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 35
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 46
#define YYNNTS 48
/* YYNRULES -- Number of rules. */
#define YYNRULES 110
#define YYNRULES 113
/* YYNRULES -- Number of states. */
#define YYNSTATES 180
#define YYNSTATES 185
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
@ -476,73 +476,74 @@ static const yytype_uint8 yytranslate[] =
YYRHS. */
static const yytype_uint16 yyprhs[] =
{
0, 0, 3, 5, 6, 9, 12, 15, 20, 23,
28, 33, 37, 39, 41, 43, 45, 47, 49, 51,
53, 55, 57, 59, 61, 63, 67, 70, 74, 77,
81, 84, 85, 88, 91, 94, 97, 100, 103, 107,
112, 117, 122, 128, 132, 133, 137, 138, 141, 145,
148, 150, 154, 155, 158, 161, 164, 167, 170, 175,
179, 182, 187, 188, 191, 195, 197, 201, 202, 205,
208, 211, 215, 218, 220, 224, 225, 228, 231, 234,
238, 242, 245, 248, 251, 252, 255, 258, 261, 266,
267, 270, 272, 274, 277, 280, 283, 285, 288, 289,
292, 294, 298, 302, 306, 309, 313, 317, 319, 321,
322
0, 0, 3, 6, 8, 11, 13, 14, 17, 20,
23, 26, 31, 36, 40, 42, 44, 46, 48, 50,
52, 54, 56, 58, 60, 62, 64, 66, 70, 73,
77, 80, 84, 87, 88, 91, 94, 97, 100, 103,
106, 110, 115, 120, 125, 131, 135, 136, 140, 141,
144, 148, 151, 153, 157, 158, 161, 164, 167, 170,
173, 178, 182, 185, 190, 191, 194, 198, 200, 204,
205, 208, 211, 214, 218, 222, 225, 227, 231, 232,
235, 238, 241, 245, 249, 252, 255, 258, 259, 262,
265, 268, 273, 274, 277, 279, 281, 284, 287, 290,
292, 295, 296, 299, 301, 305, 309, 313, 316, 320,
324, 326, 328, 329
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yytype_int8 yyrhs[] =
{
36, 0, -1, 37, -1, -1, 37, 39, -1, 37,
53, -1, 37, 64, -1, 37, 3, 74, 76, -1,
37, 75, -1, 37, 25, 1, 30, -1, 37, 38,
1, 30, -1, 37, 1, 30, -1, 16, -1, 18,
-1, 19, -1, 21, -1, 17, -1, 22, -1, 20,
-1, 30, -1, 59, -1, 68, -1, 42, -1, 44,
-1, 66, -1, 25, 1, 30, -1, 1, 30, -1,
10, 25, 30, -1, 41, 45, -1, 11, 25, 30,
-1, 43, 45, -1, -1, 45, 46, -1, 45, 47,
-1, 45, 72, -1, 45, 70, -1, 45, 40, -1,
45, 30, -1, 19, 73, 30, -1, 18, 74, 77,
30, -1, 20, 78, 77, 30, -1, 21, 25, 77,
30, -1, 22, 79, 79, 77, 30, -1, 23, 48,
30, -1, -1, 48, 25, 49, -1, -1, 33, 74,
-1, 7, 80, 30, -1, 50, 54, -1, 75, -1,
51, 56, 52, -1, -1, 54, 55, -1, 54, 72,
-1, 54, 70, -1, 54, 30, -1, 54, 40, -1,
18, 74, 77, 30, -1, 19, 73, 30, -1, 17,
30, -1, 20, 25, 77, 30, -1, -1, 56, 39,
-1, 14, 78, 76, -1, 75, -1, 57, 60, 58,
-1, -1, 60, 39, -1, 60, 64, -1, 60, 53,
-1, 4, 74, 30, -1, 61, 71, -1, 75, -1,
62, 65, 63, -1, -1, 65, 39, -1, 65, 64,
-1, 65, 53, -1, 6, 74, 30, -1, 9, 74,
30, -1, 67, 71, -1, 12, 30, -1, 69, 13,
-1, -1, 71, 72, -1, 71, 30, -1, 71, 40,
-1, 16, 24, 78, 30, -1, -1, 74, 77, -1,
25, -1, 26, -1, 5, 30, -1, 8, 30, -1,
15, 30, -1, 30, -1, 76, 30, -1, -1, 14,
78, -1, 79, -1, 79, 33, 79, -1, 79, 27,
79, -1, 29, 78, 28, -1, 34, 78, -1, 78,
31, 78, -1, 78, 32, 78, -1, 25, -1, 26,
-1, -1, 25, -1
36, 0, -1, 78, 37, -1, 37, -1, 62, 38,
-1, 38, -1, -1, 38, 40, -1, 38, 54, -1,
38, 66, -1, 38, 77, -1, 38, 25, 1, 30,
-1, 38, 39, 1, 30, -1, 38, 1, 30, -1,
16, -1, 18, -1, 19, -1, 21, -1, 17, -1,
22, -1, 20, -1, 30, -1, 60, -1, 70, -1,
43, -1, 45, -1, 68, -1, 25, 1, 30, -1,
1, 30, -1, 10, 25, 30, -1, 42, 46, -1,
11, 25, 30, -1, 44, 46, -1, -1, 46, 47,
-1, 46, 48, -1, 46, 74, -1, 46, 72, -1,
46, 41, -1, 46, 30, -1, 19, 75, 30, -1,
18, 76, 79, 30, -1, 20, 80, 79, 30, -1,
21, 25, 79, 30, -1, 22, 81, 81, 79, 30,
-1, 23, 49, 30, -1, -1, 49, 25, 50, -1,
-1, 33, 76, -1, 7, 82, 30, -1, 51, 55,
-1, 77, -1, 52, 57, 53, -1, -1, 55, 56,
-1, 55, 74, -1, 55, 72, -1, 55, 30, -1,
55, 41, -1, 18, 76, 79, 30, -1, 19, 75,
30, -1, 17, 30, -1, 20, 25, 79, 30, -1,
-1, 57, 40, -1, 14, 80, 78, -1, 77, -1,
58, 61, 59, -1, -1, 61, 40, -1, 61, 66,
-1, 61, 54, -1, 3, 76, 78, -1, 4, 76,
30, -1, 63, 73, -1, 77, -1, 64, 67, 65,
-1, -1, 67, 40, -1, 67, 66, -1, 67, 54,
-1, 6, 76, 30, -1, 9, 76, 30, -1, 69,
73, -1, 12, 30, -1, 71, 13, -1, -1, 73,
74, -1, 73, 30, -1, 73, 41, -1, 16, 24,
80, 30, -1, -1, 76, 79, -1, 25, -1, 26,
-1, 5, 30, -1, 8, 30, -1, 15, 30, -1,
30, -1, 78, 30, -1, -1, 14, 80, -1, 81,
-1, 81, 33, 81, -1, 81, 27, 81, -1, 29,
80, 28, -1, 34, 80, -1, 80, 31, 80, -1,
80, 32, 80, -1, 25, -1, 26, -1, -1, 25,
-1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
0, 107, 107, 109, 111, 112, 113, 114, 115, 116,
117, 121, 125, 125, 125, 125, 125, 125, 125, 129,
130, 131, 132, 133, 134, 138, 139, 145, 153, 159,
167, 177, 179, 180, 181, 182, 183, 184, 187, 195,
201, 211, 217, 223, 226, 228, 239, 240, 245, 254,
259, 267, 270, 272, 273, 274, 275, 276, 279, 285,
296, 302, 312, 314, 319, 327, 335, 338, 340, 341,
342, 347, 354, 359, 367, 370, 372, 373, 374, 377,
385, 392, 399, 405, 412, 414, 415, 416, 419, 427,
429, 434, 435, 438, 439, 440, 444, 445, 448, 449,
452, 453, 454, 455, 456, 457, 458, 461, 462, 465,
466
0, 107, 107, 107, 109, 109, 111, 113, 114, 115,
116, 117, 118, 122, 126, 126, 126, 126, 126, 126,
126, 130, 131, 132, 133, 134, 135, 139, 140, 146,
154, 160, 168, 178, 180, 181, 182, 183, 184, 185,
188, 196, 202, 212, 218, 224, 227, 229, 240, 241,
246, 255, 260, 268, 271, 273, 274, 275, 276, 277,
280, 286, 297, 303, 313, 315, 320, 328, 336, 339,
341, 342, 343, 348, 355, 362, 367, 375, 378, 380,
381, 382, 385, 393, 400, 407, 413, 420, 422, 423,
424, 427, 435, 437, 442, 443, 446, 447, 448, 452,
453, 456, 457, 460, 461, 462, 463, 464, 465, 466,
469, 470, 473, 474
};
#endif
@ -557,17 +558,17 @@ static const char *const yytname[] =
"T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT", "T_SELECT", "T_RANGE",
"T_OPTION", "T_ON", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL",
"T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND", "T_EQUAL",
"T_NOT", "$accept", "input", "stmt_list", "option_name", "common_stmt",
"option_error", "config_entry_start", "config_stmt",
"T_NOT", "$accept", "input", "start", "stmt_list", "option_name",
"common_stmt", "option_error", "config_entry_start", "config_stmt",
"menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
"config_option", "symbol_option", "symbol_option_list",
"symbol_option_arg", "choice", "choice_entry", "choice_end",
"choice_stmt", "choice_option_list", "choice_option", "choice_block",
"if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry",
"menu_end", "menu_stmt", "menu_block", "source_stmt", "comment",
"comment_stmt", "help_start", "help", "depends_list", "depends",
"prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol",
"word_opt", 0
"if_entry", "if_end", "if_stmt", "if_block", "mainmenu_stmt", "menu",
"menu_entry", "menu_end", "menu_stmt", "menu_block", "source_stmt",
"comment", "comment_stmt", "help_start", "help", "depends_list",
"depends", "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr",
"symbol", "word_opt", 0
};
#endif
@ -586,35 +587,35 @@ static const yytype_uint16 yytoknum[] =
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
0, 35, 36, 37, 37, 37, 37, 37, 37, 37,
37, 37, 38, 38, 38, 38, 38, 38, 38, 39,
39, 39, 39, 39, 39, 40, 40, 41, 42, 43,
44, 45, 45, 45, 45, 45, 45, 45, 46, 46,
46, 46, 46, 47, 48, 48, 49, 49, 50, 51,
52, 53, 54, 54, 54, 54, 54, 54, 55, 55,
55, 55, 56, 56, 57, 58, 59, 60, 60, 60,
60, 61, 62, 63, 64, 65, 65, 65, 65, 66,
67, 68, 69, 70, 71, 71, 71, 71, 72, 73,
73, 74, 74, 75, 75, 75, 76, 76, 77, 77,
78, 78, 78, 78, 78, 78, 78, 79, 79, 80,
80
0, 35, 36, 36, 37, 37, 38, 38, 38, 38,
38, 38, 38, 38, 39, 39, 39, 39, 39, 39,
39, 40, 40, 40, 40, 40, 40, 41, 41, 42,
43, 44, 45, 46, 46, 46, 46, 46, 46, 46,
47, 47, 47, 47, 47, 48, 49, 49, 50, 50,
51, 52, 53, 54, 55, 55, 55, 55, 55, 55,
56, 56, 56, 56, 57, 57, 58, 59, 60, 61,
61, 61, 61, 62, 63, 64, 65, 66, 67, 67,
67, 67, 68, 69, 70, 71, 72, 73, 73, 73,
73, 74, 75, 75, 76, 76, 77, 77, 77, 78,
78, 79, 79, 80, 80, 80, 80, 80, 80, 80,
81, 81, 82, 82
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
0, 2, 1, 0, 2, 2, 2, 4, 2, 4,
4, 3, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 3, 2, 3, 2, 3,
2, 0, 2, 2, 2, 2, 2, 2, 3, 4,
4, 4, 5, 3, 0, 3, 0, 2, 3, 2,
1, 3, 0, 2, 2, 2, 2, 2, 4, 3,
2, 4, 0, 2, 3, 1, 3, 0, 2, 2,
2, 3, 2, 1, 3, 0, 2, 2, 2, 3,
3, 2, 2, 2, 0, 2, 2, 2, 4, 0,
2, 1, 1, 2, 2, 2, 1, 2, 0, 2,
1, 3, 3, 3, 2, 3, 3, 1, 1, 0,
1
0, 2, 2, 1, 2, 1, 0, 2, 2, 2,
2, 4, 4, 3, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 3, 2, 3,
2, 3, 2, 0, 2, 2, 2, 2, 2, 2,
3, 4, 4, 4, 5, 3, 0, 3, 0, 2,
3, 2, 1, 3, 0, 2, 2, 2, 2, 2,
4, 3, 2, 4, 0, 2, 3, 1, 3, 0,
2, 2, 2, 3, 3, 2, 1, 3, 0, 2,
2, 2, 3, 3, 2, 2, 2, 0, 2, 2,
2, 4, 0, 2, 1, 1, 2, 2, 2, 1,
2, 0, 2, 1, 3, 3, 3, 2, 3, 3,
1, 1, 0, 1
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@ -622,158 +623,165 @@ static const yytype_uint8 yyr2[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
3, 0, 0, 1, 0, 0, 0, 0, 0, 109,
0, 0, 0, 0, 0, 0, 12, 16, 13, 14,
18, 15, 17, 0, 19, 0, 4, 31, 22, 31,
23, 52, 62, 5, 67, 20, 84, 75, 6, 24,
84, 21, 8, 11, 91, 92, 0, 0, 93, 0,
110, 0, 94, 0, 0, 0, 107, 108, 0, 0,
0, 100, 95, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 96, 7, 71, 79, 48, 80, 27,
29, 0, 104, 0, 0, 64, 0, 0, 9, 10,
0, 0, 0, 0, 89, 0, 0, 0, 44, 0,
37, 36, 32, 33, 0, 35, 34, 0, 0, 89,
0, 56, 57, 53, 55, 54, 63, 51, 50, 68,
70, 66, 69, 65, 86, 87, 85, 76, 78, 74,
77, 73, 97, 103, 105, 106, 102, 101, 26, 82,
0, 98, 0, 98, 98, 98, 0, 0, 0, 83,
60, 98, 0, 98, 0, 0, 0, 38, 90, 0,
0, 98, 46, 43, 25, 0, 59, 0, 88, 99,
39, 40, 41, 0, 0, 45, 58, 61, 42, 47
6, 0, 99, 0, 3, 0, 6, 6, 94, 95,
0, 1, 0, 0, 0, 0, 112, 0, 0, 0,
0, 0, 0, 14, 18, 15, 16, 20, 17, 19,
0, 21, 0, 7, 33, 24, 33, 25, 54, 64,
8, 69, 22, 87, 78, 9, 26, 87, 23, 10,
0, 100, 2, 73, 13, 0, 96, 0, 113, 0,
97, 0, 0, 0, 110, 111, 0, 0, 0, 103,
98, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 74, 82, 50, 83, 29, 31, 0, 107, 0,
0, 66, 0, 0, 11, 12, 0, 0, 0, 0,
92, 0, 0, 0, 46, 0, 39, 38, 34, 35,
0, 37, 36, 0, 0, 92, 0, 58, 59, 55,
57, 56, 65, 53, 52, 70, 72, 68, 71, 67,
89, 90, 88, 79, 81, 77, 80, 76, 106, 108,
109, 105, 104, 28, 85, 0, 101, 0, 101, 101,
101, 0, 0, 0, 86, 62, 101, 0, 101, 0,
0, 0, 40, 93, 0, 0, 101, 48, 45, 27,
0, 61, 0, 91, 102, 41, 42, 43, 0, 0,
47, 60, 63, 44, 49
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
-1, 1, 2, 25, 26, 101, 27, 28, 29, 30,
65, 102, 103, 147, 175, 31, 32, 117, 33, 67,
113, 68, 34, 121, 35, 69, 36, 37, 129, 38,
71, 39, 40, 41, 104, 105, 70, 106, 142, 143,
42, 74, 156, 60, 61, 51
-1, 3, 4, 5, 32, 33, 107, 34, 35, 36,
37, 73, 108, 109, 152, 180, 38, 39, 123, 40,
75, 119, 76, 41, 127, 42, 77, 6, 43, 44,
135, 45, 79, 46, 47, 48, 110, 111, 78, 112,
147, 148, 49, 7, 161, 68, 69, 59
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
#define YYPACT_NINF -80
#define YYPACT_NINF -89
static const yytype_int16 yypact[] =
{
-80, 2, 132, -80, -13, -1, -1, -2, -1, 9,
33, -1, 27, 40, -3, 38, -80, -80, -80, -80,
-80, -80, -80, 71, -80, 77, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, 57, 61, -80, 63,
-80, 76, -80, 87, 101, 133, -80, -80, -3, -3,
195, -6, -80, 136, 149, 39, 104, 65, 150, 5,
194, 5, 167, -80, 176, -80, -80, -80, -80, -80,
-80, 68, -80, -3, -3, 176, 72, 72, -80, -80,
177, 187, 78, -1, -1, -3, 196, 72, -80, 222,
-80, -80, -80, -80, 221, -80, -80, 205, -1, -1,
211, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, 206, -80, -80, -80, -80, -80,
-3, 223, 209, 223, 197, 223, 72, 7, 210, -80,
-80, 223, 212, 223, 201, -3, 213, -80, -80, 214,
215, 223, 208, -80, -80, 216, -80, 217, -80, 113,
-80, -80, -80, 218, -1, -80, -80, -80, -80, -80
3, 4, -89, 20, -89, 100, -89, 7, -89, -89,
-8, -89, 17, 4, 28, 4, 37, 36, 4, 68,
87, -18, 69, -89, -89, -89, -89, -89, -89, -89,
128, -89, 138, -89, -89, -89, -89, -89, -89, -89,
-89, -89, -89, -89, -89, -89, -89, -89, -89, -89,
127, -89, -89, 110, -89, 126, -89, 136, -89, 137,
-89, 147, 150, 152, -89, -89, -18, -18, 171, -14,
-89, 153, 157, 34, 67, 180, 233, 220, 207, 220,
154, -89, -89, -89, -89, -89, -89, 0, -89, -18,
-18, 110, 44, 44, -89, -89, 163, 174, 182, 4,
4, -18, 194, 44, -89, 219, -89, -89, -89, -89,
223, -89, -89, 203, 4, 4, 215, -89, -89, -89,
-89, -89, -89, -89, -89, -89, -89, -89, -89, -89,
-89, -89, -89, -89, -89, -89, -89, -89, -89, 213,
-89, -89, -89, -89, -89, -18, 232, 227, 232, -5,
232, 44, 35, 234, -89, -89, 232, 235, 232, 224,
-18, 236, -89, -89, 237, 238, 232, 216, -89, -89,
240, -89, 241, -89, 71, -89, -89, -89, 242, 4,
-89, -89, -89, -89, -89
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
-80, -80, -80, -80, 122, -34, -80, -80, -80, -80,
220, -80, -80, -80, -80, -80, -80, -80, 59, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, 125,
-80, -80, -80, -80, -80, 183, 219, 22, 142, -5,
147, 192, 69, -54, -79, -80
-89, -89, 255, 267, -89, 47, -57, -89, -89, -89,
-89, 239, -89, -89, -89, -89, -89, -89, -89, 130,
-89, -89, -89, -89, -89, -89, -89, -89, -89, -89,
-89, 181, -89, -89, -89, -89, -89, 199, 229, 16,
162, -1, 74, -7, 103, -65, -88, -89
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -82
#define YYTABLE_NINF -85
static const yytype_int16 yytable[] =
{
46, 47, 3, 49, 81, 82, 53, 136, 137, 6,
7, 8, 9, 10, 11, 12, 13, 43, 146, 14,
15, 86, 56, 57, 44, 45, 58, 87, 48, 134,
135, 59, 162, 112, 50, 24, 125, 163, 125, -28,
90, 144, -28, -28, -28, -28, -28, -28, -28, -28,
-28, 91, 54, -28, -28, 92, -28, 93, 94, 95,
96, 97, 98, 52, 99, 55, 90, 161, 62, 100,
-49, -49, 63, -49, -49, -49, -49, 91, 64, -49,
-49, 92, 107, 108, 109, 110, 154, 73, 141, 115,
99, 75, 126, 76, 126, 111, 133, 56, 57, 83,
84, 169, 140, 151, -30, 90, 77, -30, -30, -30,
-30, -30, -30, -30, -30, -30, 91, 78, -30, -30,
92, -30, 93, 94, 95, 96, 97, 98, 120, 99,
128, 79, -2, 4, 100, 5, 6, 7, 8, 9,
10, 11, 12, 13, 83, 84, 14, 15, 16, 17,
18, 19, 20, 21, 22, 7, 8, 23, 10, 11,
12, 13, 24, 80, 14, 15, 88, -81, 90, 179,
-81, -81, -81, -81, -81, -81, -81, -81, -81, 89,
24, -81, -81, 92, -81, -81, -81, -81, -81, -81,
116, 119, 99, 127, 122, 90, 130, 124, -72, -72,
-72, -72, -72, -72, -72, -72, 132, 138, -72, -72,
92, 155, 158, 159, 160, 118, 123, 139, 131, 99,
165, 145, 167, 148, 124, 73, 83, 84, 83, 84,
173, 168, 83, 84, 149, 150, 153, 155, 84, 157,
164, 174, 166, 170, 171, 172, 176, 177, 178, 66,
114, 152, 85, 0, 0, 0, 0, 0, 0, 72
10, 87, 88, 53, 141, 142, 1, 64, 65, 160,
1, 66, 55, 92, 57, 151, 67, 61, 118, 93,
11, 131, 2, 131, 139, 140, 89, 90, 138, 8,
9, 89, 90, 2, -30, 96, 149, 51, -30, -30,
-30, -30, -30, -30, -30, -30, 97, 54, -30, -30,
98, -30, 99, 100, 101, 102, 103, 104, 56, 105,
167, 91, 58, 166, 106, 168, 60, -32, 96, 64,
65, -32, -32, -32, -32, -32, -32, -32, -32, 97,
159, -32, -32, 98, -32, 99, 100, 101, 102, 103,
104, 121, 105, 62, 132, 174, 132, 106, 146, 70,
-5, 12, 89, 90, 13, 14, 15, 16, 17, 18,
19, 20, 63, 156, 21, 22, 23, 24, 25, 26,
27, 28, 29, 122, 125, 30, 133, -4, 12, 71,
31, 13, 14, 15, 16, 17, 18, 19, 20, 72,
51, 21, 22, 23, 24, 25, 26, 27, 28, 29,
124, 129, 30, 137, -84, 96, 81, 31, -84, -84,
-84, -84, -84, -84, -84, -84, 82, 83, -84, -84,
98, -84, -84, -84, -84, -84, -84, 84, 184, 105,
85, 96, 86, 94, 130, -51, -51, 95, -51, -51,
-51, -51, 97, 143, -51, -51, 98, 113, 114, 115,
116, 2, 89, 90, 144, 105, 145, 126, 96, 134,
117, -75, -75, -75, -75, -75, -75, -75, -75, 150,
153, -75, -75, 98, 13, 14, 15, 16, 17, 18,
19, 20, 105, 155, 21, 22, 154, 130, 14, 15,
158, 17, 18, 19, 20, 90, 160, 21, 22, 179,
31, 163, 164, 165, 173, 89, 90, 162, 128, 170,
136, 172, 52, 31, 169, 171, 175, 176, 177, 178,
181, 182, 183, 50, 120, 74, 80, 157
};
static const yytype_int16 yycheck[] =
static const yytype_uint8 yycheck[] =
{
5, 6, 0, 8, 58, 59, 11, 86, 87, 4,
5, 6, 7, 8, 9, 10, 11, 30, 97, 14,
15, 27, 25, 26, 25, 26, 29, 33, 30, 83,
84, 34, 25, 67, 25, 30, 70, 30, 72, 0,
1, 95, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 25, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 30, 25, 25, 1, 146, 30, 30,
5, 6, 1, 8, 9, 10, 11, 12, 1, 14,
15, 16, 17, 18, 19, 20, 140, 30, 93, 67,
25, 30, 70, 30, 72, 30, 28, 25, 26, 31,
32, 155, 24, 108, 0, 1, 30, 3, 4, 5,
1, 66, 67, 10, 92, 93, 3, 25, 26, 14,
3, 29, 13, 27, 15, 103, 34, 18, 75, 33,
0, 78, 30, 80, 89, 90, 31, 32, 28, 25,
26, 31, 32, 30, 0, 1, 101, 30, 4, 5,
6, 7, 8, 9, 10, 11, 12, 30, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 69, 25,
71, 30, 0, 1, 30, 3, 4, 5, 6, 7,
8, 9, 10, 11, 31, 32, 14, 15, 16, 17,
18, 19, 20, 21, 22, 5, 6, 25, 8, 9,
10, 11, 30, 30, 14, 15, 30, 0, 1, 174,
3, 4, 5, 6, 7, 8, 9, 10, 11, 30,
16, 17, 18, 19, 20, 21, 22, 23, 30, 25,
25, 68, 25, 151, 30, 30, 30, 0, 1, 25,
26, 4, 5, 6, 7, 8, 9, 10, 11, 12,
145, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 75, 25, 25, 78, 160, 80, 30, 99, 30,
0, 1, 31, 32, 4, 5, 6, 7, 8, 9,
10, 11, 25, 114, 14, 15, 16, 17, 18, 19,
20, 21, 22, 76, 77, 25, 79, 0, 1, 1,
30, 4, 5, 6, 7, 8, 9, 10, 11, 1,
30, 14, 15, 16, 17, 18, 19, 20, 21, 22,
68, 69, 25, 71, 69, 1, 71, 30, 4, 5,
76, 77, 25, 79, 0, 1, 30, 30, 4, 5,
6, 7, 8, 9, 10, 11, 30, 30, 14, 15,
16, 14, 143, 144, 145, 68, 69, 30, 71, 25,
151, 25, 153, 1, 30, 30, 31, 32, 31, 32,
161, 30, 31, 32, 13, 30, 25, 14, 32, 30,
30, 33, 30, 30, 30, 30, 30, 30, 30, 29,
67, 109, 60, -1, -1, -1, -1, -1, -1, 40
16, 17, 18, 19, 20, 21, 22, 30, 179, 25,
30, 1, 30, 30, 30, 5, 6, 30, 8, 9,
10, 11, 12, 30, 14, 15, 16, 17, 18, 19,
20, 30, 31, 32, 30, 25, 24, 77, 1, 79,
30, 4, 5, 6, 7, 8, 9, 10, 11, 25,
1, 14, 15, 16, 4, 5, 6, 7, 8, 9,
10, 11, 25, 30, 14, 15, 13, 30, 5, 6,
25, 8, 9, 10, 11, 32, 14, 14, 15, 33,
30, 148, 149, 150, 30, 31, 32, 30, 77, 156,
79, 158, 7, 30, 30, 30, 30, 30, 30, 166,
30, 30, 30, 6, 75, 36, 47, 115
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
0, 36, 37, 0, 1, 3, 4, 5, 6, 7,
8, 9, 10, 11, 14, 15, 16, 17, 18, 19,
20, 21, 22, 25, 30, 38, 39, 41, 42, 43,
44, 50, 51, 53, 57, 59, 61, 62, 64, 66,
67, 68, 75, 30, 25, 26, 74, 74, 30, 74,
25, 80, 30, 74, 25, 25, 25, 26, 29, 34,
78, 79, 30, 1, 1, 45, 45, 54, 56, 60,
71, 65, 71, 30, 76, 30, 30, 30, 30, 30,
30, 78, 78, 31, 32, 76, 27, 33, 30, 30,
1, 12, 16, 18, 19, 20, 21, 22, 23, 25,
30, 40, 46, 47, 69, 70, 72, 17, 18, 19,
20, 30, 40, 55, 70, 72, 39, 52, 75, 39,
53, 58, 64, 75, 30, 40, 72, 39, 53, 63,
64, 75, 30, 28, 78, 78, 79, 79, 30, 30,
24, 74, 73, 74, 78, 25, 79, 48, 1, 13,
30, 74, 73, 25, 78, 14, 77, 30, 77, 77,
77, 79, 25, 30, 30, 77, 30, 77, 30, 78,
30, 30, 30, 77, 33, 49, 30, 30, 30, 74
0, 3, 30, 36, 37, 38, 62, 78, 25, 26,
76, 0, 1, 4, 5, 6, 7, 8, 9, 10,
11, 14, 15, 16, 17, 18, 19, 20, 21, 22,
25, 30, 39, 40, 42, 43, 44, 45, 51, 52,
54, 58, 60, 63, 64, 66, 68, 69, 70, 77,
38, 30, 37, 78, 30, 76, 30, 76, 25, 82,
30, 76, 25, 25, 25, 26, 29, 34, 80, 81,
30, 1, 1, 46, 46, 55, 57, 61, 73, 67,
73, 30, 30, 30, 30, 30, 30, 80, 80, 31,
32, 78, 27, 33, 30, 30, 1, 12, 16, 18,
19, 20, 21, 22, 23, 25, 30, 41, 47, 48,
71, 72, 74, 17, 18, 19, 20, 30, 41, 56,
72, 74, 40, 53, 77, 40, 54, 59, 66, 77,
30, 41, 74, 40, 54, 65, 66, 77, 28, 80,
80, 81, 81, 30, 30, 24, 76, 75, 76, 80,
25, 81, 49, 1, 13, 30, 76, 75, 25, 80,
14, 79, 30, 79, 79, 79, 81, 25, 30, 30,
79, 30, 79, 30, 80, 30, 30, 30, 79, 33,
50, 30, 30, 30, 76
};
#define yyerrok (yyerrstatus = 0)
@ -1284,7 +1292,7 @@ yydestruct (yymsg, yytype, yyvaluep)
switch (yytype)
{
case 51: /* "choice_entry" */
case 52: /* "choice_entry" */
{
fprintf(stderr, "%s:%d: missing end statement for this entry\n",
@ -1294,7 +1302,7 @@ yydestruct (yymsg, yytype, yyvaluep)
};
break;
case 57: /* "if_entry" */
case 58: /* "if_entry" */
{
fprintf(stderr, "%s:%d: missing end statement for this entry\n",
@ -1304,7 +1312,7 @@ yydestruct (yymsg, yytype, yyvaluep)
};
break;
case 62: /* "menu_entry" */
case 64: /* "menu_entry" */
{
fprintf(stderr, "%s:%d: missing end statement for this entry\n",
@ -1614,39 +1622,39 @@ yyreduce:
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
case 8:
case 10:
{ zconf_error("unexpected end statement"); ;}
break;
case 9:
case 11:
{ zconf_error("unknown statement \"%s\"", (yyvsp[(2) - (4)].string)); ;}
break;
case 10:
case 12:
{
zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[(2) - (4)].id)->name);
;}
break;
case 11:
case 13:
{ zconf_error("invalid statement"); ;}
break;
case 25:
case 27:
{ zconf_error("unknown option \"%s\"", (yyvsp[(1) - (3)].string)); ;}
break;
case 26:
case 28:
{ zconf_error("invalid option"); ;}
break;
case 27:
case 29:
{
struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
@ -1656,7 +1664,7 @@ yyreduce:
;}
break;
case 28:
case 30:
{
menu_end_entry();
@ -1664,7 +1672,7 @@ yyreduce:
;}
break;
case 29:
case 31:
{
struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
@ -1674,7 +1682,7 @@ yyreduce:
;}
break;
case 30:
case 32:
{
if (current_entry->prompt)
@ -1686,7 +1694,7 @@ yyreduce:
;}
break;
case 38:
case 40:
{
menu_set_type((yyvsp[(1) - (3)].id)->stype);
@ -1696,7 +1704,7 @@ yyreduce:
;}
break;
case 39:
case 41:
{
menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
@ -1704,7 +1712,7 @@ yyreduce:
;}
break;
case 40:
case 42:
{
menu_add_expr(P_DEFAULT, (yyvsp[(2) - (4)].expr), (yyvsp[(3) - (4)].expr));
@ -1716,7 +1724,7 @@ yyreduce:
;}
break;
case 41:
case 43:
{
menu_add_symbol(P_SELECT, sym_lookup((yyvsp[(2) - (4)].string), 0), (yyvsp[(3) - (4)].expr));
@ -1724,7 +1732,7 @@ yyreduce:
;}
break;
case 42:
case 44:
{
menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,(yyvsp[(2) - (5)].symbol), (yyvsp[(3) - (5)].symbol)), (yyvsp[(4) - (5)].expr));
@ -1732,7 +1740,7 @@ yyreduce:
;}
break;
case 45:
case 47:
{
struct kconf_id *id = kconf_id_lookup((yyvsp[(2) - (3)].string), strlen((yyvsp[(2) - (3)].string)));
@ -1744,17 +1752,17 @@ yyreduce:
;}
break;
case 46:
case 48:
{ (yyval.string) = NULL; ;}
break;
case 47:
case 49:
{ (yyval.string) = (yyvsp[(2) - (2)].string); ;}
break;
case 48:
case 50:
{
struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), SYMBOL_CHOICE);
@ -1765,14 +1773,14 @@ yyreduce:
;}
break;
case 49:
case 51:
{
(yyval.menu) = menu_add_menu();
;}
break;
case 50:
case 52:
{
if (zconf_endtoken((yyvsp[(1) - (1)].id), T_CHOICE, T_ENDCHOICE)) {
@ -1782,7 +1790,7 @@ yyreduce:
;}
break;
case 58:
case 60:
{
menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
@ -1790,7 +1798,7 @@ yyreduce:
;}
break;
case 59:
case 61:
{
if ((yyvsp[(1) - (3)].id)->stype == S_BOOLEAN || (yyvsp[(1) - (3)].id)->stype == S_TRISTATE) {
@ -1803,7 +1811,7 @@ yyreduce:
;}
break;
case 60:
case 62:
{
current_entry->sym->flags |= SYMBOL_OPTIONAL;
@ -1811,7 +1819,7 @@ yyreduce:
;}
break;
case 61:
case 63:
{
if ((yyvsp[(1) - (4)].id)->stype == S_UNKNOWN) {
@ -1823,7 +1831,7 @@ yyreduce:
;}
break;
case 64:
case 66:
{
printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
@ -1833,7 +1841,7 @@ yyreduce:
;}
break;
case 65:
case 67:
{
if (zconf_endtoken((yyvsp[(1) - (1)].id), T_IF, T_ENDIF)) {
@ -1843,7 +1851,14 @@ yyreduce:
;}
break;
case 71:
case 73:
{
menu_add_prompt(P_MENU, (yyvsp[(2) - (3)].string), NULL);
;}
break;
case 74:
{
menu_add_entry(NULL);
@ -1852,14 +1867,14 @@ yyreduce:
;}
break;
case 72:
case 75:
{
(yyval.menu) = menu_add_menu();
;}
break;
case 73:
case 76:
{
if (zconf_endtoken((yyvsp[(1) - (1)].id), T_MENU, T_ENDMENU)) {
@ -1869,7 +1884,7 @@ yyreduce:
;}
break;
case 79:
case 82:
{
printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
@ -1877,7 +1892,7 @@ yyreduce:
;}
break;
case 80:
case 83:
{
menu_add_entry(NULL);
@ -1886,14 +1901,14 @@ yyreduce:
;}
break;
case 81:
case 84:
{
menu_end_entry();
;}
break;
case 82:
case 85:
{
printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
@ -1901,14 +1916,14 @@ yyreduce:
;}
break;
case 83:
case 86:
{
current_entry->help = (yyvsp[(2) - (2)].string);
;}
break;
case 88:
case 91:
{
menu_add_dep((yyvsp[(3) - (4)].expr));
@ -1916,85 +1931,85 @@ yyreduce:
;}
break;
case 90:
case 93:
{
menu_add_prompt(P_PROMPT, (yyvsp[(1) - (2)].string), (yyvsp[(2) - (2)].expr));
;}
break;
case 93:
case 96:
{ (yyval.id) = (yyvsp[(1) - (2)].id); ;}
break;
case 94:
{ (yyval.id) = (yyvsp[(1) - (2)].id); ;}
break;
case 95:
case 97:
{ (yyval.id) = (yyvsp[(1) - (2)].id); ;}
break;
case 98:
{ (yyval.expr) = NULL; ;}
break;
case 99:
{ (yyval.expr) = (yyvsp[(2) - (2)].expr); ;}
break;
case 100:
{ (yyval.expr) = expr_alloc_symbol((yyvsp[(1) - (1)].symbol)); ;}
{ (yyval.id) = (yyvsp[(1) - (2)].id); ;}
break;
case 101:
{ (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
{ (yyval.expr) = NULL; ;}
break;
case 102:
{ (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
{ (yyval.expr) = (yyvsp[(2) - (2)].expr); ;}
break;
case 103:
{ (yyval.expr) = (yyvsp[(2) - (3)].expr); ;}
{ (yyval.expr) = expr_alloc_symbol((yyvsp[(1) - (1)].symbol)); ;}
break;
case 104:
{ (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[(2) - (2)].expr)); ;}
{ (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
break;
case 105:
{ (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
{ (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
break;
case 106:
{ (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
{ (yyval.expr) = (yyvsp[(2) - (3)].expr); ;}
break;
case 107:
{ (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 0); free((yyvsp[(1) - (1)].string)); ;}
{ (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[(2) - (2)].expr)); ;}
break;
case 108:
{ (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); ;}
{ (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
break;
case 109:
{ (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
break;
case 110:
{ (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 0); free((yyvsp[(1) - (1)].string)); ;}
break;
case 111:
{ (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); ;}
break;
case 112:
{ (yyval.string) = NULL; ;}
break;
@ -2239,6 +2254,10 @@ void conf_parse(const char *name)
prop = prop_alloc(P_DEFAULT, modules_sym);
prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0));
}
rootmenu.prompt->text = _(rootmenu.prompt->text);
rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
menu_finalize(&rootmenu);
for_all_symbols(i, sym) {
if (sym_check_deps(sym))

View File

@ -36,7 +36,7 @@ static struct menu *current_menu, *current_entry;
#define YYERROR_VERBOSE
#endif
%}
%expect 26
%expect 28
%union
{
@ -104,14 +104,15 @@ static struct menu *current_menu, *current_entry;
%}
%%
input: stmt_list;
input: nl start | start;
start: mainmenu_stmt stmt_list | stmt_list;
stmt_list:
/* empty */
| stmt_list common_stmt
| stmt_list choice_stmt
| stmt_list menu_stmt
| stmt_list T_MAINMENU prompt nl
| stmt_list end { zconf_error("unexpected end statement"); }
| stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); }
| stmt_list option_name error T_EOL
@ -342,6 +343,13 @@ if_block:
| if_block choice_stmt
;
/* mainmenu entry */
mainmenu_stmt: T_MAINMENU prompt nl
{
menu_add_prompt(P_MENU, $2, NULL);
};
/* menu entry */
menu: T_MENU prompt T_EOL
@ -494,6 +502,10 @@ void conf_parse(const char *name)
prop = prop_alloc(P_DEFAULT, modules_sym);
prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0));
}
rootmenu.prompt->text = _(rootmenu.prompt->text);
rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
menu_finalize(&rootmenu);
for_all_symbols(i, sym) {
if (sym_check_deps(sym))