summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--Config.in4
-rw-r--r--Makefile3
-rw-r--r--TODO1
-rw-r--r--config/Makefile16
-rwxr-xr-xconfig/check.sh14
-rw-r--r--config/checklist.c377
-rw-r--r--config/colors.h161
-rw-r--r--config/conf.c346
-rw-r--r--config/confdata.c822
-rw-r--r--config/dialog.h196
-rw-r--r--config/expr.c89
-rw-r--r--config/expr.h106
-rw-r--r--config/glob.c848
-rw-r--r--config/glob.h100
-rw-r--r--config/images.c326
-rw-r--r--config/inputbox.c240
-rw-r--r--config/kconfig_load.c35
-rw-r--r--config/kxgettext.c233
-rw-r--r--config/lex.backup1
-rw-r--r--config/lex.zconf.c_shipped2416
-rw-r--r--config/lkc.h72
-rw-r--r--config/lkc_proto.h12
-rw-r--r--config/lxdialog/.gitignore4
-rw-r--r--config/lxdialog/BIG.FAT.WARNING4
-rw-r--r--config/lxdialog/check-lxdialog.sh82
-rw-r--r--config/lxdialog/checklist.c326
-rw-r--r--config/lxdialog/dialog.h230
-rw-r--r--config/lxdialog/inputbox.c238
-rw-r--r--config/lxdialog/menubox.c434
-rw-r--r--config/lxdialog/textbox.c391
-rw-r--r--config/lxdialog/util.c657
-rw-r--r--config/lxdialog/yesno.c114
-rw-r--r--config/mconf.c903
-rw-r--r--config/menu.c171
-rw-r--r--config/menubox.c438
-rw-r--r--config/msgbox.c85
-rw-r--r--config/symbol.c393
-rw-r--r--config/textbox.c556
-rw-r--r--config/util.c442
-rw-r--r--config/yesno.c118
-rw-r--r--config/zconf.gperf44
-rw-r--r--config/zconf.hash.c_shipped237
-rw-r--r--config/zconf.l172
-rw-r--r--config/zconf.output2133
-rw-r--r--config/zconf.tab.c_shipped2490
-rw-r--r--config/zconf.y405
-rw-r--r--mk/build.mk3
-rw-r--r--package/Config.in4
-rw-r--r--package/apr/Config.in4
-rw-r--r--package/asterisk/Config.in20
-rw-r--r--package/atftp/Config.in2
-rw-r--r--package/avahi/Config.in4
-rw-r--r--package/axtls/Config.in2
-rw-r--r--package/bc/Config.in2
-rw-r--r--package/bind/Config.in16
-rw-r--r--package/bogofilter/Config.in8
-rw-r--r--package/collectd/Config.in8
-rw-r--r--package/curl/Config.in4
-rw-r--r--package/cyrus-sasl/Config.in2
-rw-r--r--package/dhcp/Config.in2
-rw-r--r--package/dropbear/Config.in2
-rw-r--r--package/e2fsprogs/Config.in4
-rw-r--r--package/expat/Config.in2
-rw-r--r--package/faad2/Config.in2
-rw-r--r--package/fetchmail/Config.in4
-rw-r--r--package/flac/Config.in2
-rw-r--r--package/freeradius-client/Config.in2
-rw-r--r--package/freeradius-server/Config.in56
-rw-r--r--package/freetype/Config.in2
-rw-r--r--package/gmp/Config.in2
-rw-r--r--package/gnutls/Config.in10
-rw-r--r--package/gsm/Config.in4
-rw-r--r--package/hostapd/Config.in2
-rw-r--r--package/iptables/Config.in4
-rw-r--r--package/irssi/Config.in4
-rw-r--r--package/jpeg/Config.in2
-rw-r--r--package/kismet/Config.in2
-rw-r--r--package/knock/Config.in2
-rw-r--r--package/libdb/Config.in2
-rw-r--r--package/libshout/Config.in2
-rw-r--r--package/libtirpc/Makefile8
-rw-r--r--package/libtool/Config.in2
-rw-r--r--package/libtorrent/Config.in2
-rw-r--r--package/lighttpd/Config.in66
-rw-r--r--package/lua/Config.in2
-rw-r--r--package/mini_httpd/Config.in2
-rw-r--r--package/miredo/Config.in6
-rw-r--r--package/mksh/Config.in4
-rw-r--r--package/mpd/Config.in30
-rw-r--r--package/mysql/Config.in6
-rw-r--r--package/nano/Config.in4
-rw-r--r--package/ncurses/Config.in2
-rw-r--r--package/ndisc/Config.in10
-rw-r--r--package/olsrd/Config.in16
-rw-r--r--package/opencdk/Config.in2
-rw-r--r--package/opensips/Config.in92
-rw-r--r--package/openssl/Config.in6
-rw-r--r--package/openvpn/Config.in14
-rw-r--r--package/osiris/Config.in2
-rw-r--r--package/pcre/Config.in2
-rw-r--r--package/php/Config.in28
-rw-r--r--package/pmacct/Config.in2
-rw-r--r--package/popt/Config.in2
-rw-r--r--package/portmap/Config.in2
-rw-r--r--package/postgresql/Config.in2
-rw-r--r--package/ppp/Config.in14
-rw-r--r--package/quagga/Config.in30
-rw-r--r--package/readline/Config.in2
-rw-r--r--package/rp-pppoe/Config.in2
-rw-r--r--package/rrdcollect/Config.in8
-rw-r--r--package/rrs/Config.in2
-rw-r--r--package/samba/Config.in2
-rw-r--r--package/sane-backends/Config.in116
-rw-r--r--package/shorewall-common/Config.in4
-rw-r--r--package/shorewall-shell/Config.in2
-rw-r--r--package/speex/Config.in4
-rw-r--r--package/sqlite/Config.in4
-rw-r--r--package/squid/Config.in34
-rw-r--r--package/subversion/Config.in4
-rw-r--r--package/tcp_wrappers/Config.in2
-rw-r--r--package/tinyproxy/Config.in12
-rw-r--r--package/tntnet/Config.in4
-rw-r--r--package/ulogd/Config.in20
-rw-r--r--package/updatedd/Config.in18
-rw-r--r--package/usbutils/Config.in2
-rw-r--r--package/util-linux-ng/Config.in2
-rw-r--r--package/weechat/Config.in4
-rw-r--r--package/wpa_supplicant/Config.in4
-rw-r--r--target/Config.in4
-rw-r--r--target/linux/config/Config.in.block14
-rw-r--r--target/linux/config/Config.in.bluetooth24
-rw-r--r--target/linux/config/Config.in.fs4
-rw-r--r--target/linux/config/Config.in.fsnet2
-rw-r--r--target/linux/config/Config.in.ipvs8
-rw-r--r--target/linux/config/Config.in.lib2
-rw-r--r--target/linux/config/Config.in.multimedia12
-rw-r--r--target/linux/config/Config.in.netfilter44
-rw-r--r--target/linux/config/Config.in.network12
-rw-r--r--target/linux/config/Config.in.nls76
-rw-r--r--target/linux/config/Config.in.pcmcia4
-rw-r--r--target/linux/config/Config.in.sched20
-rw-r--r--target/linux/config/Config.in.usb44
143 files changed, 11182 insertions, 7380 deletions
diff --git a/.gitignore b/.gitignore
index bdba437cd..e05128c04 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,10 @@
config/conf
+config/lex.backup
config/lex.zconf.c
config/lkc_defs.h
config/mconf
+config/zconf.hash.c
+config/zconf.output
config/zconf.tab.c
config/zconf.tab.h
prereq.mk
@@ -16,6 +19,7 @@ root_*/
bin_*/
build_*/
config/*.o
+config/lxdialog/*.o
make.log
dl/
package/*/info.mk
diff --git a/Config.in b/Config.in
index 3db3c8159..2f741cdc9 100644
--- a/Config.in
+++ b/Config.in
@@ -1,6 +1,10 @@
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.
+config ADKVERSION
+ string
+ option env="ADKVERSION"
+
mainmenu "OpenADK Configuration"
config MODULES
diff --git a/Makefile b/Makefile
index 4fea27925..dfef6791e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,9 @@
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.
+ADKVERSION= 0.1.0
+export ADKVERSION
+
GMAKE?= $(PWD)/scripts/make
GMAKE_FMK= ${GMAKE} -f $(PWD)/mk/build.mk
GMAKE_INV= ${GMAKE_FMK} --no-print-directory
diff --git a/TODO b/TODO
index 895f3c6a7..86140051d 100644
--- a/TODO
+++ b/TODO
@@ -17,3 +17,4 @@
- network scripts for wireless client / ap
- network scripts for pppoe
- publish via trac+git
+- customise mconf help texts to better fit for OpenADK
diff --git a/config/Makefile b/config/Makefile
index 1f6debc8f..ae7a293dd 100644
--- a/config/Makefile
+++ b/config/Makefile
@@ -36,9 +36,9 @@ endif
endif
CONF_SRC =conf.c
-MCONF_SRC =mconf.c checklist.c menubox.c textbox.c yesno.c inputbox.c util.c msgbox.c
-SHARED_SRC=zconf.tab.c glob.c
-SHARED_DEPS:=lkc.h lkc_proto.h lkc_defs.h expr.h zconf.tab.h glob.h
+MCONF_SRC =mconf.c $(wildcard lxdialog/*.c)
+SHARED_SRC=zconf.tab.c
+SHARED_DEPS:=lkc.h lkc_proto.h lkc_defs.h expr.h zconf.tab.h
CONF_OBJS =$(patsubst %.c,%.o, $(CONF_SRC))
MCONF_OBJS=$(patsubst %.c,%.o, $(MCONF_SRC))
SHARED_OBJS=$(patsubst %.c,%.o, $(SHARED_SRC))
@@ -72,13 +72,16 @@ ifdef LKC_GENPARSER
%.tab.c %.tab.h: %.y
bison -t -d -v -b $* -p $(notdir $*) $<
+%.hash.c: %.gperf
+ gperf < $< > $@
+
lex.%.c: %.l
flex -P$(notdir $*) -o$@ $<
lex.zconf.o: lex.zconf.c $(SHARED_DEPS)
$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
-zconf.tab.o: zconf.tab.c lex.zconf.c confdata.c expr.c symbol.c menu.c $(SHARED_DEPS)
+zconf.tab.o: zconf.tab.c zconf.hash.c lex.zconf.c confdata.c expr.c symbol.c menu.c $(SHARED_DEPS)
$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
else
@@ -89,7 +92,10 @@ lex.zconf.o: lex.zconf.c $(SHARED_DEPS)
lex.zconf.c: lex.zconf.c_shipped
$(CP) lex.zconf.c_shipped lex.zconf.c
-zconf.tab.o: zconf.tab.c lex.zconf.c confdata.c expr.c symbol.c menu.c $(SHARED_DEPS)
+zconf.hash.c: zconf.hash.c_shipped
+ $(CP) zconf.hash.c_shipped zconf.hash.c
+
+zconf.tab.o: zconf.tab.c zconf.hash.c lex.zconf.c confdata.c expr.c symbol.c menu.c $(SHARED_DEPS)
$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
zconf.tab.c: zconf.tab.c_shipped
diff --git a/config/check.sh b/config/check.sh
new file mode 100755
index 000000000..fa59cbf9d
--- /dev/null
+++ b/config/check.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+# Needed for systems without gettext
+$* -xc -o /dev/null - > /dev/null 2>&1 << EOF
+#include <libintl.h>
+int main()
+{
+ gettext("");
+ return 0;
+}
+EOF
+if [ ! "$?" -eq "0" ]; then
+ echo -DKBUILD_NO_NLS;
+fi
+
diff --git a/config/checklist.c b/config/checklist.c
deleted file mode 100644
index ec5a9ad68..000000000
--- a/config/checklist.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * checklist.c -- implements the checklist box
- *
- * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- * Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension
- * Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-static int list_width, check_x, item_x, checkflag;
-
-/*
- * Print list item
- */
-static void
-print_item (WINDOW * win, const char *item, int status,
- int choice, int selected)
-{
- int i;
-
- /* Clear 'residue' of last item */
- wattrset (win, menubox_attr);
- wmove (win, choice, 0);
- for (i = 0; i < list_width; i++)
- waddch (win, ' ');
-
- wmove (win, choice, check_x);
- wattrset (win, selected ? check_selected_attr : check_attr);
- if (checkflag == FLAG_CHECK)
- wprintw (win, "[%c]", status ? 'X' : ' ');
- else
- wprintw (win, "(%c)", status ? 'X' : ' ');
-
-#if 0
- wattrset (win, selected ? tag_selected_attr : tag_attr);
- mvwaddch(win, choice, item_x, item[0]);
- wattrset (win, selected ? item_selected_attr : item_attr);
- waddstr (win, (char *)item+1);
-#else
- wattrset (win, selected ? item_selected_attr : item_attr);
- waddstr (win, item);
-#endif
- if (selected) {
- wmove (win, choice, check_x+1);
- wrefresh (win);
- }
-}
-
-/*
- * Print the scroll indicators.
- */
-static void
-print_arrows (WINDOW * win, int choice, int item_no, int scroll,
- int y, int x, int height)
-{
- wmove(win, y, x);
-
- if (scroll > 0) {
- wattrset (win, uarrow_attr);
- waddch (win, ACS_UARROW);
- waddstr (win, "(-)");
- }
- else {
- wattrset (win, menubox_attr);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- }
-
- y = y + height + 1;
- wmove(win, y, x);
-
- if ((height < item_no) && (scroll + choice < item_no - 1)) {
- wattrset (win, darrow_attr);
- waddch (win, ACS_DARROW);
- waddstr (win, "(+)");
- }
- else {
- wattrset (win, menubox_border_attr);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- }
-}
-
-/*
- * Display the termination buttons
- */
-static void
-print_buttons( WINDOW *dialog, int height, int width, int selected)
-{
- int x = width / 2 - 11;
- int y = height - 2;
-
- print_button (dialog, "Select", y, x, selected == 0);
- print_button (dialog, " Help ", y, x + 14, selected == 1);
-
- wmove(dialog, y, x+1 + 14*selected);
- wrefresh (dialog);
-}
-
-/*
- * Display a dialog box with a list of options that can be turned on or off
- * The `flag' parameter is used to select between radiolist and checklist.
- */
-int
-dialog_checklist (const char *title, const char *prompt, int height, int width,
- int list_height, int item_no, struct dialog_list_item ** items,
- int flag)
-
-{
- int i, x, y, box_x, box_y;
- int key = 0, button = 0, choice = 0, scroll = 0, max_choice, *status;
- WINDOW *dialog, *list;
-
- checkflag = flag;
-
- /* Allocate space for storing item on/off status */
- if ((status = malloc (sizeof (int) * item_no)) == NULL) {
- endwin ();
- fprintf (stderr,
- "\nCan't allocate memory in dialog_checklist().\n");
- exit (-1);
- }
-
- /* Initializes status */
- for (i = 0; i < item_no; i++) {
- status[i] = (items[i]->selected == 1); /* ON */
- if ((!choice && status[i]) || items[i]->selected == 2) /* SELECTED */
- choice = i + 1;
- }
- if (choice)
- choice--;
-
- max_choice = MIN (list_height, item_no);
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height-3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- waddch (dialog, ACS_RTEE);
-
- if (title != NULL && strlen(title) >= width-2 ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
-
- wattrset (dialog, dialog_attr);
- print_autowrap (dialog, prompt, width - 2, 1, 3);
-
- list_width = width - 6;
- box_y = height - list_height - 5;
- box_x = (width - list_width) / 2 - 1;
-
- /* create new window for the list */
- list = subwin (dialog, list_height, list_width, y+box_y+1, x+box_x+1);
-
- keypad (list, TRUE);
-
- /* draw a box around the list items */
- draw_box (dialog, box_y, box_x, list_height + 2, list_width + 2,
- menubox_border_attr, menubox_attr);
-
- /* Find length of longest item in order to center checklist */
- check_x = 0;
- for (i = 0; i < item_no; i++)
- check_x = MAX (check_x, + strlen (items[i]->name) + 4);
-
- check_x = (list_width - check_x) / 2;
- item_x = check_x + 4;
-
- if (choice >= list_height) {
- scroll = choice - list_height + 1;
- choice -= scroll;
- }
-
- /* Print the list */
- for (i = 0; i < max_choice; i++) {
- print_item (list, items[scroll + i]->name,
- status[i+scroll], i, i == choice);
- }
-
- print_arrows(dialog, choice, item_no, scroll,
- box_y, box_x + check_x + 5, list_height);
-
- print_buttons(dialog, height, width, 0);
-
- wnoutrefresh (list);
- wnoutrefresh (dialog);
- doupdate ();
-
- while (key != ESC) {
- key = wgetch (dialog);
-
- for (i = 0; i < max_choice; i++)
- if (toupper(key) == toupper(items[scroll + i]->name[0]))
- break;
-
-
- if ( i < max_choice || key == KEY_UP || key == KEY_DOWN ||
- key == '+' || key == '-' ) {
- if (key == KEY_UP || key == '-') {
- if (!choice) {
- if (!scroll)
- continue;
- /* Scroll list down */
- if (list_height > 1) {
- /* De-highlight current first item */
- print_item (list, items[scroll]->name,
- status[scroll], 0, FALSE);
- scrollok (list, TRUE);
- wscrl (list, -1);
- scrollok (list, FALSE);
- }
- scroll--;
- print_item (list, items[scroll]->name,
- status[scroll], 0, TRUE);
- wnoutrefresh (list);
-
- print_arrows(dialog, choice, item_no, scroll,
- box_y, box_x + check_x + 5, list_height);
-
- wrefresh (dialog);
-
- continue; /* wait for another key press */
- } else
- i = choice - 1;
- } else if (key == KEY_DOWN || key == '+') {
- if (choice == max_choice - 1) {
- if (scroll + choice >= item_no - 1)
- continue;
- /* Scroll list up */
- if (list_height > 1) {
- /* De-highlight current last item before scrolling up */
- print_item (list, items[scroll + max_choice - 1]->name,
- status[scroll + max_choice - 1],
- max_choice - 1, FALSE);
- scrollok (list, TRUE);
- scroll (list);
- scrollok (list, FALSE);
- }
- scroll++;
- print_item (list, items[scroll + max_choice - 1]->name,
- status[scroll + max_choice - 1],
- max_choice - 1, TRUE);
- wnoutrefresh (list);
-
- print_arrows(dialog, choice, item_no, scroll,
- box_y, box_x + check_x + 5, list_height);
-
- wrefresh (dialog);
-
- continue; /* wait for another key press */
- } else
- i = choice + 1;
- }
- if (i != choice) {
- /* De-highlight current item */
- print_item (list, items[scroll + choice]->name,
- status[scroll + choice], choice, FALSE);
- /* Highlight new item */
- choice = i;
- print_item (list, items[scroll + choice]->name,
- status[scroll + choice], choice, TRUE);
- wnoutrefresh (list);
- wrefresh (dialog);
- }
- continue; /* wait for another key press */
- }
- switch (key) {
- case 'H':
- case 'h':
- case '?':
- for (i = 0; i < item_no; i++)
- items[i]->selected = 0;
- items[scroll + choice]->selected = 1;
- delwin (dialog);
- free (status);
- return 1;
- case TAB:
- case KEY_LEFT:
- case KEY_RIGHT:
- button = ((key == KEY_LEFT ? --button : ++button) < 0)
- ? 1 : (button > 1 ? 0 : button);
-
- print_buttons(dialog, height, width, button);
- wrefresh (dialog);
- break;
- case 'S':
- case 's':
- case ' ':
- case '\n':
- if (!button) {
- if (flag == FLAG_CHECK) {
- status[scroll + choice] = !status[scroll + choice];
- wmove (list, choice, check_x);
- wattrset (list, check_selected_attr);
- wprintw (list, "[%c]", status[scroll + choice] ? 'X' : ' ');
- } else {
- if (!status[scroll + choice]) {
- for (i = 0; i < item_no; i++)
- status[i] = 0;
- status[scroll + choice] = 1;
- for (i = 0; i < max_choice; i++)
- print_item (list, items[scroll + i]->name,
- status[scroll + i], i, i == choice);
- }
- }
- wnoutrefresh (list);
- wrefresh (dialog);
-
- for (i = 0; i < item_no; i++) {
- items[i]->selected = status[i];
- }
- } else {
- for (i = 0; i < item_no; i++)
- items[i]->selected = 0;
- items[scroll + choice]->selected = 1;
- }
- delwin (dialog);
- free (status);
- return button;
- case 'X':
- case 'x':
- key = ESC;
- case ESC:
- break;
- }
-
- /* Now, update everything... */
- doupdate ();
- }
-
-
- delwin (dialog);
- free (status);
- return -1; /* ESC pressed */
-}
diff --git a/config/colors.h b/config/colors.h
deleted file mode 100644
index d34dd37c6..000000000
--- a/config/colors.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * colors.h -- color attribute definitions
- *
- * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * Default color definitions
- *
- * *_FG = foreground
- * *_BG = background
- * *_HL = highlight?
- */
-#define SCREEN_FG COLOR_CYAN
-#define SCREEN_BG COLOR_BLUE
-#define SCREEN_HL TRUE
-
-#define SHADOW_FG COLOR_BLACK
-#define SHADOW_BG COLOR_BLACK
-#define SHADOW_HL TRUE
-
-#define DIALOG_FG COLOR_BLACK
-#define DIALOG_BG COLOR_WHITE
-#define DIALOG_HL FALSE
-
-#define TITLE_FG COLOR_YELLOW
-#define TITLE_BG COLOR_WHITE
-#define TITLE_HL TRUE
-
-#define BORDER_FG COLOR_WHITE
-#define BORDER_BG COLOR_WHITE
-#define BORDER_HL TRUE
-
-#define BUTTON_ACTIVE_FG COLOR_WHITE
-#define BUTTON_ACTIVE_BG COLOR_BLUE
-#define BUTTON_ACTIVE_HL TRUE
-
-#define BUTTON_INACTIVE_FG COLOR_BLACK
-#define BUTTON_INACTIVE_BG COLOR_WHITE
-#define BUTTON_INACTIVE_HL FALSE
-
-#define BUTTON_KEY_ACTIVE_FG COLOR_WHITE
-#define BUTTON_KEY_ACTIVE_BG COLOR_BLUE
-#define BUTTON_KEY_ACTIVE_HL TRUE
-
-#define BUTTON_KEY_INACTIVE_FG COLOR_RED
-#define BUTTON_KEY_INACTIVE_BG COLOR_WHITE
-#define BUTTON_KEY_INACTIVE_HL FALSE
-
-#define BUTTON_LABEL_ACTIVE_FG COLOR_YELLOW
-#define BUTTON_LABEL_ACTIVE_BG COLOR_BLUE
-#define BUTTON_LABEL_ACTIVE_HL TRUE
-
-#define BUTTON_LABEL_INACTIVE_FG COLOR_BLACK
-#define BUTTON_LABEL_INACTIVE_BG COLOR_WHITE
-#define BUTTON_LABEL_INACTIVE_HL TRUE
-
-#define INPUTBOX_FG COLOR_BLACK
-#define INPUTBOX_BG COLOR_WHITE
-#define INPUTBOX_HL FALSE
-
-#define INPUTBOX_BORDER_FG COLOR_BLACK
-#define INPUTBOX_BORDER_BG COLOR_WHITE
-#define INPUTBOX_BORDER_HL FALSE
-
-#define SEARCHBOX_FG COLOR_BLACK
-#define SEARCHBOX_BG COLOR_WHITE
-#define SEARCHBOX_HL FALSE
-
-#define SEARCHBOX_TITLE_FG COLOR_YELLOW
-#define SEARCHBOX_TITLE_BG COLOR_WHITE
-#define SEARCHBOX_TITLE_HL TRUE
-
-#define SEARCHBOX_BORDER_FG COLOR_WHITE
-#define SEARCHBOX_BORDER_BG COLOR_WHITE
-#define SEARCHBOX_BORDER_HL TRUE
-
-#define POSITION_INDICATOR_FG COLOR_YELLOW
-#define POSITION_INDICATOR_BG COLOR_WHITE
-#define POSITION_INDICATOR_HL TRUE
-
-#define MENUBOX_FG COLOR_BLACK
-#define MENUBOX_BG COLOR_WHITE
-#define MENUBOX_HL FALSE
-
-#define MENUBOX_BORDER_FG COLOR_WHITE
-#define MENUBOX_BORDER_BG COLOR_WHITE
-#define MENUBOX_BORDER_HL TRUE
-
-#define ITEM_FG COLOR_BLACK
-#define ITEM_BG COLOR_WHITE
-#define ITEM_HL FALSE
-
-#define ITEM_SELECTED_FG COLOR_WHITE
-#define ITEM_SELECTED_BG COLOR_BLUE
-#define ITEM_SELECTED_HL TRUE
-
-#define TAG_FG COLOR_YELLOW
-#define TAG_BG COLOR_WHITE
-#define TAG_HL TRUE
-
-#define TAG_SELECTED_FG COLOR_YELLOW
-#define TAG_SELECTED_BG COLOR_BLUE
-#define TAG_SELECTED_HL TRUE
-
-#define TAG_KEY_FG COLOR_YELLOW
-#define TAG_KEY_BG COLOR_WHITE
-#define TAG_KEY_HL TRUE
-
-#define TAG_KEY_SELECTED_FG COLOR_YELLOW
-#define TAG_KEY_SELECTED_BG COLOR_BLUE
-#define TAG_KEY_SELECTED_HL TRUE
-
-#define CHECK_FG COLOR_BLACK
-#define CHECK_BG COLOR_WHITE
-#define CHECK_HL FALSE
-
-#define CHECK_SELECTED_FG COLOR_WHITE
-#define CHECK_SELECTED_BG COLOR_BLUE
-#define CHECK_SELECTED_HL TRUE
-
-#define UARROW_FG COLOR_GREEN
-#define UARROW_BG COLOR_WHITE
-#define UARROW_HL TRUE
-
-#define DARROW_FG COLOR_GREEN
-#define DARROW_BG COLOR_WHITE
-#define DARROW_HL TRUE
-
-/* End of default color definitions */
-
-#define C_ATTR(x,y) ((x ? A_BOLD : 0) | COLOR_PAIR((y)))
-#define COLOR_NAME_LEN 10
-#define COLOR_COUNT 8
-
-/*
- * Global variables
- */
-
-typedef struct {
- char name[COLOR_NAME_LEN];
- int value;
-} color_names_st;
-
-extern color_names_st color_names[];
-extern int color_table[][3];
diff --git a/config/conf.c b/config/conf.c
index 08e2895d8..3baaaecd6 100644
--- a/config/conf.c
+++ b/config/conf.c
@@ -3,18 +3,19 @@
* Released under the terms of the GNU GPL v2.0.
*/
+#include <locale.h>
#include <ctype.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#include <time.h>
+#include <unistd.h>
#include <sys/stat.h>
+#include <sys/time.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
-extern int output_mode;
-
static void conf(struct menu *menu);
static void check_conf(struct menu *menu);
@@ -25,7 +26,6 @@ enum {
set_default,
set_yes,
set_mod,
- ask_mod,
set_no,
set_random
} input_mode = ask_all;
@@ -33,12 +33,20 @@ char *defconfig_file;
static int indent = 1;
static int valid_stdin = 1;
+static int sync_kconfig;
static int conf_cnt;
-static int press_enter = 0;
static char line[128];
static struct menu *rootEntry;
-static char nohelp_text[] = "Sorry, no help available for this option yet.\n";
+static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
+
+static const char *get_help(struct menu *menu)
+{
+ if (menu_has_help(menu))
+ return _(menu_get_help(menu));
+ else
+ return nohelp_text;
+}
static void strip(char *str)
{
@@ -59,21 +67,20 @@ static void strip(char *str)
static void check_stdin(void)
{
- if (!valid_stdin && input_mode == ask_silent && !press_enter) {
- printf("aborted!\n\n");
- printf("Console input/output is redirected. ");
- printf("Run 'make oldconfig' to update configuration.\n\n");
+ if (!valid_stdin) {
+ printf(_("aborted!\n\n"));
+ printf(_("Console input/output is redirected. "));
+ printf(_("Run 'make oldconfig' to update configuration.\n\n"));
exit(1);
}
}
-static void conf_askvalue(struct symbol *sym, const char *def)
+static int conf_askvalue(struct symbol *sym, const char *def)
{
enum symbol_type type = sym_get_type(sym);
- tristate val;
if (!sym_has_value(sym))
- printf("(NEW) ");
+ printf(_("(NEW) "));
line[0] = '\n';
line[1] = 0;
@@ -82,25 +89,21 @@ static void conf_askvalue(struct symbol *sym, const char *def)
printf("%s\n", def);
line[0] = '\n';
line[1] = 0;
- return;
+ return 0;
}
switch (input_mode) {
case ask_new:
case ask_silent:
- if (sym_has_value(sym) ||
- (output_mode && !(sym->flags & SYMBOL_WRITE))) {
+ if (sym_has_value(sym)) {
printf("%s\n", def);
- return;
+ return 0;
}
check_stdin();
case ask_all:
fflush(stdout);
fgets(line, 128, stdin);
- return;
- case set_default:
- printf("%s\n", def);
- return;
+ return 1;
default:
break;
}
@@ -110,82 +113,34 @@ static void conf_askvalue(struct symbol *sym, const char *def)
case S_HEX:
case S_STRING:
printf("%s\n", def);
- return;
+ return 1;
default:
;
}
- switch (input_mode) {
- case set_yes:
- if (sym_tristate_within_range(sym, yes)) {
- line[0] = 'y';
- line[1] = '\n';
- line[2] = 0;
- break;
- }
- case ask_mod:
- case set_mod:
- if (type == S_TRISTATE) {
- if (sym_tristate_within_range(sym, mod)) {
- line[0] = 'm';
- line[1] = '\n';
- line[2] = 0;
- break;
- }
- } else {
- if (sym_tristate_within_range(sym, yes)) {
- line[0] = 'y';
- line[1] = '\n';
- line[2] = 0;
- break;
- }
- }
- case set_no:
- if (sym_tristate_within_range(sym, no)) {
- line[0] = 'n';
- line[1] = '\n';
- line[2] = 0;
- break;
- }
- case set_random:
- do {
- val = (tristate)(random() % 3);
- } while (!sym_tristate_within_range(sym, val));
- switch (val) {
- case no: line[0] = 'n'; break;
- case mod: line[0] = 'm'; break;
- case yes: line[0] = 'y'; break;
- }
- line[1] = '\n';
- line[2] = 0;
- break;
- default:
- break;
- }
printf("%s", line);
+ return 1;
}
int conf_string(struct menu *menu)
{
struct symbol *sym = menu->sym;
- const char *def, *help;
+ const char *def;
while (1) {
- printf("%*s%s ", indent - 1, "", menu->prompt->text);
+ printf("%*s%s ", indent - 1, "", _(menu->prompt->text));
printf("(%s) ", sym->name);
def = sym_get_string_value(sym);
if (sym_get_string_value(sym))
printf("[%s] ", def);
- conf_askvalue(sym, def);
+ if (!conf_askvalue(sym, def))
+ return 0;
switch (line[0]) {
case '\n':
break;
case '?':
/* print help */
if (line[1] == '\n') {
- help = nohelp_text;
- if (menu->sym->help)
- help = menu->sym->help;
- printf("\n%s\n", menu->sym->help);
+ printf("\n%s\n", get_help(menu));
def = NULL;
break;
}
@@ -203,10 +158,9 @@ static int conf_sym(struct menu *menu)
struct symbol *sym = menu->sym;
int type;
tristate oldval, newval;
- const char *help;
while (1) {
- printf("%*s%s ", indent - 1, "", menu->prompt->text);
+ printf("%*s%s ", indent - 1, "", _(menu->prompt->text));
if (sym->name)
printf("(%s) ", sym->name);
type = sym_get_type(sym);
@@ -229,10 +183,11 @@ static int conf_sym(struct menu *menu)
printf("/m");
if (oldval != yes && sym_tristate_within_range(sym, yes))
printf("/y");
- if (sym->help)
+ if (menu_has_help(menu))
printf("/?");
printf("] ");
- conf_askvalue(sym, sym_get_string_value(sym));
+ if (!conf_askvalue(sym, sym_get_string_value(sym)))
+ return 0;
strip(line);
switch (line[0]) {
@@ -265,10 +220,7 @@ static int conf_sym(struct menu *menu)
if (sym_set_tristate_value(sym, newval))
return 0;
help:
- help = nohelp_text;
- if (sym->help)
- help = sym->help;
- printf("\n%s\n", help);
+ printf("\n%s\n", get_help(menu));
}
}
@@ -298,7 +250,7 @@ static int conf_choice(struct menu *menu)
case no:
return 1;
case mod:
- printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
+ printf("%*s%s\n", indent - 1, "", _(menu_get_prompt(menu)));
return 0;
case yes:
break;
@@ -308,16 +260,15 @@ static int conf_choice(struct menu *menu)
while (1) {
int cnt, def;
- printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
+ printf("%*s%s\n", indent - 1, "", _(menu_get_prompt(menu)));
def_sym = sym_get_choice_value(sym);
cnt = def = 0;
- line[0] = '0';
- line[1] = 0;
+ line[0] = 0;
for (child = menu->list; child; child = child->next) {
if (!menu_is_visible(child))
continue;
if (!child->sym) {
- printf("%*c %s\n", indent, '*', menu_get_prompt(child));
+ printf("%*c %s\n", indent, '*', _(menu_get_prompt(child)));
continue;
}
cnt++;
@@ -326,20 +277,20 @@ static int conf_choice(struct menu *menu)
printf("%*c", indent, '>');
} else
printf("%*c", indent, ' ');
- printf(" %d. %s", cnt, menu_get_prompt(child));
+ printf(" %d. %s", cnt, _(menu_get_prompt(child)));
if (child->sym->name)
printf(" (%s)", child->sym->name);
if (!sym_has_value(child->sym))
- printf(" (NEW)");
+ printf(_(" (NEW)"));
printf("\n");
}
- printf("%*schoice", indent - 1, "");
+ printf(_("%*schoice"), indent - 1, "");
if (cnt == 1) {
printf("[1]: 1\n");
goto conf_childs;
}
printf("[1-%d", cnt);
- if (sym->help)
+ if (menu_has_help(menu))
printf("?");
printf("]: ");
switch (input_mode) {
@@ -356,8 +307,7 @@ static int conf_choice(struct menu *menu)
fgets(line, 128, stdin);
strip(line);
if (line[0] == '?') {
- printf("\n%s\n", menu->sym->help ?
- menu->sym->help : nohelp_text);
+ printf("\n%s\n", get_help(menu));
continue;
}
if (!line[0])
@@ -367,15 +317,7 @@ static int conf_choice(struct menu *menu)
else
continue;
break;
- case set_random:
- def = (random() % cnt) + 1;
- case set_default:
- case set_yes:
- case set_mod:
- case set_no:
- case ask_mod:
- cnt = def;
- printf("%d\n", cnt);
+ default:
break;
}
@@ -389,14 +331,13 @@ static int conf_choice(struct menu *menu)
if (!child)
continue;
if (line[strlen(line) - 1] == '?') {
- printf("\n%s\n", child->sym->help ?
- child->sym->help : nohelp_text);
+ printf("\n%s\n", get_help(child));
continue;
}
sym_set_choice_value(sym, child->sym);
- if (child->list) {
+ for (child = child->list; child; child = child->next) {
indent += 2;
- conf(child->list);
+ conf(child);
indent -= 2;
}
return 1;
@@ -428,7 +369,7 @@ static void conf(struct menu *menu)
if (prompt)
printf("%*c\n%*c %s\n%*c\n",
indent, '*',
- indent, '*', prompt,
+ indent, '*', _(prompt),
indent, '*');
default:
;
@@ -474,15 +415,14 @@ static void check_conf(struct menu *menu)
return;
sym = menu->sym;
- if (sym) {
- if (sym_is_changable(sym) && !sym_has_value(sym)) {
+ if (sym && !sym_has_value(sym)) {
+ if (sym_is_changable(sym) ||
+ (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
if (!conf_cnt++)
- printf("*\n* Restart config...\n*\n");
+ printf(_("*\n* Restart config...\n*\n"));
rootEntry = menu_get_parent_menu(menu);
conf(rootEntry);
}
- if (sym_is_choice(sym) && sym_get_tristate_value(sym) != mod)
- return;
}
for (child = menu->list; child; child = child->next)
@@ -491,44 +431,33 @@ static void check_conf(struct menu *menu)
int main(int ac, char **av)
{
- int i = 1;
+ int opt;
const char *name;
struct stat tmpstat;
- if (ac > i && av[i][0] == '-') {
- switch (av[i++][1]) {
- case 'A':
- output_mode = 1;
- /* FALLTHROUGH */
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+
+ while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
+ switch (opt) {
case 'o':
- input_mode = ask_new;
- break;
- case 'a':
- input_mode = ask_new;
- press_enter = 1;
+ input_mode = ask_silent;
break;
case 's':
input_mode = ask_silent;
- valid_stdin = isatty(0) && isatty(1) && isatty(2);
+ sync_kconfig = 1;
break;
case 'd':
input_mode = set_default;
break;
case 'D':
input_mode = set_default;
- defconfig_file = av[i++];
- if (!defconfig_file) {
- printf("%s: No default config file specified\n",
- av[0]);
- exit(1);
- }
+ defconfig_file = optarg;
break;
case 'n':
input_mode = set_no;
break;
- case 'M':
- input_mode = ask_mod;
- break;
case 'm':
input_mode = set_mod;
break;
@@ -536,66 +465,153 @@ int main(int ac, char **av)
input_mode = set_yes;
break;
case 'r':
+ {
+ struct timeval now;
+ unsigned int seed;
+
+ /*
+ * Use microseconds derived seed,
+ * compensate for systems where it may be zero
+ */
+ gettimeofday(&now, NULL);
+
+ seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1));
+ srand(seed);
+
input_mode = set_random;
- srandom(time(NULL));
break;
+ }
case 'h':
- case '?':
- printf("%s [-o|-s] config\n", av[0]);
+ printf(_("See README for usage info\n"));
exit(0);
+ break;
+ default:
+ fprintf(stderr, _("See README for usage info\n"));
+ exit(1);
}
}
- name = av[i];
- if (!name) {
- printf("%s: configuration file missing\n", av[0]);
+ if (ac == optind) {
+ printf(_("%s: Kconfig file missing\n"), av[0]);
+ exit(1);
}
+ name = av[optind];
conf_parse(name);
//zconfdump(stdout);
+ if (sync_kconfig) {
+ 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"
+ "***\n"
+ "*** Please run some configurator (e.g. \"make oldconfig\" or\n"
+ "*** \"make menuconfig\" or \"make xconfig\").\n"
+ "***\n"), name);
+ exit(1);
+ }
+ }
+
switch (input_mode) {
case set_default:
if (!defconfig_file)
defconfig_file = conf_get_default_confname();
if (conf_read(defconfig_file)) {
- printf("***\n"
+ printf(_("***\n"
"*** Can't find default configuration \"%s\"!\n"
- "***\n", defconfig_file);
+ "***\n"), defconfig_file);
exit(1);
}
break;
case ask_silent:
- if (stat(".config", &tmpstat)) {
- printf("***\n"
- "*** You have not yet configured OpenADK!\n"
- "***\n"
- "*** Please run some configurator (e.g. \"make oldconfig\" or\n"
- "*** \"make menuconfig\" or \"make config\").\n"
- "***\n");
- exit(1);
- }
case ask_all:
case ask_new:
- case ask_mod:
conf_read(NULL);
break;
+ case set_no:
+ case set_mod:
+ case set_yes:
+ case set_random:
+ name = getenv("KCONFIG_ALLCONFIG");
+ if (name && !stat(name, &tmpstat)) {
+ conf_read_simple(name, S_DEF_USER);
+ break;
+ }
+ switch (input_mode) {
+ case set_no: name = "allno.config"; break;
+ case set_mod: name = "allmod.config"; break;
+ case set_yes: name = "allyes.config"; break;
+ case set_random: name = "allrandom.config"; break;
+ default: break;
+ }
+ if (!stat(name, &tmpstat))
+ conf_read_simple(name, S_DEF_USER);
+ else if (!stat("all.config", &tmpstat))
+ conf_read_simple("all.config", S_DEF_USER);
+ break;
default:
break;
}
- if (input_mode != ask_silent) {
+ if (sync_kconfig) {
+ if (conf_get_changed()) {
+ name = getenv("KCONFIG_NOSILENTUPDATE");
+ if (name && *name) {
+ fprintf(stderr,
+ _("\n*** Kernel configuration requires explicit update.\n\n"));
+ return 1;
+ }
+ }
+ valid_stdin = isatty(0) && isatty(1) && isatty(2);
+ }
+
+ switch (input_mode) {
+ case set_no:
+ conf_set_all_new_symbols(def_no);
+ break;
+ case set_yes:
+ conf_set_all_new_symbols(def_yes);
+ break;
+ case set_mod:
+ conf_set_all_new_symbols(def_mod);
+ break;
+ case set_random:
+ conf_set_all_new_symbols(def_random);
+ break;
+ case set_default:
+ conf_set_all_new_symbols(def_default);
+ break;
+ case ask_new:
+ case ask_all:
rootEntry = &rootmenu;
conf(&rootmenu);
- if (input_mode == ask_all) {
- input_mode = ask_silent;
- valid_stdin = 1;
- }
+ input_mode = ask_silent;
+ /* fall through */
+ case ask_silent:
+ /* Update until a loop caused no more changes */
+ do {
+ conf_cnt = 0;
+ check_conf(&rootmenu);
+ } while (conf_cnt);
+ break;
}
- do {
- conf_cnt = 0;
- check_conf(&rootmenu);
- } while (conf_cnt);
- if (conf_write(NULL)) {
- fprintf(stderr, "\n*** Error during writing of the OpenADK configuration.\n\n");
- return 1;
+
+ if (sync_kconfig) {
+ /* silentoldconfig is used during the build so we shall update autoconf.
+ * 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"));
+ exit(1);
+ }
+ if (conf_write_autoconf()) {
+ fprintf(stderr, _("\n*** Error during update of the kernel configuration.\n\n"));
+ return 1;
+ }
+ } else {
+ if (conf_write(NULL)) {
+ fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
+ exit(1);
+ }
}
return 0;
}
diff --git a/config/confdata.c b/config/confdata.c
index 3bebe2c22..4a79c72bb 100644
--- a/config/confdata.c
+++ b/config/confdata.c
@@ -5,25 +5,48 @@
#include <sys/stat.h>
#include <ctype.h>
+#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include <unistd.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
-int output_mode = 0;
+static void conf_warning(const char *fmt, ...)
+ __attribute__ ((format (printf, 1, 2)));
-const char conf_def_filename[] = ".config";
+static const char *conf_filename;
+static int conf_lineno, conf_warnings, conf_unsaved;
-const char conf_defname[] = "Config.default";
+const char conf_defname[] = "arch/$ARCH/defconfig";
-const char *conf_confnames[] = {
- ".config",
- conf_defname,
- NULL,
-};
+static void conf_warning(const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ fprintf(stderr, "%s:%d:warning: ", conf_filename, conf_lineno);
+ vfprintf(stderr, fmt, ap);
+ fprintf(stderr, "\n");
+ va_end(ap);
+ conf_warnings++;
+}
+
+const char *conf_get_configname(void)
+{
+ char *name = getenv("KCONFIG_CONFIG");
+
+ return name ? name : ".config";
+}
+
+const char *conf_get_autoconfig_name(void)
+{
+ char *name = getenv("KCONFIG_AUTOCONFIG");
+
+ return name ? name : "include/config/auto.conf";
+}
static char *conf_expand_value(const char *in)
{
@@ -67,205 +90,315 @@ char *conf_get_default_confname(void)
return name;
}
-int conf_read(const char *name)
+static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
+{
+ char *p2;
+
+ switch (sym->type) {
+ case S_TRISTATE:
+ if (p[0] == 'm') {
+ sym->def[def].tri = mod;
+ sym->flags |= def_flags;
+ break;
+ }
+ case S_BOOLEAN:
+ if (p[0] == 'y') {
+ sym->def[def].tri = yes;
+ sym->flags |= def_flags;
+ break;
+ }
+ if (p[0] == 'n') {
+ sym->def[def].tri = no;
+ sym->flags |= def_flags;
+ break;
+ }
+ conf_warning("symbol value '%s' invalid for %s", p, sym->name);
+ break;
+ case S_OTHER:
+ if (*p != '"') {
+ for (p2 = p; *p2 && !isspace(*p2); p2++)
+ ;
+ sym->type = S_STRING;
+ goto done;
+ }
+ case S_STRING:
+ if (*p++ != '"')
+ break;
+ for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) {
+ if (*p2 == '"') {
+ *p2 = 0;
+ break;
+ }
+ memmove(p2, p2 + 1, strlen(p2));
+ }
+ if (!p2) {
+ conf_warning("invalid string found");
+ return 1;
+ }
+ case S_INT:
+ case S_HEX:
+ done:
+ if (sym_string_valid(sym, p)) {
+ sym->def[def].val = strdup(p);
+ sym->flags |= def_flags;
+ } else {
+ conf_warning("symbol value '%s' invalid for %s", p, sym->name);
+ return 1;
+ }
+ break;
+ default:
+ ;
+ }
+ return 0;
+}
+
+int conf_read_simple(const char *name, int def)
{
FILE *in = NULL;
- char line[2048];
+ char line[1024];
char *p, *p2;
- int lineno = 0;
struct symbol *sym;
- struct property *prop;
- struct expr *e;
- int i;
+ int i, def_flags;
if (name) {
in = zconf_fopen(name);
} else {
- const char **names = conf_confnames;
- while ((name = *names++)) {
- name = conf_expand_value(name);
+ struct property *prop;
+
+ name = conf_get_configname();
+ in = zconf_fopen(name);
+ if (in)
+ goto load;
+ sym_add_change_count(1);
+ if (!sym_defconfig_list)
+ return 1;
+
+ for_all_defaults(sym_defconfig_list, prop) {
+ if (expr_calc_value(prop->visible.expr) == no ||
+ prop->expr->type != E_SYMBOL)
+ continue;
+ 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);
- break;
+ printf(_("#\n"
+ "# using defaults found in %s\n"
+ "#\n"), name);
+ goto load;
}
}
}
-
if (!in)
return 1;
+load:
+ conf_filename = name;
+ conf_lineno = 0;
+ conf_warnings = 0;
+ conf_unsaved = 0;
+
+ def_flags = SYMBOL_DEF << def;
for_all_symbols(i, sym) {
- sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED;
- sym->flags &= ~SYMBOL_VALID;
+ sym->flags |= SYMBOL_CHANGED;
+ sym->flags &= ~(def_flags|SYMBOL_VALID);
+ if (sym_is_choice(sym))
+ sym->flags |= def_flags;
switch (sym->type) {
case S_INT:
case S_HEX:
case S_STRING:
- if (sym->user.val)
- free(sym->user.val);
+ if (sym->def[def].val)
+ free(sym->def[def].val);
default:
- sym->user.val = NULL;
- sym->user.tri = no;
+ sym->def[def].val = NULL;
+ sym->def[def].tri = no;
}
}
while (fgets(line, sizeof(line), in)) {
- lineno++;
+ conf_lineno++;
sym = NULL;
switch (line[0]) {
case '#':
- if (line[1]!=' ')
- continue;
p = strchr(line + 2, ' ');
if (!p)
continue;
*p++ = 0;
if (strncmp(p, "is not set", 10))
continue;
- sym = sym_find(line + 2);
- if (!sym) {
- fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 2);
- break;
+ if (def == S_DEF_USER) {
+ sym = sym_find(line + 2);
+ if (!sym) {
+ sym_add_change_count(1);
+ break;
+ }
+ } else {
+ sym = sym_lookup(line + 2, 0);
+ if (sym->type == S_UNKNOWN)
+ sym->type = S_BOOLEAN;
+ }
+ if (sym->flags & def_flags) {
+ conf_warning("override: reassigning to symbol %s", sym->name);
}
switch (sym->type) {
case S_BOOLEAN:
case S_TRISTATE:
- sym->user.tri = no;
- sym->flags &= ~SYMBOL_NEW;
+ sym->def[def].tri = no;
+ sym->flags |= def_flags;
break;
default:
;
}
break;
-
- case 'A' ... 'Z':
+ default:
p = strchr(line, '=');
if (!p)
continue;
*p++ = 0;
p2 = strchr(p, '\n');
- if (p2)
- *p2 = 0;
- sym = sym_find(line);
- if (!sym) {
- fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line);
- break;
+ if (p2) {
+ *p2-- = 0;
+ if (*p2 == '\r')
+ *p2 = 0;
}
- switch (sym->type) {
- case S_TRISTATE:
- if (p[0] == 'm') {
- sym->user.tri = mod;
- sym->flags &= ~SYMBOL_NEW;
- break;
- }
- case S_BOOLEAN:
- if (p[0] == 'y') {
- sym->user.tri = yes;
- sym->flags &= ~SYMBOL_NEW;
- break;
- }
- if (p[0] == 'n') {
- sym->user.tri = no;
- sym->flags &= ~SYMBOL_NEW;
+ if (def == S_DEF_USER) {
+ sym = sym_find(line);
+ if (!sym) {
+ sym_add_change_count(1);
break;
}
- break;
- case S_STRING:
- if (*p++ != '"')
- break;
- for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) {
- if (*p2 == '"') {
- *p2 = 0;
- break;
- }
- memmove(p2, p2 + 1, strlen(p2));
- }
- if (!p2) {
- fprintf(stderr, "%s:%d: invalid string found\n", name, lineno);
- exit(1);
- }
- case S_INT:
- case S_HEX:
- if (sym_string_valid(sym, p)) {
- sym->user.val = strdup(p);
- sym->flags &= ~SYMBOL_NEW;
- } else {
- fprintf(stderr, "%s:%d: symbol value '%s' invalid for %s\n", name, lineno, p, sym->name);
- exit(1);
- }
- break;
- default:
- ;
+ } else {
+ sym = sym_lookup(line, 0);
+ if (sym->type == S_UNKNOWN)
+ sym->type = S_OTHER;
}
+ if (sym->flags & def_flags) {
+ conf_warning("override: reassigning to symbol %s", sym->name);
+ }
+ if (conf_set_sym_val(sym, def, def_flags, p))
+ continue;
break;
+ case '\r':
case '\n':
break;
- default:
- continue;
}
if (sym && sym_is_choice_value(sym)) {
struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
- switch (sym->user.tri) {
+ switch (sym->def[def].tri) {
case no:
break;
case mod:
- if (cs->user.tri == yes)
- /* warn? */;
+ if (cs->def[def].tri == yes) {
+ conf_warning("%s creates inconsistent choice state", sym->name);
+ cs->flags &= ~def_flags;
+ }
break;
case yes:
- if (cs->user.tri != no)
- /* warn? */;
- cs->user.val = sym;
+ if (cs->def[def].tri != no)
+ conf_warning("override: %s changes choice state", sym->name);
+ cs->def[def].val = sym;
break;
}
- cs->user.tri = E_OR(cs->user.tri, sym->user.tri);
- cs->flags &= ~SYMBOL_NEW;
+ cs->def[def].tri = EXPR_OR(cs->def[def].tri, sym->def[def].tri);
}
}
fclose(in);
if (modules_sym)
sym_calc_value(modules_sym);
+ return 0;
+}
+
+int conf_read(const char *name)
+{
+ struct symbol *sym, *choice_sym;
+ struct property *prop;
+ struct expr *e;
+ int i, flags;
+
+ sym_set_change_count(0);
+
+ if (conf_read_simple(name, S_DEF_USER))
+ return 1;
+
for_all_symbols(i, sym) {
sym_calc_value(sym);
+ if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO))
+ goto sym_ok;
+ if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) {
+ /* check that calculated value agrees with saved value */
+ switch (sym->type) {
+ case S_BOOLEAN:
+ case S_TRISTATE:
+ if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym))
+ break;
+ if (!sym_is_choice(sym))
+ goto sym_ok;
+ default:
+ if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val))
+ goto sym_ok;
+ break;
+ }
+ } else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE))
+ /* no previous value and not saved */
+ goto sym_ok;
+ conf_unsaved++;
+ /* maybe print value in verbose mode... */
+ sym_ok:
+ if (!sym_is_choice(sym))
+ continue;
+ /* The choice symbol only has a set value (and thus is not new)
+ * if all its visible childs have values.
+ */
+ prop = sym_get_choice_prop(sym);
+ flags = sym->flags;
+ expr_list_for_each_sym(prop->expr, e, choice_sym)
+ if (choice_sym->visible != no)
+ flags &= choice_sym->flags;
+ sym->flags &= flags | ~SYMBOL_DEF_USER;
+ }
+
+ for_all_symbols(i, sym) {
if (sym_has_value(sym) && !sym_is_choice_value(sym)) {
- if (sym->visible == no)
- sym->flags |= SYMBOL_NEW;
+ /* Reset values of generates values, so they'll appear
+ * as new, if they should become visible, but that
+ * doesn't quite work if the Kconfig and the saved
+ * configuration disagree.
+ */
+ if (sym->visible == no && !conf_unsaved)
+ sym->flags &= ~SYMBOL_DEF_USER;
switch (sym->type) {
case S_STRING:
case S_INT:
case S_HEX:
- if (!sym_string_within_range(sym, sym->user.val))
- sym->flags |= SYMBOL_NEW;
+ /* Reset a string value if it's out of range */
+ if (sym_string_within_range(sym, sym->def[S_DEF_USER].val))
+ break;
+ sym->flags &= ~(SYMBOL_VALID|SYMBOL_DEF_USER);
+ conf_unsaved++;
+ break;
default:
break;
}
}
- if (!sym_is_choice(sym))
- continue;
- prop = sym_get_choice_prop(sym);
- for (e = prop->expr; e; e = e->left.expr)
- if (e->right.sym->visible != no)
- sym->flags |= e->right.sym->flags & SYMBOL_NEW;
}
- sym_change_count = 1;
+ sym_add_change_count(conf_warnings || conf_unsaved);
return 0;
}
int conf_write(const char *name)
{
- FILE *out, *out_h;
+ FILE *out;
struct symbol *sym;
struct menu *menu;
const char *basename;
char dirname[128], tmpname[128], newname[128];
int type, l;
const char *str;
+ time_t now;
+ int use_timestamp = 1;
+ char *env;
dirname[0] = 0;
if (name && name[0]) {
@@ -275,7 +408,7 @@ int conf_write(const char *name)
if (!stat(name, &st) && S_ISDIR(st.st_mode)) {
strcpy(dirname, name);
strcat(dirname, "/");
- basename = conf_def_filename;
+ basename = conf_get_configname();
} else if ((slash = strrchr(name, '/'))) {
int size = slash - name + 1;
memcpy(dirname, name, size);
@@ -283,42 +416,41 @@ int conf_write(const char *name)
if (slash[1])
basename = slash + 1;
else
- basename = conf_def_filename;
+ basename = conf_get_configname();
} else
basename = name;
} else
- basename = conf_def_filename;
+ basename = conf_get_configname();
- sprintf(newname, "%s.tmpconfig.%d", dirname, getpid());
- out = fopen(newname, "w");
+ sprintf(newname, "%s%s", dirname, basename);
+ env = getenv("KCONFIG_OVERWRITECONFIG");
+ if (!env || !*env) {
+ sprintf(tmpname, "%s.tmpconfig.%d", dirname, (int)getpid());
+ out = fopen(tmpname, "w");
+ } else {
+ *tmpname = 0;
+ out = fopen(newname, "w");
+ }
if (!out)
return 1;
- out_h = NULL;
- if (!name) {
- out_h = fopen(".tmpconfig.h", "w");
- if (!out_h)
- return 1;
- }
- fprintf(out, "#\n"
- "# Automatically generated make config: don't edit\n"
- "#\n");
- if (out_h) {
- fprintf(out_h, "/*\n"
- " * Automatically generated header file: don't edit\n"
- " */\n\n"
- "#define AUTOCONF_INCLUDED\n\n"
- "/* Version Number */\n"
- "#define BB_VER \"%s\"\n"
- "#define BB_BT \"%s\"\n",
- getenv("VERSION"),
- getenv("BUILDTIME"));
- if (getenv("EXTRA_VERSION"))
- fprintf(out_h, "#define BB_EXTRA_VERSION \"%s\"\n",
- getenv("EXTRA_VERSION"));
- fprintf(out_h, "\n");
- }
- if (!sym_change_count)
+ sym = sym_lookup("ADKVERSION", 0);
+ sym_calc_value(sym);
+ time(&now);
+ env = getenv("KCONFIG_NOTIMESTAMP");
+ if (env && *env)
+ use_timestamp = 0;
+
+ fprintf(out, _("#\n"
+ "# Automatically generated make config: don't edit\n"
+ "# OpenADK version: %s\n"
+ "%s%s"
+ "#\n"),
+ sym_get_string_value(sym),
+ use_timestamp ? "# " : "",
+ use_timestamp ? ctime(&now) : "");
+
+ if (!conf_get_changed())
sym_clear_all_valid();
menu = rootmenu.list;
@@ -332,14 +464,9 @@ int conf_write(const char *name)
"#\n"
"# %s\n"
"#\n", str);
- if (out_h)
- fprintf(out_h, "\n"
- "/*\n"
- " * %s\n"
- " */\n", str);
} else if (!(sym->flags & SYMBOL_CHOICE)) {
sym_calc_value(sym);
- if (!(sym->flags & SYMBOL_WRITE) && !output_mode)
+ if (!(sym->flags & SYMBOL_WRITE))
goto next;
sym->flags &= ~SYMBOL_WRITE;
type = sym->type;
@@ -354,61 +481,39 @@ int conf_write(const char *name)
switch (sym_get_tristate_value(sym)) {
case no:
fprintf(out, "# %s is not set\n", sym->name);
- if (out_h)
- fprintf(out_h, "#undef %s\n", sym->name);
break;
case mod:
fprintf(out, "%s=m\n", sym->name);
-#if 0
- if (out_h)
- fprintf(out_h, "#define %s_MODULE 1\n", sym->name);
-#endif
break;
case yes:
fprintf(out, "%s=y\n", sym->name);
- if (out_h)
- fprintf(out_h, "#define %s 1\n", sym->name);
break;
}
break;
case S_STRING:
- // fix me
str = sym_get_string_value(sym);
fprintf(out, "%s=\"", sym->name);
- if (out_h)
- fprintf(out_h, "#define %s \"", sym->name);
- do {
+ while (1) {
l = strcspn(str, "\"\\");
if (l) {
fwrite(str, l, 1, out);
- if (out_h)
- fwrite(str, l, 1, out_h);
+ str += l;
}
- str += l;
- while (*str == '\\' || *str == '"') {
- fprintf(out, "\\%c", *str);
- if (out_h)
- fprintf(out_h, "\\%c", *str);
- str++;
- }
- } while (*str);
+ if (!*str)
+ break;
+ fprintf(out, "\\%c", *str++);
+ }
fputs("\"\n", out);
- if (out_h)
- fputs("\"\n", out_h);
break;
case S_HEX:
str = sym_get_string_value(sym);
if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
fprintf(out, "%s=%s\n", sym->name, str);
- if (out_h)
- fprintf(out_h, "#define %s 0x%s\n", sym->name, str);
break;
}
case S_INT:
str = sym_get_string_value(sym);
fprintf(out, "%s=%s\n", sym->name, str);
- if (out_h)
- fprintf(out_h, "#define %s %s\n", sym->name, str);
break;
}
}
@@ -428,22 +533,367 @@ int conf_write(const char *name)
}
}
fclose(out);
- if (out_h) {
- fclose(out_h);
- rename(".tmpconfig.h", "include/config.h");
- file_write_dep(NULL);
+
+ if (*tmpname) {
+ strcat(dirname, basename);
+ strcat(dirname, ".old");
+ rename(newname, dirname);
+ if (rename(tmpname, newname))
+ return 1;
}
- if (!name || basename != conf_def_filename) {
- if (!name)
- name = conf_def_filename;
- sprintf(tmpname, "%s.old", name);
- rename(name, tmpname);
+
+ printf(_("#\n"
+ "# configuration written to %s\n"
+ "#\n"), newname);
+
+ sym_set_change_count(0);
+
+ return 0;
+}
+
+int conf_split_config(void)
+{
+ const char *name;
+ char path[128];
+ char *s, *d, c;
+ struct symbol *sym;
+ struct stat sb;
+ int res, i, fd;
+
+ name = conf_get_autoconfig_name();
+ conf_read_simple(name, S_DEF_AUTO);
+
+ if (chdir("include/config"))
+ return 1;
+
+ res = 0;
+ for_all_symbols(i, sym) {
+ sym_calc_value(sym);
+ if ((sym->flags & SYMBOL_AUTO) || !sym->name)
+ continue;
+ if (sym->flags & SYMBOL_WRITE) {
+ if (sym->flags & SYMBOL_DEF_AUTO) {
+ /*
+ * symbol has old and new value,
+ * so compare them...
+ */
+ switch (sym->type) {
+ case S_BOOLEAN:
+ case S_TRISTATE:
+ if (sym_get_tristate_value(sym) ==
+ sym->def[S_DEF_AUTO].tri)
+ continue;
+ break;
+ case S_STRING:
+ case S_HEX:
+ case S_INT:
+ if (!strcmp(sym_get_string_value(sym),
+ sym->def[S_DEF_AUTO].val))
+ continue;
+ break;
+ default:
+ break;
+ }
+ } else {
+ /*
+ * If there is no old value, only 'no' (unset)
+ * is allowed as new value.
+ */
+ switch (sym->type) {
+ case S_BOOLEAN:
+ case S_TRISTATE:
+ if (sym_get_tristate_value(sym) == no)
+ continue;
+ break;
+ default:
+ break;
+ }
+ }
+ } else if (!(sym->flags & SYMBOL_DEF_AUTO))
+ /* There is neither an old nor a new value. */
+ continue;
+ /* else
+ * There is an old value, but no new value ('no' (unset)
+ * isn't saved in auto.conf, so the old value is always
+ * different from 'no').
+ */
+
+ /* Replace all '_' and append ".h" */
+ s = sym->name;
+ d = path;
+ while ((c = *s++)) {
+ c = tolower(c);
+ *d++ = (c == '_') ? '/' : c;
+ }
+ strcpy(d, ".h");
+
+ /* Assume directory path already exists. */
+ fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ if (fd == -1) {
+ if (errno != ENOENT) {
+ res = 1;
+ break;
+ }
+ /*
+ * Create directory components,
+ * unless they exist already.
+ */
+ d = path;
+ while ((d = strchr(d, '/'))) {
+ *d = 0;
+ if (stat(path, &sb) && mkdir(path, 0755)) {
+ res = 1;
+ goto out;
+ }
+ *d++ = '/';
+ }
+ /* Try it again. */
+ fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ if (fd == -1) {
+ res = 1;
+ break;
+ }
+ }
+ close(fd);
}
- sprintf(tmpname, "%s%s", dirname, basename);
- if (rename(newname, tmpname))
+out:
+ if (chdir("../.."))
return 1;
- sym_change_count = 0;
+ return res;
+}
+
+int conf_write_autoconf(void)
+{
+ struct symbol *sym;
+ const char *str;
+ const char *name;
+ FILE *out, *out_h;
+ time_t now;
+ int i, l;
+
+ sym_clear_all_valid();
+
+ file_write_dep("include/config/auto.conf.cmd");
+
+ if (conf_split_config())
+ return 1;
+
+ out = fopen(".tmpconfig", "w");
+ if (!out)
+ return 1;
+
+ out_h = fopen(".tmpconfig.h", "w");
+ if (!out_h) {
+ fclose(out);
+ return 1;
+ }
+
+ sym = sym_lookup("ADKVERSION", 0);
+ sym_calc_value(sym);
+ time(&now);
+ fprintf(out, "#\n"
+ "# Automatically generated make config: don't edit\n"
+ "# OpenADK version: %s\n"
+ "# %s"
+ "#\n",
+ sym_get_string_value(sym), ctime(&now));
+ fprintf(out_h, "/*\n"
+ " * Automatically generated C config: don't edit\n"
+ " * OpenADK version: %s\n"
+ " * %s"
+ " */\n"
+ "#define AUTOCONF_INCLUDED\n",
+ sym_get_string_value(sym), ctime(&now));
+
+ for_all_symbols(i, sym) {
+ sym_calc_value(sym);
+ if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
+ continue;
+ switch (sym->type) {
+ case S_BOOLEAN:
+ case S_TRISTATE:
+ switch (sym_get_tristate_value(sym)) {
+ case no:
+ break;
+ case mod:
+ fprintf(out, "%s=m\n", sym->name);
+ fprintf(out_h, "#define %s_MODULE 1\n", sym->name);
+ break;
+ case yes:
+ fprintf(out, "%s=y\n", sym->name);
+ fprintf(out_h, "#define %s 1\n", sym->name);
+ break;
+ }
+ break;
+ case S_STRING:
+ str = sym_get_string_value(sym);
+ fprintf(out, "%s=\"", sym->name);
+ fprintf(out_h, "#define %s \"", sym->name);
+ while (1) {
+ l = strcspn(str, "\"\\");
+ if (l) {
+ fwrite(str, l, 1, out);
+ fwrite(str, l, 1, out_h);
+ str += l;
+ }
+ if (!*str)
+ break;
+ fprintf(out, "\\%c", *str);
+ fprintf(out_h, "\\%c", *str);
+ str++;
+ }
+ fputs("\"\n", out);
+ fputs("\"\n", out_h);
+ break;
+ case S_HEX:
+ str = sym_get_string_value(sym);
+ if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
+ fprintf(out, "%s=%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, "%s=%s\n", sym->name, str);
+ fprintf(out_h, "#define %s %s\n", sym->name, str);
+ break;
+ default:
+ break;
+ }
+ }
+ fclose(out);
+ fclose(out_h);
+
+ name = getenv("KCONFIG_AUTOHEADER");
+ if (!name)
+ name = "include/linux/autoconf.h";
+ if (rename(".tmpconfig.h", name))
+ return 1;
+ name = conf_get_autoconfig_name();
+ /*
+ * This must be the last step, kbuild has a dependency on auto.conf
+ * and this marks the successful completion of the previous steps.
+ */
+ if (rename(".tmpconfig", name))
+ return 1;
return 0;
}
+
+static int sym_change_count;
+static void (*conf_changed_callback)(void);
+
+void sym_set_change_count(int count)
+{
+ int _sym_change_count = sym_change_count;
+ sym_change_count = count;
+ if (conf_changed_callback &&
+ (bool)_sym_change_count != (bool)count)
+ conf_changed_callback();
+}
+
+void sym_add_change_count(int count)
+{
+ sym_set_change_count(count + sym_change_count);
+}
+
+bool conf_get_changed(void)
+{
+ return sym_change_count;
+}
+
+void conf_set_changed_callback(void (*fn)(void))
+{
+ conf_changed_callback = fn;
+}
+
+
+void conf_set_all_new_symbols(enum conf_def_mode mode)
+{
+ struct symbol *sym, *csym;
+ struct property *prop;
+ struct expr *e;
+ int i, cnt, def;
+
+ for_all_symbols(i, sym) {
+ if (sym_has_value(sym))
+ continue;
+ switch (sym_get_type(sym)) {
+ case S_BOOLEAN:
+ case S_TRISTATE:
+ switch (mode) {
+ case def_yes:
+ sym->def[S_DEF_USER].tri = yes;
+ break;
+ case def_mod:
+ sym->def[S_DEF_USER].tri = mod;
+ break;
+ case def_no:
+ sym->def[S_DEF_USER].tri = no;
+ break;
+ case def_random:
+ sym->def[S_DEF_USER].tri = (tristate)(rand() % 3);
+ break;
+ default:
+ continue;
+ }
+ if (!(sym_is_choice(sym) && mode == def_random))
+ sym->flags |= SYMBOL_DEF_USER;
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ sym_clear_all_valid();
+
+ if (mode != def_random)
+ return;
+ /*
+ * We have different type of choice blocks.
+ * If curr.tri equal to mod then we can select several
+ * choice symbols in one block.
+ * In this case we do nothing.
+ * If curr.tri equal yes then only one symbol can be
+ * selected in a choice block and we set it to yes,
+ * and the rest to no.
+ */
+ for_all_symbols(i, csym) {
+ if (sym_has_value(csym) || !sym_is_choice(csym))
+ continue;
+
+ sym_calc_value(csym);
+
+ if (csym->curr.tri != yes)
+ continue;
+
+ prop = sym_get_choice_prop(csym);
+
+ /* count entries in choice block */
+ cnt = 0;
+ expr_list_for_each_sym(prop->expr, e, sym)
+ cnt++;
+
+ /*
+ * find a random value and set it to yes,
+ * set the rest to no so we have only one set
+ */
+ def = (rand() % cnt);
+
+ cnt = 0;
+ expr_list_for_each_sym(prop->expr, e, sym) {
+ if (def == cnt++) {
+ sym->def[S_DEF_USER].tri = yes;
+ csym->def[S_DEF_USER].val = sym;
+ }
+ else {
+ sym->def[S_DEF_USER].tri = no;
+ }
+ }
+ csym->flags |= SYMBOL_DEF_USER;
+ /* clear VALID to get value calculated */
+ csym->flags &= ~(SYMBOL_VALID);
+ }
+}
diff --git a/config/dialog.h b/config/dialog.h
deleted file mode 100644
index 6486cc8f7..000000000
--- a/config/dialog.h
+++ /dev/null
@@ -1,196 +0,0 @@
-
-/*
- * dialog.h -- common declarations for all dialog modules
- *
- * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef CURSES_LOC
-#include CURSES_LOC
-
-/*
- * Colors in ncurses 1.9.9e do not work properly since foreground and
- * background colors are OR'd rather than separately masked. This version
- * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible
- * with standard curses. The simplest fix (to make this work with standard
- * curses) uses the wbkgdset() function, not used in the original hack.
- * Turn it off if we're building with 1.9.9e, since it just confuses things.
- */
-#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
-#define OLD_NCURSES 1
-#undef wbkgdset
-#define wbkgdset(w,p) /*nothing*/
-#else
-#define OLD_NCURSES 0
-#endif
-
-#define TR(params) _tracef params
-
-#define ESC 27
-#define TAB 9
-#define MAX_LEN 2048
-#define BUF_SIZE (10*1024)
-#define MIN(x,y) (x < y ? x : y)
-#define MAX(x,y) (x > y ? x : y)
-
-
-#ifndef ACS_ULCORNER
-#define ACS_ULCORNER '+'
-#endif
-#ifndef ACS_LLCORNER
-#define ACS_LLCORNER '+'
-#endif
-#ifndef ACS_URCORNER
-#define ACS_URCORNER '+'
-#endif
-#ifndef ACS_LRCORNER
-#define ACS_LRCORNER '+'
-#endif
-#ifndef ACS_HLINE
-#define ACS_HLINE '-'
-#endif
-#ifndef ACS_VLINE
-#define ACS_VLINE '|'
-#endif
-#ifndef ACS_LTEE
-#define ACS_LTEE '+'
-#endif
-#ifndef ACS_RTEE
-#define ACS_RTEE '+'
-#endif
-#ifndef ACS_UARROW
-#define ACS_UARROW '^'
-#endif
-#ifndef ACS_DARROW
-#define ACS_DARROW 'v'
-#endif
-
-/*
- * Attribute names
- */
-#define screen_attr attributes[0]
-#define shadow_attr attributes[1]
-#define dialog_attr attributes[2]
-#define title_attr attributes[3]
-#define border_attr attributes[4]
-#define button_active_attr attributes[5]
-#define button_inactive_attr attributes[6]
-#define button_key_active_attr attributes[7]
-#define button_key_inactive_attr attributes[8]
-#define button_label_active_attr attributes[9]
-#define button_label_inactive_attr attributes[10]
-#define inputbox_attr attributes[11]
-#define inputbox_border_attr attributes[12]
-#define searchbox_attr attributes[13]
-#define searchbox_title_attr attributes[14]
-#define searchbox_border_attr attributes[15]
-#define position_indicator_attr attributes[16]
-#define menubox_attr attributes[17]
-#define menubox_border_attr attributes[18]
-#define item_attr attributes[19]
-#define item_selected_attr attributes[20]
-#define tag_attr attributes[21]
-#define tag_selected_attr attributes[22]
-#define tag_key_attr attributes[23]
-#define tag_key_selected_attr attributes[24]
-#define check_attr attributes[25]
-#define check_selected_attr attributes[26]
-#define uarrow_attr attributes[27]
-#define darrow_attr attributes[28]
-
-/* number of attributes */
-#define ATTRIBUTE_COUNT 29
-
-/*
- * Global variables
- */
-extern bool use_colors;
-
-extern chtype attributes[];
-#endif
-
-extern char *backtitle;
-
-struct dialog_list_item {
- char *name;
- int namelen;
- char *tag;
- int selected; /* Set to 1 by dialog_*() function. */
-};
-
-/*
- * Function prototypes
- */
-
-void init_dialog (void);
-void end_dialog (void);
-void dialog_clear (void);
-#ifdef CURSES_LOC
-void attr_clear (WINDOW * win, int height, int width, chtype attr);
-void color_setup (void);
-void print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x);
-void print_button (WINDOW * win, const char *label, int y, int x, int selected);
-void draw_box (WINDOW * win, int y, int x, int height, int width, chtype box,
- chtype border);
-void draw_shadow (WINDOW * win, int y, int x, int height, int width);
-#endif
-
-int first_alpha (const char *string, const char *exempt);
-int dialog_yesno (const char *title, const char *prompt, int height, int width);
-int dialog_msgbox (const char *title, const char *prompt, int height,
- int width, int pause);
-int dialog_textbox (const char *title, const char *file, int height, int width);
-int dialog_menu (const char *title, const char *prompt, int height, int width,
- int menu_height, const char *choice, int item_no,
- struct dialog_list_item ** items);
-int dialog_checklist (const char *title, const char *prompt, int height,
- int width, int list_height, int item_no,
- struct dialog_list_item ** items, int flag);
-extern unsigned char dialog_input_result[];
-int dialog_inputbox (const char *title, const char *prompt, int height,
- int width, const char *init);
-
-struct dialog_list_item *first_sel_item(int item_no,
- struct dialog_list_item ** items);
-
-/*
- * This is the base for fictitious keys, which activate
- * the buttons.
- *
- * Mouse-generated keys are the following:
- * -- the first 32 are used as numbers, in addition to '0'-'9'
- * -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o')
- * -- uppercase chars are used to invoke the button (M_EVENT + 'O')
- */
-#ifdef CURSES_LOC
-#define M_EVENT (KEY_MAX+1)
-#endif
-
-
-/*
- * The `flag' parameter in checklist is used to select between
- * radiolist and checklist
- */
-#define FLAG_CHECK 1
-#define FLAG_RADIO 0
diff --git a/config/expr.c b/config/expr.c
index 10f45232b..579ece4fa 100644
--- a/config/expr.c
+++ b/config/expr.c
@@ -87,7 +87,7 @@ struct expr *expr_copy(struct expr *org)
break;
case E_AND:
case E_OR:
- case E_CHOICE:
+ case E_LIST:
e->left.expr = expr_copy(org->left.expr);
e->right.expr = expr_copy(org->right.expr);
break;
@@ -145,7 +145,8 @@ static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct e
return;
}
if (e1->type == E_SYMBOL && e2->type == E_SYMBOL &&
- e1->left.sym == e2->left.sym && (e1->left.sym->flags & (SYMBOL_YES|SYMBOL_NO)))
+ e1->left.sym == e2->left.sym &&
+ (e1->left.sym == &symbol_yes || e1->left.sym == &symbol_no))
return;
if (!expr_eq(e1, e2))
return;
@@ -216,7 +217,7 @@ int expr_eq(struct expr *e1, struct expr *e2)
expr_free(e2);
trans_count = old_count;
return res;
- case E_CHOICE:
+ case E_LIST:
case E_RANGE:
case E_NONE:
/* panic */;
@@ -647,7 +648,7 @@ struct expr *expr_transform(struct expr *e)
case E_EQUAL:
case E_UNEQUAL:
case E_SYMBOL:
- case E_CHOICE:
+ case E_LIST:
break;
default:
e->left.expr = expr_transform(e->left.expr);
@@ -931,7 +932,7 @@ struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symb
break;
case E_SYMBOL:
return expr_alloc_comp(type, e->left.sym, sym);
- case E_CHOICE:
+ case E_LIST:
case E_RANGE:
case E_NONE:
/* panic */;
@@ -954,14 +955,14 @@ tristate expr_calc_value(struct expr *e)
case E_AND:
val1 = expr_calc_value(e->left.expr);
val2 = expr_calc_value(e->right.expr);
- return E_AND(val1, val2);
+ return EXPR_AND(val1, val2);
case E_OR:
val1 = expr_calc_value(e->left.expr);
val2 = expr_calc_value(e->right.expr);
- return E_OR(val1, val2);
+ return EXPR_OR(val1, val2);
case E_NOT:
val1 = expr_calc_value(e->left.expr);
- return E_NOT(val1);
+ return EXPR_NOT(val1);
case E_EQUAL:
sym_calc_value(e->left.sym);
sym_calc_value(e->right.sym);
@@ -999,9 +1000,9 @@ int expr_compare_type(enum expr_type t1, enum expr_type t2)
if (t2 == E_OR)
return 1;
case E_OR:
- if (t2 == E_CHOICE)
+ if (t2 == E_LIST)
return 1;
- case E_CHOICE:
+ case E_LIST:
if (t2 == 0)
return 1;
default:
@@ -1012,73 +1013,79 @@ int expr_compare_type(enum expr_type t1, enum expr_type t2)
#endif
}
-void expr_print(struct expr *e, void (*fn)(void *, const char *), void *data, int prevtoken)
+void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken)
{
if (!e) {
- fn(data, "y");
+ fn(data, NULL, "y");
return;
}
if (expr_compare_type(prevtoken, e->type) > 0)
- fn(data, "(");
+ fn(data, NULL, "(");
switch (e->type) {
case E_SYMBOL:
if (e->left.sym->name)
- fn(data, e->left.sym->name);
+ fn(data, e->left.sym, e->left.sym->name);
else
- fn(data, "<choice>");
+ fn(data, NULL, "<choice>");
break;
case E_NOT:
- fn(data, "!");
+ fn(data, NULL, "!");
expr_print(e->left.expr, fn, data, E_NOT);
break;
case E_EQUAL:
- fn(data, e->left.sym->name);
- fn(data, "=");
- fn(data, e->right.sym->name);
+ if (e->left.sym->name)
+ fn(data, e->left.sym, e->left.sym->name);
+ else
+ fn(data, NULL, "<choice>");
+ fn(data, NULL, "=");
+ fn(data, e->right.sym, e->right.sym->name);
break;
case E_UNEQUAL:
- fn(data, e->left.sym->name);
- fn(data, "!=");
- fn(data, e->right.sym->name);
+ if (e->left.sym->name)
+ fn(data, e->left.sym, e->left.sym->name);
+ else
+ fn(data, NULL, "<choice>");
+ fn(data, NULL, "!=");
+ fn(data, e->right.sym, e->right.sym->name);
break;
case E_OR:
expr_print(e->left.expr, fn, data, E_OR);
- fn(data, " || ");
+ fn(data, NULL, " || ");
expr_print(e->right.expr, fn, data, E_OR);
break;
case E_AND:
expr_print(e->left.expr, fn, data, E_AND);
- fn(data, " && ");
+ fn(data, NULL, " && ");
expr_print(e->right.expr, fn, data, E_AND);
break;
- case E_CHOICE:
- fn(data, e->right.sym->name);
+ case E_LIST:
+ fn(data, e->right.sym, e->right.sym->name);
if (e->left.expr) {
- fn(data, " ^ ");
- expr_print(e->left.expr, fn, data, E_CHOICE);
+ fn(data, NULL, " ^ ");
+ expr_print(e->left.expr, fn, data, E_LIST);
}
break;
case E_RANGE:
- fn(data, "[");
- fn(data, e->left.sym->name);
- fn(data, " ");
- fn(data, e->right.sym->name);
- fn(data, "]");
+ fn(data, NULL, "[");
+ fn(data, e->left.sym, e->left.sym->name);
+ fn(data, NULL, " ");
+ fn(data, e->right.sym, e->right.sym->name);
+ fn(data, NULL, "]");
break;
default:
{
char buf[32];
sprintf(buf, "<unknown type %d>", e->type);
- fn(data, buf);
+ fn(data, NULL, buf);
break;
}
}
if (expr_compare_type(prevtoken, e->type) > 0)
- fn(data, ")");
+ fn(data, NULL, ")");
}
-static void expr_print_file_helper(void *data, const char *str)
+static void expr_print_file_helper(void *data, struct symbol *sym, const char *str)
{
fwrite(str, strlen(str), 1, data);
}
@@ -1087,3 +1094,13 @@ void expr_fprint(struct expr *e, FILE *out)
{
expr_print(e, expr_print_file_helper, out, E_NONE);
}
+
+static void expr_print_gstr_helper(void *data, struct symbol *sym, const char *str)
+{
+ str_append((struct gstr*)data, str);
+}
+
+void expr_gstr_print(struct expr *e, struct gstr *gs)
+{
+ expr_print(e, expr_print_gstr_helper, gs, E_NONE);
+}
diff --git a/config/expr.h b/config/expr.h
index 3010013b2..6408fefae 100644
--- a/config/expr.h
+++ b/config/expr.h
@@ -25,14 +25,13 @@ struct file {
#define FILE_BUSY 0x0001
#define FILE_SCANNED 0x0002
-#define FILE_PRINTED 0x0004
typedef enum tristate {
no, mod, yes
} tristate;
enum expr_type {
- E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_CHOICE, E_SYMBOL, E_RANGE
+ E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_LIST, E_SYMBOL, E_RANGE
};
union expr_data {
@@ -45,9 +44,12 @@ struct expr {
union expr_data left, right;
};
-#define E_OR(dep1, dep2) (((dep1)>(dep2))?(dep1):(dep2))
-#define E_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2))
-#define E_NOT(dep) (2-(dep))
+#define EXPR_OR(dep1, dep2) (((dep1)>(dep2))?(dep1):(dep2))
+#define EXPR_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2))
+#define EXPR_NOT(dep) (2-(dep))
+
+#define expr_list_for_each_sym(l, e, s) \
+ for (e = (l); e && (s = e->right.sym); e = e->left.expr)
struct expr_value {
struct expr *expr;
@@ -63,58 +65,87 @@ enum symbol_type {
S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER
};
+/* enum values are used as index to symbol.def[] */
+enum {
+ S_DEF_USER, /* main user value */
+ S_DEF_AUTO, /* values read from auto.conf */
+ S_DEF_DEF3, /* Reserved for UI usage */
+ S_DEF_DEF4, /* Reserved for UI usage */
+ S_DEF_COUNT
+};
+
struct symbol {
struct symbol *next;
char *name;
- char *help;
enum symbol_type type;
- struct symbol_value curr, user;
+ struct symbol_value curr;
+ struct symbol_value def[S_DEF_COUNT];
tristate visible;
int flags;
struct property *prop;
- struct expr *dep, *dep2;
struct expr_value rev_dep;
- struct expr_value rev_dep_inv;
};
#define for_all_symbols(i, sym) for (i = 0; i < 257; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER)
-#define SYMBOL_YES 0x0001
-#define SYMBOL_MOD 0x0002
-#define SYMBOL_NO 0x0004
-#define SYMBOL_CONST 0x0007
-#define SYMBOL_CHECK 0x0008
-#define SYMBOL_CHOICE 0x0010
-#define SYMBOL_CHOICEVAL 0x0020
-#define SYMBOL_PRINTED 0x0040
-#define SYMBOL_VALID 0x0080
-#define SYMBOL_OPTIONAL 0x0100
-#define SYMBOL_WRITE 0x0200
-#define SYMBOL_CHANGED 0x0400
-#define SYMBOL_NEW 0x0800
-#define SYMBOL_AUTO 0x1000
-#define SYMBOL_CHECKED 0x2000
-#define SYMBOL_CHECK_DONE 0x4000
-#define SYMBOL_WARNED 0x8000
+#define SYMBOL_CONST 0x0001 /* symbol is const */
+#define SYMBOL_CHECK 0x0008 /* used during dependency checking */
+#define SYMBOL_CHOICE 0x0010 /* start of a choice block (null name) */
+#define SYMBOL_CHOICEVAL 0x0020 /* used as a value in a choice block */
+#define SYMBOL_VALID 0x0080 /* set when symbol.curr is calculated */
+#define SYMBOL_OPTIONAL 0x0100 /* choice is optional - values can be 'n' */
+#define SYMBOL_WRITE 0x0200 /* ? */
+#define SYMBOL_CHANGED 0x0400 /* ? */
+#define SYMBOL_AUTO 0x1000 /* value from environment variable */
+#define SYMBOL_CHECKED 0x2000 /* used during dependency checking */
+#define SYMBOL_WARNED 0x8000 /* warning has been issued */
+
+/* Set when symbol.def[] is used */
+#define SYMBOL_DEF 0x10000 /* First bit of SYMBOL_DEF */
+#define SYMBOL_DEF_USER 0x10000 /* symbol.def[S_DEF_USER] is valid */
+#define SYMBOL_DEF_AUTO 0x20000 /* symbol.def[S_DEF_AUTO] is valid */
+#define SYMBOL_DEF3 0x40000 /* symbol.def[S_DEF_3] is valid */
+#define SYMBOL_DEF4 0x80000 /* symbol.def[S_DEF_4] is valid */
#define SYMBOL_MAXLENGTH 256
#define SYMBOL_HASHSIZE 257
#define SYMBOL_HASHMASK 0xff
+/* A property represent the config options that can be associated
+ * with a config "symbol".
+ * Sample:
+ * config FOO
+ * default y
+ * prompt "foo prompt"
+ * select BAR
+ * config BAZ
+ * int "BAZ Value"
+ * range 1..255
+ */
enum prop_type {
- P_UNKNOWN, P_PROMPT, P_COMMENT, P_MENU, P_DEFAULT, P_CHOICE, P_SELECT, P_SELECTNOT, P_RANGE
+ P_UNKNOWN,
+ P_PROMPT, /* prompt "foo prompt" or "BAZ Value" */
+ P_COMMENT, /* text associated with a comment */
+ P_MENU, /* prompt associated with a menuconfig option */
+ P_DEFAULT, /* default y */
+ P_CHOICE, /* choice value */
+ P_SELECT, /* select BAR */
+ P_RANGE, /* range 7..100 (for a symbol) */
+ P_ENV, /* value from environment variable */
};
struct property {
- struct property *next;
- struct symbol *sym;
- enum prop_type type;
- const char *text;
+ struct property *next; /* next property - null if last */
+ struct symbol *sym; /* the symbol for which the property is associated */
+ enum prop_type type; /* type of property */
+ const char *text; /* the prompt value - P_PROMPT, P_MENU, P_COMMENT */
struct expr_value visible;
- struct expr *expr;
- struct menu *menu;
- struct file *file;
- int lineno;
+ struct expr *expr; /* the optional conditional part of the property */
+ struct menu *menu; /* the menu the property are associated with
+ * valid for: P_SELECT, P_RANGE, P_CHOICE,
+ * P_PROMPT, P_DEFAULT, P_MENU, P_COMMENT */
+ struct file *file; /* what file was this property defined */
+ int lineno; /* what lineno was this property defined */
};
#define for_all_properties(sym, st, tok) \
@@ -134,7 +165,7 @@ struct menu {
struct property *prompt;
struct expr *dep;
unsigned int flags;
- //char *help;
+ char *help;
struct file *file;
int lineno;
void *data;
@@ -151,6 +182,7 @@ struct file *lookup_file(const char *name);
extern struct symbol symbol_yes, symbol_no, symbol_mod;
extern struct symbol *modules_sym;
+extern struct symbol *sym_defconfig_list;
extern int cdebug;
struct expr *expr_alloc_symbol(struct symbol *sym);
struct expr *expr_alloc_one(enum expr_type type, struct expr *ce);
@@ -175,6 +207,8 @@ void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, s
struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym);
void expr_fprint(struct expr *e, FILE *out);
+struct gstr; /* forward */
+void expr_gstr_print(struct expr *e, struct gstr *gs);
static inline int expr_is_yes(struct expr *e)
{
diff --git a/config/glob.c b/config/glob.c
deleted file mode 100644
index b8928b1b6..000000000
--- a/config/glob.c
+++ /dev/null
@@ -1,848 +0,0 @@
-/* $OpenBSD: glob.c,v 1.25 2005/08/08 08:05:34 espie Exp $ */
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * glob(3) -- a superset of the one defined in POSIX 1003.2.
- *
- * The [!...] convention to negate a range is supported (SysV, Posix, ksh).
- *
- * Optional extra services, controlled by flags not defined by POSIX:
- *
- * GLOB_QUOTE:
- * Escaping convention: \ inhibits any special meaning the following
- * character might have (except \ at end of string is retained).
- * GLOB_MAGCHAR:
- * Set in gl_flags if pattern contained a globbing character.
- * GLOB_NOMAGIC:
- * Same as GLOB_NOCHECK, but it will only append pattern if it did
- * not contain any magic characters. [Used in csh style globbing]
- * GLOB_ALTDIRFUNC:
- * Use alternately specified directory access functions.
- * GLOB_TILDE:
- * expand ~user/foo to the /home/dir/of/user/foo
- * GLOB_BRACE:
- * expand {1,2}{a,b} to 1a 1b 2a 2b
- * gl_matchc:
- * Number of matches in the current invocation of glob.
- */
-
-#ifdef __APPLE__
-#include <sys/param.h>
-#include <sys/stat.h>
-
-#include <ctype.h>
-#include <dirent.h>
-#include <errno.h>
-#include <glob.h>
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define DOLLAR '$'
-#define DOT '.'
-#define EOS '\0'
-#define LBRACKET '['
-#define NOT '!'
-#define QUESTION '?'
-#define QUOTE '\\'
-#define RANGE '-'
-#define RBRACKET ']'
-#define SEP '/'
-#define STAR '*'
-#define TILDE '~'
-#define UNDERSCORE '_'
-#define LBRACE '{'
-#define RBRACE '}'
-#define SLASH '/'
-#define COMMA ','
-
-#ifndef DEBUG
-
-#define M_QUOTE 0x8000
-#define M_PROTECT 0x4000
-#define M_MASK 0xffff
-#define M_ASCII 0x00ff
-
-typedef u_short Char;
-
-#else
-
-#define M_QUOTE 0x80
-#define M_PROTECT 0x40
-#define M_MASK 0xff
-#define M_ASCII 0x7f
-
-typedef char Char;
-
-#endif
-
-
-#define CHAR(c) ((Char)((c)&M_ASCII))
-#define META(c) ((Char)((c)|M_QUOTE))
-#define M_ALL META('*')
-#define M_END META(']')
-#define M_NOT META('!')
-#define M_ONE META('?')
-#define M_RNG META('-')
-#define M_SET META('[')
-#define ismeta(c) (((c)&M_QUOTE) != 0)
-
-
-static int compare(const void *, const void *);
-static int g_Ctoc(const Char *, char *, u_int);
-static int g_lstat(Char *, struct stat *, glob_t *);
-static DIR *g_opendir(Char *, glob_t *);
-static const Char *g_strchr(const Char *, int);
-static int g_stat(Char *, struct stat *, glob_t *);
-static int glob0(const Char *, glob_t *);
-static int glob1(Char *, Char *, glob_t *, size_t *);
-static int glob2(Char *, Char *, Char *, Char *, Char *, Char *,
- glob_t *, size_t *);
-static int glob3(Char *, Char *, Char *, Char *, Char *, Char *,
- Char *, Char *, glob_t *, size_t *);
-static int globextend(const Char *, glob_t *, size_t *);
-static const Char *
- globtilde(const Char *, Char *, size_t, glob_t *);
-static int globexp1(const Char *, glob_t *);
-static int globexp2(const Char *, const Char *, glob_t *, int *);
-static int match(Char *, Char *, Char *);
-#ifdef DEBUG
-static void qprintf(const char *, Char *);
-#endif
-
-int
-glob(const char *pattern, int flags, int (*errfunc)(const char *, int),
- glob_t *pglob)
-{
- const u_char *patnext;
- int c;
- Char *bufnext, *bufend, patbuf[MAXPATHLEN];
-
- patnext = (const u_char *) pattern;
- if (!(flags & GLOB_APPEND)) {
- pglob->gl_pathc = 0;
- pglob->gl_pathv = NULL;
- if (!(flags & GLOB_DOOFFS))
- pglob->gl_offs = 0;
- }
- pglob->gl_flags = flags & ~GLOB_MAGCHAR;
- pglob->gl_errfunc = errfunc;
- pglob->gl_matchc = 0;
-
- bufnext = patbuf;
- bufend = bufnext + MAXPATHLEN - 1;
- if (flags & GLOB_NOESCAPE)
- while (bufnext < bufend && (c = *patnext++) != EOS)
- *bufnext++ = c;
- else {
- /* Protect the quoted characters. */
- while (bufnext < bufend && (c = *patnext++) != EOS)
- if (c == QUOTE) {
- if ((c = *patnext++) == EOS) {
- c = QUOTE;
- --patnext;
- }
- *bufnext++ = c | M_PROTECT;
- } else
- *bufnext++ = c;
- }
- *bufnext = EOS;
-
- if (flags & GLOB_BRACE)
- return globexp1(patbuf, pglob);
- else
- return glob0(patbuf, pglob);
-}
-
-/*
- * Expand recursively a glob {} pattern. When there is no more expansion
- * invoke the standard globbing routine to glob the rest of the magic
- * characters
- */
-static int
-globexp1(const Char *pattern, glob_t *pglob)
-{
- const Char* ptr = pattern;
- int rv;
-
- /* Protect a single {}, for find(1), like csh */
- if (pattern[0] == LBRACE && pattern[1] == RBRACE && pattern[2] == EOS)
- return glob0(pattern, pglob);
-
- while ((ptr = g_strchr(ptr, LBRACE)) != NULL)
- if (!globexp2(ptr, pattern, pglob, &rv))
- return rv;
-
- return glob0(pattern, pglob);
-}
-
-
-/*
- * Recursive brace globbing helper. Tries to expand a single brace.
- * If it succeeds then it invokes globexp1 with the new pattern.
- * If it fails then it tries to glob the rest of the pattern and returns.
- */
-static int
-globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, int *rv)
-{
- int i;
- Char *lm, *ls;
- const Char *pe, *pm, *pl;
- Char patbuf[MAXPATHLEN];
-
- /* copy part up to the brace */
- for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++)
- ;
- *lm = EOS;
- ls = lm;
-
- /* Find the balanced brace */
- for (i = 0, pe = ++ptr; *pe; pe++)
- if (*pe == LBRACKET) {
- /* Ignore everything between [] */
- for (pm = pe++; *pe != RBRACKET && *pe != EOS; pe++)
- ;
- if (*pe == EOS) {
- /*
- * We could not find a matching RBRACKET.
- * Ignore and just look for RBRACE
- */
- pe = pm;
- }
- } else if (*pe == LBRACE)
- i++;
- else if (*pe == RBRACE) {
- if (i == 0)
- break;
- i--;
- }
-
- /* Non matching braces; just glob the pattern */
- if (i != 0 || *pe == EOS) {
- *rv = glob0(patbuf, pglob);
- return 0;
- }
-
- for (i = 0, pl = pm = ptr; pm <= pe; pm++) {
- switch (*pm) {
- case LBRACKET:
- /* Ignore everything between [] */
- for (pl = pm++; *pm != RBRACKET && *pm != EOS; pm++)
- ;
- if (*pm == EOS) {
- /*
- * We could not find a matching RBRACKET.
- * Ignore and just look for RBRACE
- */
- pm = pl;
- }
- break;
-
- case LBRACE:
- i++;
- break;
-
- case RBRACE:
- if (i) {
- i--;
- break;
- }
- /* FALLTHROUGH */
- case COMMA:
- if (i && *pm == COMMA)
- break;
- else {
- /* Append the current string */
- for (lm = ls; (pl < pm); *lm++ = *pl++)
- ;
-
- /*
- * Append the rest of the pattern after the
- * closing brace
- */
- for (pl = pe + 1; (*lm++ = *pl++) != EOS; )
- ;
-
- /* Expand the current pattern */
-#ifdef DEBUG
- qprintf("globexp2:", patbuf);
-#endif
- *rv = globexp1(patbuf, pglob);
-
- /* move after the comma, to the next string */
- pl = pm + 1;
- }
- break;
-
- default:
- break;
- }
- }
- *rv = 0;
- return 0;
-}
-
-
-
-/*
- * expand tilde from the passwd file.
- */
-static const Char *
-globtilde(const Char *pattern, Char *patbuf, size_t patbuf_len, glob_t *pglob)
-{
- struct passwd *pwd;
- char *h;
- const Char *p;
- Char *b, *eb;
-
- if (*pattern != TILDE || !(pglob->gl_flags & GLOB_TILDE))
- return pattern;
-
- /* Copy up to the end of the string or / */
- eb = &patbuf[patbuf_len - 1];
- for (p = pattern + 1, h = (char *) patbuf;
- h < (char *)eb && *p && *p != SLASH; *h++ = *p++)
- ;
-
- *h = EOS;
-
-#if 0
- if (h == (char *)eb)
- return what;
-#endif
-
- if (((char *) patbuf)[0] == EOS) {
- /*
- * handle a plain ~ or ~/ by expanding $HOME
- * first and then trying the password file
- */
- if (issetugid() != 0 || (h = getenv("HOME")) == NULL) {
- if ((pwd = getpwuid(getuid())) == NULL)
- return pattern;
- else
- h = pwd->pw_dir;
- }
- } else {
- /*
- * Expand a ~user
- */
- if ((pwd = getpwnam((char*) patbuf)) == NULL)
- return pattern;
- else
- h = pwd->pw_dir;
- }
-
- /* Copy the home directory */
- for (b = patbuf; b < eb && *h; *b++ = *h++)
- ;
-
- /* Append the rest of the pattern */
- while (b < eb && (*b++ = *p++) != EOS)
- ;
- *b = EOS;
-
- return patbuf;
-}
-
-
-/*
- * The main glob() routine: compiles the pattern (optionally processing
- * quotes), calls glob1() to do the real pattern matching, and finally
- * sorts the list (unless unsorted operation is requested). Returns 0
- * if things went well, nonzero if errors occurred. It is not an error
- * to find no matches.
- */
-static int
-glob0(const Char *pattern, glob_t *pglob)
-{
- const Char *qpatnext;
- int c, err, oldpathc;
- Char *bufnext, patbuf[MAXPATHLEN];
- size_t limit = 0;
-
- qpatnext = globtilde(pattern, patbuf, MAXPATHLEN, pglob);
- oldpathc = pglob->gl_pathc;
- bufnext = patbuf;
-
- /* We don't need to check for buffer overflow any more. */
- while ((c = *qpatnext++) != EOS) {
- switch (c) {
- case LBRACKET:
- c = *qpatnext;
- if (c == NOT)
- ++qpatnext;
- if (*qpatnext == EOS ||
- g_strchr(qpatnext+1, RBRACKET) == NULL) {
- *bufnext++ = LBRACKET;
- if (c == NOT)
- --qpatnext;
- break;
- }
- *bufnext++ = M_SET;
- if (c == NOT)
- *bufnext++ = M_NOT;
- c = *qpatnext++;
- do {
- *bufnext++ = CHAR(c);
- if (*qpatnext == RANGE &&
- (c = qpatnext[1]) != RBRACKET) {
- *bufnext++ = M_RNG;
- *bufnext++ = CHAR(c);
- qpatnext += 2;
- }
- } while ((c = *qpatnext++) != RBRACKET);
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_END;
- break;
- case QUESTION:
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_ONE;
- break;
- case STAR:
- pglob->gl_flags |= GLOB_MAGCHAR;
- /* collapse adjacent stars to one,
- * to avoid exponential behavior
- */
- if (bufnext == patbuf || bufnext[-1] != M_ALL)
- *bufnext++ = M_ALL;
- break;
- default:
- *bufnext++ = CHAR(c);
- break;
- }
- }
- *bufnext = EOS;
-#ifdef DEBUG
- qprintf("glob0:", patbuf);
-#endif
-
- if ((err = glob1(patbuf, patbuf+MAXPATHLEN-1, pglob, &limit)) != 0)
- return(err);
-
- /*
- * If there was no match we are going to append the pattern
- * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was specified
- * and the pattern did not contain any magic characters
- * GLOB_NOMAGIC is there just for compatibility with csh.
- */
- if (pglob->gl_pathc == oldpathc) {
- if ((pglob->gl_flags & GLOB_NOCHECK) ||
- ((pglob->gl_flags & GLOB_NOMAGIC) &&
- !(pglob->gl_flags & GLOB_MAGCHAR)))
- return(globextend(pattern, pglob, &limit));
- else
- return(GLOB_NOMATCH);
- }
- if (!(pglob->gl_flags & GLOB_NOSORT))
- qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc,
- pglob->gl_pathc - oldpathc, sizeof(char *), compare);
- return(0);
-}
-
-static int
-compare(const void *p, const void *q)
-{
- return(strcmp(*(char *const *)p, *(char *const *)q));
-}
-
-static int
-glob1(Char *pattern, Char *pattern_last, glob_t *pglob, size_t *limitp)
-{
- Char pathbuf[MAXPATHLEN];
-
- /* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */
- if (*pattern == EOS)
- return(0);
- return(glob2(pathbuf, pathbuf+MAXPATHLEN-1,
- pathbuf, pathbuf+MAXPATHLEN-1,
- pattern, pattern_last, pglob, limitp));
-}
-
-/*
- * The functions glob2 and glob3 are mutually recursive; there is one level
- * of recursion for each segment in the pattern that contains one or more
- * meta characters.
- */
-static int
-glob2(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last,
- Char *pattern, Char *pattern_last, glob_t *pglob, size_t *limitp)
-{
- struct stat sb;
- Char *p, *q;
- int anymeta;
-
- /*
- * Loop over pattern segments until end of pattern or until
- * segment with meta character found.
- */
- for (anymeta = 0;;) {
- if (*pattern == EOS) { /* End of pattern? */
- *pathend = EOS;
- if (g_lstat(pathbuf, &sb, pglob))
- return(0);
-
- if (((pglob->gl_flags & GLOB_MARK) &&
- pathend[-1] != SEP) && (S_ISDIR(sb.st_mode) ||
- (S_ISLNK(sb.st_mode) &&
- (g_stat(pathbuf, &sb, pglob) == 0) &&
- S_ISDIR(sb.st_mode)))) {
- if (pathend+1 > pathend_last)
- return (1);
- *pathend++ = SEP;
- *pathend = EOS;
- }
- ++pglob->gl_matchc;
- return(globextend(pathbuf, pglob, limitp));
- }
-
- /* Find end of next segment, copy tentatively to pathend. */
- q = pathend;
- p = pattern;
- while (*p != EOS && *p != SEP) {
- if (ismeta(*p))
- anymeta = 1;
- if (q+1 > pathend_last)
- return (1);
- *q++ = *p++;
- }
-
- if (!anymeta) { /* No expansion, do next segment. */
- pathend = q;
- pattern = p;
- while (*pattern == SEP) {
- if (pathend+1 > pathend_last)
- return (1);
- *pathend++ = *pattern++;
- }
- } else
- /* Need expansion, recurse. */
- return(glob3(pathbuf, pathbuf_last, pathend,
- pathend_last, pattern, pattern_last,
- p, pattern_last, pglob, limitp));
- }
- /* NOTREACHED */
-}
-
-static int
-glob3(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last,
- Char *pattern, Char *pattern_last __attribute__((unused)), Char *restpattern,
- Char *restpattern_last, glob_t *pglob, size_t *limitp)
-{
- struct dirent *dp;
- DIR *dirp;
- int err;
- char buf[MAXPATHLEN];
-
- /*
- * The readdirfunc declaration can't be prototyped, because it is
- * assigned, below, to two functions which are prototyped in glob.h
- * and dirent.h as taking pointers to differently typed opaque
- * structures.
- */
- struct dirent *(*readdirfunc)(void *);
-
- if (pathend > pathend_last)
- return (1);
- *pathend = EOS;
- errno = 0;
-
- if ((dirp = g_opendir(pathbuf, pglob)) == NULL) {
- /* TODO: don't call for ENOENT or ENOTDIR? */
- if (pglob->gl_errfunc) {
- if (g_Ctoc(pathbuf, buf, sizeof(buf)))
- return(GLOB_ABORTED);
- if (pglob->gl_errfunc(buf, errno) ||
- pglob->gl_flags & GLOB_ERR)
- return(GLOB_ABORTED);
- }
- return(0);
- }
-
- err = 0;
-
- /* Search directory for matching names. */
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- readdirfunc = pglob->gl_readdir;
- else
- readdirfunc = (struct dirent *(*)(void *))readdir;
- while ((dp = (*readdirfunc)(dirp))) {
- u_char *sc;
- Char *dc;
-
- /* Initial DOT must be matched literally. */
- if (dp->d_name[0] == DOT && *pattern != DOT)
- continue;
- dc = pathend;
- sc = (u_char *) dp->d_name;
- while (dc < pathend_last && (*dc++ = *sc++) != EOS)
- ;
- if (dc >= pathend_last) {
- *dc = EOS;
- err = 1;
- break;
- }
-
- if (!match(pathend, pattern, restpattern)) {
- *pathend = EOS;
- continue;
- }
- err = glob2(pathbuf, pathbuf_last, --dc, pathend_last,
- restpattern, restpattern_last, pglob, limitp);
- if (err)
- break;
- }
-
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- (*pglob->gl_closedir)(dirp);
- else
- closedir(dirp);
- return(err);
-}
-
-
-/*
- * Extend the gl_pathv member of a glob_t structure to accommodate a new item,
- * add the new item, and update gl_pathc.
- *
- * This assumes the BSD realloc, which only copies the block when its size
- * crosses a power-of-two boundary; for v7 realloc, this would cause quadratic
- * behavior.
- *
- * Return 0 if new item added, error code if memory couldn't be allocated.
- *
- * Invariant of the glob_t structure:
- * Either gl_pathc is zero and gl_pathv is NULL; or gl_pathc > 0 and
- * gl_pathv points to (gl_offs + gl_pathc + 1) items.
- */
-static int
-globextend(const Char *path, glob_t *pglob, size_t *limitp)
-{
- char **pathv;
- int i;
- u_int newsize, len;
- char *copy;
- const Char *p;
-
- newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs);
- pathv = pglob->gl_pathv ? realloc((char *)pglob->gl_pathv, newsize) :
- malloc(newsize);
- if (pathv == NULL) {
- if (pglob->gl_pathv) {
- free(pglob->gl_pathv);
- pglob->gl_pathv = NULL;
- }
- return(GLOB_NOSPACE);
- }
-
- if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) {
- /* first time around -- clear initial gl_offs items */
- pathv += pglob->gl_offs;
- for (i = pglob->gl_offs; --i >= 0; )
- *--pathv = NULL;
- }
- pglob->gl_pathv = pathv;
-
- for (p = path; *p++;)
- ;
- len = (size_t)(p - path);
- *limitp += len;
- if ((copy = malloc(len)) != NULL) {
- if (g_Ctoc(path, copy, len)) {
- free(copy);
- return(GLOB_NOSPACE);
- }
- pathv[pglob->gl_offs + pglob->gl_pathc++] = copy;
- }
- pathv[pglob->gl_offs + pglob->gl_pathc] = NULL;
-
- if ((pglob->gl_flags & GLOB_LIMIT) &&
- newsize + *limitp >= ARG_MAX) {
- errno = 0;
- return(GLOB_NOSPACE);
- }
-
- return(copy == NULL ? GLOB_NOSPACE : 0);
-}
-
-
-/*
- * pattern matching function for filenames. Each occurrence of the *
- * pattern causes a recursion level.
- */
-static int
-match(Char *name, Char *pat, Char *patend)
-{
- int ok, negate_range;
- Char c, k;
-
- while (pat < patend) {
- c = *pat++;
- switch (c & M_MASK) {
- case M_ALL:
- if (pat == patend)
- return(1);
- do {
- if (match(name, pat, patend))
- return(1);
- } while (*name++ != EOS);
- return(0);
- case M_ONE:
- if (*name++ == EOS)
- return(0);
- break;
- case M_SET:
- ok = 0;
- if ((k = *name++) == EOS)
- return(0);
- if ((negate_range = ((*pat & M_MASK) == M_NOT)) != EOS)
- ++pat;
- while (((c = *pat++) & M_MASK) != M_END)
- if ((*pat & M_MASK) == M_RNG) {
- if (c <= k && k <= pat[1])
- ok = 1;
- pat += 2;
- } else if (c == k)
- ok = 1;
- if (ok == negate_range)
- return(0);
- break;
- default:
- if (*name++ != c)
- return(0);
- break;
- }
- }
- return(*name == EOS);
-}
-
-/* Free allocated data belonging to a glob_t structure. */
-void
-globfree(glob_t *pglob)
-{
- int i;
- char **pp;
-
- if (pglob->gl_pathv != NULL) {
- pp = pglob->gl_pathv + pglob->gl_offs;
- for (i = pglob->gl_pathc; i--; ++pp)
- if (*pp)
- free(*pp);
- free(pglob->gl_pathv);
- pglob->gl_pathv = NULL;
- }
-}
-
-static DIR *
-g_opendir(Char *str, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- if (!*str)
- strlcpy(buf, ".", sizeof buf);
- else {
- if (g_Ctoc(str, buf, sizeof(buf)))
- return(NULL);
- }
-
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return((*pglob->gl_opendir)(buf));
-
- return(opendir(buf));
-}
-
-static int
-g_lstat(Char *fn, struct stat *sb, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- if (g_Ctoc(fn, buf, sizeof(buf)))
- return(-1);
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return((*pglob->gl_lstat)(buf, sb));
- return(lstat(buf, sb));
-}
-
-static int
-g_stat(Char *fn, struct stat *sb, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- if (g_Ctoc(fn, buf, sizeof(buf)))
- return(-1);
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return((*pglob->gl_stat)(buf, sb));
- return(stat(buf, sb));
-}
-
-static const Char *
-g_strchr(const Char *str, int ch)
-{
- do {
- if (*str == ch)
- return (str);
- } while (*str++);
- return (NULL);
-}
-
-static int
-g_Ctoc(const Char *str, char *buf, u_int len)
-{
-
- while (len--) {
- if ((*buf++ = *str++) == EOS)
- return (0);
- }
- return (1);
-}
-
-#ifdef DEBUG
-static void
-qprintf(const char *str, Char *s)
-{
- Char *p;
-
- (void)printf("%s:\n", str);
- for (p = s; *p; p++)
- (void)printf("%c", CHAR(*p));
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", *p & M_PROTECT ? '"' : ' ');
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", ismeta(*p) ? '_' : ' ');
- (void)printf("\n");
-}
-#endif
-#endif
diff --git a/config/glob.h b/config/glob.h
deleted file mode 100644
index 15ade2a04..000000000
--- a/config/glob.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* $OpenBSD: glob.h,v 1.9 2004/10/07 16:56:11 millert Exp $ */
-/* $NetBSD: glob.h,v 1.5 1994/10/26 00:55:56 cgd Exp $ */
-
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)glob.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef __APPLE__
-#include_next <glob.h>
-#else
-#ifndef _GLOB_H_
-#define _GLOB_H_
-
-#include <sys/cdefs.h>
-
-struct stat;
-typedef struct {
- int gl_pathc; /* Count of total paths so far. */
- int gl_matchc; /* Count of paths matching pattern. */
- int gl_offs; /* Reserved at beginning of gl_pathv. */
- int gl_flags; /* Copy of flags parameter to glob. */
- char **gl_pathv; /* List of paths matching pattern. */
- /* Copy of errfunc parameter to glob. */
- int (*gl_errfunc)(const char *, int);
-
- /*
- * Alternate filesystem access methods for glob; replacement
- * versions of closedir(3), readdir(3), opendir(3), stat(2)
- * and lstat(2).
- */
- void (*gl_closedir)(void *);
- struct dirent *(*gl_readdir)(void *);
- void *(*gl_opendir)(const char *);
- int (*gl_lstat)(const char *, struct stat *);
- int (*gl_stat)(const char *, struct stat *);
-} glob_t;
-
-/* Flags */
-#define GLOB_APPEND 0x0001 /* Append to output from previous call. */
-#define GLOB_DOOFFS 0x0002 /* Use gl_offs. */
-#define GLOB_ERR 0x0004 /* Return on error. */
-#define GLOB_MARK 0x0008 /* Append / to matching directories. */
-#define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */
-#define GLOB_NOSORT 0x0020 /* Don't sort. */
-#define GLOB_NOESCAPE 0x1000 /* Disable backslash escaping. */
-
-#ifndef _POSIX_SOURCE
-#define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */
-#define GLOB_BRACE 0x0080 /* Expand braces ala csh. */
-#define GLOB_MAGCHAR 0x0100 /* Pattern had globbing characters. */
-#define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */
-#define GLOB_QUOTE 0x0400 /* Quote special chars with \. */
-#define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */
-#define GLOB_LIMIT 0x2000 /* Limit pattern match output to ARG_MAX */
-#endif
-
-/* Error values returned by glob(3) */
-#define GLOB_NOSPACE (-1) /* Malloc call failed. */
-#define GLOB_ABORTED (-2) /* Unignored error. */
-#define GLOB_NOMATCH (-3) /* No match and GLOB_NOCHECK not set. */
-#define GLOB_NOSYS (-4) /* Function not supported. */
-#define GLOB_ABEND GLOB_ABORTED
-
-__BEGIN_DECLS
-int glob(const char *, int, int (*)(const char *, int), glob_t *);
-void globfree(glob_t *);
-__END_DECLS
-
-#endif /* !_GLOB_H_ */
-#endif
diff --git a/config/images.c b/config/images.c
new file mode 100644
index 000000000..d4f84bd4a
--- /dev/null
+++ b/config/images.c
@@ -0,0 +1,326 @@
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+static const char *xpm_load[] = {
+"22 22 5 1",
+". c None",
+"# c #000000",
+"c c #838100",
+"a c #ffff00",
+"b c #ffffff",
+"......................",
+"......................",
+"......................",
+"............####....#.",
+"...........#....##.##.",
+"..................###.",
+".................####.",
+".####...........#####.",
+"#abab##########.......",
+"#babababababab#.......",
+"#ababababababa#.......",
+"#babababababab#.......",
+"#ababab###############",
+"#babab##cccccccccccc##",
+"#abab##cccccccccccc##.",
+"#bab##cccccccccccc##..",
+"#ab##cccccccccccc##...",
+"#b##cccccccccccc##....",
+"###cccccccccccc##.....",
+"##cccccccccccc##......",
+"###############.......",
+"......................"};
+
+static const char *xpm_save[] = {
+"22 22 5 1",
+". c None",
+"# c #000000",
+"a c #838100",
+"b c #c5c2c5",
+"c c #cdb6d5",
+"......................",
+".####################.",
+".#aa#bbbbbbbbbbbb#bb#.",
+".#aa#bbbbbbbbbbbb#bb#.",
+".#aa#bbbbbbbbbcbb####.",
+".#aa#bbbccbbbbbbb#aa#.",
+".#aa#bbbccbbbbbbb#aa#.",
+".#aa#bbbbbbbbbbbb#aa#.",
+".#aa#bbbbbbbbbbbb#aa#.",
+".#aa#bbbbbbbbbbbb#aa#.",
+".#aa#bbbbbbbbbbbb#aa#.",
+".#aaa############aaa#.",
+".#aaaaaaaaaaaaaaaaaa#.",
+".#aaaaaaaaaaaaaaaaaa#.",
+".#aaa#############aa#.",
+".#aaa#########bbb#aa#.",
+".#aaa#########bbb#aa#.",
+".#aaa#########bbb#aa#.",
+".#aaa#########bbb#aa#.",
+".#aaa#########bbb#aa#.",
+"..##################..",
+"......................"};
+
+static const char *xpm_back[] = {
+"22 22 3 1",
+". c None",
+"# c #000083",
+"a c #838183",
+"......................",
+"......................",
+"......................",
+"......................",
+"......................",
+"...........######a....",
+"..#......##########...",
+"..##...####......##a..",
+"..###.###.........##..",
+"..######..........##..",
+"..#####...........##..",
+"..######..........##..",
+"..#######.........##..",
+"..########.......##a..",
+"...............a###...",
+"...............###....",
+"......................",
+"......................",
+"......................",
+"......................",
+"......................",
+"......................"};
+
+static const char *xpm_tree_view[] = {
+"22 22 2 1",
+". c None",
+"# c #000000",
+"......................",
+"......................",
+"......#...............",
+"......#...............",
+"......#...............",
+"......#...............",
+"......#...............",
+"......########........",
+"......#...............",
+"......#...............",
+"......#...............",
+"......#...............",
+"......#...............",
+"......########........",
+"......#...............",
+"......#...............",
+"......#...............",
+"......#...............",
+"......#...............",
+"......########........",
+"......................",
+"......................"};
+
+static const char *xpm_single_view[] = {
+"22 22 2 1",
+". c None",
+"# c #000000",
+"......................",
+"......................",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"..........#...........",
+"......................",
+"......................"};
+
+static const char *xpm_split_view[] = {
+"22 22 2 1",
+". c None",
+"# c #000000",
+"......................",
+"......................",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......#......#........",
+"......................",
+"......................"};
+
+static const char *xpm_symbol_no[] = {
+"12 12 2 1",
+" c white",
+". c black",
+" ",
+" .......... ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" .......... ",
+" "};
+
+static const char *xpm_symbol_mod[] = {
+"12 12 2 1",
+" c white",
+". c black",
+" ",
+" .......... ",
+" . . ",
+" . . ",
+" . .. . ",
+" . .... . ",
+" . .... . ",
+" . .. . ",
+" . . ",
+" . . ",
+" .......... ",
+" "};
+
+static const char *xpm_symbol_yes[] = {
+"12 12 2 1",
+" c white",
+". c black",
+" ",
+" .......... ",
+" . . ",
+" . . ",
+" . . . ",
+" . .. . ",
+" . . .. . ",
+" . .... . ",
+" . .. . ",
+" . . ",
+" .......... ",
+" "};
+
+static const char *xpm_choice_no[] = {
+"12 12 2 1",
+" c white",
+". c black",
+" ",
+" .... ",
+" .. .. ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" .. .. ",
+" .... ",
+" "};
+
+static const char *xpm_choice_yes[] = {
+"12 12 2 1",
+" c white",
+". c black",
+" ",
+" .... ",
+" .. .. ",
+" . . ",
+" . .. . ",
+" . .... . ",
+" . .... . ",
+" . .. . ",
+" . . ",
+" .. .. ",
+" .... ",
+" "};
+
+static const char *xpm_menu[] = {
+"12 12 2 1",
+" c white",
+". c black",
+" ",
+" .......... ",
+" . . ",
+" . .. . ",
+" . .... . ",
+" . ...... . ",
+" . ...... . ",
+" . .... . ",
+" . .. . ",
+" . . ",
+" .......... ",
+" "};
+
+static const char *xpm_menu_inv[] = {
+"12 12 2 1",
+" c white",
+". c black",
+" ",
+" .......... ",
+" .......... ",
+" .. ...... ",
+" .. .... ",
+" .. .. ",
+" .. .. ",
+" .. .... ",
+" .. ...... ",
+" .......... ",
+" .......... ",
+" "};
+
+static const char *xpm_menuback[] = {
+"12 12 2 1",
+" c white",
+". c black",
+" ",
+" .......... ",
+" . . ",
+" . .. . ",
+" . .... . ",
+" . ...... . ",
+" . ...... . ",
+" . .... . ",
+" . .. . ",
+" . . ",
+" .......... ",
+" "};
+
+static const char *xpm_void[] = {
+"12 12 2 1",
+" c white",
+". c black",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/config/inputbox.c b/config/inputbox.c
deleted file mode 100644
index 8c4c1ce99..000000000
--- a/config/inputbox.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * inputbox.c -- implements the input box
- *
- * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-unsigned char dialog_input_result[MAX_LEN + 1];
-
-/*
- * Print the termination buttons
- */
-static void
-print_buttons(WINDOW *dialog, int height, int width, int selected)
-{
- int x = width / 2 - 11;
- int y = height - 2;
-
- print_button (dialog, " Ok ", y, x, selected==0);
- print_button (dialog, " Help ", y, x + 14, selected==1);
-
- wmove(dialog, y, x+1+14*selected);
- wrefresh(dialog);
-}
-
-/*
- * Display a dialog box for inputing a string
- */
-int
-dialog_inputbox (const char *title, const char *prompt, int height, int width,
- const char *init)
-{
- int i, x, y, box_y, box_x, box_width;
- int input_x = 0, scroll = 0, key = 0, button = -1;
- char *instr = (char*)dialog_input_result;
- WINDOW *dialog;
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height-3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- waddch (dialog, ACS_RTEE);
-
- if (title != NULL && strlen(title) >= width-2 ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
-
- wattrset (dialog, dialog_attr);
- print_autowrap (dialog, prompt, width - 2, 1, 3);
-
- /* Draw the input field box */
- box_width = width - 6;
- getyx (dialog, y, x);
- box_y = y + 2;
- box_x = (width - box_width) / 2;
- draw_box (dialog, y + 1, box_x - 1, 3, box_width + 2,
- border_attr, dialog_attr);
-
- print_buttons(dialog, height, width, 0);
-
- /* Set up the initial value */
- wmove (dialog, box_y, box_x);
- wattrset (dialog, inputbox_attr);
-
- if (!init)
- instr[0] = '\0';
- else
- strcpy (instr, init);
-
- input_x = strlen (instr);
-
- if (input_x >= box_width) {
- scroll = input_x - box_width + 1;
- input_x = box_width - 1;
- for (i = 0; i < box_width - 1; i++)
- waddch (dialog, instr[scroll + i]);
- } else
- waddstr (dialog, instr);
-
- wmove (dialog, box_y, box_x + input_x);
-
- wrefresh (dialog);
-
- while (key != ESC) {
- key = wgetch (dialog);
-
- if (button == -1) { /* Input box selected */
- switch (key) {
- case TAB:
- case KEY_UP:
- case KEY_DOWN:
- break;
- case KEY_LEFT:
- continue;
- case KEY_RIGHT:
- continue;
- case KEY_BACKSPACE:
- case 127:
- if (input_x || scroll) {
- wattrset (dialog, inputbox_attr);
- if (!input_x) {
- scroll = scroll < box_width - 1 ?
- 0 : scroll - (box_width - 1);
- wmove (dialog, box_y, box_x);
- for (i = 0; i < box_width; i++)
- waddch (dialog, instr[scroll + input_x + i] ?
- instr[scroll + input_x + i] : ' ');
- input_x = strlen (instr) - scroll;
- } else
- input_x--;
- instr[scroll + input_x] = '\0';
- mvwaddch (dialog, box_y, input_x + box_x, ' ');
- wmove (dialog, box_y, input_x + box_x);
- wrefresh (dialog);
- }
- continue;
- default:
- if (key < 0x100 && isprint (key)) {
- if (scroll + input_x < MAX_LEN) {
- wattrset (dialog, inputbox_attr);
- instr[scroll + input_x] = key;
- instr[scroll + input_x + 1] = '\0';
- if (input_x == box_width - 1) {
- scroll++;
- wmove (dialog, box_y, box_x);
- for (i = 0; i < box_width - 1; i++)
- waddch (dialog, instr[scroll + i]);
- } else {
- wmove (dialog, box_y, input_x++ + box_x);
- waddch (dialog, key);
- }
- wrefresh (dialog);
- } else
- flash (); /* Alarm user about overflow */
- continue;
- }
- }
- }
- switch (key) {
- case 'O':
- case 'o':
- delwin (dialog);
- return 0;
- case 'H':
- case 'h':
- delwin (dialog);
- return 1;
- case KEY_UP:
- case KEY_LEFT:
- switch (button) {
- case -1:
- button = 1; /* Indicates "Cancel" button is selected */
- print_buttons(dialog, height, width, 1);
- break;
- case 0:
- button = -1; /* Indicates input box is selected */
- print_buttons(dialog, height, width, 0);
- wmove (dialog, box_y, box_x + input_x);
- wrefresh (dialog);
- break;
- case 1:
- button = 0; /* Indicates "OK" button is selected */
- print_buttons(dialog, height, width, 0);
- break;
- }
- break;
- case TAB:
- case KEY_DOWN:
- case KEY_RIGHT:
- switch (button) {
- case -1:
- button = 0; /* Indicates "OK" button is selected */
- print_buttons(dialog, height, width, 0);
- break;
- case 0:
- button = 1; /* Indicates "Cancel" button is selected */
- print_buttons(dialog, height, width, 1);
- break;
- case 1:
- button = -1; /* Indicates input box is selected */
- print_buttons(dialog, height, width, 0);
- wmove (dialog, box_y, box_x + input_x);
- wrefresh (dialog);
- break;
- }
- break;
- case ' ':
- case '\n':
- delwin (dialog);
- return (button == -1 ? 0 : button);
- case 'X':
- case 'x':
- key = ESC;
- case ESC:
- break;
- }
- }
-
- delwin (dialog);
- return -1; /* ESC pressed */
-}
diff --git a/config/kconfig_load.c b/config/kconfig_load.c
new file mode 100644
index 000000000..dbdcaad82
--- /dev/null
+++ b/config/kconfig_load.c
@@ -0,0 +1,35 @@
+#include <dlfcn.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "lkc.h"
+
+#define P(name,type,arg) type (*name ## _p) arg
+#include "lkc_proto.h"
+#undef P
+
+void kconfig_load(void)
+{
+ void *handle;
+ char *error;
+
+ handle = dlopen("./libkconfig.so", RTLD_LAZY);
+ if (!handle) {
+ handle = dlopen("./scripts/kconfig/libkconfig.so", RTLD_LAZY);
+ if (!handle) {
+ fprintf(stderr, "%s\n", dlerror());
+ exit(1);
+ }
+ }
+
+#define P(name,type,arg) \
+{ \
+ name ## _p = dlsym(handle, #name); \
+ if ((error = dlerror())) { \
+ fprintf(stderr, "%s\n", error); \
+ exit(1); \
+ } \
+}
+#include "lkc_proto.h"
+#undef P
+}
diff --git a/config/kxgettext.c b/config/kxgettext.c
new file mode 100644
index 000000000..8d9ce22b0
--- /dev/null
+++ b/config/kxgettext.c
@@ -0,0 +1,233 @@
+/*
+ * Arnaldo Carvalho de Melo <acme@conectiva.com.br>, 2005
+ *
+ * Released under the terms of the GNU GPL v2.0
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+static char *escape(const char* text, char *bf, int len)
+{
+ char *bfp = bf;
+ int multiline = strchr(text, '\n') != NULL;
+ int eol = 0;
+ int textlen = strlen(text);
+
+ if ((textlen > 0) && (text[textlen-1] == '\n'))
+ eol = 1;
+
+ *bfp++ = '"';
+ --len;
+
+ if (multiline) {
+ *bfp++ = '"';
+ *bfp++ = '\n';
+ *bfp++ = '"';
+ len -= 3;
+ }
+
+ while (*text != '\0' && len > 1) {
+ if (*text == '"')
+ *bfp++ = '\\';
+ else if (*text == '\n') {
+ *bfp++ = '\\';
+ *bfp++ = 'n';
+ *bfp++ = '"';
+ *bfp++ = '\n';
+ *bfp++ = '"';
+ len -= 5;
+ ++text;
+ goto next;
+ }
+ else if (*text == '\\') {
+ *bfp++ = '\\';
+ len--;
+ }
+ *bfp++ = *text++;
+next:
+ --len;
+ }
+
+ if (multiline && eol)
+ bfp -= 3;
+
+ *bfp++ = '"';
+ *bfp = '\0';
+
+ return bf;
+}
+
+struct file_line {
+ struct file_line *next;
+ char* file;
+ int lineno;
+};
+
+static struct file_line *file_line__new(char *file, int lineno)
+{
+ struct file_line *self = malloc(sizeof(*self));
+
+ if (self == NULL)
+ goto out;
+
+ self->file = file;
+ self->lineno = lineno;
+ self->next = NULL;
+out:
+ return self;
+}
+
+struct message {
+ const char *msg;
+ const char *option;
+ struct message *next;
+ struct file_line *files;
+};
+
+static struct message *message__list;
+
+static struct message *message__new(const char *msg, char *option, char *file, int lineno)
+{
+ struct message *self = malloc(sizeof(*self));
+
+ if (self == NULL)
+ goto out;
+
+ self->files = file_line__new(file, lineno);
+ if (self->files == NULL)
+ goto out_fail;
+
+ self->msg = strdup(msg);
+ if (self->msg == NULL)
+ goto out_fail_msg;
+
+ self->option = option;
+ self->next = NULL;
+out:
+ return self;
+out_fail_msg:
+ free(self->files);
+out_fail:
+ free(self);
+ self = NULL;
+ goto out;
+}
+
+static struct message *mesage__find(const char *msg)
+{
+ struct message *m = message__list;
+
+ while (m != NULL) {
+ if (strcmp(m->msg, msg) == 0)
+ break;
+ m = m->next;
+ }
+
+ return m;
+}
+
+static int message__add_file_line(struct message *self, char *file, int lineno)
+{
+ int rc = -1;
+ struct file_line *fl = file_line__new(file, lineno);
+
+ if (fl == NULL)
+ goto out;
+
+ fl->next = self->files;
+ self->files = fl;
+ rc = 0;
+out:
+ return rc;
+}
+
+static int message__add(const char *msg, char *option, char *file, int lineno)
+{
+ int rc = 0;
+ char bf[16384];
+ char *escaped = escape(msg, bf, sizeof(bf));
+ struct message *m = mesage__find(escaped);
+
+ if (m != NULL)
+ rc = message__add_file_line(m, file, lineno);
+ else {
+ m = message__new(escaped, option, file, lineno);
+
+ if (m != NULL) {
+ m->next = message__list;
+ message__list = m;
+ } else
+ rc = -1;
+ }
+ return rc;
+}
+
+void menu_build_message_list(struct menu *menu)
+{
+ struct menu *child;
+
+ message__add(menu_get_prompt(menu), NULL,
+ menu->file == NULL ? "Root Menu" : menu->file->name,
+ menu->lineno);
+
+ if (menu->sym != NULL && menu_has_help(menu))
+ message__add(menu_get_help(menu), menu->sym->name,
+ menu->file == NULL ? "Root Menu" : menu->file->name,
+ menu->lineno);
+
+ for (child = menu->list; child != NULL; child = child->next)
+ if (child->prompt != NULL)
+ menu_build_message_list(child);
+}
+
+static void message__print_file_lineno(struct message *self)
+{
+ struct file_line *fl = self->files;
+
+ putchar('\n');
+ if (self->option != NULL)
+ printf("# %s:00000\n", self->option);
+
+ printf("#: %s:%d", fl->file, fl->lineno);
+ fl = fl->next;
+
+ while (fl != NULL) {
+ printf(", %s:%d", fl->file, fl->lineno);
+ fl = fl->next;
+ }
+
+ putchar('\n');
+}
+
+static void message__print_gettext_msgid_msgstr(struct message *self)
+{
+ message__print_file_lineno(self);
+
+ printf("msgid %s\n"
+ "msgstr \"\"\n", self->msg);
+}
+
+void menu__xgettext(void)
+{
+ struct message *m = message__list;
+
+ while (m != NULL) {
+ /* skip empty lines ("") */
+ if (strlen(m->msg) > sizeof("\"\""))
+ message__print_gettext_msgid_msgstr(m);
+ m = m->next;
+ }
+}
+
+int main(int ac, char **av)
+{
+ conf_parse(av[1]);
+
+ menu_build_message_list(menu_get_root_menu(NULL));
+ menu__xgettext();
+ return 0;
+}
diff --git a/config/lex.backup b/config/lex.backup
deleted file mode 100644
index afb1b53c7..000000000
--- a/config/lex.backup
+++ /dev/null
@@ -1 +0,0 @@
-No backing up.
diff --git a/config/lex.zconf.c_shipped b/config/lex.zconf.c_shipped
new file mode 100644
index 000000000..dc3e81807
--- /dev/null
+++ b/config/lex.zconf.c_shipped
@@ -0,0 +1,2416 @@
+
+#line 3 "scripts/kconfig/lex.zconf.c"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define yy_create_buffer zconf_create_buffer
+#define yy_delete_buffer zconf_delete_buffer
+#define yy_flex_debug zconf_flex_debug
+#define yy_init_buffer zconf_init_buffer
+#define yy_flush_buffer zconf_flush_buffer
+#define yy_load_buffer_state zconf_load_buffer_state
+#define yy_switch_to_buffer zconf_switch_to_buffer
+#define yyin zconfin
+#define yyleng zconfleng
+#define yylex zconflex
+#define yylineno zconflineno
+#define yyout zconfout
+#define yyrestart zconfrestart
+#define yytext zconftext
+#define yywrap zconfwrap
+#define yyalloc zconfalloc
+#define yyrealloc zconfrealloc
+#define yyfree zconffree
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE zconfrestart(zconfin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+extern int zconfleng;
+
+extern FILE *zconfin, *zconfout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up zconftext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up zconftext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr) )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ int yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via zconfrestart()), so that the user can continue scanning by
+ * just pointing zconfin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when zconftext is formed. */
+static char yy_hold_char;
+static int yy_n_chars; /* number of characters read into yy_ch_buf */
+int zconfleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow zconfwrap()'s to do buffer switches
+ * instead of setting up a fresh zconfin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void zconfrestart (FILE *input_file );
+void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE zconf_create_buffer (FILE *file,int size );
+void zconf_delete_buffer (YY_BUFFER_STATE b );
+void zconf_flush_buffer (YY_BUFFER_STATE b );
+void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer );
+void zconfpop_buffer_state (void );
+
+static void zconfensure_buffer_stack (void );
+static void zconf_load_buffer_state (void );
+static void zconf_init_buffer (YY_BUFFER_STATE b,FILE *file );
+
+#define YY_FLUSH_BUFFER zconf_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE zconf_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE zconf_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE zconf_scan_bytes (yyconst char *bytes,int len );
+
+void *zconfalloc (yy_size_t );
+void *zconfrealloc (void *,yy_size_t );
+void zconffree (void * );
+
+#define yy_new_buffer zconf_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ zconfensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ zconfensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define zconfwrap(n) 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+FILE *zconfin = (FILE *) 0, *zconfout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int zconflineno;
+
+int zconflineno = 1;
+
+extern char *zconftext;
+#define yytext_ptr zconftext
+static yyconst flex_int16_t yy_nxt[][17] =
+ {
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0
+ },
+
+ {
+ 11, 12, 13, 14, 12, 12, 15, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12
+ },
+
+ {
+ 11, 12, 13, 14, 12, 12, 15, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12
+ },
+
+ {
+ 11, 16, 16, 17, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 18, 16, 16, 16
+ },
+
+ {
+ 11, 16, 16, 17, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 18, 16, 16, 16
+
+ },
+
+ {
+ 11, 19, 20, 21, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19
+ },
+
+ {
+ 11, 19, 20, 21, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19
+ },
+
+ {
+ 11, 22, 22, 23, 22, 24, 22, 22, 24, 22,
+ 22, 22, 22, 22, 22, 25, 22
+ },
+
+ {
+ 11, 22, 22, 23, 22, 24, 22, 22, 24, 22,
+ 22, 22, 22, 22, 22, 25, 22
+ },
+
+ {
+ 11, 26, 26, 27, 28, 29, 30, 31, 29, 32,
+ 33, 34, 35, 35, 36, 37, 38
+
+ },
+
+ {
+ 11, 26, 26, 27, 28, 29, 30, 31, 29, 32,
+ 33, 34, 35, 35, 36, 37, 38
+ },
+
+ {
+ -11, -11, -11, -11, -11, -11, -11, -11, -11, -11,
+ -11, -11, -11, -11, -11, -11, -11
+ },
+
+ {
+ 11, -12, -12, -12, -12, -12, -12, -12, -12, -12,
+ -12, -12, -12, -12, -12, -12, -12
+ },
+
+ {
+ 11, -13, 39, 40, -13, -13, 41, -13, -13, -13,
+ -13, -13, -13, -13, -13, -13, -13
+ },
+
+ {
+ 11, -14, -14, -14, -14, -14, -14, -14, -14, -14,
+ -14, -14, -14, -14, -14, -14, -14
+
+ },
+
+ {
+ 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42
+ },
+
+ {
+ 11, -16, -16, -16, -16, -16, -16, -16, -16, -16,
+ -16, -16, -16, -16, -16, -16, -16
+ },
+
+ {
+ 11, -17, -17, -17, -17, -17, -17, -17, -17, -17,
+ -17, -17, -17, -17, -17, -17, -17
+ },
+
+ {
+ 11, -18, -18, -18, -18, -18, -18, -18, -18, -18,
+ -18, -18, -18, 44, -18, -18, -18
+ },
+
+ {
+ 11, 45, 45, -19, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45
+
+ },
+
+ {
+ 11, -20, 46, 47, -20, -20, -20, -20, -20, -20,
+ -20, -20, -20, -20, -20, -20, -20
+ },
+
+ {
+ 11, 48, -21, -21, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48
+ },
+
+ {
+ 11, 49, 49, 50, 49, -22, 49, 49, -22, 49,
+ 49, 49, 49, 49, 49, -22, 49
+ },
+
+ {
+ 11, -23, -23, -23, -23, -23, -23, -23, -23, -23,
+ -23, -23, -23, -23, -23, -23, -23
+ },
+
+ {
+ 11, -24, -24, -24, -24, -24, -24, -24, -24, -24,
+ -24, -24, -24, -24, -24, -24, -24
+
+ },
+
+ {
+ 11, 51, 51, 52, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51
+ },
+
+ {
+ 11, -26, -26, -26, -26, -26, -26, -26, -26, -26,
+ -26, -26, -26, -26, -26, -26, -26
+ },
+
+ {
+ 11, -27, -27, -27, -27, -27, -27, -27, -27, -27,
+ -27, -27, -27, -27, -27, -27, -27
+ },
+
+ {
+ 11, -28, -28, -28, -28, -28, -28, -28, -28, -28,
+ -28, -28, -28, -28, 53, -28, -28
+ },
+
+ {
+ 11, -29, -29, -29, -29, -29, -29, -29, -29, -29,
+ -29, -29, -29, -29, -29, -29, -29
+
+ },
+
+ {
+ 11, 54, 54, -30, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54
+ },
+
+ {
+ 11, -31, -31, -31, -31, -31, -31, 55, -31, -31,
+ -31, -31, -31, -31, -31, -31, -31
+ },
+
+ {
+ 11, -32, -32, -32, -32, -32, -32, -32, -32, -32,
+ -32, -32, -32, -32, -32, -32, -32
+ },
+
+ {
+ 11, -33, -33, -33, -33, -33, -33, -33, -33, -33,
+ -33, -33, -33, -33, -33, -33, -33
+ },
+
+ {
+ 11, -34, -34, -34, -34, -34, -34, -34, -34, -34,
+ -34, 56, 57, 57, -34, -34, -34
+
+ },
+
+ {
+ 11, -35, -35, -35, -35, -35, -35, -35, -35, -35,
+ -35, 57, 57, 57, -35, -35, -35
+ },
+
+ {
+ 11, -36, -36, -36, -36, -36, -36, -36, -36, -36,
+ -36, -36, -36, -36, -36, -36, -36
+ },
+
+ {
+ 11, -37, -37, 58, -37, -37, -37, -37, -37, -37,
+ -37, -37, -37, -37, -37, -37, -37
+ },
+
+ {
+ 11, -38, -38, -38, -38, -38, -38, -38, -38, -38,
+ -38, -38, -38, -38, -38, -38, 59
+ },
+
+ {
+ 11, -39, 39, 40, -39, -39, 41, -39, -39, -39,
+ -39, -39, -39, -39, -39, -39, -39
+
+ },
+
+ {
+ 11, -40, -40, -40, -40, -40, -40, -40, -40, -40,
+ -40, -40, -40, -40, -40, -40, -40
+ },
+
+ {
+ 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42
+ },
+
+ {
+ 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42
+ },
+
+ {
+ 11, -43, -43, -43, -43, -43, -43, -43, -43, -43,
+ -43, -43, -43, -43, -43, -43, -43
+ },
+
+ {
+ 11, -44, -44, -44, -44, -44, -44, -44, -44, -44,
+ -44, -44, -44, 44, -44, -44, -44
+
+ },
+
+ {
+ 11, 45, 45, -45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45
+ },
+
+ {
+ 11, -46, 46, 47, -46, -46, -46, -46, -46, -46,
+ -46, -46, -46, -46, -46, -46, -46
+ },
+
+ {
+ 11, 48, -47, -47, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48
+ },
+
+ {
+ 11, -48, -48, -48, -48, -48, -48, -48, -48, -48,
+ -48, -48, -48, -48, -48, -48, -48
+ },
+
+ {
+ 11, 49, 49, 50, 49, -49, 49, 49, -49, 49,
+ 49, 49, 49, 49, 49, -49, 49
+
+ },
+
+ {
+ 11, -50, -50, -50, -50, -50, -50, -50, -50, -50,
+ -50, -50, -50, -50, -50, -50, -50
+ },
+
+ {
+ 11, -51, -51, 52, -51, -51, -51, -51, -51, -51,
+ -51, -51, -51, -51, -51, -51, -51
+ },
+
+ {
+ 11, -52, -52, -52, -52, -52, -52, -52, -52, -52,
+ -52, -52, -52, -52, -52, -52, -52
+ },
+
+ {
+ 11, -53, -53, -53, -53, -53, -53, -53, -53, -53,
+ -53, -53, -53, -53, -53, -53, -53
+ },
+
+ {
+ 11, 54, 54, -54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54
+
+ },
+
+ {
+ 11, -55, -55, -55, -55, -55, -55, -55, -55, -55,
+ -55, -55, -55, -55, -55, -55, -55
+ },
+
+ {
+ 11, -56, -56, -56, -56, -56, -56, -56, -56, -56,
+ -56, 60, 57, 57, -56, -56, -56
+ },
+
+ {
+ 11, -57, -57, -57, -57, -57, -57, -57, -57, -57,
+ -57, 57, 57, 57, -57, -57, -57
+ },
+
+ {
+ 11, -58, -58, -58, -58, -58, -58, -58, -58, -58,
+ -58, -58, -58, -58, -58, -58, -58
+ },
+
+ {
+ 11, -59, -59, -59, -59, -59, -59, -59, -59, -59,
+ -59, -59, -59, -59, -59, -59, -59
+
+ },
+
+ {
+ 11, -60, -60, -60, -60, -60, -60, -60, -60, -60,
+ -60, 57, 57, 57, -60, -60, -60
+ },
+
+ } ;
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up zconftext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ (yytext_ptr) = yy_bp; \
+ zconfleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 33
+#define YY_END_OF_BUFFER 34
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[61] =
+ { 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 5, 4, 2, 3, 7, 8, 6, 32, 29,
+ 31, 24, 28, 27, 26, 22, 17, 13, 16, 20,
+ 22, 11, 12, 19, 19, 14, 22, 22, 4, 2,
+ 3, 3, 1, 6, 32, 29, 31, 30, 24, 23,
+ 26, 25, 15, 20, 9, 19, 19, 21, 10, 18
+ } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 4, 5, 6, 1, 1, 7, 8, 9,
+ 10, 1, 1, 1, 11, 12, 12, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 1, 1, 1,
+ 14, 1, 1, 1, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 1, 15, 1, 1, 13, 1, 13, 13, 13, 13,
+
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 1, 16, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+extern int zconf_flex_debug;
+int zconf_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *zconftext;
+#define YY_NO_INPUT 1
+
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+#define START_STRSIZE 16
+
+static struct {
+ struct file *file;
+ int lineno;
+} current_pos;
+
+static char *text;
+static int text_size, text_asize;
+
+struct buffer {
+ struct buffer *parent;
+ YY_BUFFER_STATE state;
+};
+
+struct buffer *current_buf;
+
+static int last_ts, first_ts;
+
+static void zconf_endhelp(void);
+static void zconf_endfile(void);
+
+void new_string(void)
+{
+ text = malloc(START_STRSIZE);
+ text_asize = START_STRSIZE;
+ text_size = 0;
+ *text = 0;
+}
+
+void append_string(const char *str, int size)
+{
+ int new_size = text_size + size + 1;
+ if (new_size > text_asize) {
+ new_size += START_STRSIZE - 1;
+ new_size &= -START_STRSIZE;
+ text = realloc(text, new_size);
+ text_asize = new_size;
+ }
+ memcpy(text + text_size, str, size);
+ text_size += size;
+ text[text_size] = 0;
+}
+
+void alloc_string(const char *str, int size)
+{
+ text = malloc(size + 1);
+ memcpy(text, str, size);
+ text[size] = 0;
+}
+
+#define INITIAL 0
+#define COMMAND 1
+#define HELP 2
+#define STRING 3
+#define PARAM 4
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int zconflex_destroy (void );
+
+int zconfget_debug (void );
+
+void zconfset_debug (int debug_flag );
+
+YY_EXTRA_TYPE zconfget_extra (void );
+
+void zconfset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *zconfget_in (void );
+
+void zconfset_in (FILE * in_str );
+
+FILE *zconfget_out (void );
+
+void zconfset_out (FILE * out_str );
+
+int zconfget_leng (void );
+
+char *zconfget_text (void );
+
+int zconfget_lineno (void );
+
+void zconfset_lineno (int line_number );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int zconfwrap (void );
+#else
+extern int zconfwrap (void );
+#endif
+#endif
+
+ static void yyunput (int c,char *buf_ptr );
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( zconftext, zconfleng, 1, zconfout )
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ errno=0; \
+ while ( (result = read( fileno(zconfin), (char *) buf, max_size )) < 0 ) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(zconfin); \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int zconflex (void);
+
+#define YY_DECL int zconflex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after zconftext and zconfleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+ int str = 0;
+ int ts, i;
+
+ if ( !(yy_init) )
+ {
+ (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
+
+ if ( ! zconfin )
+ zconfin = stdin;
+
+ if ( ! zconfout )
+ zconfout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ zconfensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ zconf_create_buffer(zconfin,YY_BUF_SIZE );
+ }
+
+ zconf_load_buffer_state( );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = (yy_c_buf_p);
+
+ /* Support of zconftext. */
+ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = (yy_start);
+yy_match:
+ while ( (yy_current_state = yy_nxt[yy_current_state][ yy_ec[YY_SC_TO_UI(*yy_cp)] ]) > 0 )
+ ++yy_cp;
+
+ yy_current_state = -yy_current_state;
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+
+ YY_DO_BEFORE_ACTION;
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+case 1:
+/* rule 1 can match eol */
+case 2:
+/* rule 2 can match eol */
+YY_RULE_SETUP
+{
+ current_file->lineno++;
+ return T_EOL;
+}
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+{
+ BEGIN(COMMAND);
+}
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+{
+ unput(zconftext[0]);
+ BEGIN(COMMAND);
+}
+ YY_BREAK
+
+case 6:
+YY_RULE_SETUP
+{
+ struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
+ BEGIN(PARAM);
+ current_pos.file = current_file;
+ current_pos.lineno = current_file->lineno;
+ if (id && id->flags & TF_COMMAND) {
+ zconflval.id = id;
+ return id->token;
+ }
+ alloc_string(zconftext, zconfleng);
+ zconflval.string = text;
+ return T_WORD;
+ }
+ YY_BREAK
+case 7:
+YY_RULE_SETUP
+
+ YY_BREAK
+case 8:
+/* rule 8 can match eol */
+YY_RULE_SETUP
+{
+ BEGIN(INITIAL);
+ current_file->lineno++;
+ return T_EOL;
+ }
+ YY_BREAK
+
+case 9:
+YY_RULE_SETUP
+return T_AND;
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+return T_OR;
+ YY_BREAK
+case 11:
+YY_RULE_SETUP
+return T_OPEN_PAREN;
+ YY_BREAK
+case 12:
+YY_RULE_SETUP
+return T_CLOSE_PAREN;
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+return T_NOT;
+ YY_BREAK
+case 14:
+YY_RULE_SETUP
+return T_EQUAL;
+ YY_BREAK
+case 15:
+YY_RULE_SETUP
+return T_UNEQUAL;
+ YY_BREAK
+case 16:
+YY_RULE_SETUP
+{
+ str = zconftext[0];
+ new_string();
+ BEGIN(STRING);
+ }
+ YY_BREAK
+case 17:
+/* rule 17 can match eol */
+YY_RULE_SETUP
+BEGIN(INITIAL); current_file->lineno++; return T_EOL;
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+/* ignore */
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+{
+ struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
+ if (id && id->flags & TF_PARAM) {
+ zconflval.id = id;
+ return id->token;
+ }
+ alloc_string(zconftext, zconfleng);
+ zconflval.string = text;
+ return T_WORD;
+ }
+ YY_BREAK
+case 20:
+YY_RULE_SETUP
+/* comment */
+ YY_BREAK
+case 21:
+/* rule 21 can match eol */
+YY_RULE_SETUP
+current_file->lineno++;
+ YY_BREAK
+case 22:
+YY_RULE_SETUP
+
+ YY_BREAK
+case YY_STATE_EOF(PARAM):
+{
+ BEGIN(INITIAL);
+ }
+ YY_BREAK
+
+case 23:
+/* rule 23 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up zconftext again */
+YY_RULE_SETUP
+{
+ append_string(zconftext, zconfleng);
+ zconflval.string = text;
+ return T_WORD_QUOTE;
+ }
+ YY_BREAK
+case 24:
+YY_RULE_SETUP
+{
+ append_string(zconftext, zconfleng);
+ }
+ YY_BREAK
+case 25:
+/* rule 25 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up zconftext again */
+YY_RULE_SETUP
+{
+ append_string(zconftext + 1, zconfleng - 1);
+ zconflval.string = text;
+ return T_WORD_QUOTE;
+ }
+ YY_BREAK
+case 26:
+YY_RULE_SETUP
+{
+ append_string(zconftext + 1, zconfleng - 1);
+ }
+ YY_BREAK
+case 27:
+YY_RULE_SETUP
+{
+ if (str == zconftext[0]) {
+ BEGIN(PARAM);
+ zconflval.string = text;
+ return T_WORD_QUOTE;
+ } else
+ append_string(zconftext, 1);
+ }
+ YY_BREAK
+case 28:
+/* rule 28 can match eol */
+YY_RULE_SETUP
+{
+ printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
+ current_file->lineno++;
+ BEGIN(INITIAL);
+ return T_EOL;
+ }
+ YY_BREAK
+case YY_STATE_EOF(STRING):
+{
+ BEGIN(INITIAL);
+ }
+ YY_BREAK
+
+case 29:
+YY_RULE_SETUP
+{
+ ts = 0;
+ for (i = 0; i < zconfleng; i++) {
+ if (zconftext[i] == '\t')
+ ts = (ts & ~7) + 8;
+ else
+ ts++;
+ }
+ last_ts = ts;
+ if (first_ts) {
+ if (ts < first_ts) {
+ zconf_endhelp();
+ return T_HELPTEXT;
+ }
+ ts -= first_ts;
+ while (ts > 8) {
+ append_string(" ", 8);
+ ts -= 8;
+ }
+ append_string(" ", ts);
+ }
+ }
+ YY_BREAK
+case 30:
+/* rule 30 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up zconftext again */
+YY_RULE_SETUP
+{
+ current_file->lineno++;
+ zconf_endhelp();
+ return T_HELPTEXT;
+ }
+ YY_BREAK
+case 31:
+/* rule 31 can match eol */
+YY_RULE_SETUP
+{
+ current_file->lineno++;
+ append_string("\n", 1);
+ }
+ YY_BREAK
+case 32:
+YY_RULE_SETUP
+{
+ while (zconfleng) {
+ if ((zconftext[zconfleng-1] != ' ') && (zconftext[zconfleng-1] != '\t'))
+ break;
+ zconfleng--;
+ }
+ append_string(zconftext, zconfleng);
+ if (!first_ts)
+ first_ts = last_ts;
+ }
+ YY_BREAK
+case YY_STATE_EOF(HELP):
+{
+ zconf_endhelp();
+ return T_HELPTEXT;
+ }
+ YY_BREAK
+
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(COMMAND):
+{
+ if (current_file) {
+ zconf_endfile();
+ return T_EOL;
+ }
+ fclose(zconfin);
+ yyterminate();
+}
+ YY_BREAK
+case 33:
+YY_RULE_SETUP
+YY_FATAL_ERROR( "flex scanner jammed" );
+ YY_BREAK
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed zconfin at a new source and called
+ * zconflex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = zconfin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = (yy_c_buf_p);
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ (yy_did_buffer_switch_on_eof) = 0;
+
+ if ( zconfwrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * zconftext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+} /* end of zconflex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+ int num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+ int yy_c_buf_p_offset =
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ int new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ zconfrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), (size_t) num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ zconfrestart(zconfin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) zconfrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (void)
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+ yy_current_state = (yy_start);
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ yy_current_state = yy_nxt[yy_current_state][(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1)];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
+ register int yy_is_jam;
+
+ yy_current_state = yy_nxt[yy_current_state][1];
+ yy_is_jam = (yy_current_state <= 0);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+ static void yyunput (int c, register char * yy_bp )
+{
+ register char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
+
+ /* undo effects of setting up zconftext */
+ *yy_cp = (yy_hold_char);
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register int number_to_move = (yy_n_chars) + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ register char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (void)
+#else
+ static int input (void)
+#endif
+
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
+
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+ int offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
+
+ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ zconfrestart(zconfin );
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( zconfwrap( ) )
+ return EOF;
+
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve zconftext */
+ (yy_hold_char) = *++(yy_c_buf_p);
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void zconfrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ zconfensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ zconf_create_buffer(zconfin,YY_BUF_SIZE );
+ }
+
+ zconf_init_buffer(YY_CURRENT_BUFFER,input_file );
+ zconf_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * zconfpop_buffer_state();
+ * zconfpush_buffer_state(new_buffer);
+ */
+ zconfensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ zconf_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (zconfwrap()) processing, but the only time this flag
+ * is looked at is after zconfwrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void zconf_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ zconfin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE zconf_create_buffer (FILE * file, int size )
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) zconfalloc(b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ zconf_init_buffer(b,file );
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with zconf_create_buffer()
+ *
+ */
+ void zconf_delete_buffer (YY_BUFFER_STATE b )
+{
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ zconffree((void *) b->yy_ch_buf );
+
+ zconffree((void *) b );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a zconfrestart() or at EOF.
+ */
+ static void zconf_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+{
+ int oerrno = errno;
+
+ zconf_flush_buffer(b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then zconf_init_buffer was _probably_
+ * called from zconfrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void zconf_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ zconf_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ zconfensure_buffer_stack();
+
+ /* This block is copied from zconf_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from zconf_switch_to_buffer. */
+ zconf_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void zconfpop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ zconf_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ zconf_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void zconfensure_buffer_stack (void)
+{
+ int num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)zconfalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)zconfrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ zconf_switch_to_buffer(b );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to zconflex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * zconf_scan_bytes() instead.
+ */
+YY_BUFFER_STATE zconf_scan_string (yyconst char * yystr )
+{
+
+ return zconf_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE zconf_scan_bytes (yyconst char * yybytes, int _yybytes_len )
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = _yybytes_len + 2;
+ buf = (char *) zconfalloc(n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = zconf_scan_buffer(buf,n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in zconf_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up zconftext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ zconftext[zconfleng] = (yy_hold_char); \
+ (yy_c_buf_p) = zconftext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ zconfleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int zconfget_lineno (void)
+{
+
+ return zconflineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *zconfget_in (void)
+{
+ return zconfin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *zconfget_out (void)
+{
+ return zconfout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+int zconfget_leng (void)
+{
+ return zconfleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *zconfget_text (void)
+{
+ return zconftext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void zconfset_lineno (int line_number )
+{
+
+ zconflineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see zconf_switch_to_buffer
+ */
+void zconfset_in (FILE * in_str )
+{
+ zconfin = in_str ;
+}
+
+void zconfset_out (FILE * out_str )
+{
+ zconfout = out_str ;
+}
+
+int zconfget_debug (void)
+{
+ return zconf_flex_debug;
+}
+
+void zconfset_debug (int bdebug )
+{
+ zconf_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from zconflex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ zconfin = stdin;
+ zconfout = stdout;
+#else
+ zconfin = (FILE *) 0;
+ zconfout = (FILE *) 0;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * zconflex_init()
+ */
+ return 0;
+}
+
+/* zconflex_destroy is for both reentrant and non-reentrant scanners. */
+int zconflex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ zconf_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ zconfpop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ zconffree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * zconflex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *zconfalloc (yy_size_t size )
+{
+ return (void *) malloc( size );
+}
+
+void *zconfrealloc (void * ptr, yy_size_t size )
+{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+}
+
+void zconffree (void * ptr )
+{
+ free( (char *) ptr ); /* see zconfrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+void zconf_starthelp(void)
+{
+ new_string();
+ last_ts = first_ts = 0;
+ BEGIN(HELP);
+}
+
+static void zconf_endhelp(void)
+{
+ zconflval.string = text;
+ BEGIN(INITIAL);
+}
+
+/*
+ * Try to open specified file with following names:
+ * ./name
+ * $(srctree)/name
+ * The latter is used when srctree is separate from objtree
+ * when compiling the kernel.
+ * Return NULL if file is not found.
+ */
+FILE *zconf_fopen(const char *name)
+{
+ char *env, fullname[PATH_MAX+1];
+ FILE *f;
+
+ f = fopen(name, "r");
+ if (!f && name != NULL && name[0] != '/') {
+ env = getenv(SRCTREE);
+ if (env) {
+ sprintf(fullname, "%s/%s", env, name);
+ f = fopen(fullname, "r");
+ }
+ }
+ return f;
+}
+
+void zconf_initscan(const char *name)
+{
+ zconfin = zconf_fopen(name);
+ if (!zconfin) {
+ printf("can't find file %s\n", name);
+ exit(1);
+ }
+
+ current_buf = malloc(sizeof(*current_buf));
+ memset(current_buf, 0, sizeof(*current_buf));
+
+ current_file = file_lookup(name);
+ current_file->lineno = 1;
+ current_file->flags = FILE_BUSY;
+}
+
+void zconf_nextfile(const char *name)
+{
+ struct file *file = file_lookup(name);
+ struct buffer *buf = malloc(sizeof(*buf));
+ memset(buf, 0, sizeof(*buf));
+
+ current_buf->state = YY_CURRENT_BUFFER;
+ zconfin = zconf_fopen(name);
+ if (!zconfin) {
+ printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
+ exit(1);
+ }
+ zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
+ buf->parent = current_buf;
+ current_buf = buf;
+
+ if (file->flags & FILE_BUSY) {
+ printf("%s:%d: do not source '%s' from itself\n",
+ zconf_curname(), zconf_lineno(), name);
+ exit(1);
+ }
+ if (file->flags & FILE_SCANNED) {
+ printf("%s:%d: file '%s' is already sourced from '%s'\n",
+ zconf_curname(), zconf_lineno(), name,
+ file->parent->name);
+ exit(1);
+ }
+ file->flags |= FILE_BUSY;
+ file->lineno = 1;
+ file->parent = current_file;
+ current_file = file;
+}
+
+static void zconf_endfile(void)
+{
+ struct buffer *parent;
+
+ current_file->flags |= FILE_SCANNED;
+ current_file->flags &= ~FILE_BUSY;
+ current_file = current_file->parent;
+
+ parent = current_buf->parent;
+ if (parent) {
+ fclose(zconfin);
+ zconf_delete_buffer(YY_CURRENT_BUFFER);
+ zconf_switch_to_buffer(parent->state);
+ }
+ free(current_buf);
+ current_buf = parent;
+}
+
+int zconf_lineno(void)
+{
+ return current_pos.lineno;
+}
+
+char *zconf_curname(void)
+{
+ return current_pos.file ? current_pos.file->name : "<none>";
+}
+
diff --git a/config/lkc.h b/config/lkc.h
index dd040f7a8..f379b0bf8 100644
--- a/config/lkc.h
+++ b/config/lkc.h
@@ -8,6 +8,14 @@
#include "expr.h"
+#ifndef KBUILD_NO_NLS
+# include <libintl.h>
+#else
+static inline const char *gettext(const char *txt) { return txt; }
+static inline void textdomain(const char *domainname) {}
+static inline void bindtextdomain(const char *name, const char *dir) {}
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -23,6 +31,36 @@ extern "C" {
#define SRCTREE "srctree"
+#define PACKAGE "linux"
+#define LOCALEDIR "/usr/share/locale"
+
+#define _(text) gettext(text)
+#define N_(text) (text)
+
+
+#define TF_COMMAND 0x0001
+#define TF_PARAM 0x0002
+#define TF_OPTION 0x0004
+
+enum conf_def_mode {
+ def_default,
+ def_yes,
+ def_mod,
+ def_no,
+ def_random
+};
+
+#define T_OPT_MODULES 1
+#define T_OPT_DEFCONFIG_LIST 2
+#define T_OPT_ENV 3
+
+struct kconf_id {
+ int name;
+ int token;
+ unsigned int flags;
+ enum symbol_type stype;
+};
+
int zconfparse(void);
void zconfdump(FILE *out);
@@ -35,40 +73,58 @@ int zconf_lineno(void);
char *zconf_curname(void);
/* confdata.c */
-extern const char conf_def_filename[];
-extern char conf_filename[];
-
+const char *conf_get_configname(void);
+const char *conf_get_autoconfig_name(void);
char *conf_get_default_confname(void);
+void sym_set_change_count(int count);
+void sym_add_change_count(int count);
+void conf_set_all_new_symbols(enum conf_def_mode mode);
/* kconfig_load.c */
void kconfig_load(void);
/* menu.c */
void menu_init(void);
-void menu_add_menu(void);
+void menu_warn(struct menu *menu, const char *fmt, ...);
+struct menu *menu_add_menu(void);
void menu_end_menu(void);
void menu_add_entry(struct symbol *sym);
void menu_end_entry(void);
void menu_add_dep(struct expr *dep);
struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep);
-void menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
+struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
+void menu_add_option(int token, char *arg);
void menu_finalize(struct menu *parent);
void menu_set_type(int type);
+
+/* util.c */
struct file *file_lookup(const char *name);
int file_write_dep(const char *name);
-extern struct menu *current_entry;
-extern struct menu *current_menu;
+struct gstr {
+ size_t len;
+ char *s;
+};
+struct gstr str_new(void);
+struct gstr str_assign(const char *s);
+void str_free(struct gstr *gs);
+void str_append(struct gstr *gs, const char *s);
+void str_printf(struct gstr *gs, const char *fmt, ...);
+const char *str_get(struct gstr *gs);
/* symbol.c */
+extern struct expr *sym_env_list;
+
void sym_init(void);
void sym_clear_all_valid(void);
+void sym_set_all_changed(void);
void sym_set_changed(struct symbol *sym);
struct symbol *sym_check_deps(struct symbol *sym);
struct property *prop_alloc(enum prop_type type, struct symbol *sym);
struct symbol *prop_get_symbol(struct property *prop);
+struct property *sym_get_env_prop(struct symbol *sym);
static inline tristate sym_get_tristate_value(struct symbol *sym)
{
@@ -103,7 +159,7 @@ static inline bool sym_is_optional(struct symbol *sym)
static inline bool sym_has_value(struct symbol *sym)
{
- return sym->flags & SYMBOL_NEW ? false : true;
+ return sym->flags & SYMBOL_DEF_USER ? true : false;
}
#ifdef __cplusplus
diff --git a/config/lkc_proto.h b/config/lkc_proto.h
index 97c79178e..8e6946131 100644
--- a/config/lkc_proto.h
+++ b/config/lkc_proto.h
@@ -2,7 +2,11 @@
/* confdata.c */
P(conf_parse,void,(const char *name));
P(conf_read,int,(const char *name));
+P(conf_read_simple,int,(const char *name, int));
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)));
/* menu.c */
P(rootmenu,struct menu,);
@@ -11,13 +15,15 @@ P(menu_is_visible,bool,(struct menu *menu));
P(menu_get_prompt,const char *,(struct menu *menu));
P(menu_get_root_menu,struct menu *,(struct menu *menu));
P(menu_get_parent_menu,struct menu *,(struct menu *menu));
+P(menu_has_help,bool,(struct menu *menu));
+P(menu_get_help,const char *,(struct menu *menu));
/* symbol.c */
P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
-P(sym_change_count,int,);
-P(sym_lookup,struct symbol *,(const char *name, int isconst));
+P(sym_lookup,struct symbol *,(const char *name, int flags));
P(sym_find,struct symbol *,(const char *name));
+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));
P(sym_get_type,enum symbol_type,(struct symbol *sym));
@@ -36,4 +42,4 @@ P(prop_get_type_name,const char *,(enum prop_type type));
/* expr.c */
P(expr_compare_type,int,(enum expr_type t1, enum expr_type t2));
-P(expr_print,void,(struct expr *e, void (*fn)(void *, const char *), void *data, int prevtoken));
+P(expr_print,void,(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken));
diff --git a/config/lxdialog/.gitignore b/config/lxdialog/.gitignore
new file mode 100644
index 000000000..90b08ff02
--- /dev/null
+++ b/config/lxdialog/.gitignore
@@ -0,0 +1,4 @@
+#
+# Generated files
+#
+lxdialog
diff --git a/config/lxdialog/BIG.FAT.WARNING b/config/lxdialog/BIG.FAT.WARNING
new file mode 100644
index 000000000..a8999d82b
--- /dev/null
+++ b/config/lxdialog/BIG.FAT.WARNING
@@ -0,0 +1,4 @@
+This is NOT the official version of dialog. This version has been
+significantly modified from the original. It is for use by the Linux
+kernel configuration script. Please do not bother Savio Lam with
+questions about this program.
diff --git a/config/lxdialog/check-lxdialog.sh b/config/lxdialog/check-lxdialog.sh
new file mode 100644
index 000000000..fcef0f59d
--- /dev/null
+++ b/config/lxdialog/check-lxdialog.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+# Check ncurses compatibility
+
+# What library to link
+ldflags()
+{
+ for ext in so a dylib ; do
+ for lib in ncursesw ncurses curses ; do
+ $cc -print-file-name=lib${lib}.${ext} | grep -q /
+ if [ $? -eq 0 ]; then
+ echo "-l${lib}"
+ exit
+ fi
+ done
+ done
+ exit 1
+}
+
+# Where is ncurses.h?
+ccflags()
+{
+ if [ -f /usr/include/ncurses/ncurses.h ]; then
+ 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/ncurses.h ]; then
+ echo '-DCURSES_LOC="<ncurses.h>"'
+ else
+ echo '-DCURSES_LOC="<curses.h>"'
+ fi
+}
+
+# Temp file, try to clean up after us
+tmp=.lxdialog.tmp
+trap "rm -f $tmp" 0 1 2 3 15
+
+# Check if we can link to ncurses
+check() {
+ $cc -xc - -o $tmp 2>/dev/null <<'EOF'
+#include CURSES_LOC
+main() {}
+EOF
+ if [ $? != 0 ]; then
+ echo " *** Unable to find the ncurses libraries or the" 1>&2
+ echo " *** required header files." 1>&2
+ echo " *** 'make menuconfig' requires the ncurses libraries." 1>&2
+ echo " *** " 1>&2
+ echo " *** Install ncurses (ncurses-devel) and try again." 1>&2
+ echo " *** " 1>&2
+ exit 1
+ fi
+}
+
+usage() {
+ printf "Usage: $0 [-check compiler options|-ccflags|-ldflags compiler options]\n"
+}
+
+if [ $# -eq 0 ]; then
+ usage
+ exit 1
+fi
+
+cc=""
+case "$1" in
+ "-check")
+ shift
+ cc="$@"
+ check
+ ;;
+ "-ccflags")
+ ccflags
+ ;;
+ "-ldflags")
+ shift
+ cc="$@"
+ ldflags
+ ;;
+ "*")
+ usage
+ exit 1
+ ;;
+esac
diff --git a/config/lxdialog/checklist.c b/config/lxdialog/checklist.c
new file mode 100644
index 000000000..bcc6f19c3
--- /dev/null
+++ b/config/lxdialog/checklist.c
@@ -0,0 +1,326 @@
+/*
+ * checklist.c -- implements the checklist box
+ *
+ * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ * Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension
+ * Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two
+ * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "dialog.h"
+
+static int list_width, check_x, item_x;
+
+/*
+ * Print list item
+ */
+static void print_item(WINDOW * win, int choice, int selected)
+{
+ int i;
+
+ /* Clear 'residue' of last item */
+ wattrset(win, dlg.menubox.atr);
+ wmove(win, choice, 0);
+ for (i = 0; i < list_width; i++)
+ waddch(win, ' ');
+
+ wmove(win, choice, check_x);
+ wattrset(win, selected ? dlg.check_selected.atr
+ : dlg.check.atr);
+ if (!item_is_tag(':'))
+ wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' ');
+
+ wattrset(win, selected ? dlg.tag_selected.atr : dlg.tag.atr);
+ mvwaddch(win, choice, item_x, item_str()[0]);
+ wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr);
+ waddstr(win, (char *)item_str() + 1);
+ if (selected) {
+ wmove(win, choice, check_x + 1);
+ wrefresh(win);
+ }
+}
+
+/*
+ * Print the scroll indicators.
+ */
+static void print_arrows(WINDOW * win, int choice, int item_no, int scroll,
+ int y, int x, int height)
+{
+ wmove(win, y, x);
+
+ if (scroll > 0) {
+ wattrset(win, dlg.uarrow.atr);
+ waddch(win, ACS_UARROW);
+ waddstr(win, "(-)");
+ } else {
+ wattrset(win, dlg.menubox.atr);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ }
+
+ y = y + height + 1;
+ wmove(win, y, x);
+
+ if ((height < item_no) && (scroll + choice < item_no - 1)) {
+ wattrset(win, dlg.darrow.atr);
+ waddch(win, ACS_DARROW);
+ waddstr(win, "(+)");
+ } else {
+ wattrset(win, dlg.menubox_border.atr);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ }
+}
+
+/*
+ * Display the termination buttons
+ */
+static void print_buttons(WINDOW * dialog, int height, int width, int selected)
+{
+ int x = width / 2 - 11;
+ int y = height - 2;
+
+ print_button(dialog, gettext("Select"), y, x, selected == 0);
+ print_button(dialog, gettext(" Help "), y, x + 14, selected == 1);
+
+ wmove(dialog, y, x + 1 + 14 * selected);
+ wrefresh(dialog);
+}
+
+/*
+ * Display a dialog box with a list of options that can be turned on or off
+ * in the style of radiolist (only one option turned on at a time).
+ */
+int dialog_checklist(const char *title, const char *prompt, int height,
+ int width, int list_height)
+{
+ int i, x, y, box_x, box_y;
+ int key = 0, button = 0, choice = 0, scroll = 0, max_choice;
+ WINDOW *dialog, *list;
+
+ /* which item to highlight */
+ item_foreach() {
+ if (item_is_tag('X'))
+ choice = item_n();
+ if (item_is_selected()) {
+ choice = item_n();
+ break;
+ }
+ }
+
+do_resize:
+ if (getmaxy(stdscr) < (height + 6))
+ return -ERRDISPLAYTOOSMALL;
+ if (getmaxx(stdscr) < (width + 6))
+ return -ERRDISPLAYTOOSMALL;
+
+ max_choice = MIN(list_height, item_count());
+
+ /* center dialog box on screen */
+ x = (COLS - width) / 2;
+ y = (LINES - height) / 2;
+
+ draw_shadow(stdscr, y, x, height, width);
+
+ dialog = newwin(height, width, y, x);
+ keypad(dialog, TRUE);
+
+ draw_box(dialog, 0, 0, height, width,
+ dlg.dialog.atr, dlg.border.atr);
+ wattrset(dialog, dlg.border.atr);
+ mvwaddch(dialog, height - 3, 0, ACS_LTEE);
+ for (i = 0; i < width - 2; i++)
+ waddch(dialog, ACS_HLINE);
+ wattrset(dialog, dlg.dialog.atr);
+ waddch(dialog, ACS_RTEE);
+
+ print_title(dialog, title, width);
+
+ wattrset(dialog, dlg.dialog.atr);
+ print_autowrap(dialog, prompt, width - 2, 1, 3);
+
+ list_width = width - 6;
+ box_y = height - list_height - 5;
+ box_x = (width - list_width) / 2 - 1;
+
+ /* create new window for the list */
+ list = subwin(dialog, list_height, list_width, y + box_y + 1,
+ x + box_x + 1);
+
+ keypad(list, TRUE);
+
+ /* draw a box around the list items */
+ draw_box(dialog, box_y, box_x, list_height + 2, list_width + 2,
+ dlg.menubox_border.atr, dlg.menubox.atr);
+
+ /* Find length of longest item in order to center checklist */
+ check_x = 0;
+ item_foreach()
+ check_x = MAX(check_x, strlen(item_str()) + 4);
+
+ check_x = (list_width - check_x) / 2;
+ item_x = check_x + 4;
+
+ if (choice >= list_height) {
+ scroll = choice - list_height + 1;
+ choice -= scroll;
+ }
+
+ /* Print the list */
+ for (i = 0; i < max_choice; i++) {
+ item_set(scroll + i);
+ print_item(list, i, i == choice);
+ }
+
+ print_arrows(dialog, choice, item_count(), scroll,
+ box_y, box_x + check_x + 5, list_height);
+
+ print_buttons(dialog, height, width, 0);
+
+ wnoutrefresh(dialog);
+ wnoutrefresh(list);
+ doupdate();
+
+ while (key != KEY_ESC) {
+ key = wgetch(dialog);
+
+ for (i = 0; i < max_choice; i++) {
+ item_set(i + scroll);
+ if (toupper(key) == toupper(item_str()[0]))
+ break;
+ }
+
+ if (i < max_choice || key == KEY_UP || key == KEY_DOWN ||
+ key == '+' || key == '-') {
+ if (key == KEY_UP || key == '-') {
+ if (!choice) {
+ if (!scroll)
+ continue;
+ /* Scroll list down */
+ if (list_height > 1) {
+ /* De-highlight current first item */
+ item_set(scroll);
+ print_item(list, 0, FALSE);
+ scrollok(list, TRUE);
+ wscrl(list, -1);
+ scrollok(list, FALSE);
+ }
+ scroll--;
+ item_set(scroll);
+ print_item(list, 0, TRUE);
+ print_arrows(dialog, choice, item_count(),
+ scroll, box_y, box_x + check_x + 5, list_height);
+
+ wnoutrefresh(dialog);
+ wrefresh(list);
+
+ continue; /* wait for another key press */
+ } else
+ i = choice - 1;
+ } else if (key == KEY_DOWN || key == '+') {
+ if (choice == max_choice - 1) {
+ if (scroll + choice >= item_count() - 1)
+ continue;
+ /* Scroll list up */
+ if (list_height > 1) {
+ /* De-highlight current last item before scrolling up */
+ item_set(scroll + max_choice - 1);
+ print_item(list,
+ max_choice - 1,
+ FALSE);
+ scrollok(list, TRUE);
+ wscrl(list, 1);
+ scrollok(list, FALSE);
+ }
+ scroll++;
+ item_set(scroll + max_choice - 1);
+ print_item(list, max_choice - 1, TRUE);
+
+ print_arrows(dialog, choice, item_count(),
+ scroll, box_y, box_x + check_x + 5, list_height);
+
+ wnoutrefresh(dialog);
+ wrefresh(list);
+
+ continue; /* wait for another key press */
+ } else
+ i = choice + 1;
+ }
+ if (i != choice) {
+ /* De-highlight current item */
+ item_set(scroll + choice);
+ print_item(list, choice, FALSE);
+ /* Highlight new item */
+ choice = i;
+ item_set(scroll + choice);
+ print_item(list, choice, TRUE);
+ wnoutrefresh(dialog);
+ wrefresh(list);
+ }
+ continue; /* wait for another key press */
+ }
+ switch (key) {
+ case 'H':
+ case 'h':
+ case '?':
+ button = 1;
+ /* fall-through */
+ case 'S':
+ case 's':
+ case ' ':
+ case '\n':
+ item_foreach()
+ item_set_selected(0);
+ item_set(scroll + choice);
+ item_set_selected(1);
+ delwin(list);
+ delwin(dialog);
+ return button;
+ case TAB:
+ case KEY_LEFT:
+ case KEY_RIGHT:
+ button = ((key == KEY_LEFT ? --button : ++button) < 0)
+ ? 1 : (button > 1 ? 0 : button);
+
+ print_buttons(dialog, height, width, button);
+ wrefresh(dialog);
+ break;
+ case 'X':
+ case 'x':
+ key = KEY_ESC;
+ break;
+ case KEY_ESC:
+ key = on_key_esc(dialog);
+ break;
+ case KEY_RESIZE:
+ delwin(list);
+ delwin(dialog);
+ on_key_resize();
+ goto do_resize;
+ }
+
+ /* Now, update everything... */
+ doupdate();
+ }
+ delwin(list);
+ delwin(dialog);
+ return key; /* ESC pressed */
+}
diff --git a/config/lxdialog/dialog.h b/config/lxdialog/dialog.h
new file mode 100644
index 000000000..b5211fce0
--- /dev/null
+++ b/config/lxdialog/dialog.h
@@ -0,0 +1,230 @@
+/*
+ * dialog.h -- common declarations for all dialog modules
+ *
+ * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+
+#ifndef KBUILD_NO_NLS
+# include <libintl.h>
+#else
+# define gettext(Msgid) ((const char *) (Msgid))
+#endif
+
+#ifdef __sun__
+#define CURS_MACROS
+#endif
+#include CURSES_LOC
+
+/*
+ * Colors in ncurses 1.9.9e do not work properly since foreground and
+ * background colors are OR'd rather than separately masked. This version
+ * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible
+ * with standard curses. The simplest fix (to make this work with standard
+ * curses) uses the wbkgdset() function, not used in the original hack.
+ * Turn it off if we're building with 1.9.9e, since it just confuses things.
+ */
+#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
+#define OLD_NCURSES 1
+#undef wbkgdset
+#define wbkgdset(w,p) /*nothing */
+#else
+#define OLD_NCURSES 0
+#endif
+
+#define TR(params) _tracef params
+
+#define KEY_ESC 27
+#define TAB 9
+#define MAX_LEN 2048
+#define BUF_SIZE (10*1024)
+#define MIN(x,y) (x < y ? x : y)
+#define MAX(x,y) (x > y ? x : y)
+
+#ifndef ACS_ULCORNER
+#define ACS_ULCORNER '+'
+#endif
+#ifndef ACS_LLCORNER
+#define ACS_LLCORNER '+'
+#endif
+#ifndef ACS_URCORNER
+#define ACS_URCORNER '+'
+#endif
+#ifndef ACS_LRCORNER
+#define ACS_LRCORNER '+'
+#endif
+#ifndef ACS_HLINE
+#define ACS_HLINE '-'
+#endif
+#ifndef ACS_VLINE
+#define ACS_VLINE '|'
+#endif
+#ifndef ACS_LTEE
+#define ACS_LTEE '+'
+#endif
+#ifndef ACS_RTEE
+#define ACS_RTEE '+'
+#endif
+#ifndef ACS_UARROW
+#define ACS_UARROW '^'
+#endif
+#ifndef ACS_DARROW
+#define ACS_DARROW 'v'
+#endif
+
+/* error return codes */
+#define ERRDISPLAYTOOSMALL (KEY_MAX + 1)
+
+/*
+ * Color definitions
+ */
+struct dialog_color {
+ chtype atr; /* Color attribute */
+ int fg; /* foreground */
+ int bg; /* background */
+ int hl; /* highlight this item */
+};
+
+struct dialog_info {
+ const char *backtitle;
+ struct dialog_color screen;
+ struct dialog_color shadow;
+ struct dialog_color dialog;
+ struct dialog_color title;
+ struct dialog_color border;
+ struct dialog_color button_active;
+ struct dialog_color button_inactive;
+ struct dialog_color button_key_active;
+ struct dialog_color button_key_inactive;
+ struct dialog_color button_label_active;
+ struct dialog_color button_label_inactive;
+ struct dialog_color inputbox;
+ struct dialog_color inputbox_border;
+ struct dialog_color searchbox;
+ struct dialog_color searchbox_title;
+ struct dialog_color searchbox_border;
+ struct dialog_color position_indicator;
+ struct dialog_color menubox;
+ struct dialog_color menubox_border;
+ struct dialog_color item;
+ struct dialog_color item_selected;
+ struct dialog_color tag;
+ struct dialog_color tag_selected;
+ struct dialog_color tag_key;
+ struct dialog_color tag_key_selected;
+ struct dialog_color check;
+ struct dialog_color check_selected;
+ struct dialog_color uarrow;
+ struct dialog_color darrow;
+};
+
+/*
+ * Global variables
+ */
+extern struct dialog_info dlg;
+extern char dialog_input_result[];
+
+/*
+ * Function prototypes
+ */
+
+/* item list as used by checklist and menubox */
+void item_reset(void);
+void item_make(const char *fmt, ...);
+void item_add_str(const char *fmt, ...);
+void item_set_tag(char tag);
+void item_set_data(void *p);
+void item_set_selected(int val);
+int item_activate_selected(void);
+void *item_data(void);
+char item_tag(void);
+
+/* item list manipulation for lxdialog use */
+#define MAXITEMSTR 200
+struct dialog_item {
+ char str[MAXITEMSTR]; /* promtp displayed */
+ char tag;
+ void *data; /* pointer to menu item - used by menubox+checklist */
+ int selected; /* Set to 1 by dialog_*() function if selected. */
+};
+
+/* list of lialog_items */
+struct dialog_list {
+ struct dialog_item node;
+ struct dialog_list *next;
+};
+
+extern struct dialog_list *item_cur;
+extern struct dialog_list item_nil;
+extern struct dialog_list *item_head;
+
+int item_count(void);
+void item_set(int n);
+int item_n(void);
+const char *item_str(void);
+int item_is_selected(void);
+int item_is_tag(char tag);
+#define item_foreach() \
+ for (item_cur = item_head ? item_head: item_cur; \
+ item_cur && (item_cur != &item_nil); item_cur = item_cur->next)
+
+/* generic key handlers */
+int on_key_esc(WINDOW *win);
+int on_key_resize(void);
+
+int init_dialog(const char *backtitle);
+void set_dialog_backtitle(const char *backtitle);
+void end_dialog(int x, int y);
+void attr_clear(WINDOW * win, int height, int width, chtype attr);
+void dialog_clear(void);
+void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x);
+void print_button(WINDOW * win, const char *label, int y, int x, int selected);
+void print_title(WINDOW *dialog, const char *title, int width);
+void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box,
+ chtype border);
+void draw_shadow(WINDOW * win, int y, int x, int height, int width);
+
+int first_alpha(const char *string, const char *exempt);
+int dialog_yesno(const char *title, const char *prompt, int height, int width);
+int dialog_msgbox(const char *title, const char *prompt, int height,
+ int width, int pause);
+int dialog_textbox(const char *title, const char *file, int height, int width);
+int dialog_menu(const char *title, const char *prompt,
+ const void *selected, int *s_scroll);
+int dialog_checklist(const char *title, const char *prompt, int height,
+ int width, int list_height);
+extern char dialog_input_result[];
+int dialog_inputbox(const char *title, const char *prompt, int height,
+ int width, const char *init);
+
+/*
+ * This is the base for fictitious keys, which activate
+ * the buttons.
+ *
+ * Mouse-generated keys are the following:
+ * -- the first 32 are used as numbers, in addition to '0'-'9'
+ * -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o')
+ * -- uppercase chars are used to invoke the button (M_EVENT + 'O')
+ */
+#define M_EVENT (KEY_MAX+1)
diff --git a/config/lxdialog/inputbox.c b/config/lxdialog/inputbox.c
new file mode 100644
index 000000000..616c60138
--- /dev/null
+++ b/config/lxdialog/inputbox.c
@@ -0,0 +1,238 @@
+/*
+ * inputbox.c -- implements the input box
+ *
+ * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "dialog.h"
+
+char dialog_input_result[MAX_LEN + 1];
+
+/*
+ * Print the termination buttons
+ */
+static void print_buttons(WINDOW * dialog, int height, int width, int selected)
+{
+ int x = width / 2 - 11;
+ int y = height - 2;
+
+ print_button(dialog, gettext(" Ok "), y, x, selected == 0);
+ print_button(dialog, gettext(" Help "), y, x + 14, selected == 1);
+
+ wmove(dialog, y, x + 1 + 14 * selected);
+ wrefresh(dialog);
+}
+
+/*
+ * Display a dialog box for inputing a string
+ */
+int dialog_inputbox(const char *title, const char *prompt, int height, int width,
+ const char *init)
+{
+ int i, x, y, box_y, box_x, box_width;
+ int input_x = 0, scroll = 0, key = 0, button = -1;
+ char *instr = dialog_input_result;
+ WINDOW *dialog;
+
+ if (!init)
+ instr[0] = '\0';
+ else
+ strcpy(instr, init);
+
+do_resize:
+ if (getmaxy(stdscr) <= (height - 2))
+ return -ERRDISPLAYTOOSMALL;
+ if (getmaxx(stdscr) <= (width - 2))
+ return -ERRDISPLAYTOOSMALL;
+
+ /* center dialog box on screen */
+ x = (COLS - width) / 2;
+ y = (LINES - height) / 2;
+
+ draw_shadow(stdscr, y, x, height, width);
+
+ dialog = newwin(height, width, y, x);
+ keypad(dialog, TRUE);
+
+ draw_box(dialog, 0, 0, height, width,
+ dlg.dialog.atr, dlg.border.atr);
+ wattrset(dialog, dlg.border.atr);
+ mvwaddch(dialog, height - 3, 0, ACS_LTEE);
+ for (i = 0; i < width - 2; i++)
+ waddch(dialog, ACS_HLINE);
+ wattrset(dialog, dlg.dialog.atr);
+ waddch(dialog, ACS_RTEE);
+
+ print_title(dialog, title, width);
+
+ wattrset(dialog, dlg.dialog.atr);
+ print_autowrap(dialog, prompt, width - 2, 1, 3);
+
+ /* Draw the input field box */
+ box_width = width - 6;
+ getyx(dialog, y, x);
+ box_y = y + 2;
+ box_x = (width - box_width) / 2;
+ draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2,
+ dlg.dialog.atr, dlg.border.atr);
+
+ print_buttons(dialog, height, width, 0);
+
+ /* Set up the initial value */
+ wmove(dialog, box_y, box_x);
+ wattrset(dialog, dlg.inputbox.atr);
+
+ input_x = strlen(instr);
+
+ if (input_x >= box_width) {
+ scroll = input_x - box_width + 1;
+ input_x = box_width - 1;
+ for (i = 0; i < box_width - 1; i++)
+ waddch(dialog, instr[scroll + i]);
+ } else {
+ waddstr(dialog, instr);
+ }
+
+ wmove(dialog, box_y, box_x + input_x);
+
+ wrefresh(dialog);
+
+ while (key != KEY_ESC) {
+ key = wgetch(dialog);
+
+ if (button == -1) { /* Input box selected */
+ switch (key) {
+ case TAB:
+ case KEY_UP:
+ case KEY_DOWN:
+ break;
+ case KEY_LEFT:
+ continue;
+ case KEY_RIGHT:
+ continue;
+ case KEY_BACKSPACE:
+ case 127:
+ if (input_x || scroll) {
+ wattrset(dialog, dlg.inputbox.atr);
+ if (!input_x) {
+ scroll = scroll < box_width - 1 ? 0 : scroll - (box_width - 1);
+ wmove(dialog, box_y, box_x);
+ for (i = 0; i < box_width; i++)
+ waddch(dialog,
+ instr[scroll + input_x + i] ?
+ instr[scroll + input_x + i] : ' ');
+ input_x = strlen(instr) - scroll;
+ } else
+ input_x--;
+ instr[scroll + input_x] = '\0';
+ mvwaddch(dialog, box_y, input_x + box_x, ' ');
+ wmove(dialog, box_y, input_x + box_x);
+ wrefresh(dialog);
+ }
+ continue;
+ default:
+ if (key < 0x100 && isprint(key)) {
+ if (scroll + input_x < MAX_LEN) {
+ wattrset(dialog, dlg.inputbox.atr);
+ instr[scroll + input_x] = key;
+ instr[scroll + input_x + 1] = '\0';
+ if (input_x == box_width - 1) {
+ scroll++;
+ wmove(dialog, box_y, box_x);
+ for (i = 0; i < box_width - 1; i++)
+ waddch(dialog, instr [scroll + i]);
+ } else {
+ wmove(dialog, box_y, input_x++ + box_x);
+ waddch(dialog, key);
+ }
+ wrefresh(dialog);
+ } else
+ flash(); /* Alarm user about overflow */
+ continue;
+ }
+ }
+ }
+ switch (key) {
+ case 'O':
+ case 'o':
+ delwin(dialog);
+ return 0;
+ case 'H':
+ case 'h':
+ delwin(dialog);
+ return 1;
+ case KEY_UP:
+ case KEY_LEFT:
+ switch (button) {
+ case -1:
+ button = 1; /* Indicates "Cancel" button is selected */
+ print_buttons(dialog, height, width, 1);
+ break;
+ case 0:
+ button = -1; /* Indicates input box is selected */
+ print_buttons(dialog, height, width, 0);
+ wmove(dialog, box_y, box_x + input_x);
+ wrefresh(dialog);
+ break;
+ case 1:
+ button = 0; /* Indicates "OK" button is selected */
+ print_buttons(dialog, height, width, 0);
+ break;
+ }
+ break;
+ case TAB:
+ case KEY_DOWN:
+ case KEY_RIGHT:
+ switch (button) {
+ case -1:
+ button = 0; /* Indicates "OK" button is selected */
+ print_buttons(dialog, height, width, 0);
+ break;
+ case 0:
+ button = 1; /* Indicates "Cancel" button is selected */
+ print_buttons(dialog, height, width, 1);
+ break;
+ case 1:
+ button = -1; /* Indicates input box is selected */
+ print_buttons(dialog, height, width, 0);
+ wmove(dialog, box_y, box_x + input_x);
+ wrefresh(dialog);
+ break;
+ }
+ break;
+ case ' ':
+ case '\n':
+ delwin(dialog);
+ return (button == -1 ? 0 : button);
+ case 'X':
+ case 'x':
+ key = KEY_ESC;
+ break;
+ case KEY_ESC:
+ key = on_key_esc(dialog);
+ break;
+ case KEY_RESIZE:
+ delwin(dialog);
+ on_key_resize();
+ goto do_resize;
+ }
+ }
+
+ delwin(dialog);
+ return KEY_ESC; /* ESC pressed */
+}
diff --git a/config/lxdialog/menubox.c b/config/lxdialog/menubox.c
new file mode 100644
index 000000000..fa9d633f2
--- /dev/null
+++ b/config/lxdialog/menubox.c
@@ -0,0 +1,434 @@
+/*
+ * menubox.c -- implements the menu box
+ *
+ * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/*
+ * Changes by Clifford Wolf (god@clifford.at)
+ *
+ * [ 1998-06-13 ]
+ *
+ * *) A bugfix for the Page-Down problem
+ *
+ * *) Formerly when I used Page Down and Page Up, the cursor would be set
+ * to the first position in the menu box. Now lxdialog is a bit
+ * smarter and works more like other menu systems (just have a look at
+ * it).
+ *
+ * *) Formerly if I selected something my scrolling would be broken because
+ * lxdialog is re-invoked by the Menuconfig shell script, can't
+ * remember the last scrolling position, and just sets it so that the
+ * cursor is at the bottom of the box. Now it writes the temporary file
+ * lxdialog.scrltmp which contains this information. The file is
+ * deleted by lxdialog if the user leaves a submenu or enters a new
+ * one, but it would be nice if Menuconfig could make another "rm -f"
+ * just to be sure. Just try it out - you will recognise a difference!
+ *
+ * [ 1998-06-14 ]
+ *
+ * *) Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files
+ * and menus change their size on the fly.
+ *
+ * *) If for some reason the last scrolling position is not saved by
+ * lxdialog, it sets the scrolling so that the selected item is in the
+ * middle of the menu box, not at the bottom.
+ *
+ * 02 January 1999, Michael Elizabeth Chastain (mec@shout.net)
+ * Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus.
+ * This fixes a bug in Menuconfig where using ' ' to descend into menus
+ * would leave mis-synchronized lxdialog.scrltmp files lying around,
+ * fscanf would read in 'scroll', and eventually that value would get used.
+ */
+
+#include "dialog.h"
+
+static int menu_width, item_x;
+
+/*
+ * Print menu item
+ */
+static void do_print_item(WINDOW * win, const char *item, int line_y,
+ int selected, int hotkey)
+{
+ int j;
+ char *menu_item = malloc(menu_width + 1);
+
+ strncpy(menu_item, item, menu_width - item_x);
+ menu_item[menu_width - item_x] = '\0';
+ j = first_alpha(menu_item, "YyNnMmHh");
+
+ /* Clear 'residue' of last item */
+ wattrset(win, dlg.menubox.atr);
+ wmove(win, line_y, 0);
+#if OLD_NCURSES
+ {
+ int i;
+ for (i = 0; i < menu_width; i++)
+ waddch(win, ' ');
+ }
+#else
+ wclrtoeol(win);
+#endif
+ wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr);
+ mvwaddstr(win, line_y, item_x, menu_item);
+ if (hotkey) {
+ wattrset(win, selected ? dlg.tag_key_selected.atr
+ : dlg.tag_key.atr);
+ mvwaddch(win, line_y, item_x + j, menu_item[j]);
+ }
+ if (selected) {
+ wmove(win, line_y, item_x + 1);
+ }
+ free(menu_item);
+ wrefresh(win);
+}
+
+#define print_item(index, choice, selected) \
+do { \
+ item_set(index); \
+ do_print_item(menu, item_str(), choice, selected, !item_is_tag(':')); \
+} while (0)
+
+/*
+ * Print the scroll indicators.
+ */
+static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x,
+ int height)
+{
+ int cur_y, cur_x;
+
+ getyx(win, cur_y, cur_x);
+
+ wmove(win, y, x);
+
+ if (scroll > 0) {
+ wattrset(win, dlg.uarrow.atr);
+ waddch(win, ACS_UARROW);
+ waddstr(win, "(-)");
+ } else {
+ wattrset(win, dlg.menubox.atr);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ }
+
+ y = y + height + 1;
+ wmove(win, y, x);
+ wrefresh(win);
+
+ if ((height < item_no) && (scroll + height < item_no)) {
+ wattrset(win, dlg.darrow.atr);
+ waddch(win, ACS_DARROW);
+ waddstr(win, "(+)");
+ } else {
+ wattrset(win, dlg.menubox_border.atr);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ waddch(win, ACS_HLINE);
+ }
+
+ wmove(win, cur_y, cur_x);
+ wrefresh(win);
+}
+
+/*
+ * Display the termination buttons.
+ */
+static void print_buttons(WINDOW * win, int height, int width, int selected)
+{
+ int x = width / 2 - 16;
+ int y = height - 2;
+
+ print_button(win, gettext("Select"), y, x, selected == 0);
+ print_button(win, gettext(" Exit "), y, x + 12, selected == 1);
+ print_button(win, gettext(" Help "), y, x + 24, selected == 2);
+
+ wmove(win, y, x + 1 + 12 * selected);
+ wrefresh(win);
+}
+
+/* scroll up n lines (n may be negative) */
+static void do_scroll(WINDOW *win, int *scroll, int n)
+{
+ /* Scroll menu up */
+ scrollok(win, TRUE);
+ wscrl(win, n);
+ scrollok(win, FALSE);
+ *scroll = *scroll + n;
+ wrefresh(win);
+}
+
+/*
+ * Display a menu for choosing among a number of options
+ */
+int dialog_menu(const char *title, const char *prompt,
+ const void *selected, int *s_scroll)
+{
+ int i, j, x, y, box_x, box_y;
+ int height, width, menu_height;
+ int key = 0, button = 0, scroll = 0, choice = 0;
+ int first_item = 0, max_choice;
+ WINDOW *dialog, *menu;
+
+do_resize:
+ height = getmaxy(stdscr);
+ width = getmaxx(stdscr);
+ if (height < 15 || width < 65)
+ return -ERRDISPLAYTOOSMALL;
+
+ height -= 4;
+ width -= 5;
+ menu_height = height - 10;
+
+ max_choice = MIN(menu_height, item_count());
+
+ /* center dialog box on screen */
+ x = (COLS - width) / 2;
+ y = (LINES - height) / 2;
+
+ draw_shadow(stdscr, y, x, height, width);
+
+ dialog = newwin(height, width, y, x);
+ keypad(dialog, TRUE);
+
+ draw_box(dialog, 0, 0, height, width,
+ dlg.dialog.atr, dlg.border.atr);
+ wattrset(dialog, dlg.border.atr);
+ mvwaddch(dialog, height - 3, 0, ACS_LTEE);
+ for (i = 0; i < width - 2; i++)
+ waddch(dialog, ACS_HLINE);
+ wattrset(dialog, dlg.dialog.atr);
+ wbkgdset(dialog, dlg.dialog.atr & A_COLOR);
+ waddch(dialog, ACS_RTEE);
+
+ print_title(dialog, title, width);
+
+ wattrset(dialog, dlg.dialog.atr);
+ print_autowrap(dialog, prompt, width - 2, 1, 3);
+
+ menu_width = width - 6;
+ box_y = height - menu_height - 5;
+ box_x = (width - menu_width) / 2 - 1;
+
+ /* create new window for the menu */
+ menu = subwin(dialog, menu_height, menu_width,
+ y + box_y + 1, x + box_x + 1);
+ keypad(menu, TRUE);
+
+ /* draw a box around the menu items */
+ draw_box(dialog, box_y, box_x, menu_height + 2, menu_width + 2,
+ dlg.menubox_border.atr, dlg.menubox.atr);
+
+ if (menu_width >= 80)
+ item_x = (menu_width - 70) / 2;
+ else
+ item_x = 4;
+
+ /* Set choice to default item */
+ item_foreach()
+ if (selected && (selected == item_data()))
+ choice = item_n();
+ /* get the saved scroll info */
+ scroll = *s_scroll;
+ if ((scroll <= choice) && (scroll + max_choice > choice) &&
+ (scroll >= 0) && (scroll + max_choice <= item_count())) {
+ first_item = scroll;
+ choice = choice - scroll;
+ } else {
+ scroll = 0;
+ }
+ if ((choice >= max_choice)) {
+ if (choice >= item_count() - max_choice / 2)
+ scroll = first_item = item_count() - max_choice;
+ else
+ scroll = first_item = choice - max_choice / 2;
+ choice = choice - scroll;
+ }
+
+ /* Print the menu */
+ for (i = 0; i < max_choice; i++) {
+ print_item(first_item + i, i, i == choice);
+ }
+
+ wnoutrefresh(menu);
+
+ print_arrows(dialog, item_count(), scroll,
+ box_y, box_x + item_x + 1, menu_height);
+
+ print_buttons(dialog, height, width, 0);
+ wmove(menu, choice, item_x + 1);
+ wrefresh(menu);
+
+ while (key != KEY_ESC) {
+ key = wgetch(menu);
+
+ if (key < 256 && isalpha(key))
+ key = tolower(key);
+
+ if (strchr("ynmh", key))
+ i = max_choice;
+ else {
+ for (i = choice + 1; i < max_choice; i++) {
+ item_set(scroll + i);
+ j = first_alpha(item_str(), "YyNnMmHh");
+ if (key == tolower(item_str()[j]))
+ break;
+ }
+ if (i == max_choice)
+ for (i = 0; i < max_choice; i++) {
+ item_set(scroll + i);
+ j = first_alpha(item_str(), "YyNnMmHh");
+ if (key == tolower(item_str()[j]))
+ break;
+ }
+ }
+
+ if (i < max_choice ||
+ key == KEY_UP || key == KEY_DOWN ||
+ key == '-' || key == '+' ||
+ key == KEY_PPAGE || key == KEY_NPAGE) {
+ /* Remove highligt of current item */
+ print_item(scroll + choice, choice, FALSE);
+
+ if (key == KEY_UP || key == '-') {
+ if (choice < 2 && scroll) {
+ /* Scroll menu down */
+ do_scroll(menu, &scroll, -1);
+
+ print_item(scroll, 0, FALSE);
+ } else
+ choice = MAX(choice - 1, 0);
+
+ } else if (key == KEY_DOWN || key == '+') {
+ print_item(scroll+choice, choice, FALSE);
+
+ if ((choice > max_choice - 3) &&
+ (scroll + max_choice < item_count())) {
+ /* Scroll menu up */
+ do_scroll(menu, &scroll, 1);
+
+ print_item(scroll+max_choice - 1,
+ max_choice - 1, FALSE);
+ } else
+ choice = MIN(choice + 1, max_choice - 1);
+
+ } else if (key == KEY_PPAGE) {
+ scrollok(menu, TRUE);
+ for (i = 0; (i < max_choice); i++) {
+ if (scroll > 0) {
+ do_scroll(menu, &scroll, -1);
+ print_item(scroll, 0, FALSE);
+ } else {
+ if (choice > 0)
+ choice--;
+ }
+ }
+
+ } else if (key == KEY_NPAGE) {
+ for (i = 0; (i < max_choice); i++) {
+ if (scroll + max_choice < item_count()) {
+ do_scroll(menu, &scroll, 1);
+ print_item(scroll+max_choice-1,
+ max_choice - 1, FALSE);
+ } else {
+ if (choice + 1 < max_choice)
+ choice++;
+ }
+ }
+ } else
+ choice = i;
+
+ print_item(scroll + choice, choice, TRUE);
+
+ print_arrows(dialog, item_count(), scroll,
+ box_y, box_x + item_x + 1, menu_height);
+
+ wnoutrefresh(dialog);
+ wrefresh(menu);
+
+ continue; /* wait for another key press */
+ }
+
+ switch (key) {
+ case KEY_LEFT:
+ case TAB:
+ case KEY_RIGHT:
+ button = ((key == KEY_LEFT ? --button : ++button) < 0)
+ ? 2 : (button > 2 ? 0 : button);
+
+ print_buttons(dialog, height, width, button);
+ wrefresh(menu);
+ break;
+ case ' ':
+ case 's':
+ case 'y':
+ case 'n':
+ case 'm':
+ case '/':
+ /* save scroll info */
+ *s_scroll = scroll;
+ delwin(menu);
+ delwin(dialog);
+ item_set(scroll + choice);
+ item_set_selected(1);
+ switch (key) {
+ case 's':
+ return 3;
+ case 'y':
+ return 3;
+ case 'n':
+ return 4;
+ case 'm':
+ return 5;
+ case ' ':
+ return 6;
+ case '/':
+ return 7;
+ }
+ return 0;
+ case 'h':
+ case '?':
+ button = 2;
+ case '\n':
+ *s_scroll = scroll;
+ delwin(menu);
+ delwin(dialog);
+ item_set(scroll + choice);
+ item_set_selected(1);
+ return button;
+ case 'e':
+ case 'x':
+ key = KEY_ESC;
+ break;
+ case KEY_ESC:
+ key = on_key_esc(menu);
+ break;
+ case KEY_RESIZE:
+ on_key_resize();
+ delwin(menu);
+ delwin(dialog);
+ goto do_resize;
+ }
+ }
+ delwin(menu);
+ delwin(dialog);
+ return key; /* ESC pressed */
+}
diff --git a/config/lxdialog/textbox.c b/config/lxdialog/textbox.c
new file mode 100644
index 000000000..c704712d0
--- /dev/null
+++ b/config/lxdialog/textbox.c
@@ -0,0 +1,391 @@
+/*
+ * textbox.c -- implements the text box
+ *
+ * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "dialog.h"
+
+static void back_lines(int n);
+static void print_page(WINDOW * win, int height, int width);
+static void print_line(WINDOW * win, int row, int width);
+static char *get_line(void);
+static void print_position(WINDOW * win);
+
+static int hscroll;
+static int begin_reached, end_reached, page_length;
+static const char *buf;
+static const char *page;
+
+/*
+ * refresh window content
+ */
+static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
+ int cur_y, int cur_x)
+{
+ print_page(box, boxh, boxw);
+ print_position(dialog);
+ wmove(dialog, cur_y, cur_x); /* Restore cursor position */
+ wrefresh(dialog);
+}
+
+
+/*
+ * Display text from a file in a dialog box.
+ */
+int dialog_textbox(const char *title, const char *tbuf,
+ int initial_height, int initial_width)
+{
+ int i, x, y, cur_x, cur_y, key = 0;
+ int height, width, boxh, boxw;
+ int passed_end;
+ WINDOW *dialog, *box;
+
+ begin_reached = 1;
+ end_reached = 0;
+ page_length = 0;
+ hscroll = 0;
+ buf = tbuf;
+ page = buf; /* page is pointer to start of page to be displayed */
+
+do_resize:
+ getmaxyx(stdscr, height, width);
+ if (height < 8 || width < 8)
+ return -ERRDISPLAYTOOSMALL;
+ if (initial_height != 0)
+ height = initial_height;
+ else
+ if (height > 4)
+ height -= 4;
+ else
+ height = 0;
+ if (initial_width != 0)
+ width = initial_width;
+ else
+ if (width > 5)
+ width -= 5;
+ else
+ width = 0;
+
+ /* center dialog box on screen */
+ x = (COLS - width) / 2;
+ y = (LINES - height) / 2;
+
+ draw_shadow(stdscr, y, x, height, width);
+
+ dialog = newwin(height, width, y, x);
+ keypad(dialog, TRUE);
+
+ /* Create window for box region, used for scrolling text */
+ boxh = height - 4;
+ boxw = width - 2;
+ box = subwin(dialog, boxh, boxw, y + 1, x + 1);
+ wattrset(box, dlg.dialog.atr);
+ wbkgdset(box, dlg.dialog.atr & A_COLOR);
+
+ keypad(box, TRUE);
+
+ /* register the new window, along with its borders */
+ draw_box(dialog, 0, 0, height, width,
+ dlg.dialog.atr, dlg.border.atr);
+
+ wattrset(dialog, dlg.border.atr);
+ mvwaddch(dialog, height - 3, 0, ACS_LTEE);
+ for (i = 0; i < width - 2; i++)
+ waddch(dialog, ACS_HLINE);
+ wattrset(dialog, dlg.dialog.atr);
+ wbkgdset(dialog, dlg.dialog.atr & A_COLOR);
+ waddch(dialog, ACS_RTEE);
+
+ print_title(dialog, title, width);
+
+ print_button(dialog, gettext(" Exit "), height - 2, width / 2 - 4, TRUE);
+ wnoutrefresh(dialog);
+ getyx(dialog, cur_y, cur_x); /* Save cursor position */
+
+ /* Print first page of text */
+ attr_clear(box, boxh, boxw, dlg.dialog.atr);
+ refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x);
+
+ while ((key != KEY_ESC) && (key != '\n')) {
+ key = wgetch(dialog);
+ switch (key) {
+ case 'E': /* Exit */
+ case 'e':
+ case 'X':
+ case 'x':
+ delwin(box);
+ delwin(dialog);
+ return 0;
+ case 'g': /* First page */
+ case KEY_HOME:
+ if (!begin_reached) {
+ begin_reached = 1;
+ page = buf;
+ refresh_text_box(dialog, box, boxh, boxw,
+ cur_y, cur_x);
+ }
+ break;
+ case 'G': /* Last page */
+ case KEY_END:
+
+ end_reached = 1;
+ /* point to last char in buf */
+ page = buf + strlen(buf);
+ back_lines(boxh);
+ refresh_text_box(dialog, box, boxh, boxw,
+ cur_y, cur_x);
+ break;
+ case 'K': /* Previous line */
+ case 'k':
+ case KEY_UP:
+ if (!begin_reached) {
+ back_lines(page_length + 1);
+
+ /* We don't call print_page() here but use
+ * scrolling to ensure faster screen update.
+ * However, 'end_reached' and 'page_length'
+ * should still be updated, and 'page' should
+ * point to start of next page. This is done
+ * by calling get_line() in the following
+ * 'for' loop. */
+ scrollok(box, TRUE);
+ wscrl(box, -1); /* Scroll box region down one line */
+ scrollok(box, FALSE);
+ page_length = 0;
+ passed_end = 0;
+ for (i = 0; i < boxh; i++) {
+ if (!i) {
+ /* print first line of page */
+ print_line(box, 0, boxw);
+ wnoutrefresh(box);
+ } else
+ /* Called to update 'end_reached' and 'page' */
+ get_line();
+ if (!passed_end)
+ page_length++;
+ if (end_reached && !passed_end)
+ passed_end = 1;
+ }
+
+ print_position(dialog);
+ wmove(dialog, cur_y, cur_x); /* Restore cursor position */
+ wrefresh(dialog);
+ }
+ break;
+ case 'B': /* Previous page */
+ case 'b':
+ case KEY_PPAGE:
+ if (begin_reached)
+ break;
+ back_lines(page_length + boxh);
+ refresh_text_box(dialog, box, boxh, boxw,
+ cur_y, cur_x);
+ break;
+ case 'J': /* Next line */
+ case 'j':
+ case KEY_DOWN:
+ if (!end_reached) {
+ begin_reached = 0;
+ scrollok(box, TRUE);
+ scroll(box); /* Scroll box region up one line */
+ scrollok(box, FALSE);
+ print_line(box, boxh - 1, boxw);
+ wnoutrefresh(box);
+ print_position(dialog);
+ wmove(dialog, cur_y, cur_x); /* Restore cursor position */
+ wrefresh(dialog);
+ }
+ break;
+ case KEY_NPAGE: /* Next page */
+ case ' ':
+ if (end_reached)
+ break;
+
+ begin_reached = 0;
+ refresh_text_box(dialog, box, boxh, boxw,
+ cur_y, cur_x);
+ break;
+ case '0': /* Beginning of line */
+ case 'H': /* Scroll left */
+ case 'h':
+ case KEY_LEFT:
+ if (hscroll <= 0)
+ break;
+
+ if (key == '0')
+ hscroll = 0;
+ else
+ hscroll--;
+ /* Reprint current page to scroll horizontally */
+ back_lines(page_length);
+ refresh_text_box(dialog, box, boxh, boxw,
+ cur_y, cur_x);
+ break;
+ case 'L': /* Scroll right */
+ case 'l':
+ case KEY_RIGHT:
+ if (hscroll >= MAX_LEN)
+ break;
+ hscroll++;
+ /* Reprint current page to scroll horizontally */
+ back_lines(page_length);
+ refresh_text_box(dialog, box, boxh, boxw,
+ cur_y, cur_x);
+ break;
+ case KEY_ESC:
+ key = on_key_esc(dialog);
+ break;
+ case KEY_RESIZE:
+ back_lines(height);
+ delwin(box);
+ delwin(dialog);
+ on_key_resize();
+ goto do_resize;
+ }
+ }
+ delwin(box);
+ delwin(dialog);
+ return key; /* ESC pressed */
+}
+
+/*
+ * Go back 'n' lines in text. Called by dialog_textbox().
+ * 'page' will be updated to point to the desired line in 'buf'.
+ */
+static void back_lines(int n)
+{
+ int i;
+
+ begin_reached = 0;
+ /* Go back 'n' lines */
+ for (i = 0; i < n; i++) {
+ if (*page == '\0') {
+ if (end_reached) {
+ end_reached = 0;
+ continue;
+ }
+ }
+ if (page == buf) {
+ begin_reached = 1;
+ return;
+ }
+ page--;
+ do {
+ if (page == buf) {
+ begin_reached = 1;
+ return;
+ }
+ page--;
+ } while (*page != '\n');
+ page++;
+ }
+}
+
+/*
+ * Print a new page of text. Called by dialog_textbox().
+ */
+static void print_page(WINDOW * win, int height, int width)
+{
+ int i, passed_end = 0;
+
+ page_length = 0;
+ for (i = 0; i < height; i++) {
+ print_line(win, i, width);
+ if (!passed_end)
+ page_length++;
+ if (end_reached && !passed_end)
+ passed_end = 1;
+ }
+ wnoutrefresh(win);
+}
+
+/*
+ * Print a new line of text. Called by dialog_textbox() and print_page().
+ */
+static void print_line(WINDOW * win, int row, int width)
+{
+ int y, x;
+ char *line;
+
+ line = get_line();
+ line += MIN(strlen(line), hscroll); /* Scroll horizontally */
+ wmove(win, row, 0); /* move cursor to correct line */
+ waddch(win, ' ');
+ waddnstr(win, line, MIN(strlen(line), width - 2));
+
+ getyx(win, y, x);
+ /* Clear 'residue' of previous line */
+#if OLD_NCURSES
+ {
+ int i;
+ for (i = 0; i < width - x; i++)
+ waddch(win, ' ');
+ }
+#else
+ wclrtoeol(win);
+#endif
+}
+
+/*
+ * Return current line of text. Called by dialog_textbox() and print_line().
+ * 'page' should point to start of current line before calling, and will be
+ * updated to point to start of next line.
+ */
+static char *get_line(void)
+{
+ int i = 0;
+ static char line[MAX_LEN + 1];
+
+ end_reached = 0;
+ while (*page != '\n') {
+ if (*page == '\0') {
+ if (!end_reached) {
+ end_reached = 1;
+ break;
+ }
+ } else if (i < MAX_LEN)
+ line[i++] = *(page++);
+ else {
+ /* Truncate lines longer than MAX_LEN characters */
+ if (i == MAX_LEN)
+ line[i++] = '\0';
+ page++;
+ }
+ }
+ if (i <= MAX_LEN)
+ line[i] = '\0';
+ if (!end_reached)
+ page++; /* move pass '\n' */
+
+ return line;
+}
+
+/*
+ * Print current position
+ */
+static void print_position(WINDOW * win)
+{
+ int percent;
+
+ wattrset(win, dlg.position_indicator.atr);
+ wbkgdset(win, dlg.position_indicator.atr & A_COLOR);
+ percent = (page - buf) * 100 / strlen(buf);
+ wmove(win, getmaxy(win) - 3, getmaxx(win) - 9);
+ wprintw(win, "(%3d%%)", percent);
+}
diff --git a/config/lxdialog/util.c b/config/lxdialog/util.c
new file mode 100644
index 000000000..f2375ad7e
--- /dev/null
+++ b/config/lxdialog/util.c
@@ -0,0 +1,657 @@
+/*
+ * util.c
+ *
+ * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <stdarg.h>
+
+#include "dialog.h"
+
+struct dialog_info dlg;
+
+static void set_mono_theme(void)
+{
+ dlg.screen.atr = A_NORMAL;
+ dlg.shadow.atr = A_NORMAL;
+ dlg.dialog.atr = A_NORMAL;
+ dlg.title.atr = A_BOLD;
+ dlg.border.atr = A_NORMAL;
+ dlg.button_active.atr = A_REVERSE;
+ dlg.button_inactive.atr = A_DIM;
+ dlg.button_key_active.atr = A_REVERSE;
+ dlg.button_key_inactive.atr = A_BOLD;
+ dlg.button_label_active.atr = A_REVERSE;
+ dlg.button_label_inactive.atr = A_NORMAL;
+ dlg.inputbox.atr = A_NORMAL;
+ dlg.inputbox_border.atr = A_NORMAL;
+ dlg.searchbox.atr = A_NORMAL;
+ dlg.searchbox_title.atr = A_BOLD;
+ dlg.searchbox_border.atr = A_NORMAL;
+ dlg.position_indicator.atr = A_BOLD;
+ dlg.menubox.atr = A_NORMAL;
+ dlg.menubox_border.atr = A_NORMAL;
+ dlg.item.atr = A_NORMAL;
+ dlg.item_selected.atr = A_REVERSE;
+ dlg.tag.atr = A_BOLD;
+ dlg.tag_selected.atr = A_REVERSE;
+ dlg.tag_key.atr = A_BOLD;
+ dlg.tag_key_selected.atr = A_REVERSE;
+ dlg.check.atr = A_BOLD;
+ dlg.check_selected.atr = A_REVERSE;
+ dlg.uarrow.atr = A_BOLD;
+ dlg.darrow.atr = A_BOLD;
+}
+
+#define DLG_COLOR(dialog, f, b, h) \
+do { \
+ dlg.dialog.fg = (f); \
+ dlg.dialog.bg = (b); \
+ dlg.dialog.hl = (h); \
+} while (0)
+
+static void set_classic_theme(void)
+{
+ DLG_COLOR(screen, COLOR_CYAN, COLOR_BLUE, true);
+ DLG_COLOR(shadow, COLOR_BLACK, COLOR_BLACK, true);
+ DLG_COLOR(dialog, COLOR_BLACK, COLOR_WHITE, false);
+ DLG_COLOR(title, COLOR_YELLOW, COLOR_WHITE, true);
+ DLG_COLOR(border, COLOR_WHITE, COLOR_WHITE, true);
+ DLG_COLOR(button_active, COLOR_WHITE, COLOR_BLUE, true);
+ DLG_COLOR(button_inactive, COLOR_BLACK, COLOR_WHITE, false);
+ DLG_COLOR(button_key_active, COLOR_WHITE, COLOR_BLUE, true);
+ DLG_COLOR(button_key_inactive, COLOR_RED, COLOR_WHITE, false);
+ DLG_COLOR(button_label_active, COLOR_YELLOW, COLOR_BLUE, true);
+ DLG_COLOR(button_label_inactive, COLOR_BLACK, COLOR_WHITE, true);
+ DLG_COLOR(inputbox, COLOR_BLACK, COLOR_WHITE, false);
+ DLG_COLOR(inputbox_border, COLOR_BLACK, COLOR_WHITE, false);
+ DLG_COLOR(searchbox, COLOR_BLACK, COLOR_WHITE, false);
+ DLG_COLOR(searchbox_title, COLOR_YELLOW, COLOR_WHITE, true);
+ DLG_COLOR(searchbox_border, COLOR_WHITE, COLOR_WHITE, true);
+ DLG_COLOR(position_indicator, COLOR_YELLOW, COLOR_WHITE, true);
+ DLG_COLOR(menubox, COLOR_BLACK, COLOR_WHITE, false);
+ DLG_COLOR(menubox_border, COLOR_WHITE, COLOR_WHITE, true);
+ DLG_COLOR(item, COLOR_BLACK, COLOR_WHITE, false);
+ DLG_COLOR(item_selected, COLOR_WHITE, COLOR_BLUE, true);
+ DLG_COLOR(tag, COLOR_YELLOW, COLOR_WHITE, true);
+ DLG_COLOR(tag_selected, COLOR_YELLOW, COLOR_BLUE, true);
+ DLG_COLOR(tag_key, COLOR_YELLOW, COLOR_WHITE, true);
+ DLG_COLOR(tag_key_selected, COLOR_YELLOW, COLOR_BLUE, true);
+ DLG_COLOR(check, COLOR_BLACK, COLOR_WHITE, false);
+ DLG_COLOR(check_selected, COLOR_WHITE, COLOR_BLUE, true);
+ DLG_COLOR(uarrow, COLOR_GREEN, COLOR_WHITE, true);
+ DLG_COLOR(darrow, COLOR_GREEN, COLOR_WHITE, true);
+}
+
+static void set_blackbg_theme(void)
+{
+ DLG_COLOR(screen, COLOR_RED, COLOR_BLACK, true);
+ DLG_COLOR(shadow, COLOR_BLACK, COLOR_BLACK, false);
+ DLG_COLOR(dialog, COLOR_WHITE, COLOR_BLACK, false);
+ DLG_COLOR(title, COLOR_RED, COLOR_BLACK, false);
+ DLG_COLOR(border, COLOR_BLACK, COLOR_BLACK, true);
+
+ DLG_COLOR(button_active, COLOR_YELLOW, COLOR_RED, false);
+ DLG_COLOR(button_inactive, COLOR_YELLOW, COLOR_BLACK, false);
+ DLG_COLOR(button_key_active, COLOR_YELLOW, COLOR_RED, true);
+ DLG_COLOR(button_key_inactive, COLOR_RED, COLOR_BLACK, false);
+ DLG_COLOR(button_label_active, COLOR_WHITE, COLOR_RED, false);
+ DLG_COLOR(button_label_inactive, COLOR_BLACK, COLOR_BLACK, true);
+
+ DLG_COLOR(inputbox, COLOR_YELLOW, COLOR_BLACK, false);
+ DLG_COLOR(inputbox_border, COLOR_YELLOW, COLOR_BLACK, false);
+
+ DLG_COLOR(searchbox, COLOR_YELLOW, COLOR_BLACK, false);
+ DLG_COLOR(searchbox_title, COLOR_YELLOW, COLOR_BLACK, true);
+ DLG_COLOR(searchbox_border, COLOR_BLACK, COLOR_BLACK, true);
+
+ DLG_COLOR(position_indicator, COLOR_RED, COLOR_BLACK, false);
+
+ DLG_COLOR(menubox, COLOR_YELLOW, COLOR_BLACK, false);
+ DLG_COLOR(menubox_border, COLOR_BLACK, COLOR_BLACK, true);
+
+ DLG_COLOR(item, COLOR_WHITE, COLOR_BLACK, false);
+ DLG_COLOR(item_selected, COLOR_WHITE, COLOR_RED, false);
+
+ DLG_COLOR(tag, COLOR_RED, COLOR_BLACK, false);
+ DLG_COLOR(tag_selected, COLOR_YELLOW, COLOR_RED, true);
+ DLG_COLOR(tag_key, COLOR_RED, COLOR_BLACK, false);
+ DLG_COLOR(tag_key_selected, COLOR_YELLOW, COLOR_RED, true);
+
+ DLG_COLOR(check, COLOR_YELLOW, COLOR_BLACK, false);
+ DLG_COLOR(check_selected, COLOR_YELLOW, COLOR_RED, true);
+
+ DLG_COLOR(uarrow, COLOR_RED, COLOR_BLACK, false);
+ DLG_COLOR(darrow, COLOR_RED, COLOR_BLACK, false);
+}
+
+static void set_bluetitle_theme(void)
+{
+ set_classic_theme();
+ DLG_COLOR(title, COLOR_BLUE, COLOR_WHITE, true);
+ DLG_COLOR(button_key_active, COLOR_YELLOW, COLOR_BLUE, true);
+ DLG_COLOR(button_label_active, COLOR_WHITE, COLOR_BLUE, true);
+ DLG_COLOR(searchbox_title, COLOR_BLUE, COLOR_WHITE, true);
+ DLG_COLOR(position_indicator, COLOR_BLUE, COLOR_WHITE, true);
+ DLG_COLOR(tag, COLOR_BLUE, COLOR_WHITE, true);
+ DLG_COLOR(tag_key, COLOR_BLUE, COLOR_WHITE, true);
+
+}
+
+/*
+ * Select color theme
+ */
+static int set_theme(const char *theme)
+{
+ int use_color = 1;
+ if (!theme)
+ set_bluetitle_theme();
+ else if (strcmp(theme, "classic") == 0)
+ set_classic_theme();
+ else if (strcmp(theme, "bluetitle") == 0)
+ set_bluetitle_theme();
+ else if (strcmp(theme, "blackbg") == 0)
+ set_blackbg_theme();
+ else if (strcmp(theme, "mono") == 0)
+ use_color = 0;
+
+ return use_color;
+}
+
+static void init_one_color(struct dialog_color *color)
+{
+ static int pair = 0;
+
+ pair++;
+ init_pair(pair, color->fg, color->bg);
+ if (color->hl)
+ color->atr = A_BOLD | COLOR_PAIR(pair);
+ else
+ color->atr = COLOR_PAIR(pair);
+}
+
+static void init_dialog_colors(void)
+{
+ init_one_color(&dlg.screen);
+ init_one_color(&dlg.shadow);
+ init_one_color(&dlg.dialog);
+ init_one_color(&dlg.title);
+ init_one_color(&dlg.border);
+ init_one_color(&dlg.button_active);
+ init_one_color(&dlg.button_inactive);
+ init_one_color(&dlg.button_key_active);
+ init_one_color(&dlg.button_key_inactive);
+ init_one_color(&dlg.button_label_active);
+ init_one_color(&dlg.button_label_inactive);
+ init_one_color(&dlg.inputbox);
+ init_one_color(&dlg.inputbox_border);
+ init_one_color(&dlg.searchbox);
+ init_one_color(&dlg.searchbox_title);
+ init_one_color(&dlg.searchbox_border);
+ init_one_color(&dlg.position_indicator);
+ init_one_color(&dlg.menubox);
+ init_one_color(&dlg.menubox_border);
+ init_one_color(&dlg.item);
+ init_one_color(&dlg.item_selected);
+ init_one_color(&dlg.tag);
+ init_one_color(&dlg.tag_selected);
+ init_one_color(&dlg.tag_key);
+ init_one_color(&dlg.tag_key_selected);
+ init_one_color(&dlg.check);
+ init_one_color(&dlg.check_selected);
+ init_one_color(&dlg.uarrow);
+ init_one_color(&dlg.darrow);
+}
+
+/*
+ * Setup for color display
+ */
+static void color_setup(const char *theme)
+{
+ int use_color;
+
+ use_color = set_theme(theme);
+ if (use_color && has_colors()) {
+ start_color();
+ init_dialog_colors();
+ } else
+ set_mono_theme();
+}
+
+/*
+ * Set window to attribute 'attr'
+ */
+void attr_clear(WINDOW * win, int height, int width, chtype attr)
+{
+ int i, j;
+
+ wattrset(win, attr);
+ for (i = 0; i < height; i++) {
+ wmove(win, i, 0);
+ for (j = 0; j < width; j++)
+ waddch(win, ' ');
+ }
+ touchwin(win);
+}
+
+void dialog_clear(void)
+{
+ attr_clear(stdscr, LINES, COLS, dlg.screen.atr);
+ /* Display background title if it exists ... - SLH */
+ if (dlg.backtitle != NULL) {
+ int i;
+
+ wattrset(stdscr, dlg.screen.atr);
+ mvwaddstr(stdscr, 0, 1, (char *)dlg.backtitle);
+ wmove(stdscr, 1, 1);
+ for (i = 1; i < COLS - 1; i++)
+ waddch(stdscr, ACS_HLINE);
+ }
+ wnoutrefresh(stdscr);
+}
+
+/*
+ * Do some initialization for dialog
+ */
+int init_dialog(const char *backtitle)
+{
+ int height, width;
+
+ initscr(); /* Init curses */
+ getmaxyx(stdscr, height, width);
+ if (height < 19 || width < 80) {
+ endwin();
+ return -ERRDISPLAYTOOSMALL;
+ }
+
+ dlg.backtitle = backtitle;
+ color_setup(getenv("MENUCONFIG_COLOR"));
+
+ keypad(stdscr, TRUE);
+ cbreak();
+ noecho();
+ dialog_clear();
+
+ return 0;
+}
+
+void set_dialog_backtitle(const char *backtitle)
+{
+ dlg.backtitle = backtitle;
+}
+
+/*
+ * End using dialog functions.
+ */
+void end_dialog(int x, int y)
+{
+ /* move cursor back to original position */
+ move(y, x);
+ refresh();
+ endwin();
+}
+
+/* Print the title of the dialog. Center the title and truncate
+ * tile if wider than dialog (- 2 chars).
+ **/
+void print_title(WINDOW *dialog, const char *title, int width)
+{
+ if (title) {
+ int tlen = MIN(width - 2, strlen(title));
+ wattrset(dialog, dlg.title.atr);
+ mvwaddch(dialog, 0, (width - tlen) / 2 - 1, ' ');
+ mvwaddnstr(dialog, 0, (width - tlen)/2, title, tlen);
+ waddch(dialog, ' ');
+ }
+}
+
+/*
+ * Print a string of text in a window, automatically wrap around to the
+ * next line if the string is too long to fit on one line. Newline
+ * characters '\n' are replaced by spaces. We start on a new line
+ * if there is no room for at least 4 nonblanks following a double-space.
+ */
+void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x)
+{
+ int newl, cur_x, cur_y;
+ int i, prompt_len, room, wlen;
+ char tempstr[MAX_LEN + 1], *word, *sp, *sp2;
+
+ strcpy(tempstr, prompt);
+
+ prompt_len = strlen(tempstr);
+
+ /*
+ * Remove newlines
+ */
+ for (i = 0; i < prompt_len; i++) {
+ if (tempstr[i] == '\n')
+ tempstr[i] = ' ';
+ }
+
+ if (prompt_len <= width - x * 2) { /* If prompt is short */
+ wmove(win, y, (width - prompt_len) / 2);
+ waddstr(win, tempstr);
+ } else {
+ cur_x = x;
+ cur_y = y;
+ newl = 1;
+ word = tempstr;
+ while (word && *word) {
+ sp = strchr(word, ' ');
+ if (sp)
+ *sp++ = 0;
+
+ /* Wrap to next line if either the word does not fit,
+ or it is the first word of a new sentence, and it is
+ short, and the next word does not fit. */
+ room = width - cur_x;
+ wlen = strlen(word);
+ if (wlen > room ||
+ (newl && wlen < 4 && sp
+ && wlen + 1 + strlen(sp) > room
+ && (!(sp2 = strchr(sp, ' '))
+ || wlen + 1 + (sp2 - sp) > room))) {
+ cur_y++;
+ cur_x = x;
+ }
+ wmove(win, cur_y, cur_x);
+ waddstr(win, word);
+ getyx(win, cur_y, cur_x);
+ cur_x++;
+ if (sp && *sp == ' ') {
+ cur_x++; /* double space */
+ while (*++sp == ' ') ;
+ newl = 1;
+ } else
+ newl = 0;
+ word = sp;
+ }
+ }
+}
+
+/*
+ * Print a button
+ */
+void print_button(WINDOW * win, const char *label, int y, int x, int selected)
+{
+ int i, temp;
+
+ wmove(win, y, x);
+ wattrset(win, selected ? dlg.button_active.atr
+ : dlg.button_inactive.atr);
+ waddstr(win, "<");
+ temp = strspn(label, " ");
+ label += temp;
+ wattrset(win, selected ? dlg.button_label_active.atr
+ : dlg.button_label_inactive.atr);
+ for (i = 0; i < temp; i++)
+ waddch(win, ' ');
+ wattrset(win, selected ? dlg.button_key_active.atr
+ : dlg.button_key_inactive.atr);
+ waddch(win, label[0]);
+ wattrset(win, selected ? dlg.button_label_active.atr
+ : dlg.button_label_inactive.atr);
+ waddstr(win, (char *)label + 1);
+ wattrset(win, selected ? dlg.button_active.atr
+ : dlg.button_inactive.atr);
+ waddstr(win, ">");
+ wmove(win, y, x + temp + 1);
+}
+
+/*
+ * Draw a rectangular box with line drawing characters
+ */
+void
+draw_box(WINDOW * win, int y, int x, int height, int width,
+ chtype box, chtype border)
+{
+ int i, j;
+
+ wattrset(win, 0);
+ for (i = 0; i < height; i++) {
+ wmove(win, y + i, x);
+ for (j = 0; j < width; j++)
+ if (!i && !j)
+ waddch(win, border | ACS_ULCORNER);
+ else if (i == height - 1 && !j)
+ waddch(win, border | ACS_LLCORNER);
+ else if (!i && j == width - 1)
+ waddch(win, box | ACS_URCORNER);
+ else if (i == height - 1 && j == width - 1)
+ waddch(win, box | ACS_LRCORNER);
+ else if (!i)
+ waddch(win, border | ACS_HLINE);
+ else if (i == height - 1)
+ waddch(win, box | ACS_HLINE);
+ else if (!j)
+ waddch(win, border | ACS_VLINE);
+ else if (j == width - 1)
+ waddch(win, box | ACS_VLINE);
+ else
+ waddch(win, box | ' ');
+ }
+}
+
+/*
+ * Draw shadows along the right and bottom edge to give a more 3D look
+ * to the boxes
+ */
+void draw_shadow(WINDOW * win, int y, int x, int height, int width)
+{
+ int i;
+
+ if (has_colors()) { /* Whether terminal supports color? */
+ wattrset(win, dlg.shadow.atr);
+ wmove(win, y + height, x + 2);
+ for (i = 0; i < width; i++)
+ waddch(win, winch(win) & A_CHARTEXT);
+ for (i = y + 1; i < y + height + 1; i++) {
+ wmove(win, i, x + width);
+ waddch(win, winch(win) & A_CHARTEXT);
+ waddch(win, winch(win) & A_CHARTEXT);
+ }
+ wnoutrefresh(win);
+ }
+}
+
+/*
+ * Return the position of the first alphabetic character in a string.
+ */
+int first_alpha(const char *string, const char *exempt)
+{
+ int i, in_paren = 0, c;
+
+ for (i = 0; i < strlen(string); i++) {
+ c = tolower(string[i]);
+
+ if (strchr("<[(", c))
+ ++in_paren;
+ if (strchr(">])", c) && in_paren > 0)
+ --in_paren;
+
+ if ((!in_paren) && isalpha(c) && strchr(exempt, c) == 0)
+ return i;
+ }
+
+ return 0;
+}
+
+/*
+ * ncurses uses ESC to detect escaped char sequences. This resutl in
+ * a small timeout before ESC is actually delivered to the application.
+ * lxdialog suggest <ESC> <ESC> which is correctly translated to two
+ * times esc. But then we need to ignore the second esc to avoid stepping
+ * out one menu too much. Filter away all escaped key sequences since
+ * keypad(FALSE) turn off ncurses support for escape sequences - and thats
+ * needed to make notimeout() do as expected.
+ */
+int on_key_esc(WINDOW *win)
+{
+ int key;
+ int key2;
+ int key3;
+
+ nodelay(win, TRUE);
+ keypad(win, FALSE);
+ key = wgetch(win);
+ key2 = wgetch(win);
+ do {
+ key3 = wgetch(win);
+ } while (key3 != ERR);
+ nodelay(win, FALSE);
+ keypad(win, TRUE);
+ if (key == KEY_ESC && key2 == ERR)
+ return KEY_ESC;
+ else if (key != ERR && key != KEY_ESC && key2 == ERR)
+ ungetch(key);
+
+ return -1;
+}
+
+/* redraw screen in new size */
+int on_key_resize(void)
+{
+ dialog_clear();
+ return KEY_RESIZE;
+}
+
+struct dialog_list *item_cur;
+struct dialog_list item_nil;
+struct dialog_list *item_head;
+
+void item_reset(void)
+{
+ struct dialog_list *p, *next;
+
+ for (p = item_head; p; p = next) {
+ next = p->next;
+ free(p);
+ }
+ item_head = NULL;
+ item_cur = &item_nil;
+}
+
+void item_make(const char *fmt, ...)
+{
+ va_list ap;
+ struct dialog_list *p = malloc(sizeof(*p));
+
+ if (item_head)
+ item_cur->next = p;
+ else
+ item_head = p;
+ item_cur = p;
+ memset(p, 0, sizeof(*p));
+
+ va_start(ap, fmt);
+ vsnprintf(item_cur->node.str, sizeof(item_cur->node.str), fmt, ap);
+ va_end(ap);
+}
+
+void item_add_str(const char *fmt, ...)
+{
+ va_list ap;
+ size_t avail;
+
+ avail = sizeof(item_cur->node.str) - strlen(item_cur->node.str);
+
+ va_start(ap, fmt);
+ vsnprintf(item_cur->node.str + strlen(item_cur->node.str),
+ avail, fmt, ap);
+ item_cur->node.str[sizeof(item_cur->node.str) - 1] = '\0';
+ va_end(ap);
+}
+
+void item_set_tag(char tag)
+{
+ item_cur->node.tag = tag;
+}
+void item_set_data(void *ptr)
+{
+ item_cur->node.data = ptr;
+}
+
+void item_set_selected(int val)
+{
+ item_cur->node.selected = val;
+}
+
+int item_activate_selected(void)
+{
+ item_foreach()
+ if (item_is_selected())
+ return 1;
+ return 0;
+}
+
+void *item_data(void)
+{
+ return item_cur->node.data;
+}
+
+char item_tag(void)
+{
+ return item_cur->node.tag;
+}
+
+int item_count(void)
+{
+ int n = 0;
+ struct dialog_list *p;
+
+ for (p = item_head; p; p = p->next)
+ n++;
+ return n;
+}
+
+void item_set(int n)
+{
+ int i = 0;
+ item_foreach()
+ if (i++ == n)
+ return;
+}
+
+int item_n(void)
+{
+ int n = 0;
+ struct dialog_list *p;
+
+ for (p = item_head; p; p = p->next) {
+ if (p == item_cur)
+ return n;
+ n++;
+ }
+ return 0;
+}
+
+const char *item_str(void)
+{
+ return item_cur->node.str;
+}
+
+int item_is_selected(void)
+{
+ return (item_cur->node.selected != 0);
+}
+
+int item_is_tag(char tag)
+{
+ return (item_cur->node.tag == tag);
+}
diff --git a/config/lxdialog/yesno.c b/config/lxdialog/yesno.c
new file mode 100644
index 000000000..4e6e8090c
--- /dev/null
+++ b/config/lxdialog/yesno.c
@@ -0,0 +1,114 @@
+/*
+ * yesno.c -- implements the yes/no box
+ *
+ * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "dialog.h"
+
+/*
+ * Display termination buttons
+ */
+static void print_buttons(WINDOW * dialog, int height, int width, int selected)
+{
+ int x = width / 2 - 10;
+ int y = height - 2;
+
+ print_button(dialog, gettext(" Yes "), y, x, selected == 0);
+ print_button(dialog, gettext(" No "), y, x + 13, selected == 1);
+
+ wmove(dialog, y, x + 1 + 13 * selected);
+ wrefresh(dialog);
+}
+
+/*
+ * Display a dialog box with two buttons - Yes and No
+ */
+int dialog_yesno(const char *title, const char *prompt, int height, int width)
+{
+ int i, x, y, key = 0, button = 0;
+ WINDOW *dialog;
+
+do_resize:
+ if (getmaxy(stdscr) < (height + 4))
+ return -ERRDISPLAYTOOSMALL;
+ if (getmaxx(stdscr) < (width + 4))
+ return -ERRDISPLAYTOOSMALL;
+
+ /* center dialog box on screen */
+ x = (COLS - width) / 2;
+ y = (LINES - height) / 2;
+
+ draw_shadow(stdscr, y, x, height, width);
+
+ dialog = newwin(height, width, y, x);
+ keypad(dialog, TRUE);
+
+ draw_box(dialog, 0, 0, height, width,
+ dlg.dialog.atr, dlg.border.atr);
+ wattrset(dialog, dlg.border.atr);
+ mvwaddch(dialog, height - 3, 0, ACS_LTEE);
+ for (i = 0; i < width - 2; i++)
+ waddch(dialog, ACS_HLINE);
+ wattrset(dialog, dlg.dialog.atr);
+ waddch(dialog, ACS_RTEE);
+
+ print_title(dialog, title, width);
+
+ wattrset(dialog, dlg.dialog.atr);
+ print_autowrap(dialog, prompt, width - 2, 1, 3);
+
+ print_buttons(dialog, height, width, 0);
+
+ while (key != KEY_ESC) {
+ key = wgetch(dialog);
+ switch (key) {
+ case 'Y':
+ case 'y':
+ delwin(dialog);
+ return 0;
+ case 'N':
+ case 'n':
+ delwin(dialog);
+ return 1;
+
+ case TAB:
+ case KEY_LEFT:
+ case KEY_RIGHT:
+ button = ((key == KEY_LEFT ? --button : ++button) < 0) ? 1 : (button > 1 ? 0 : button);
+
+ print_buttons(dialog, height, width, button);
+ wrefresh(dialog);
+ break;
+ case ' ':
+ case '\n':
+ delwin(dialog);
+ return button;
+ case KEY_ESC:
+ key = on_key_esc(dialog);
+ break;
+ case KEY_RESIZE:
+ delwin(dialog);
+ on_key_resize();
+ goto do_resize;
+ }
+ }
+
+ delwin(dialog);
+ return key; /* ESC pressed */
+}
diff --git a/config/mconf.c b/config/mconf.c
index 878554245..9516a5715 100644
--- a/config/mconf.c
+++ b/config/mconf.c
@@ -5,78 +5,223 @@
* Introduced single menu mode (show all sub-menus in one large tree).
* 2002-11-06 Petr Baudis <pasky@ucw.cz>
*
- * Directly use liblxdialog library routines.
- * 2002-11-14 Petr Baudis <pasky@ucw.cz>
+ * i18n, 2005, Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*/
-#include <sys/ioctl.h>
-#include <sys/wait.h>
-#include <sys/termios.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
-#include <signal.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
-#include <termios.h>
#include <unistd.h>
-
-#include "dialog.h"
+#include <locale.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
-
-static char menu_backtitle[128];
-static const char menu_instructions[] =
+#include "lxdialog/dialog.h"
+
+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"
+"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"
+"\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"
+"while *, M or whitespace inside braces means to build in, build as\n"
+"a module or to exclude the feature respectively.\n"
+"\n"
+"To change any of these features, highlight it with the cursor\n"
+"keys and press <Y> to build it in, <M> to make it a module or\n"
+"<N> to removed it. You may also press the <Space Bar> to cycle\n"
+"through the available options (ie. Y->N->M->Y).\n"
+"\n"
+"Some additional keyboard hints:\n"
+"\n"
+"Menus\n"
+"----------\n"
+"o Use the Up/Down arrow keys (cursor keys) to highlight the item\n"
+" you wish to change or submenu wish to select and press <Enter>.\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"
+"\n"
+" You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
+" unseen options into view.\n"
+"\n"
+"o To exit a menu use the cursor keys to highlight the <Exit> button\n"
+" and press <ENTER>.\n"
+"\n"
+" Shortcut: Press <ESC><ESC> or <E> or <X> if there is no hotkey\n"
+" using those letters. You may press a single <ESC>, but\n"
+" there is a delayed response which you may find annoying.\n"
+"\n"
+" Also, the <TAB> and cursor keys will cycle between <Select>,\n"
+" <Exit> and <Help>\n"
+"\n"
+"o To get help with an item, use the cursor keys to highlight <Help>\n"
+" and Press <ENTER>.\n"
+"\n"
+" Shortcut: Press <H> or <?>.\n"
+"\n"
+"\n"
+"Radiolists (Choice lists)\n"
+"-----------\n"
+"o Use the cursor keys to select the option you wish to set and press\n"
+" <S> or the <SPACE BAR>.\n"
+"\n"
+" Shortcut: Press the first letter of the option you wish to set then\n"
+" press <S> or <SPACE BAR>.\n"
+"\n"
+"o To see available help for the item, use the cursor keys to highlight\n"
+" <Help> and Press <ENTER>.\n"
+"\n"
+" Shortcut: Press <H> or <?>.\n"
+"\n"
+" Also, the <TAB> and cursor keys will cycle between <Select> and\n"
+" <Help>\n"
+"\n"
+"\n"
+"Data Entry\n"
+"-----------\n"
+"o Enter the requested information and press <ENTER>\n"
+" If you are entering hexadecimal values, it is not necessary to\n"
+" add the '0x' prefix to the entry.\n"
+"\n"
+"o For help, use the <TAB> or cursor keys to highlight the help option\n"
+" and press <ENTER>. You can try <TAB><H> as well.\n"
+"\n"
+"\n"
+"Text Box (Help Window)\n"
+"--------\n"
+"o Use the cursor keys to scroll up/down/left/right. The VI editor\n"
+" keys h,j,k,l function here as do <SPACE BAR> and <B> for those\n"
+" who are familiar with less and lynx.\n"
+"\n"
+"o Press <E>, <X>, <Enter> or <Esc><Esc> to exit.\n"
+"\n"
+"\n"
+"Alternate Configuration Files\n"
+"-----------------------------\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"
+"\n"
+"At the end of the main menu you will find two options. One is\n"
+"for saving the current configuration to a file of your choosing.\n"
+"The other option is for loading a previously saved alternate\n"
+"configuration.\n"
+"\n"
+"Even if you don't use alternate configuration files, but you\n"
+"find during a Menuconfig session that you have completely messed\n"
+"up your settings, you may use the \"Load Alternate...\" option to\n"
+"restore your previously saved settings from \".config\" without\n"
+"restarting Menuconfig.\n"
+"\n"
+"Other information\n"
+"-----------------\n"
+"If you use Menuconfig in an XTERM window make sure you have your\n"
+"$TERM variable set to point to a xterm definition which supports color.\n"
+"Otherwise, Menuconfig will look rather bad. Menuconfig will not\n"
+"display correctly in a RXVT window because rxvt displays only one\n"
+"intensity of color, bright.\n"
+"\n"
+"Menuconfig will display larger menus on screens or xterms which are\n"
+"set to display more than the standard 25 row by 80 column geometry.\n"
+"In order for this to work, the \"stty size\" command must be able to\n"
+"display the screen's current row and column geometry. I STRONGLY\n"
+"RECOMMEND that you make sure you do NOT have the shell variables\n"
+"LINES and COLUMNS exported into your environment. Some distributions\n"
+"export those variables via /etc/profile. Some ncurses programs can\n"
+"become confused when those variables (LINES & COLUMNS) don't reflect\n"
+"the true screen size.\n"
+"\n"
+"Optional personality available\n"
+"------------------------------\n"
+"If you prefer to have all of the kernel 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"
+"make MENUCONFIG_MODE=single_menu menuconfig\n"
+"\n"
+"<Enter> will then unroll the appropriate category, or enfold it if it\n"
+"is already unrolled.\n"
+"\n"
+"Note that this mode can eventually be a little more CPU expensive\n"
+"(especially with a larger number of unrolled categories) than the\n"
+"default mode.\n"
+"\n"
+"Different color themes available\n"
+"--------------------------------\n"
+"It is possible to select different color themes using the variable\n"
+"MENUCONFIG_COLOR. To select a theme use:\n"
+"\n"
+"make MENUCONFIG_COLOR=<theme> menuconfig\n"
+"\n"
+"Available themes are\n"
+" mono => selects colors suitable for monochrome displays\n"
+" blackbg => selects a color scheme with black background\n"
+" classic => theme with blue background. The classic look\n"
+" bluetitle => a LCD friendly version of classic. (default)\n"
+"\n"),
+menu_instructions[] = N_(
"Arrow keys navigate the menu. "
"<Enter> selects submenus --->. "
"Highlighted letters are hotkeys. "
- "Pressing <Y> selectes a feature, while <N> will exclude a feature. "
- "Press <Esc><Esc> to exit, <?> for Help. "
- "Legend: [*] feature is selected [ ] feature is excluded",
-radiolist_instructions[] =
+ "Pressing <Y> includes, <N> excludes, <M> modularizes features. "
+ "Press <Esc><Esc> to exit, <?> for Help, </> for Search. "
+ "Legend: [*] built-in [ ] excluded <M> module < > module capable"),
+radiolist_instructions[] = N_(
"Use the arrow keys to navigate this window or "
"press the hotkey of the item you wish to select "
"followed by the <SPACE BAR>. "
- "Press <?> for additional information about this option.",
-inputbox_instructions_int[] =
+ "Press <?> for additional information about this option."),
+inputbox_instructions_int[] = N_(
"Please enter a decimal value. "
"Fractions will not be accepted. "
- "Use the <TAB> key to move from the input field to the buttons below it.",
-inputbox_instructions_hex[] =
+ "Use the <TAB> key to move from the input field to the buttons below it."),
+inputbox_instructions_hex[] = N_(
"Please enter a hexadecimal value. "
- "Use the <TAB> key to move from the input field to the buttons below it.",
-inputbox_instructions_string[] =
+ "Use the <TAB> key to move from the input field to the buttons below it."),
+inputbox_instructions_string[] = N_(
"Please enter a string value. "
- "Use the <TAB> key to move from the input field to the buttons below it.",
-setmod_text[] =
+ "Use the <TAB> key to move from the input field to the buttons below it."),
+setmod_text[] = N_(
"This feature depends on another which has been configured as a module.\n"
- "As a result, this feature will be built as a module.",
-nohelp_text[] =
- "There is no help available for this option.\n",
-load_config_text[] =
+ "As a result, this feature will be built as a module."),
+nohelp_text[] = N_(
+ "There is no help available for this kernel option.\n"),
+load_config_text[] = N_(
"Enter the name of the configuration file you wish to load. "
"Accept the name shown to restore the configuration you "
- "last retrieved. Leave blank to abort.",
-load_config_help[] =
+ "last retrieved. Leave blank to abort."),
+load_config_help[] = N_(
"\n"
- "For various reasons, one may wish to keep several different OpenADK\n"
+ "For various reasons, one may wish to keep several different kernel\n"
"configurations available on a single machine.\n"
"\n"
"If you have saved a previous configuration in a file other than the\n"
- "OpenADK's default, entering the name of the file here will allow you\n"
+ "kernel'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"
- "configuration files. You should therefor leave this blank to abort.\n",
-save_config_text[] =
+ "configuration files. You should therefor leave this blank to abort.\n"),
+save_config_text[] = N_(
"Enter a filename to which this configuration should be saved "
- "as an alternate. Leave blank to abort.",
-save_config_help[] =
+ "as an alternate. Leave blank to abort."),
+save_config_help[] = N_(
"\n"
- "For various reasons, one may wish to keep different OpenADK\n"
+ "For various reasons, one may wish to keep different kernel\n"
"configurations available on a single machine.\n"
"\n"
"Entering a file name here will allow you to later retrieve, modify\n"
@@ -84,30 +229,52 @@ save_config_help[] =
"configuration options you have selected at that time.\n"
"\n"
"If you are uncertain what all this means then you should probably\n"
- "leave this blank.\n",
-top_menu_help[] =
+ "leave this blank.\n"),
+search_help[] = N_(
"\n"
- "Use the Up/Down arrow keys (cursor keys) to highlight the item\n"
- "you wish to change or submenu wish to select and press <Enter>.\n"
- "Submenus are designated by \"--->\".\n"
+ "Search for CONFIG_ symbols and display their relations.\n"
+ "Regular expressions are allowed.\n"
+ "Example: search for \"^FOO\"\n"
+ "Result:\n"
+ "-----------------------------------------------------------------\n"
+ "Symbol: FOO [=m]\n"
+ "Prompt: Foo bus is used to drive the bar HW\n"
+ "Defined at drivers/pci/Kconfig:47\n"
+ "Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
+ "Location:\n"
+ " -> Bus options (PCI, PCMCIA, EISA, MCA, ISA)\n"
+ " -> PCI support (PCI [=y])\n"
+ " -> PCI access mode (<choice> [=y])\n"
+ "Selects: LIBCRC32\n"
+ "Selected by: BAR\n"
+ "-----------------------------------------------------------------\n"
+ "o The line 'Prompt:' shows the text used in the menu structure for\n"
+ " this CONFIG_ symbol\n"
+ "o The 'Defined at' line tell at what file / line number the symbol\n"
+ " is defined\n"
+ "o The 'Depends on:' line tell what symbols needs to be defined for\n"
+ " this symbol to be visible in the menu (selectable)\n"
+ "o The 'Location:' lines tell where in the menu structure this symbol\n"
+ " is located\n"
+ " A location followed by a [=y] indicate that this is a selectable\n"
+ " menu item - and current value is displayed inside brackets.\n"
+ "o The 'Selects:' line tell what symbol will be automatically\n"
+ " selected if this symbol is selected (y or m)\n"
+ "o The 'Selected by' line tell what symbol has selected this symbol\n"
"\n"
- "Shortcut: Press the option's highlighted letter (hotkey).\n"
- "\n"
- "You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
- "unseen options into view.\n"
-;
-
-static char filename[PATH_MAX+1] = ".config";
-static int indent = 0;
-static struct termios ios_org;
-static int rows, cols;
-struct menu *current_menu;
+ "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"
+ "\n");
+
+static int indent;
+static struct menu *current_menu;
static int child_count;
static int single_menu_mode;
-static struct dialog_list_item *items[16384]; /* FIXME: This ought to be dynamic. */
-static int item_no;
-
static void conf(struct menu *menu);
static void conf_choice(struct menu *menu);
static void conf_string(struct menu *menu);
@@ -116,102 +283,134 @@ static void conf_save(void);
static void show_textbox(const char *title, const char *text, int r, int c);
static void show_helptext(const char *title, const char *text);
static void show_help(struct menu *menu);
-static void show_readme(void);
-static void init_wsize(void)
+static void get_prompt_str(struct gstr *r, struct property *prop)
{
- struct winsize ws;
- char *env;
-
- if (ioctl(1, TIOCGWINSZ, &ws) == -1) {
- rows = 24;
- cols = 80;
- } else {
- rows = ws.ws_row;
- cols = ws.ws_col;
- if (!rows) {
- env = getenv("LINES");
- if (env)
- rows = atoi(env);
- if (!rows)
- rows = 24;
- }
- if (!cols) {
- env = getenv("COLUMNS");
- if (env)
- cols = atoi(env);
- if (!cols)
- cols = 80;
- }
+ int i, j;
+ struct menu *submenu[8], *menu;
+
+ str_printf(r, _("Prompt: %s\n"), _(prop->text));
+ str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
+ prop->menu->lineno);
+ if (!expr_is_yes(prop->visible.expr)) {
+ str_append(r, _(" Depends on: "));
+ expr_gstr_print(prop->visible.expr, r);
+ str_append(r, "\n");
}
-
- if (rows < 19 || cols < 80) {
- fprintf(stderr, "Your display is too small to run Menuconfig!\n");
- fprintf(stderr, "It must be at least 19 lines by 80 columns.\n");
- exit(1);
+ menu = prop->menu->parent;
+ for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent)
+ submenu[i++] = menu;
+ if (i > 0) {
+ str_printf(r, _(" Location:\n"));
+ for (j = 4; --i >= 0; j += 2) {
+ menu = submenu[i];
+ str_printf(r, "%*c-> %s", j, ' ', _(menu_get_prompt(menu)));
+ if (menu->sym) {
+ str_printf(r, " (%s [=%s])", menu->sym->name ?
+ menu->sym->name : _("<choice>"),
+ sym_get_string_value(menu->sym));
+ }
+ str_append(r, "\n");
+ }
}
-
- rows -= 4;
- cols -= 5;
}
-static void cinit(void)
+static void get_symbol_str(struct gstr *r, struct symbol *sym)
{
- item_no = 0;
-}
+ bool hit;
+ struct property *prop;
-static void cmake(void)
-{
- items[item_no] = malloc(sizeof(struct dialog_list_item));
- memset(items[item_no], 0, sizeof(struct dialog_list_item));
- items[item_no]->tag = malloc(32); items[item_no]->tag[0] = 0;
- items[item_no]->name = malloc(512); items[item_no]->name[0] = 0;
- items[item_no]->namelen = 0;
- item_no++;
+ if (sym && sym->name)
+ str_printf(r, "Symbol: %s [=%s]\n", sym->name,
+ sym_get_string_value(sym));
+ for_all_prompts(sym, prop)
+ get_prompt_str(r, prop);
+ hit = false;
+ for_all_properties(sym, prop, P_SELECT) {
+ if (!hit) {
+ str_append(r, " Selects: ");
+ hit = true;
+ } else
+ str_printf(r, " && ");
+ expr_gstr_print(prop->expr, r);
+ }
+ if (hit)
+ str_append(r, "\n");
+ if (sym->rev_dep.expr) {
+ str_append(r, _(" Selected by: "));
+ expr_gstr_print(sym->rev_dep.expr, r);
+ str_append(r, "\n");
+ }
+ str_append(r, "\n\n");
}
-static int cprint_name(const char *fmt, ...)
+static struct gstr get_relations_str(struct symbol **sym_arr)
{
- va_list ap;
- int res;
-
- if (!item_no)
- cmake();
- va_start(ap, fmt);
- res = vsnprintf(items[item_no - 1]->name + items[item_no - 1]->namelen,
- 512 - items[item_no - 1]->namelen, fmt, ap);
- if (res > 0)
- items[item_no - 1]->namelen += res;
- va_end(ap);
+ struct symbol *sym;
+ struct gstr res = str_new();
+ int i;
+ for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
+ get_symbol_str(&res, sym);
+ if (!i)
+ str_append(&res, _("No matches found.\n"));
return res;
}
-static int cprint_tag(const char *fmt, ...)
+static char filename[PATH_MAX+1];
+static void set_config_filename(const char *config_filename)
{
- va_list ap;
- int res;
-
- if (!item_no)
- cmake();
- va_start(ap, fmt);
- res = vsnprintf(items[item_no - 1]->tag, 32, fmt, ap);
- va_end(ap);
+ static char menu_backtitle[PATH_MAX+128];
+ int size;
+ struct symbol *sym;
- return res;
+ sym = sym_lookup("ADKVERSION", 0);
+ sym_calc_value(sym);
+ size = snprintf(menu_backtitle, sizeof(menu_backtitle),
+ _("%s - OpenADK v%s Configuration"),
+ config_filename, sym_get_string_value(sym));
+ if (size >= sizeof(menu_backtitle))
+ menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
+ set_dialog_backtitle(menu_backtitle);
+
+ size = snprintf(filename, sizeof(filename), "%s", config_filename);
+ if (size >= sizeof(filename))
+ filename[sizeof(filename)-1] = '\0';
}
-static void cdone(void)
-{
- int i;
- for (i = 0; i < item_no; i++) {
- free(items[i]->tag);
- free(items[i]->name);
- free(items[i]);
+static void search_conf(void)
+{
+ struct symbol **sym_arr;
+ struct gstr res;
+ char *dialog_input;
+ int dres;
+again:
+ dialog_clear();
+ dres = dialog_inputbox(_("Search Configuration Parameter"),
+ _("Enter CONFIG_ (sub)string to search for "
+ "(with or without \"CONFIG\")"),
+ 10, 75, "");
+ switch (dres) {
+ case 0:
+ break;
+ case 1:
+ show_helptext(_("Search Configuration"), search_help);
+ goto again;
+ default:
+ return;
}
- item_no = 0;
+ /* strip CONFIG_ if necessary */
+ dialog_input = dialog_input_result;
+ if (strncasecmp(dialog_input_result, "CONFIG_", 7) == 0)
+ dialog_input += 7;
+
+ sym_arr = sym_re_search(dialog_input);
+ res = get_relations_str(sym_arr);
+ free(sym_arr);
+ show_textbox(_("Search Results"), str_get(&res), 0, 0);
+ str_free(&res);
}
static void build_conf(struct menu *menu)
@@ -234,26 +433,33 @@ static void build_conf(struct menu *menu)
switch (prop->type) {
case P_MENU:
child_count++;
- cmake();
- cprint_tag("m%p", menu);
-
+ prompt = _(prompt);
if (single_menu_mode) {
- cprint_name("%s%*c%s",
- menu->data ? "-->" : "++>",
- indent + 1, ' ', prompt);
- } else {
- cprint_name(" %*c%s --->", indent + 1, ' ', prompt);
- }
-
+ item_make("%s%*c%s",
+ menu->data ? "-->" : "++>",
+ indent + 1, ' ', prompt);
+ } else
+ item_make(" %*c%s --->", indent + 1, ' ', prompt);
+
+ item_set_tag('m');
+ item_set_data(menu);
if (single_menu_mode && menu->data)
goto conf_childs;
return;
+ case P_COMMENT:
+ if (prompt) {
+ child_count++;
+ item_make(" %*c*** %s ***", indent + 1, ' ', _(prompt));
+ item_set_tag(':');
+ item_set_data(menu);
+ }
+ break;
default:
if (prompt) {
child_count++;
- cmake();
- cprint_tag(":%p", menu);
- cprint_name("---%*c%s", indent + 1, ' ', prompt);
+ item_make("---%*c%s", indent + 1, ' ', _(prompt));
+ item_set_tag(':');
+ item_set_data(menu);
}
}
} else
@@ -261,7 +467,6 @@ static void build_conf(struct menu *menu)
goto conf_childs;
}
- cmake();
type = sym_get_type(sym);
if (sym_is_choice(sym)) {
struct symbol *def_sym = sym_get_choice_value(sym);
@@ -275,10 +480,9 @@ static void build_conf(struct menu *menu)
val = sym_get_tristate_value(sym);
if (sym_is_changable(sym)) {
- cprint_tag("t%p", menu);
switch (type) {
case S_BOOLEAN:
- cprint_name("[%c]", val == no ? ' ' : '*');
+ item_make("[%c]", val == no ? ' ' : '*');
break;
case S_TRISTATE:
switch (val) {
@@ -286,19 +490,22 @@ static void build_conf(struct menu *menu)
case mod: ch = 'M'; break;
default: ch = ' '; break;
}
- cprint_name("<%c>", ch);
+ item_make("<%c>", ch);
break;
}
+ item_set_tag('t');
+ item_set_data(menu);
} else {
- cprint_tag("%c%p", def_menu ? 't' : ':', menu);
- cprint_name(" ");
+ item_make(" ");
+ item_set_tag(def_menu ? 't' : ':');
+ item_set_data(menu);
}
- cprint_name("%*c%s", indent + 1, ' ', menu_get_prompt(menu));
+ item_add_str("%*c%s", indent + 1, ' ', _(menu_get_prompt(menu)));
if (val == yes) {
if (def_menu) {
- cprint_name(" (%s)", menu_get_prompt(def_menu));
- cprint_name(" --->");
+ item_add_str(" (%s)", _(menu_get_prompt(def_menu)));
+ item_add_str(" --->");
if (def_menu->list) {
indent += 2;
build_conf(def_menu);
@@ -308,55 +515,63 @@ static void build_conf(struct menu *menu)
return;
}
} else {
- if (menu == current_menu) {
- cprint_tag(":%p", menu);
- cprint_name("---%*c%s", indent + 1, ' ', menu_get_prompt(menu));
- goto conf_childs;
- }
-
+ if (menu == current_menu) {
+ item_make("---%*c%s", indent + 1, ' ', _(menu_get_prompt(menu)));
+ item_set_tag(':');
+ item_set_data(menu);
+ goto conf_childs;
+ }
child_count++;
val = sym_get_tristate_value(sym);
if (sym_is_choice_value(sym) && val == yes) {
- cprint_tag(":%p", menu);
- cprint_name(" ");
+ item_make(" ");
+ item_set_tag(':');
+ item_set_data(menu);
} else {
switch (type) {
case S_BOOLEAN:
- cprint_tag("t%p", menu);
if (sym_is_changable(sym))
- cprint_name("[%c]", val == no ? ' ' : '*');
+ item_make("[%c]", val == no ? ' ' : '*');
else
- cprint_name(val == no ? "_ _" : "-+-");
+ item_make("-%c-", val == no ? ' ' : '*');
+ item_set_tag('t');
+ item_set_data(menu);
break;
case S_TRISTATE:
- cprint_tag("t%p", menu);
switch (val) {
case yes: ch = '*'; break;
case mod: ch = 'M'; break;
default: ch = ' '; break;
}
- if (sym_is_changable(sym))
- cprint_name("<%c>", ch);
- else
- cprint_name(val == no ? "_ _" : "-+-");
+ if (sym_is_changable(sym)) {
+ if (sym->rev_dep.tri == mod)
+ item_make("{%c}", ch);
+ else
+ item_make("<%c>", ch);
+ } else
+ item_make("-%c-", ch);
+ item_set_tag('t');
+ item_set_data(menu);
break;
default:
- cprint_tag("s%p", menu);
- tmp = cprint_name("(%s)", sym_get_string_value(sym));
+ tmp = 2 + strlen(sym_get_string_value(sym)); /* () = 2 */
+ item_make("(%s)", sym_get_string_value(sym));
tmp = indent - tmp + 4;
if (tmp < 0)
tmp = 0;
- cprint_name("%*c%s%s", tmp, ' ', menu_get_prompt(menu),
- (sym_has_value(sym) || !sym_is_changable(sym)) ?
- "" : " (NEW)");
+ item_add_str("%*c%s%s", tmp, ' ', _(menu_get_prompt(menu)),
+ (sym_has_value(sym) || !sym_is_changable(sym)) ?
+ "" : _(" (NEW)"));
+ item_set_tag('s');
+ item_set_data(menu);
goto conf_childs;
}
}
- cprint_name("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu),
- (sym_has_value(sym) || !sym_is_changable(sym)) ?
- "" : " (NEW)");
+ item_add_str("%*c%s%s", indent + 1, ' ', _(menu_get_prompt(menu)),
+ (sym_has_value(sym) || !sym_is_changable(sym)) ?
+ "" : _(" (NEW)"));
if (menu->prompt->type == P_MENU) {
- cprint_name(" --->");
+ item_add_str(" --->");
return;
}
}
@@ -370,56 +585,48 @@ conf_childs:
static void conf(struct menu *menu)
{
- struct dialog_list_item *active_item = NULL;
struct menu *submenu;
const char *prompt = menu_get_prompt(menu);
struct symbol *sym;
- char active_entry[40];
- int stat, type;
+ struct menu *active_menu = NULL;
+ int res;
+ int s_scroll = 0;
- unlink("lxdialog.scrltmp");
- active_entry[0] = 0;
while (1) {
- indent = 0;
- child_count = 0;
- current_menu = menu;
- cdone(); cinit();
+ item_reset();
+ current_menu = menu;
build_conf(menu);
if (!child_count)
break;
if (menu == &rootmenu) {
- cmake(); cprint_tag(":"); cprint_name("--- ");
- cmake(); cprint_tag("L"); cprint_name("Load an Alternate Configuration File");
- cmake(); cprint_tag("S"); cprint_name("Save Configuration to an Alternate File");
+ item_make("--- ");
+ item_set_tag(':');
+ item_make(_(" Load an Alternate Configuration File"));
+ item_set_tag('L');
+ item_make(_(" Save an Alternate Configuration File"));
+ item_set_tag('S');
}
dialog_clear();
- stat = dialog_menu(prompt ? prompt : "Main Menu",
- menu_instructions, rows, cols, rows - 10,
- active_entry, item_no, items);
- if (stat < 0)
- return;
-
- if (stat == 1 || stat == 255)
+ res = dialog_menu(prompt ? _(prompt) : _("Main Menu"),
+ _(menu_instructions),
+ active_menu, &s_scroll);
+ if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL)
break;
-
- active_item = first_sel_item(item_no, items);
- if (!active_item)
+ if (!item_activate_selected())
continue;
- active_item->selected = 0;
- strncpy(active_entry, active_item->tag, sizeof(active_entry));
- active_entry[sizeof(active_entry)-1] = 0;
- type = active_entry[0];
- if (!type)
+ if (!item_tag())
continue;
- sym = NULL;
- submenu = NULL;
- if (sscanf(active_entry + 1, "%p", &submenu) == 1)
+ submenu = item_data();
+ active_menu = item_data();
+ if (submenu)
sym = submenu->sym;
+ else
+ sym = NULL;
- switch (stat) {
+ switch (res) {
case 0:
- switch (type) {
+ switch (item_tag()) {
case 'm':
if (single_menu_mode)
submenu->data = (void *) (long) !submenu->data;
@@ -447,10 +654,10 @@ static void conf(struct menu *menu)
if (sym)
show_help(submenu);
else
- show_readme();
+ show_helptext(_("README"), _(mconf_readme));
break;
case 3:
- if (type == 't') {
+ if (item_is_tag('t')) {
if (sym_set_tristate_value(sym, yes))
break;
if (sym_set_tristate_value(sym, mod))
@@ -458,103 +665,111 @@ static void conf(struct menu *menu)
}
break;
case 4:
- if (type == 't')
+ if (item_is_tag('t'))
sym_set_tristate_value(sym, no);
break;
case 5:
- if (type == 't')
+ if (item_is_tag('t'))
sym_set_tristate_value(sym, mod);
break;
case 6:
- if (type == 't')
+ if (item_is_tag('t'))
sym_toggle_tristate_value(sym);
- else if (type == 'm')
+ else if (item_is_tag('m'))
conf(submenu);
break;
+ case 7:
+ search_conf();
+ break;
}
}
}
static void show_textbox(const char *title, const char *text, int r, int c)
{
- int fd;
-
- fd = creat(".help.tmp", 0777);
- write(fd, text, strlen(text));
- close(fd);
- while (dialog_textbox(title, ".help.tmp", r, c) < 0)
- ;
- unlink(".help.tmp");
+ dialog_clear();
+ dialog_textbox(title, text, r, c);
}
static void show_helptext(const char *title, const char *text)
{
- show_textbox(title, text, rows, cols);
+ show_textbox(title, text, 0, 0);
}
static void show_help(struct menu *menu)
{
- const char *help;
- char *helptext;
+ struct gstr help = str_new();
struct symbol *sym = menu->sym;
- help = sym->help;
- if (!help)
- help = nohelp_text;
- if (sym->name) {
- helptext = malloc(strlen(sym->name) + strlen(help) + 16);
- sprintf(helptext, "%s:\n\n%s", sym->name, help);
- show_helptext(menu_get_prompt(menu), helptext);
- free(helptext);
- } else
- show_helptext(menu_get_prompt(menu), help);
-}
-
-static void show_readme(void)
-{
- show_helptext("Help", top_menu_help);
+ if (menu_has_help(menu))
+ {
+ if (sym->name) {
+ str_printf(&help, "CONFIG_%s:\n\n", sym->name);
+ str_append(&help, _(menu_get_help(menu)));
+ str_append(&help, "\n");
+ }
+ } else {
+ str_append(&help, nohelp_text);
+ }
+ get_symbol_str(&help, sym);
+ show_helptext(_(menu_get_prompt(menu)), str_get(&help));
+ str_free(&help);
}
static void conf_choice(struct menu *menu)
{
- const char *prompt = menu_get_prompt(menu);
+ const char *prompt = _(menu_get_prompt(menu));
struct menu *child;
struct symbol *active;
active = sym_get_choice_value(menu->sym);
while (1) {
+ int res;
+ int selected;
+ item_reset();
+
current_menu = menu;
- cdone(); cinit();
for (child = menu->list; child; child = child->next) {
if (!menu_is_visible(child))
continue;
- cmake();
- cprint_tag("%p", child);
- cprint_name("%s", menu_get_prompt(child));
+ if (child->sym)
+ item_make("%s", _(menu_get_prompt(child)));
+ else {
+ item_make("*** %s ***", _(menu_get_prompt(child)));
+ item_set_tag(':');
+ }
+ item_set_data(child);
+ if (child->sym == active)
+ item_set_selected(1);
if (child->sym == sym_get_choice_value(menu->sym))
- items[item_no - 1]->selected = 1; /* ON */
- else if (child->sym == active)
- items[item_no - 1]->selected = 2; /* SELECTED */
- else
- items[item_no - 1]->selected = 0; /* OFF */
+ item_set_tag('X');
}
-
- switch (dialog_checklist(prompt ? prompt : "Main Menu",
- radiolist_instructions, 15, 70, 6,
- item_no, items, FLAG_RADIO)) {
+ dialog_clear();
+ res = dialog_checklist(prompt ? _(prompt) : _("Main Menu"),
+ _(radiolist_instructions),
+ 15, 70, 6);
+ selected = item_activate_selected();
+ switch (res) {
case 0:
- if (sscanf(first_sel_item(item_no, items)->tag, "%p", &child) != 1)
- break;
- sym_set_tristate_value(child->sym, yes);
+ if (selected) {
+ child = item_data();
+ if (!child->sym)
+ break;
+
+ sym_set_tristate_value(child->sym, yes);
+ }
return;
case 1:
- if (sscanf(first_sel_item(item_no, items)->tag, "%p", &child) == 1) {
+ if (selected) {
+ child = item_data();
show_help(child);
active = child->sym;
} else
show_help(menu);
break;
- case 255:
+ case KEY_ESC:
+ return;
+ case -ERRDISPLAYTOOSMALL:
return;
}
}
@@ -565,35 +780,36 @@ static void conf_string(struct menu *menu)
const char *prompt = menu_get_prompt(menu);
while (1) {
- char *heading;
+ int res;
+ const char *heading;
switch (sym_get_type(menu->sym)) {
case S_INT:
- heading = (char *) inputbox_instructions_int;
+ heading = _(inputbox_instructions_int);
break;
case S_HEX:
- heading = (char *) inputbox_instructions_hex;
+ heading = _(inputbox_instructions_hex);
break;
case S_STRING:
- heading = (char *) inputbox_instructions_string;
+ heading = _(inputbox_instructions_string);
break;
default:
- heading = "Internal mconf error!";
- /* panic? */;
+ heading = _("Internal mconf error!");
}
-
- switch (dialog_inputbox(prompt ? prompt : "Main Menu",
- heading, 10, 75,
- sym_get_string_value(menu->sym))) {
+ dialog_clear();
+ res = dialog_inputbox(prompt ? _(prompt) : _("Main Menu"),
+ heading, 10, 75,
+ sym_get_string_value(menu->sym));
+ switch (res) {
case 0:
- if (sym_set_string_value(menu->sym, (const char*)dialog_input_result))
+ if (sym_set_string_value(menu->sym, dialog_input_result))
return;
- show_textbox(NULL, "You have made an invalid entry.", 5, 43);
+ show_textbox(NULL, _("You have made an invalid entry."), 5, 43);
break;
case 1:
show_help(menu);
break;
- case 255:
+ case KEY_ESC:
return;
}
}
@@ -601,20 +817,27 @@ static void conf_string(struct menu *menu)
static void conf_load(void)
{
+
while (1) {
- switch (dialog_inputbox(NULL, load_config_text, 11, 55,
- filename)) {
+ int res;
+ dialog_clear();
+ res = dialog_inputbox(NULL, load_config_text,
+ 11, 55, filename);
+ switch(res) {
case 0:
if (!dialog_input_result[0])
return;
- if (!conf_read((const char*)dialog_input_result))
+ if (!conf_read(dialog_input_result)) {
+ set_config_filename(dialog_input_result);
+ sym_set_change_count(1);
return;
- show_textbox(NULL, "File does not exist!", 5, 38);
+ }
+ show_textbox(NULL, _("File does not exist!"), 5, 38);
break;
case 1:
- show_helptext("Load Alternate Configuration", load_config_help);
+ show_helptext(_("Load Alternate Configuration"), load_config_help);
break;
- case 255:
+ case KEY_ESC:
return;
}
}
@@ -623,95 +846,93 @@ static void conf_load(void)
static void conf_save(void)
{
while (1) {
- switch (dialog_inputbox(NULL, save_config_text, 11, 55,
- filename)) {
+ int res;
+ dialog_clear();
+ res = dialog_inputbox(NULL, save_config_text,
+ 11, 55, filename);
+ switch(res) {
case 0:
if (!dialog_input_result[0])
return;
- if (!conf_write((const char*)dialog_input_result))
+ if (!conf_write(dialog_input_result)) {
+ set_config_filename(dialog_input_result);
return;
- show_textbox(NULL, "Can't create file! Probably a nonexistent directory.", 5, 60);
+ }
+ show_textbox(NULL, _("Can't create file! Probably a nonexistent directory."), 5, 60);
break;
case 1:
- show_helptext("Save Alternate Configuration", save_config_help);
+ show_helptext(_("Save Alternate Configuration"), save_config_help);
break;
- case 255:
+ case KEY_ESC:
return;
}
}
}
-static void conf_cleanup(void)
-{
- tcsetattr(1, TCSAFLUSH, &ios_org);
- unlink(".help.tmp");
-}
-
-static void winch_handler(int sig)
-{
- struct winsize ws;
-
- if (ioctl(1, TIOCGWINSZ, &ws) == -1) {
- rows = 24;
- cols = 80;
- } else {
- rows = ws.ws_row;
- cols = ws.ws_col;
- }
-
- if (rows < 19 || cols < 80) {
- end_dialog();
- fprintf(stderr, "Your display is too small to run Menuconfig!\n");
- fprintf(stderr, "It must be at least 19 lines by 80 columns.\n");
- exit(1);
- }
-
- rows -= 4;
- cols -= 5;
-
-}
-
int main(int ac, char **av)
{
- int stat;
+ int saved_x, saved_y;
char *mode;
- struct symbol *sym;
+ int res;
+
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
conf_parse(av[1]);
conf_read(NULL);
- sym = sym_lookup("VERSION", 0);
- sym_calc_value(sym);
- snprintf(menu_backtitle, 128, "OpenADK v%s Configuration",
- sym_get_string_value(sym));
-
mode = getenv("MENUCONFIG_MODE");
if (mode) {
if (!strcasecmp(mode, "single_menu"))
single_menu_mode = 1;
}
- tcgetattr(1, &ios_org);
- atexit(conf_cleanup);
- init_wsize();
- init_dialog();
- signal(SIGWINCH, winch_handler);
- conf(&rootmenu);
- end_dialog();
+ initscr();
- /* Restart dialog to act more like when lxdialog was still separate */
- init_dialog();
- do {
- stat = dialog_yesno(NULL,
- "Do you wish to save your new OpenADK configuration?", 5, 60);
- } while (stat < 0);
- end_dialog();
+ getyx(stdscr, saved_y, saved_x);
+ if (init_dialog(NULL)) {
+ fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
+ fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
+ return 1;
+ }
- if (stat == 0) {
- conf_write(NULL);
- printf("\n\n*** End of OpenADK configuration.\n");
- } else
- printf("\n\nYour OpenADK configuration changes were NOT saved.\n\n");
+ set_config_filename(conf_get_configname());
+ do {
+ conf(&rootmenu);
+ dialog_clear();
+ if (conf_get_changed())
+ res = dialog_yesno(NULL,
+ _("Do you wish to save your "
+ "new OpenADK configuration?\n"
+ "<ESC><ESC> to continue."),
+ 6, 60);
+ else
+ res = -1;
+ } while (res == KEY_ESC);
+ end_dialog(saved_x, saved_y);
+
+ switch (res) {
+ case 0:
+ if (conf_write(filename)) {
+ fprintf(stderr, _("\n\n"
+ "Error during writing of the OpenADK configuration.\n"
+ "Your OpenADK configuration changes were NOT saved."
+ "\n\n"));
+ return 1;
+ }
+ case -1:
+ printf(_("\n\n"
+ "*** End of OpenADK configuration.\n"
+ "*** Execute 'make' to build the firmware or try 'make help'."
+ "\n\n"));
+ break;
+ default:
+ fprintf(stderr, _("\n\n"
+ "Your OpenADK configuration changes were NOT saved."
+ "\n\n"));
+ }
return 0;
}
+
diff --git a/config/menu.c b/config/menu.c
index f6e6200ce..07ff8d105 100644
--- a/config/menu.c
+++ b/config/menu.c
@@ -10,13 +10,12 @@
#include "lkc.h"
struct menu rootmenu;
-struct menu *current_menu, *current_entry;
static struct menu **last_entry_ptr;
struct file *file_list;
struct file *current_file;
-static void menu_warn(struct menu *menu, const char *fmt, ...)
+void menu_warn(struct menu *menu, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
@@ -62,10 +61,11 @@ void menu_end_entry(void)
{
}
-void menu_add_menu(void)
+struct menu *menu_add_menu(void)
{
- current_menu = current_entry;
+ menu_end_entry();
last_entry_ptr = &current_entry->list;
+ return current_menu = current_entry;
}
void menu_end_menu(void)
@@ -114,7 +114,7 @@ void menu_set_type(int type)
sym->type = type;
return;
}
- menu_warn(current_entry, "type of '%s' redefined from '%s' to '%s'\n",
+ menu_warn(current_entry, "type of '%s' redefined from '%s' to '%s'",
sym->name ? sym->name : "<choice>",
sym_type_name(sym->type), sym_type_name(type));
}
@@ -124,22 +124,27 @@ struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *e
struct property *prop = prop_alloc(type, current_entry->sym);
prop->menu = current_entry;
- prop->text = prompt;
prop->expr = expr;
prop->visible.expr = menu_check_dep(dep);
if (prompt) {
+ if (isspace(*prompt)) {
+ prop_warn(prop, "leading whitespace ignored");
+ while (isspace(*prompt))
+ prompt++;
+ }
if (current_entry->prompt)
- menu_warn(current_entry, "prompt redefined\n");
+ prop_warn(prop, "prompt redefined");
current_entry->prompt = prop;
}
+ prop->text = prompt;
return prop;
}
-void menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep)
+struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep)
{
- menu_add_prop(type, prompt, NULL, dep);
+ return menu_add_prop(type, prompt, NULL, dep);
}
void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep)
@@ -152,6 +157,33 @@ void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep)
menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep);
}
+void menu_add_option(int token, char *arg)
+{
+ struct property *prop;
+
+ switch (token) {
+ case T_OPT_MODULES:
+ prop = prop_alloc(P_DEFAULT, modules_sym);
+ prop->expr = expr_alloc_symbol(current_entry->sym);
+ break;
+ case T_OPT_DEFCONFIG_LIST:
+ if (!sym_defconfig_list)
+ sym_defconfig_list = current_entry->sym;
+ else if (sym_defconfig_list != current_entry->sym)
+ zconf_error("trying to redefine defconfig symbol");
+ break;
+ case T_OPT_ENV:
+ prop_add_env(arg);
+ break;
+ }
+}
+
+static int menu_range_valid_sym(struct symbol *sym, struct symbol *sym2)
+{
+ return sym2->type == S_INT || sym2->type == S_HEX ||
+ (sym2->type == S_UNKNOWN && sym_string_valid(sym, sym2->name));
+}
+
void sym_check_prop(struct symbol *sym)
{
struct property *prop;
@@ -166,18 +198,14 @@ void sym_check_prop(struct symbol *sym)
" must be a single symbol", sym->name);
break;
case P_SELECT:
- case P_SELECTNOT:
sym2 = prop_get_symbol(prop);
if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE)
prop_warn(prop,
"config symbol '%s' uses select, but is "
"not boolean or tristate", sym->name);
- else if (sym2->type == S_UNKNOWN)
- prop_warn(prop,
- "'select' used by config symbol '%s' "
- "refer to undefined symbol '%s'",
- sym->name, sym2->name);
- else if (sym2->type != S_BOOLEAN && sym2->type != S_TRISTATE)
+ else if (sym2->type != S_UNKNOWN &&
+ sym2->type != S_BOOLEAN &&
+ sym2->type != S_TRISTATE)
prop_warn(prop,
"'%s' has wrong type. 'select' only "
"accept arguments of boolean and "
@@ -187,8 +215,8 @@ void sym_check_prop(struct symbol *sym)
if (sym->type != S_INT && sym->type != S_HEX)
prop_warn(prop, "range is only allowed "
"for int or hex symbols");
- if (!sym_string_valid(sym, prop->expr->left.sym->name) ||
- !sym_string_valid(sym, prop->expr->right.sym->name))
+ if (!menu_range_valid_sym(sym, prop->expr->left.sym) ||
+ !menu_range_valid_sym(sym, prop->expr->right.sym))
prop_warn(prop, "range is invalid");
break;
default:
@@ -207,15 +235,21 @@ void menu_finalize(struct menu *parent)
sym = parent->sym;
if (parent->list) {
if (sym && sym_is_choice(sym)) {
- /* find the first choice value and find out choice type */
+ if (sym->type == S_UNKNOWN) {
+ /* find the first choice value to find out choice type */
+ current_entry = parent;
+ for (menu = parent->list; menu; menu = menu->next) {
+ if (menu->sym && menu->sym->type != S_UNKNOWN) {
+ menu_set_type(menu->sym->type);
+ break;
+ }
+ }
+ }
+ /* set the type of the remaining choice values */
for (menu = parent->list; menu; menu = menu->next) {
- if (menu->sym) {
- current_entry = parent;
- menu_set_type(menu->sym->type);
- current_entry = menu;
+ current_entry = menu;
+ if (menu->sym && menu->sym->type == S_UNKNOWN)
menu_set_type(sym->type);
- break;
- }
}
parentdep = expr_alloc_symbol(sym);
} else if (parent->prompt)
@@ -245,10 +279,6 @@ void menu_finalize(struct menu *parent)
struct symbol *es = prop_get_symbol(prop);
es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr,
expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep)));
- } else if (prop->type == P_SELECTNOT) {
- struct symbol *es = prop_get_symbol(prop);
- es->rev_dep_inv.expr = expr_alloc_or(es->rev_dep_inv.expr,
- expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep)));
}
}
}
@@ -287,27 +317,43 @@ void menu_finalize(struct menu *parent)
}
}
for (menu = parent->list; menu; menu = menu->next) {
- if (sym && sym_is_choice(sym) && menu->sym) {
+ if (sym && sym_is_choice(sym) &&
+ menu->sym && !sym_is_choice_value(menu->sym)) {
+ current_entry = menu;
menu->sym->flags |= SYMBOL_CHOICEVAL;
if (!menu->prompt)
menu_warn(menu, "choice value must have a prompt");
for (prop = menu->sym->prop; prop; prop = prop->next) {
- if (prop->type == P_PROMPT && prop->menu != menu) {
- prop_warn(prop, "choice values "
- "currently only support a "
- "single prompt");
- }
if (prop->type == P_DEFAULT)
prop_warn(prop, "defaults for choice "
- "values not supported");
+ "values not supported");
+ if (prop->menu == menu)
+ continue;
+ if (prop->type == P_PROMPT &&
+ prop->menu->parent->sym != sym)
+ prop_warn(prop, "choice value used outside its choice group");
+ }
+ /* Non-tristate choice values of tristate choices must
+ * depend on the choice being set to Y. The choice
+ * values' dependencies were propagated to their
+ * properties above, so the change here must be re-
+ * propagated.
+ */
+ if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) {
+ basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes);
+ menu->dep = expr_alloc_and(basedep, menu->dep);
+ for (prop = menu->sym->prop; prop; prop = prop->next) {
+ if (prop->menu != menu)
+ continue;
+ prop->visible.expr = expr_alloc_and(expr_copy(basedep),
+ prop->visible.expr);
+ }
}
- current_entry = menu;
- menu_set_type(sym->type);
menu_add_symbol(P_CHOICE, sym, NULL);
prop = sym_get_choice_prop(sym);
for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr)
;
- *ep = expr_alloc_one(E_CHOICE, NULL);
+ *ep = expr_alloc_one(E_LIST, NULL);
(*ep)->right.sym = menu->sym;
}
if (menu->list && (!menu->prompt || !menu->prompt->text)) {
@@ -324,11 +370,10 @@ void menu_finalize(struct menu *parent)
if (sym && !(sym->flags & SYMBOL_WARNED)) {
if (sym->type == S_UNKNOWN)
- menu_warn(parent, "config symbol defined "
- "without type\n");
+ menu_warn(parent, "config symbol defined without type");
if (sym_is_choice(sym) && !parent->prompt)
- menu_warn(parent, "choice must have a prompt\n");
+ menu_warn(parent, "choice must have a prompt");
/* Check properties connected to this symbol */
sym_check_prop(sym);
@@ -394,43 +439,15 @@ struct menu *menu_get_parent_menu(struct menu *menu)
return menu;
}
-struct file *file_lookup(const char *name)
+bool menu_has_help(struct menu *menu)
{
- struct file *file;
-
- for (file = file_list; file; file = file->next) {
- if (!strcmp(name, file->name))
- return file;
- }
-
- file = malloc(sizeof(*file));
- memset(file, 0, sizeof(*file));
- file->name = strdup(name);
- file->next = file_list;
- file_list = file;
- return file;
+ return menu->help != NULL;
}
-int file_write_dep(const char *name)
+const char *menu_get_help(struct menu *menu)
{
- struct file *file;
- FILE *out;
-
- if (!name)
- name = ".config.cmd";
- out = fopen(".config.tmp", "w");
- if (!out)
- return 1;
- fprintf(out, "deps_config := \\\n");
- for (file = file_list; file; file = file->next) {
- if (file->next)
- fprintf(out, "\t%s \\\n", file->name);
- else
- fprintf(out, "\t%s\n", file->name);
- }
- fprintf(out, "\n.config include/config.h: $(deps_config)\n\n$(deps_config):\n");
- fclose(out);
- rename(".config.tmp", name);
- return 0;
+ if (menu->help)
+ return menu->help;
+ else
+ return "";
}
-
diff --git a/config/menubox.c b/config/menubox.c
deleted file mode 100644
index c2fd755b4..000000000
--- a/config/menubox.c
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * menubox.c -- implements the menu box
- *
- * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/*
- * Changes by Clifford Wolf (god@clifford.at)
- *
- * [ 1998-06-13 ]
- *
- * *) A bugfix for the Page-Down problem
- *
- * *) Formerly when I used Page Down and Page Up, the cursor would be set
- * to the first position in the menu box. Now lxdialog is a bit
- * smarter and works more like other menu systems (just have a look at
- * it).
- *
- * *) Formerly if I selected something my scrolling would be broken because
- * lxdialog is re-invoked by the Menuconfig shell script, can't
- * remember the last scrolling position, and just sets it so that the
- * cursor is at the bottom of the box. Now it writes the temporary file
- * lxdialog.scrltmp which contains this information. The file is
- * deleted by lxdialog if the user leaves a submenu or enters a new
- * one, but it would be nice if Menuconfig could make another "rm -f"
- * just to be sure. Just try it out - you will recognise a difference!
- *
- * [ 1998-06-14 ]
- *
- * *) Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files
- * and menus change their size on the fly.
- *
- * *) If for some reason the last scrolling position is not saved by
- * lxdialog, it sets the scrolling so that the selected item is in the
- * middle of the menu box, not at the bottom.
- *
- * 02 January 1999, Michael Elizabeth Chastain (mec@shout.net)
- * Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus.
- * This fixes a bug in Menuconfig where using ' ' to descend into menus
- * would leave mis-synchronized lxdialog.scrltmp files lying around,
- * fscanf would read in 'scroll', and eventually that value would get used.
- */
-
-#include "dialog.h"
-
-static int menu_width, item_x;
-
-/*
- * Print menu item
- */
-static void
-print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey)
-{
- int j;
- char menu_item[menu_width+1];
-
- strncpy(menu_item, item, menu_width);
- menu_item[menu_width] = 0;
- j = first_alpha(menu_item, "YyNnMm");
-
- /* Clear 'residue' of last item */
- wattrset (win, menubox_attr);
- wmove (win, choice, 0);
-#if OLD_NCURSES
- {
- int i;
- for (i = 0; i < menu_width; i++)
- waddch (win, ' ');
- }
-#else
- wclrtoeol(win);
-#endif
- wattrset (win, selected ? item_selected_attr : item_attr);
- mvwaddstr (win, choice, item_x, menu_item);
-#if 0
- if (hotkey) {
- wattrset (win, selected ? tag_key_selected_attr : tag_key_attr);
- mvwaddch(win, choice, item_x+j, menu_item[j]);
- }
-#endif
- if (selected) {
- wmove (win, choice, item_x+1);
- wrefresh (win);
- }
-}
-
-/*
- * Print the scroll indicators.
- */
-static void
-print_arrows (WINDOW * win, int item_no, int scroll,
- int y, int x, int height)
-{
- int cur_y, cur_x;
-
- getyx(win, cur_y, cur_x);
-
- wmove(win, y, x);
-
- if (scroll > 0) {
- wattrset (win, uarrow_attr);
- waddch (win, ACS_UARROW);
- waddstr (win, "(-)");
- }
- else {
- wattrset (win, menubox_attr);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- }
-
- y = y + height + 1;
- wmove(win, y, x);
-
- if ((height < item_no) && (scroll + height < item_no)) {
- wattrset (win, darrow_attr);
- waddch (win, ACS_DARROW);
- waddstr (win, "(+)");
- }
- else {
- wattrset (win, menubox_border_attr);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- }
-
- wmove(win, cur_y, cur_x);
-}
-
-/*
- * Display the termination buttons.
- */
-static void
-print_buttons (WINDOW *win, int height, int width, int selected)
-{
- int x = width / 2 - 16;
- int y = height - 2;
-
- print_button (win, "Select", y, x, selected == 0);
- print_button (win, " Exit ", y, x + 12, selected == 1);
- print_button (win, " Help ", y, x + 24, selected == 2);
-
- wmove(win, y, x+1+12*selected);
- wrefresh (win);
-}
-
-/*
- * Display a menu for choosing among a number of options
- */
-int
-dialog_menu (const char *title, const char *prompt, int height, int width,
- int menu_height, const char *current, int item_no,
- struct dialog_list_item ** items)
-{
- int i, j, x, y, box_x, box_y;
- int key = 0, button = 0, scroll = 0, choice = 0, first_item = 0, max_choice;
- WINDOW *dialog, *menu;
- FILE *f;
-
- max_choice = MIN (menu_height, item_no);
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height - 3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- wbkgdset (dialog, dialog_attr & A_COLOR);
- waddch (dialog, ACS_RTEE);
-
- if (title != NULL && strlen(title) >= width-2 ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
-
- wattrset (dialog, dialog_attr);
- print_autowrap (dialog, prompt, width - 2, 1, 3);
-
- menu_width = width - 6;
- box_y = height - menu_height - 5;
- box_x = (width - menu_width) / 2 - 1;
-
- /* create new window for the menu */
- menu = subwin (dialog, menu_height, menu_width,
- y + box_y + 1, x + box_x + 1);
- keypad (menu, TRUE);
-
- /* draw a box around the menu items */
- draw_box (dialog, box_y, box_x, menu_height + 2, menu_width + 2,
- menubox_border_attr, menubox_attr);
-
- /*
- * Find length of longest item in order to center menu.
- * Set 'choice' to default item.
- */
- item_x = 0;
- for (i = 0; i < item_no; i++) {
- item_x = MAX (item_x, MIN(menu_width, strlen (items[i]->name) + 2));
- if (strcmp(current, items[i]->tag) == 0) choice = i;
- }
-
- item_x = (menu_width - item_x) / 2;
-
- /* get the scroll info from the temp file */
- if ( (f=fopen("lxdialog.scrltmp","r")) != NULL ) {
- if ( (fscanf(f,"%d\n",&scroll) == 1) && (scroll <= choice) &&
- (scroll+max_choice > choice) && (scroll >= 0) &&
- (scroll+max_choice <= item_no) ) {
- first_item = scroll;
- choice = choice - scroll;
- fclose(f);
- } else {
- scroll=0;
- remove("lxdialog.scrltmp");
- fclose(f);
- f=NULL;
- }
- }
- if ( (choice >= max_choice) || (f==NULL && choice >= max_choice/2) ) {
- if (choice >= item_no-max_choice/2)
- scroll = first_item = item_no-max_choice;
- else
- scroll = first_item = choice - max_choice/2;
- choice = choice - scroll;
- }
-
- /* Print the menu */
- for (i=0; i < max_choice; i++) {
- print_item (menu, items[first_item + i]->name, i, i == choice,
- (items[first_item + i]->tag[0] != ':'));
- }
-
- wnoutrefresh (menu);
-
- print_arrows(dialog, item_no, scroll,
- box_y, box_x+item_x+1, menu_height);
-
- print_buttons (dialog, height, width, 0);
- wmove (menu, choice, item_x+1);
- wrefresh (menu);
-
- while (key != ESC) {
- key = wgetch(menu);
-
- if (key < 256 && isalpha(key)) key = tolower(key);
-
- if (strchr("ynm", key))
- i = max_choice;
- else {
- for (i = choice+1; i < max_choice; i++) {
- j = first_alpha(items[scroll + i]->name, "YyNnMm>");
- if (key == tolower(items[scroll + i]->name[j]))
- break;
- }
- if (i == max_choice)
- for (i = 0; i < max_choice; i++) {
- j = first_alpha(items[scroll + i]->name, "YyNnMm>");
- if (key == tolower(items[scroll + i]->name[j]))
- break;
- }
- }
-
- if (i < max_choice ||
- key == KEY_UP || key == KEY_DOWN ||
- key == '-' || key == '+' ||
- key == KEY_PPAGE || key == KEY_NPAGE) {
-
- print_item (menu, items[scroll + choice]->name, choice, FALSE,
- (items[scroll + choice]->tag[0] != ':'));
-
- if (key == KEY_UP || key == '-') {
- if (choice < 2 && scroll) {
- /* Scroll menu down */
- scrollok (menu, TRUE);
- wscrl (menu, -1);
- scrollok (menu, FALSE);
-
- scroll--;
-
- print_item (menu, items[scroll]->name, 0, FALSE,
- (items[scroll]->tag[0] != ':'));
- } else
- choice = MAX(choice - 1, 0);
-
- } else if (key == KEY_DOWN || key == '+') {
-
- print_item (menu, items[scroll + choice]->name, choice, FALSE,
- (items[scroll + choice]->tag[0] != ':'));
-
- if ((choice > max_choice-3) &&
- (scroll + max_choice < item_no)
- ) {
- /* Scroll menu up */
- scrollok (menu, TRUE);
- scroll (menu);
- scrollok (menu, FALSE);
-
- scroll++;
-
- print_item (menu, items[scroll + max_choice - 1]->name,
- max_choice-1, FALSE,
- (items[scroll + max_choice - 1]->tag[0] != ':'));
- } else
- choice = MIN(choice+1, max_choice-1);
-
- } else if (key == KEY_PPAGE) {
- scrollok (menu, TRUE);
- for (i=0; (i < max_choice); i++) {
- if (scroll > 0) {
- wscrl (menu, -1);
- scroll--;
- print_item (menu, items[scroll]->name, 0, FALSE,
- (items[scroll]->tag[0] != ':'));
- } else {
- if (choice > 0)
- choice--;
- }
- }
- scrollok (menu, FALSE);
-
- } else if (key == KEY_NPAGE) {
- for (i=0; (i < max_choice); i++) {
- if (scroll+max_choice < item_no) {
- scrollok (menu, TRUE);
- scroll(menu);
- scrollok (menu, FALSE);
- scroll++;
- print_item (menu, items[scroll + max_choice - 1]->name,
- max_choice-1, FALSE,
- (items[scroll + max_choice - 1]->tag[0] != ':'));
- } else {
- if (choice+1 < max_choice)
- choice++;
- }
- }
-
- } else
- choice = i;
-
- print_item (menu, items[scroll + choice]->name, choice, TRUE,
- (items[scroll + choice]->tag[0] != ':'));
-
- print_arrows(dialog, item_no, scroll,
- box_y, box_x+item_x+1, menu_height);
-
- wnoutrefresh (dialog);
- wrefresh (menu);
-
- continue; /* wait for another key press */
- }
-
- switch (key) {
- case KEY_LEFT:
- case TAB:
- case KEY_RIGHT:
- button = ((key == KEY_LEFT ? --button : ++button) < 0)
- ? 2 : (button > 2 ? 0 : button);
-
- print_buttons(dialog, height, width, button);
- wrefresh (menu);
- break;
- case ' ':
- case 's':
- case 'y':
- case 'n':
- case 'm':
- /* save scroll info */
- if ( (f=fopen("lxdialog.scrltmp","w")) != NULL ) {
- fprintf(f,"%d\n",scroll);
- fclose(f);
- }
- delwin (dialog);
- items[scroll + choice]->selected = 1;
- switch (key) {
- case 's': return 3;
- case 'y': return 3;
- case 'n': return 4;
- case 'm': return 5;
- case ' ': return 6;
- }
- return 0;
- case 'h':
- case '?':
- button = 2;
- case '\n':
- delwin (dialog);
- items[scroll + choice]->selected = 1;
-
- remove("lxdialog.scrltmp");
- return button;
- case 'e':
- case 'x':
- key = ESC;
- case ESC:
- break;
- }
- }
-
- delwin (dialog);
- remove("lxdialog.scrltmp");
- return -1; /* ESC pressed */
-}
diff --git a/config/msgbox.c b/config/msgbox.c
deleted file mode 100644
index 93692e1fb..000000000
--- a/config/msgbox.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * msgbox.c -- implements the message box and info box
- *
- * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-/*
- * Display a message box. Program will pause and display an "OK" button
- * if the parameter 'pause' is non-zero.
- */
-int
-dialog_msgbox (const char *title, const char *prompt, int height, int width,
- int pause)
-{
- int i, x, y, key = 0;
- WINDOW *dialog;
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
-
- if (title != NULL && strlen(title) >= width-2 ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
- wattrset (dialog, dialog_attr);
- print_autowrap (dialog, prompt, width - 2, 1, 2);
-
- if (pause) {
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height - 3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- waddch (dialog, ACS_RTEE);
-
- print_button (dialog, " Ok ",
- height - 2, width / 2 - 4, TRUE);
-
- wrefresh (dialog);
- while (key != ESC && key != '\n' && key != ' ' &&
- key != 'O' && key != 'o' && key != 'X' && key != 'x')
- key = wgetch (dialog);
- } else {
- key = '\n';
- wrefresh (dialog);
- }
-
- delwin (dialog);
- return key == ESC ? -1 : 0;
-}
diff --git a/config/symbol.c b/config/symbol.c
index b9d2c3d2a..18f3e5c33 100644
--- a/config/symbol.c
+++ b/config/symbol.c
@@ -4,69 +4,61 @@
*/
#include <ctype.h>
-#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
+#include <regex.h>
#include <sys/utsname.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
-extern int output_mode;
-
struct symbol symbol_yes = {
.name = "y",
.curr = { "y", yes },
- .flags = SYMBOL_YES|SYMBOL_VALID,
+ .flags = SYMBOL_CONST|SYMBOL_VALID,
}, symbol_mod = {
.name = "m",
.curr = { "m", mod },
- .flags = SYMBOL_MOD|SYMBOL_VALID,
+ .flags = SYMBOL_CONST|SYMBOL_VALID,
}, symbol_no = {
.name = "n",
.curr = { "n", no },
- .flags = SYMBOL_NO|SYMBOL_VALID,
+ .flags = SYMBOL_CONST|SYMBOL_VALID,
}, symbol_empty = {
.name = "",
.curr = { "", no },
.flags = SYMBOL_VALID,
};
-int sym_change_count;
+struct symbol *sym_defconfig_list;
struct symbol *modules_sym;
tristate modules_val;
+struct expr *sym_env_list;
+
void sym_add_default(struct symbol *sym, const char *def)
{
struct property *prop = prop_alloc(P_DEFAULT, sym);
- prop->expr = expr_alloc_symbol(sym_lookup(def, 1));
+ prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST));
}
void sym_init(void)
{
struct symbol *sym;
- char *p;
+ struct utsname uts;
static bool inited = false;
if (inited)
return;
inited = true;
- sym = sym_lookup("VERSION", 0);
- sym->type = S_STRING;
- sym->flags |= SYMBOL_AUTO;
- p = getenv("VERSION");
- if (p)
- sym_add_default(sym, p);
+ uname(&uts);
- sym = sym_lookup("TARGET_ARCH", 0);
+ sym = sym_lookup("UNAME_RELEASE", 0);
sym->type = S_STRING;
sym->flags |= SYMBOL_AUTO;
- p = getenv("TARGET_ARCH");
- if (p)
- sym_add_default(sym, p);
-
+ sym_add_default(sym, uts.release);
}
enum symbol_type sym_get_type(struct symbol *sym)
@@ -112,13 +104,22 @@ struct property *sym_get_choice_prop(struct symbol *sym)
return NULL;
}
+struct property *sym_get_env_prop(struct symbol *sym)
+{
+ struct property *prop;
+
+ for_all_properties(sym, prop, P_ENV)
+ return prop;
+ return NULL;
+}
+
struct property *sym_get_default_prop(struct symbol *sym)
{
struct property *prop;
for_all_defaults(sym, prop) {
prop->visible.tri = expr_calc_value(prop->visible.expr);
- if (prop->visible.tri != no || output_mode)
+ if (prop->visible.tri != no)
return prop;
}
return NULL;
@@ -136,29 +137,73 @@ struct property *sym_get_range_prop(struct symbol *sym)
return NULL;
}
+static int sym_get_range_val(struct symbol *sym, int base)
+{
+ sym_calc_value(sym);
+ switch (sym->type) {
+ case S_INT:
+ base = 10;
+ break;
+ case S_HEX:
+ base = 16;
+ break;
+ default:
+ break;
+ }
+ return strtol(sym->curr.val, NULL, base);
+}
+
+static void sym_validate_range(struct symbol *sym)
+{
+ struct property *prop;
+ int base, val, val2;
+ char str[64];
+
+ switch (sym->type) {
+ case S_INT:
+ base = 10;
+ break;
+ case S_HEX:
+ base = 16;
+ break;
+ default:
+ return;
+ }
+ prop = sym_get_range_prop(sym);
+ if (!prop)
+ return;
+ val = strtol(sym->curr.val, NULL, base);
+ val2 = sym_get_range_val(prop->expr->left.sym, base);
+ if (val >= val2) {
+ val2 = sym_get_range_val(prop->expr->right.sym, base);
+ if (val <= val2)
+ return;
+ }
+ if (sym->type == S_INT)
+ sprintf(str, "%d", val2);
+ else
+ sprintf(str, "0x%x", val2);
+ sym->curr.val = strdup(str);
+}
+
static void sym_calc_visibility(struct symbol *sym)
{
struct property *prop;
tristate tri;
- bool deselected = false;
/* any prompt visible? */
tri = no;
for_all_prompts(sym, prop) {
prop->visible.tri = expr_calc_value(prop->visible.expr);
- tri = E_OR(tri, prop->visible.tri);
+ tri = EXPR_OR(tri, prop->visible.tri);
}
if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))
tri = yes;
- if (sym->rev_dep_inv.expr && (expr_calc_value(sym->rev_dep_inv.expr) == yes)) {
- tri = no;
- deselected = true;
- }
if (sym->visible != tri) {
sym->visible = tri;
sym_set_changed(sym);
}
- if (sym_is_choice_value(sym) || deselected)
+ if (sym_is_choice_value(sym))
return;
tri = no;
if (sym->rev_dep.expr)
@@ -178,7 +223,7 @@ static struct symbol *sym_calc_choice(struct symbol *sym)
struct expr *e;
/* is the user choice visible? */
- def_sym = sym->user.val;
+ def_sym = sym->def[S_DEF_USER].val;
if (def_sym) {
sym_calc_visibility(def_sym);
if (def_sym->visible != no)
@@ -198,8 +243,7 @@ static struct symbol *sym_calc_choice(struct symbol *sym)
/* just get the first visible value */
prop = sym_get_choice_prop(sym);
- for (e = prop->expr; e; e = e->left.expr) {
- def_sym = e->right.sym;
+ expr_list_for_each_sym(prop->expr, e, def_sym) {
sym_calc_visibility(def_sym);
if (def_sym->visible != no)
return def_sym;
@@ -254,24 +298,30 @@ void sym_calc_value(struct symbol *sym)
if (sym_is_choice_value(sym) && sym->visible == yes) {
prop = sym_get_choice_prop(sym);
newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no;
- } else if (sym->rev_dep_inv.expr && (expr_calc_value(sym->rev_dep_inv.expr) == yes)) {
- newval.tri = no;
- } else if (E_OR(sym->visible, sym->rev_dep.tri) != no) {
- sym->flags |= SYMBOL_WRITE;
- if (sym_has_value(sym))
- newval.tri = sym->user.tri;
- else if (!sym_is_choice(sym)) {
- prop = sym_get_default_prop(sym);
- if (prop)
- newval.tri = expr_calc_value(prop->expr);
+ } else {
+ if (sym->visible != no) {
+ /* if the symbol is visible use the user value
+ * if available, otherwise try the default value
+ */
+ sym->flags |= SYMBOL_WRITE;
+ if (sym_has_value(sym)) {
+ newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
+ sym->visible);
+ goto calc_newval;
+ }
}
- newval.tri = E_OR(E_AND(newval.tri, sym->visible), sym->rev_dep.tri);
- } else if (!sym_is_choice(sym)) {
- prop = sym_get_default_prop(sym);
- if (prop) {
+ if (sym->rev_dep.tri != no)
sym->flags |= SYMBOL_WRITE;
- newval.tri = expr_calc_value(prop->expr);
+ if (!sym_is_choice(sym)) {
+ prop = sym_get_default_prop(sym);
+ if (prop) {
+ sym->flags |= SYMBOL_WRITE;
+ newval.tri = EXPR_AND(expr_calc_value(prop->expr),
+ prop->visible.tri);
+ }
}
+ calc_newval:
+ newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
}
if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
newval.tri = yes;
@@ -282,7 +332,7 @@ void sym_calc_value(struct symbol *sym)
if (sym->visible != no) {
sym->flags |= SYMBOL_WRITE;
if (sym_has_value(sym)) {
- newval.val = sym->user.val;
+ newval.val = sym->def[S_DEF_USER].val;
break;
}
}
@@ -303,21 +353,30 @@ void sym_calc_value(struct symbol *sym)
sym->curr = newval;
if (sym_is_choice(sym) && newval.tri == yes)
sym->curr.val = sym_calc_choice(sym);
+ sym_validate_range(sym);
- if (memcmp(&oldval, &sym->curr, sizeof(oldval)))
+ if (memcmp(&oldval, &sym->curr, sizeof(oldval))) {
sym_set_changed(sym);
- if (modules_sym == sym)
- modules_val = modules_sym->curr.tri;
+ if (modules_sym == sym) {
+ sym_set_all_changed();
+ modules_val = modules_sym->curr.tri;
+ }
+ }
if (sym_is_choice(sym)) {
+ struct symbol *choice_sym;
int flags = sym->flags & (SYMBOL_CHANGED | SYMBOL_WRITE);
+
prop = sym_get_choice_prop(sym);
- for (e = prop->expr; e; e = e->left.expr) {
- e->right.sym->flags |= flags;
+ expr_list_for_each_sym(prop->expr, e, choice_sym) {
+ choice_sym->flags |= flags;
if (flags & SYMBOL_CHANGED)
- sym_set_changed(e->right.sym);
+ sym_set_changed(choice_sym);
}
}
+
+ if (sym->flags & SYMBOL_AUTO)
+ sym->flags &= ~SYMBOL_WRITE;
}
void sym_clear_all_valid(void)
@@ -327,7 +386,7 @@ void sym_clear_all_valid(void)
for_all_symbols(i, sym)
sym->flags &= ~SYMBOL_VALID;
- sym_change_count++;
+ sym_add_change_count(1);
if (modules_sym)
sym_calc_value(modules_sym);
}
@@ -378,23 +437,31 @@ bool sym_set_tristate_value(struct symbol *sym, tristate val)
if (oldval != val && !sym_tristate_within_range(sym, val))
return false;
- if (sym->flags & SYMBOL_NEW) {
- sym->flags &= ~SYMBOL_NEW;
+ if (!(sym->flags & SYMBOL_DEF_USER)) {
+ sym->flags |= SYMBOL_DEF_USER;
sym_set_changed(sym);
}
+ /*
+ * setting a choice value also resets the new flag of the choice
+ * symbol and all other choice values.
+ */
if (sym_is_choice_value(sym) && val == yes) {
struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
+ struct property *prop;
+ struct expr *e;
- cs->user.val = sym;
- cs->flags &= ~SYMBOL_NEW;
+ cs->def[S_DEF_USER].val = sym;
+ cs->flags |= SYMBOL_DEF_USER;
+ prop = sym_get_choice_prop(cs);
+ for (e = prop->expr; e; e = e->left.expr) {
+ if (e->right.sym->visible != no)
+ e->right.sym->flags |= SYMBOL_DEF_USER;
+ }
}
- sym->user.tri = val;
- if (oldval != val) {
+ sym->def[S_DEF_USER].tri = val;
+ if (oldval != val)
sym_clear_all_valid();
- if (sym == modules_sym)
- sym_set_all_changed();
- }
return true;
}
@@ -424,7 +491,7 @@ tristate sym_toggle_tristate_value(struct symbol *sym)
bool sym_string_valid(struct symbol *sym, const char *str)
{
- char ch;
+ signed char ch;
switch (sym->type) {
case S_STRING:
@@ -480,8 +547,8 @@ bool sym_string_within_range(struct symbol *sym, const char *str)
if (!prop)
return true;
val = strtol(str, NULL, 10);
- return val >= strtol(prop->expr->left.sym->name, NULL, 10) &&
- val <= strtol(prop->expr->right.sym->name, NULL, 10);
+ return val >= sym_get_range_val(prop->expr->left.sym, 10) &&
+ val <= sym_get_range_val(prop->expr->right.sym, 10);
case S_HEX:
if (!sym_string_valid(sym, str))
return false;
@@ -489,8 +556,8 @@ bool sym_string_within_range(struct symbol *sym, const char *str)
if (!prop)
return true;
val = strtol(str, NULL, 16);
- return val >= strtol(prop->expr->left.sym->name, NULL, 16) &&
- val <= strtol(prop->expr->right.sym->name, NULL, 16);
+ return val >= sym_get_range_val(prop->expr->left.sym, 16) &&
+ val <= sym_get_range_val(prop->expr->right.sym, 16);
case S_BOOLEAN:
case S_TRISTATE:
switch (str[0]) {
@@ -532,20 +599,20 @@ bool sym_set_string_value(struct symbol *sym, const char *newval)
if (!sym_string_within_range(sym, newval))
return false;
- if (sym->flags & SYMBOL_NEW) {
- sym->flags &= ~SYMBOL_NEW;
+ if (!(sym->flags & SYMBOL_DEF_USER)) {
+ sym->flags |= SYMBOL_DEF_USER;
sym_set_changed(sym);
}
- oldval = sym->user.val;
+ oldval = sym->def[S_DEF_USER].val;
size = strlen(newval) + 1;
if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
size += 2;
- sym->user.val = val = malloc(size);
+ sym->def[S_DEF_USER].val = val = malloc(size);
*val++ = '0';
*val++ = 'x';
} else if (!oldval || strcmp(oldval, newval))
- sym->user.val = val = malloc(size);
+ sym->def[S_DEF_USER].val = val = malloc(size);
else
return true;
@@ -584,7 +651,7 @@ bool sym_is_changable(struct symbol *sym)
return sym->visible > sym->rev_dep.tri;
}
-struct symbol *sym_lookup(const char *name, int isconst)
+struct symbol *sym_lookup(const char *name, int flags)
{
struct symbol *symbol;
const char *ptr;
@@ -604,11 +671,10 @@ struct symbol *sym_lookup(const char *name, int isconst)
hash &= 0xff;
for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
- if (!strcmp(symbol->name, name)) {
- if ((isconst && symbol->flags & SYMBOL_CONST) ||
- (!isconst && !(symbol->flags & SYMBOL_CONST)))
- return symbol;
- }
+ if (!strcmp(symbol->name, name) &&
+ (flags ? symbol->flags & flags
+ : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE))))
+ return symbol;
}
new_name = strdup(name);
} else {
@@ -620,9 +686,7 @@ struct symbol *sym_lookup(const char *name, int isconst)
memset(symbol, 0, sizeof(*symbol));
symbol->name = new_name;
symbol->type = S_UNKNOWN;
- symbol->flags = SYMBOL_NEW;
- if (isconst)
- symbol->flags |= SYMBOL_CONST;
+ symbol->flags |= flags;
symbol->next = symbol_hash[hash];
symbol_hash[hash] = symbol;
@@ -659,7 +723,42 @@ struct symbol *sym_find(const char *name)
return symbol;
}
-struct symbol *sym_check_deps(struct symbol *sym);
+struct symbol **sym_re_search(const char *pattern)
+{
+ struct symbol *sym, **sym_arr = NULL;
+ int i, cnt, size;
+ regex_t re;
+
+ cnt = size = 0;
+ /* Skip if empty */
+ if (strlen(pattern) == 0)
+ return NULL;
+ if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB|REG_ICASE))
+ return NULL;
+
+ for_all_symbols(i, sym) {
+ if (sym->flags & SYMBOL_CONST || !sym->name)
+ continue;
+ if (regexec(&re, sym->name, 0, NULL, 0))
+ continue;
+ if (cnt + 1 >= size) {
+ void *tmp = sym_arr;
+ size += 16;
+ sym_arr = realloc(sym_arr, size * sizeof(struct symbol *));
+ if (!sym_arr) {
+ free(tmp);
+ return NULL;
+ }
+ }
+ sym_arr[cnt++] = sym;
+ }
+ if (sym_arr)
+ sym_arr[cnt] = NULL;
+ regfree(&re);
+
+ return sym_arr;
+}
+
static struct symbol *sym_check_expr_deps(struct expr *e)
{
@@ -691,39 +790,101 @@ static struct symbol *sym_check_expr_deps(struct expr *e)
return NULL;
}
-struct symbol *sym_check_deps(struct symbol *sym)
+/* return NULL when dependencies are OK */
+static struct symbol *sym_check_sym_deps(struct symbol *sym)
{
struct symbol *sym2;
struct property *prop;
- if (sym->flags & SYMBOL_CHECK_DONE)
- return NULL;
- if (sym->flags & SYMBOL_CHECK) {
- printf("Warning! Found recursive dependency: %s", sym->name);
- return sym;
- }
-
- sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
sym2 = sym_check_expr_deps(sym->rev_dep.expr);
if (sym2)
- goto out;
+ return sym2;
for (prop = sym->prop; prop; prop = prop->next) {
- if (prop->type == P_CHOICE || prop->type == P_SELECT || prop->type == P_SELECTNOT)
+ if (prop->type == P_CHOICE || prop->type == P_SELECT)
continue;
sym2 = sym_check_expr_deps(prop->visible.expr);
if (sym2)
- goto out;
+ break;
if (prop->type != P_DEFAULT || sym_is_choice(sym))
continue;
sym2 = sym_check_expr_deps(prop->expr);
if (sym2)
- goto out;
+ break;
}
-out:
+
+ return sym2;
+}
+
+static struct symbol *sym_check_choice_deps(struct symbol *choice)
+{
+ struct symbol *sym, *sym2;
+ struct property *prop;
+ struct expr *e;
+
+ prop = sym_get_choice_prop(choice);
+ expr_list_for_each_sym(prop->expr, e, sym)
+ sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
+
+ choice->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
+ sym2 = sym_check_sym_deps(choice);
+ choice->flags &= ~SYMBOL_CHECK;
if (sym2)
- printf(" %s", sym->name);
- sym->flags &= ~SYMBOL_CHECK;
+ goto out;
+
+ expr_list_for_each_sym(prop->expr, e, sym) {
+ sym2 = sym_check_sym_deps(sym);
+ if (sym2) {
+ fprintf(stderr, " -> %s", sym->name);
+ break;
+ }
+ }
+out:
+ expr_list_for_each_sym(prop->expr, e, sym)
+ sym->flags &= ~SYMBOL_CHECK;
+
+ if (sym2 && sym_is_choice_value(sym2) &&
+ prop_get_symbol(sym_get_choice_prop(sym2)) == choice)
+ sym2 = choice;
+
+ return sym2;
+}
+
+struct symbol *sym_check_deps(struct symbol *sym)
+{
+ struct symbol *sym2;
+ struct property *prop;
+
+ if (sym->flags & SYMBOL_CHECK) {
+ fprintf(stderr, "%s:%d:error: found recursive dependency: %s",
+ sym->prop->file->name, sym->prop->lineno,
+ sym->name ? sym->name : "<choice>");
+ return sym;
+ }
+ if (sym->flags & SYMBOL_CHECKED)
+ return NULL;
+
+ if (sym_is_choice_value(sym)) {
+ /* for choice groups start the check with main choice symbol */
+ prop = sym_get_choice_prop(sym);
+ sym2 = sym_check_deps(prop_get_symbol(prop));
+ } else if (sym_is_choice(sym)) {
+ sym2 = sym_check_choice_deps(sym);
+ } else {
+ sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
+ sym2 = sym_check_sym_deps(sym);
+ sym->flags &= ~SYMBOL_CHECK;
+ }
+
+ if (sym2) {
+ fprintf(stderr, " -> %s", sym->name ? sym->name : "<choice>");
+ if (sym2 == sym) {
+ fprintf(stderr, "\n");
+ zconfnerrs++;
+ sym2 = NULL;
+ }
+ }
+
return sym2;
}
@@ -752,7 +913,7 @@ struct property *prop_alloc(enum prop_type type, struct symbol *sym)
struct symbol *prop_get_symbol(struct property *prop)
{
if (prop->expr && (prop->expr->type == E_SYMBOL ||
- prop->expr->type == E_CHOICE))
+ prop->expr->type == E_LIST))
return prop->expr->left.sym;
return NULL;
}
@@ -762,6 +923,8 @@ const char *prop_get_type_name(enum prop_type type)
switch (type) {
case P_PROMPT:
return "prompt";
+ case P_ENV:
+ return "env";
case P_COMMENT:
return "comment";
case P_MENU:
@@ -771,7 +934,6 @@ const char *prop_get_type_name(enum prop_type type)
case P_CHOICE:
return "choice";
case P_SELECT:
- case P_SELECTNOT:
return "select";
case P_RANGE:
return "range";
@@ -780,3 +942,32 @@ const char *prop_get_type_name(enum prop_type type)
}
return "unknown";
}
+
+void prop_add_env(const char *env)
+{
+ struct symbol *sym, *sym2;
+ struct property *prop;
+ char *p;
+
+ sym = current_entry->sym;
+ sym->flags |= SYMBOL_AUTO;
+ for_all_properties(sym, prop, P_ENV) {
+ sym2 = prop_get_symbol(prop);
+ if (strcmp(sym2->name, env))
+ menu_warn(current_entry, "redefining environment symbol from %s",
+ sym2->name);
+ return;
+ }
+
+ prop = prop_alloc(P_ENV, sym);
+ prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST));
+
+ sym_env_list = expr_alloc_one(E_LIST, sym_env_list);
+ sym_env_list->right.sym = sym;
+
+ p = getenv(env);
+ if (p)
+ sym_add_default(sym, p);
+ else
+ menu_warn(current_entry, "environment variable %s undefined", env);
+}
diff --git a/config/textbox.c b/config/textbox.c
deleted file mode 100644
index a5a460b5c..000000000
--- a/config/textbox.c
+++ /dev/null
@@ -1,556 +0,0 @@
-/*
- * textbox.c -- implements the text box
- *
- * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-static void back_lines (int n);
-static void print_page (WINDOW * win, int height, int width);
-static void print_line (WINDOW * win, int row, int width);
-static char *get_line (void);
-static void print_position (WINDOW * win, int height, int width);
-
-static int hscroll, fd, file_size, bytes_read;
-static int begin_reached = 1, end_reached, page_length;
-static char *buf, *page;
-
-/*
- * Display text from a file in a dialog box.
- */
-int
-dialog_textbox (const char *title, const char *file, int height, int width)
-{
- int i, x, y, cur_x, cur_y, fpos, key = 0;
- int passed_end;
- char search_term[MAX_LEN + 1];
- WINDOW *dialog, *text;
-
- search_term[0] = '\0'; /* no search term entered yet */
-
- /* Open input file for reading */
- if ((fd = open (file, O_RDONLY)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nCan't open input file in dialog_textbox().\n");
- exit (-1);
- }
- /* Get file size. Actually, 'file_size' is the real file size - 1,
- since it's only the last byte offset from the beginning */
- if ((file_size = lseek (fd, 0, SEEK_END)) == -1) {
- endwin ();
- fprintf (stderr, "\nError getting file size in dialog_textbox().\n");
- exit (-1);
- }
- /* Restore file pointer to beginning of file after getting file size */
- if (lseek (fd, 0, SEEK_SET) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in dialog_textbox().\n");
- exit (-1);
- }
- /* Allocate space for read buffer */
- if ((buf = malloc (BUF_SIZE + 1)) == NULL) {
- endwin ();
- fprintf (stderr, "\nCan't allocate memory in dialog_textbox().\n");
- exit (-1);
- }
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr, "\nError reading file in dialog_textbox().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0'; /* mark end of valid data */
- page = buf; /* page is pointer to start of page to be displayed */
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- /* Create window for text region, used for scrolling text */
- text = subwin (dialog, height - 4, width - 2, y + 1, x + 1);
- wattrset (text, dialog_attr);
- wbkgdset (text, dialog_attr & A_COLOR);
-
- keypad (text, TRUE);
-
- /* register the new window, along with its borders */
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
-
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height-3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- wbkgdset (dialog, dialog_attr & A_COLOR);
- waddch (dialog, ACS_RTEE);
-
- if (title != NULL && strlen(title) >= width-2 ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
- print_button (dialog, " Exit ", height - 2, width / 2 - 4, TRUE);
- wnoutrefresh (dialog);
- getyx (dialog, cur_y, cur_x); /* Save cursor position */
-
- /* Print first page of text */
- attr_clear (text, height - 4, width - 2, dialog_attr);
- print_page (text, height - 4, width - 2);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh (dialog);
-
- while ((key != ESC) && (key != '\n')) {
- key = wgetch (dialog);
- switch (key) {
- case 'E': /* Exit */
- case 'e':
- case 'X':
- case 'x':
- delwin (dialog);
- free (buf);
- close (fd);
- return 0;
- case 'g': /* First page */
- case KEY_HOME:
- if (!begin_reached) {
- begin_reached = 1;
- /* First page not in buffer? */
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError moving file pointer in dialog_textbox().\n");
- exit (-1);
- }
- if (fpos > bytes_read) { /* Yes, we have to read it in */
- if (lseek (fd, 0, SEEK_SET) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in "
- "dialog_textbox().\n");
- exit (-1);
- }
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError reading file in dialog_textbox().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0';
- }
- page = buf;
- print_page (text, height - 4, width - 2);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh (dialog);
- }
- break;
- case 'G': /* Last page */
- case KEY_END:
-
- end_reached = 1;
- /* Last page not in buffer? */
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError moving file pointer in dialog_textbox().\n");
- exit (-1);
- }
- if (fpos < file_size) { /* Yes, we have to read it in */
- if (lseek (fd, -BUF_SIZE, SEEK_END) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError moving file pointer in dialog_textbox().\n");
- exit (-1);
- }
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError reading file in dialog_textbox().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0';
- }
- page = buf + bytes_read;
- back_lines (height - 4);
- print_page (text, height - 4, width - 2);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh (dialog);
- break;
- case 'K': /* Previous line */
- case 'k':
- case KEY_UP:
- if (!begin_reached) {
- back_lines (page_length + 1);
-
- /* We don't call print_page() here but use scrolling to ensure
- faster screen update. However, 'end_reached' and
- 'page_length' should still be updated, and 'page' should
- point to start of next page. This is done by calling
- get_line() in the following 'for' loop. */
- scrollok (text, TRUE);
- wscrl (text, -1); /* Scroll text region down one line */
- scrollok (text, FALSE);
- page_length = 0;
- passed_end = 0;
- for (i = 0; i < height - 4; i++) {
- if (!i) {
- /* print first line of page */
- print_line (text, 0, width - 2);
- wnoutrefresh (text);
- } else
- /* Called to update 'end_reached' and 'page' */
- get_line ();
- if (!passed_end)
- page_length++;
- if (end_reached && !passed_end)
- passed_end = 1;
- }
-
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh (dialog);
- }
- break;
- case 'B': /* Previous page */
- case 'b':
- case KEY_PPAGE:
- if (begin_reached)
- break;
- back_lines (page_length + height - 4);
- print_page (text, height - 4, width - 2);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x);
- wrefresh (dialog);
- break;
- case 'J': /* Next line */
- case 'j':
- case KEY_DOWN:
- if (!end_reached) {
- begin_reached = 0;
- scrollok (text, TRUE);
- scroll (text); /* Scroll text region up one line */
- scrollok (text, FALSE);
- print_line (text, height - 5, width - 2);
- wnoutrefresh (text);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh (dialog);
- }
- break;
- case KEY_NPAGE: /* Next page */
- case ' ':
- if (end_reached)
- break;
-
- begin_reached = 0;
- print_page (text, height - 4, width - 2);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x);
- wrefresh (dialog);
- break;
- case '0': /* Beginning of line */
- case 'H': /* Scroll left */
- case 'h':
- case KEY_LEFT:
- if (hscroll <= 0)
- break;
-
- if (key == '0')
- hscroll = 0;
- else
- hscroll--;
- /* Reprint current page to scroll horizontally */
- back_lines (page_length);
- print_page (text, height - 4, width - 2);
- wmove (dialog, cur_y, cur_x);
- wrefresh (dialog);
- break;
- case 'L': /* Scroll right */
- case 'l':
- case KEY_RIGHT:
- if (hscroll >= MAX_LEN)
- break;
- hscroll++;
- /* Reprint current page to scroll horizontally */
- back_lines (page_length);
- print_page (text, height - 4, width - 2);
- wmove (dialog, cur_y, cur_x);
- wrefresh (dialog);
- break;
- case ESC:
- break;
- }
- }
-
- delwin (dialog);
- free (buf);
- close (fd);
- return 1; /* ESC pressed */
-}
-
-/*
- * Go back 'n' lines in text file. Called by dialog_textbox().
- * 'page' will be updated to point to the desired line in 'buf'.
- */
-static void
-back_lines (int n)
-{
- int i, fpos;
-
- begin_reached = 0;
- /* We have to distinguish between end_reached and !end_reached
- since at end of file, the line is not ended by a '\n'.
- The code inside 'if' basically does a '--page' to move one
- character backward so as to skip '\n' of the previous line */
- if (!end_reached) {
- /* Either beginning of buffer or beginning of file reached? */
- if (page == buf) {
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in "
- "back_lines().\n");
- exit (-1);
- }
- if (fpos > bytes_read) { /* Not beginning of file yet */
- /* We've reached beginning of buffer, but not beginning of
- file yet, so read previous part of file into buffer.
- Note that we only move backward for BUF_SIZE/2 bytes,
- but not BUF_SIZE bytes to avoid re-reading again in
- print_page() later */
- /* Really possible to move backward BUF_SIZE/2 bytes? */
- if (fpos < BUF_SIZE / 2 + bytes_read) {
- /* No, move less then */
- if (lseek (fd, 0, SEEK_SET) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in "
- "back_lines().\n");
- exit (-1);
- }
- page = buf + fpos - bytes_read;
- } else { /* Move backward BUF_SIZE/2 bytes */
- if (lseek (fd, -(BUF_SIZE / 2 + bytes_read), SEEK_CUR)
- == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer "
- "in back_lines().\n");
- exit (-1);
- }
- page = buf + BUF_SIZE / 2;
- }
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr, "\nError reading file in back_lines().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0';
- } else { /* Beginning of file reached */
- begin_reached = 1;
- return;
- }
- }
- if (*(--page) != '\n') { /* '--page' here */
- /* Something's wrong... */
- endwin ();
- fprintf (stderr, "\nInternal error in back_lines().\n");
- exit (-1);
- }
- }
- /* Go back 'n' lines */
- for (i = 0; i < n; i++)
- do {
- if (page == buf) {
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError moving file pointer in back_lines().\n");
- exit (-1);
- }
- if (fpos > bytes_read) {
- /* Really possible to move backward BUF_SIZE/2 bytes? */
- if (fpos < BUF_SIZE / 2 + bytes_read) {
- /* No, move less then */
- if (lseek (fd, 0, SEEK_SET) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer "
- "in back_lines().\n");
- exit (-1);
- }
- page = buf + fpos - bytes_read;
- } else { /* Move backward BUF_SIZE/2 bytes */
- if (lseek (fd, -(BUF_SIZE / 2 + bytes_read),
- SEEK_CUR) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer"
- " in back_lines().\n");
- exit (-1);
- }
- page = buf + BUF_SIZE / 2;
- }
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr, "\nError reading file in "
- "back_lines().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0';
- } else { /* Beginning of file reached */
- begin_reached = 1;
- return;
- }
- }
- } while (*(--page) != '\n');
- page++;
-}
-
-/*
- * Print a new page of text. Called by dialog_textbox().
- */
-static void
-print_page (WINDOW * win, int height, int width)
-{
- int i, passed_end = 0;
-
- page_length = 0;
- for (i = 0; i < height; i++) {
- print_line (win, i, width);
- if (!passed_end)
- page_length++;
- if (end_reached && !passed_end)
- passed_end = 1;
- }
- wnoutrefresh (win);
-}
-
-/*
- * Print a new line of text. Called by dialog_textbox() and print_page().
- */
-static void
-print_line (WINDOW * win, int row, int width)
-{
- int y, x;
- char *line;
-
- line = get_line ();
- line += MIN (strlen (line), hscroll); /* Scroll horizontally */
- wmove (win, row, 0); /* move cursor to correct line */
- waddch (win, ' ');
- waddnstr (win, line, MIN (strlen (line), width - 2));
-
- getyx (win, y, x);
- /* Clear 'residue' of previous line */
-#if OLD_NCURSES
- {
- int i;
- for (i = 0; i < width - x; i++)
- waddch (win, ' ');
- }
-#else
- wclrtoeol(win);
-#endif
-}
-
-/*
- * Return current line of text. Called by dialog_textbox() and print_line().
- * 'page' should point to start of current line before calling, and will be
- * updated to point to start of next line.
- */
-static char *
-get_line (void)
-{
- int i = 0, fpos;
- static char line[MAX_LEN + 1];
-
- end_reached = 0;
- while (*page != '\n') {
- if (*page == '\0') {
- /* Either end of file or end of buffer reached */
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in "
- "get_line().\n");
- exit (-1);
- }
- if (fpos < file_size) { /* Not end of file yet */
- /* We've reached end of buffer, but not end of file yet,
- so read next part of file into buffer */
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr, "\nError reading file in get_line().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0';
- page = buf;
- } else {
- if (!end_reached)
- end_reached = 1;
- break;
- }
- } else if (i < MAX_LEN)
- line[i++] = *(page++);
- else {
- /* Truncate lines longer than MAX_LEN characters */
- if (i == MAX_LEN)
- line[i++] = '\0';
- page++;
- }
- }
- if (i <= MAX_LEN)
- line[i] = '\0';
- if (!end_reached)
- page++; /* move pass '\n' */
-
- return line;
-}
-
-/*
- * Print current position
- */
-static void
-print_position (WINDOW * win, int height, int width)
-{
- int fpos, percent;
-
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in print_position().\n");
- exit (-1);
- }
- wattrset (win, position_indicator_attr);
- wbkgdset (win, position_indicator_attr & A_COLOR);
- percent = !file_size ?
- 100 : ((fpos - bytes_read + page - buf) * 100) / file_size;
- wmove (win, height - 3, width - 9);
- wprintw (win, "(%3d%%)", percent);
-}
diff --git a/config/util.c b/config/util.c
index 0a2f82757..b6b2a46af 100644
--- a/config/util.c
+++ b/config/util.c
@@ -1,375 +1,133 @@
/*
- * util.c
+ * Copyright (C) 2002-2005 Roman Zippel <zippel@linux-m68k.org>
+ * Copyright (C) 2002-2005 Sam Ravnborg <sam@ravnborg.org>
*
- * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-
-/* use colors by default? */
-bool use_colors = 1;
-
-char *backtitle = NULL;
-
-const char *dialog_result;
-
-/*
- * Attribute values, default is for mono display
- */
-chtype attributes[] =
-{
- A_NORMAL, /* screen_attr */
- A_NORMAL, /* shadow_attr */
- A_NORMAL, /* dialog_attr */
- A_BOLD, /* title_attr */
- A_NORMAL, /* border_attr */
- A_REVERSE, /* button_active_attr */
- A_DIM, /* button_inactive_attr */
- A_REVERSE, /* button_key_active_attr */
- A_BOLD, /* button_key_inactive_attr */
- A_REVERSE, /* button_label_active_attr */
- A_NORMAL, /* button_label_inactive_attr */
- A_NORMAL, /* inputbox_attr */
- A_NORMAL, /* inputbox_border_attr */
- A_NORMAL, /* searchbox_attr */
- A_BOLD, /* searchbox_title_attr */
- A_NORMAL, /* searchbox_border_attr */
- A_BOLD, /* position_indicator_attr */
- A_NORMAL, /* menubox_attr */
- A_NORMAL, /* menubox_border_attr */
- A_NORMAL, /* item_attr */
- A_REVERSE, /* item_selected_attr */
- A_BOLD, /* tag_attr */
- A_REVERSE, /* tag_selected_attr */
- A_BOLD, /* tag_key_attr */
- A_REVERSE, /* tag_key_selected_attr */
- A_BOLD, /* check_attr */
- A_REVERSE, /* check_selected_attr */
- A_BOLD, /* uarrow_attr */
- A_BOLD /* darrow_attr */
-};
-
-
-#include "colors.h"
-
-/*
- * Table of color values
- */
-int color_table[][3] =
-{
- {SCREEN_FG, SCREEN_BG, SCREEN_HL},
- {SHADOW_FG, SHADOW_BG, SHADOW_HL},
- {DIALOG_FG, DIALOG_BG, DIALOG_HL},
- {TITLE_FG, TITLE_BG, TITLE_HL},
- {BORDER_FG, BORDER_BG, BORDER_HL},
- {BUTTON_ACTIVE_FG, BUTTON_ACTIVE_BG, BUTTON_ACTIVE_HL},
- {BUTTON_INACTIVE_FG, BUTTON_INACTIVE_BG, BUTTON_INACTIVE_HL},
- {BUTTON_KEY_ACTIVE_FG, BUTTON_KEY_ACTIVE_BG, BUTTON_KEY_ACTIVE_HL},
- {BUTTON_KEY_INACTIVE_FG, BUTTON_KEY_INACTIVE_BG, BUTTON_KEY_INACTIVE_HL},
- {BUTTON_LABEL_ACTIVE_FG, BUTTON_LABEL_ACTIVE_BG, BUTTON_LABEL_ACTIVE_HL},
- {BUTTON_LABEL_INACTIVE_FG, BUTTON_LABEL_INACTIVE_BG,
- BUTTON_LABEL_INACTIVE_HL},
- {INPUTBOX_FG, INPUTBOX_BG, INPUTBOX_HL},
- {INPUTBOX_BORDER_FG, INPUTBOX_BORDER_BG, INPUTBOX_BORDER_HL},
- {SEARCHBOX_FG, SEARCHBOX_BG, SEARCHBOX_HL},
- {SEARCHBOX_TITLE_FG, SEARCHBOX_TITLE_BG, SEARCHBOX_TITLE_HL},
- {SEARCHBOX_BORDER_FG, SEARCHBOX_BORDER_BG, SEARCHBOX_BORDER_HL},
- {POSITION_INDICATOR_FG, POSITION_INDICATOR_BG, POSITION_INDICATOR_HL},
- {MENUBOX_FG, MENUBOX_BG, MENUBOX_HL},
- {MENUBOX_BORDER_FG, MENUBOX_BORDER_BG, MENUBOX_BORDER_HL},
- {ITEM_FG, ITEM_BG, ITEM_HL},
- {ITEM_SELECTED_FG, ITEM_SELECTED_BG, ITEM_SELECTED_HL},
- {TAG_FG, TAG_BG, TAG_HL},
- {TAG_SELECTED_FG, TAG_SELECTED_BG, TAG_SELECTED_HL},
- {TAG_KEY_FG, TAG_KEY_BG, TAG_KEY_HL},
- {TAG_KEY_SELECTED_FG, TAG_KEY_SELECTED_BG, TAG_KEY_SELECTED_HL},
- {CHECK_FG, CHECK_BG, CHECK_HL},
- {CHECK_SELECTED_FG, CHECK_SELECTED_BG, CHECK_SELECTED_HL},
- {UARROW_FG, UARROW_BG, UARROW_HL},
- {DARROW_FG, DARROW_BG, DARROW_HL},
-}; /* color_table */
-
-/*
- * Set window to attribute 'attr'
+ * Released under the terms of the GNU GPL v2.0.
*/
-void
-attr_clear (WINDOW * win, int height, int width, chtype attr)
-{
- int i, j;
-
- wattrset (win, attr);
- for (i = 0; i < height; i++) {
- wmove (win, i, 0);
- for (j = 0; j < width; j++)
- waddch (win, ' ');
- }
- touchwin (win);
-}
-void dialog_clear (void)
-{
- attr_clear (stdscr, LINES, COLS, screen_attr);
- /* Display background title if it exists ... - SLH */
- if (backtitle != NULL) {
- int i;
-
- wattrset (stdscr, screen_attr);
- mvwaddstr (stdscr, 0, 1, (char *)backtitle);
- wmove (stdscr, 1, 1);
- for (i = 1; i < COLS - 1; i++)
- waddch (stdscr, ACS_HLINE);
- }
- wnoutrefresh (stdscr);
-}
+#include <string.h>
+#include "lkc.h"
-/*
- * Do some initialization for dialog
- */
-void
-init_dialog (void)
+/* file already present in list? If not add it */
+struct file *file_lookup(const char *name)
{
- initscr (); /* Init curses */
- keypad (stdscr, TRUE);
- cbreak ();
- noecho ();
-
-
- if (use_colors) /* Set up colors */
- color_setup ();
+ struct file *file;
+ for (file = file_list; file; file = file->next) {
+ if (!strcmp(name, file->name))
+ return file;
+ }
- dialog_clear ();
+ file = malloc(sizeof(*file));
+ memset(file, 0, sizeof(*file));
+ file->name = strdup(name);
+ file->next = file_list;
+ file_list = file;
+ return file;
}
-/*
- * Setup for color display
- */
-void
-color_setup (void)
+/* write a dependency file as used by kbuild to track dependencies */
+int file_write_dep(const char *name)
{
- int i;
-
- if (has_colors ()) { /* Terminal supports color? */
- start_color ();
-
- /* Initialize color pairs */
- for (i = 0; i < ATTRIBUTE_COUNT; i++)
- init_pair (i + 1, color_table[i][0], color_table[i][1]);
-
- /* Setup color attributes */
- for (i = 0; i < ATTRIBUTE_COUNT; i++)
- attributes[i] = C_ATTR (color_table[i][2], i + 1);
- }
-}
+ struct symbol *sym, *env_sym;
+ struct expr *e;
+ struct file *file;
+ FILE *out;
+
+ if (!name)
+ name = ".kconfig.d";
+ out = fopen("..config.tmp", "w");
+ if (!out)
+ return 1;
+ fprintf(out, "deps_config := \\\n");
+ for (file = file_list; file; file = file->next) {
+ if (file->next)
+ fprintf(out, "\t%s \\\n", file->name);
+ else
+ fprintf(out, "\t%s\n", file->name);
+ }
+ fprintf(out, "\n%s: \\\n"
+ "\t$(deps_config)\n\n", conf_get_autoconfig_name());
+
+ expr_list_for_each_sym(sym_env_list, e, sym) {
+ struct property *prop;
+ const char *value;
+
+ prop = sym_get_env_prop(sym);
+ env_sym = prop_get_symbol(prop);
+ if (!env_sym)
+ continue;
+ value = getenv(env_sym->name);
+ if (!value)
+ value = "";
+ fprintf(out, "ifneq \"$(%s)\" \"%s\"\n", env_sym->name, value);
+ fprintf(out, "%s: FORCE\n", conf_get_autoconfig_name());
+ fprintf(out, "endif\n");
+ }
-/*
- * End using dialog functions.
- */
-void
-end_dialog (void)
-{
- endwin ();
+ fprintf(out, "\n$(deps_config): ;\n");
+ fclose(out);
+ rename("..config.tmp", name);
+ return 0;
}
-/*
- * Print a string of text in a window, automatically wrap around to the
- * next line if the string is too long to fit on one line. Newline
- * characters '\n' are replaced by spaces. We start on a new line
- * if there is no room for at least 4 nonblanks following a double-space.
- */
-void
-print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x)
+/* Allocate initial growable sting */
+struct gstr str_new(void)
{
- int newl, cur_x, cur_y;
- int i, prompt_len, room, wlen;
- char tempstr[MAX_LEN + 1], *word, *sp, *sp2;
-
- strcpy (tempstr, prompt);
-
- prompt_len = strlen(tempstr);
-
- /*
- * Remove newlines
- */
- for(i=0; i<prompt_len; i++) {
- if(tempstr[i] == '\n') tempstr[i] = ' ';
- }
-
- if (prompt_len <= width - x * 2) { /* If prompt is short */
- wmove (win, y, (width - prompt_len) / 2);
- waddstr (win, tempstr);
- } else {
- cur_x = x;
- cur_y = y;
- newl = 1;
- word = tempstr;
- while (word && *word) {
- sp = index(word, ' ');
- if (sp)
- *sp++ = 0;
-
- /* Wrap to next line if either the word does not fit,
- or it is the first word of a new sentence, and it is
- short, and the next word does not fit. */
- room = width - cur_x;
- wlen = strlen(word);
- if (wlen > room ||
- (newl && wlen < 4 && sp && wlen+1+strlen(sp) > room
- && (!(sp2 = index(sp, ' ')) || wlen+1+(sp2-sp) > room))) {
- cur_y++;
- cur_x = x;
- }
- wmove (win, cur_y, cur_x);
- waddstr (win, word);
- getyx (win, cur_y, cur_x);
- cur_x++;
- if (sp && *sp == ' ') {
- cur_x++; /* double space */
- while (*++sp == ' ');
- newl = 1;
- } else
- newl = 0;
- word = sp;
- }
- }
+ struct gstr gs;
+ gs.s = malloc(sizeof(char) * 64);
+ gs.len = 64;
+ strcpy(gs.s, "\0");
+ return gs;
}
-/*
- * Print a button
- */
-void
-print_button (WINDOW * win, const char *label, int y, int x, int selected)
+/* Allocate and assign growable string */
+struct gstr str_assign(const char *s)
{
- int i, temp;
-
- wmove (win, y, x);
- wattrset (win, selected ? button_active_attr : button_inactive_attr);
- waddstr (win, "<");
- temp = strspn (label, " ");
- label += temp;
- wattrset (win, selected ? button_label_active_attr
- : button_label_inactive_attr);
- for (i = 0; i < temp; i++)
- waddch (win, ' ');
- wattrset (win, selected ? button_key_active_attr
- : button_key_inactive_attr);
- waddch (win, label[0]);
- wattrset (win, selected ? button_label_active_attr
- : button_label_inactive_attr);
- waddstr (win, (char *)label + 1);
- wattrset (win, selected ? button_active_attr : button_inactive_attr);
- waddstr (win, ">");
- wmove (win, y, x + temp + 1);
+ struct gstr gs;
+ gs.s = strdup(s);
+ gs.len = strlen(s) + 1;
+ return gs;
}
-/*
- * Draw a rectangular box with line drawing characters
- */
-void
-draw_box (WINDOW * win, int y, int x, int height, int width,
- chtype box, chtype border)
+/* Free storage for growable string */
+void str_free(struct gstr *gs)
{
- int i, j;
-
- wattrset (win, 0);
- for (i = 0; i < height; i++) {
- wmove (win, y + i, x);
- for (j = 0; j < width; j++)
- if (!i && !j)
- waddch (win, border | ACS_ULCORNER);
- else if (i == height - 1 && !j)
- waddch (win, border | ACS_LLCORNER);
- else if (!i && j == width - 1)
- waddch (win, box | ACS_URCORNER);
- else if (i == height - 1 && j == width - 1)
- waddch (win, box | ACS_LRCORNER);
- else if (!i)
- waddch (win, border | ACS_HLINE);
- else if (i == height - 1)
- waddch (win, box | ACS_HLINE);
- else if (!j)
- waddch (win, border | ACS_VLINE);
- else if (j == width - 1)
- waddch (win, box | ACS_VLINE);
- else
- waddch (win, box | ' ');
- }
+ if (gs->s)
+ free(gs->s);
+ gs->s = NULL;
+ gs->len = 0;
}
-/*
- * Draw shadows along the right and bottom edge to give a more 3D look
- * to the boxes
- */
-void
-draw_shadow (WINDOW * win, int y, int x, int height, int width)
+/* Append to growable string */
+void str_append(struct gstr *gs, const char *s)
{
- int i;
-
- if (has_colors ()) { /* Whether terminal supports color? */
- wattrset (win, shadow_attr);
- wmove (win, y + height, x + 2);
- for (i = 0; i < width; i++)
- waddch (win, winch (win) & A_CHARTEXT);
- for (i = y + 1; i < y + height + 1; i++) {
- wmove (win, i, x + width);
- waddch (win, winch (win) & A_CHARTEXT);
- waddch (win, winch (win) & A_CHARTEXT);
+ size_t l;
+ if (s) {
+ l = strlen(gs->s) + strlen(s) + 1;
+ if (l > gs->len) {
+ gs->s = realloc(gs->s, l);
+ gs->len = l;
+ }
+ strcat(gs->s, s);
}
- wnoutrefresh (win);
- }
}
-/*
- * Return the position of the first alphabetic character in a string.
- */
-int
-first_alpha(const char *string, const char *exempt)
+/* Append printf formatted string to growable string */
+void str_printf(struct gstr *gs, const char *fmt, ...)
{
- int i, in_paren=0, c;
-
- for (i = 0; i < strlen(string); i++) {
- c = tolower(string[i]);
-
- if (strchr("<[(", c)) ++in_paren;
- if (strchr(">])", c) && in_paren > 0) --in_paren;
-
- if ((! in_paren) && isalpha(c) &&
- strchr(exempt, c) == 0)
- return i;
- }
-
- return 0;
+ va_list ap;
+ char s[10000]; /* big enough... */
+ va_start(ap, fmt);
+ vsnprintf(s, sizeof(s), fmt, ap);
+ str_append(gs, s);
+ va_end(ap);
}
-/*
- * Get the first selected item in the dialog_list_item list.
- */
-struct dialog_list_item *
-first_sel_item(int item_no, struct dialog_list_item ** items)
+/* Retrieve value of growable string */
+const char *str_get(struct gstr *gs)
{
- int i;
-
- for (i = 0; i < item_no; i++) {
- if (items[i]->selected)
- return items[i];
- }
-
- return NULL;
+ return gs->s;
}
+
diff --git a/config/yesno.c b/config/yesno.c
deleted file mode 100644
index 11fcc25f5..000000000
--- a/config/yesno.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * yesno.c -- implements the yes/no box
- *
- * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-/*
- * Display termination buttons
- */
-static void
-print_buttons(WINDOW *dialog, int height, int width, int selected)
-{
- int x = width / 2 - 10;
- int y = height - 2;
-
- print_button (dialog, " Yes ", y, x, selected == 0);
- print_button (dialog, " No ", y, x + 13, selected == 1);
-
- wmove(dialog, y, x+1 + 13*selected );
- wrefresh (dialog);
-}
-
-/*
- * Display a dialog box with two buttons - Yes and No
- */
-int
-dialog_yesno (const char *title, const char *prompt, int height, int width)
-{
- int i, x, y, key = 0, button = 0;
- WINDOW *dialog;
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height-3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- waddch (dialog, ACS_RTEE);
-
- if (title != NULL && strlen(title) >= width-2 ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
-
- wattrset (dialog, dialog_attr);
- print_autowrap (dialog, prompt, width - 2, 1, 3);
-
- print_buttons(dialog, height, width, 0);
-
- while (key != ESC) {
- key = wgetch (dialog);
- switch (key) {
- case 'Y':
- case 'y':
- delwin (dialog);
- return 0;
- case 'N':
- case 'n':
- delwin (dialog);
- return 1;
-
- case TAB:
- case KEY_LEFT:
- case KEY_RIGHT:
- button = ((key == KEY_LEFT ? --button : ++button) < 0)
- ? 1 : (button > 1 ? 0 : button);
-
- print_buttons(dialog, height, width, button);
- wrefresh (dialog);
- break;
- case ' ':
- case '\n':
- delwin (dialog);
- return button;
- case ESC:
- break;
- }
- }
-
- delwin (dialog);
- return -1; /* ESC pressed */
-}
diff --git a/config/zconf.gperf b/config/zconf.gperf
new file mode 100644
index 000000000..25ef5d01c
--- /dev/null
+++ b/config/zconf.gperf
@@ -0,0 +1,44 @@
+%language=ANSI-C
+%define hash-function-name kconf_id_hash
+%define lookup-function-name kconf_id_lookup
+%define string-pool-name kconf_id_strings
+%compare-strncmp
+%enum
+%pic
+%struct-type
+
+struct kconf_id;
+
+%%
+mainmenu, T_MAINMENU, TF_COMMAND
+menu, T_MENU, TF_COMMAND
+endmenu, T_ENDMENU, TF_COMMAND
+source, T_SOURCE, TF_COMMAND
+choice, T_CHOICE, TF_COMMAND
+endchoice, T_ENDCHOICE, TF_COMMAND
+comment, T_COMMENT, TF_COMMAND
+config, T_CONFIG, TF_COMMAND
+menuconfig, T_MENUCONFIG, TF_COMMAND
+help, T_HELP, TF_COMMAND
+if, T_IF, TF_COMMAND|TF_PARAM
+endif, T_ENDIF, TF_COMMAND
+depends, T_DEPENDS, TF_COMMAND
+optional, T_OPTIONAL, TF_COMMAND
+default, T_DEFAULT, TF_COMMAND, S_UNKNOWN
+prompt, T_PROMPT, TF_COMMAND
+tristate, T_TYPE, TF_COMMAND, S_TRISTATE
+def_tristate, T_DEFAULT, TF_COMMAND, S_TRISTATE
+bool, T_TYPE, TF_COMMAND, S_BOOLEAN
+boolean, T_TYPE, TF_COMMAND, S_BOOLEAN
+def_bool, T_DEFAULT, TF_COMMAND, S_BOOLEAN
+int, T_TYPE, TF_COMMAND, S_INT
+hex, T_TYPE, TF_COMMAND, S_HEX
+string, T_TYPE, TF_COMMAND, S_STRING
+select, T_SELECT, TF_COMMAND
+range, T_RANGE, TF_COMMAND
+option, T_OPTION, TF_COMMAND
+on, T_ON, TF_PARAM
+modules, T_OPT_MODULES, TF_OPTION
+defconfig_list, T_OPT_DEFCONFIG_LIST,TF_OPTION
+env, T_OPT_ENV, TF_OPTION
+%%
diff --git a/config/zconf.hash.c_shipped b/config/zconf.hash.c_shipped
new file mode 100644
index 000000000..5c73d5133
--- /dev/null
+++ b/config/zconf.hash.c_shipped
@@ -0,0 +1,237 @@
+/* ANSI-C code produced by gperf version 3.0.3 */
+/* Command-line: gperf */
+/* Computed positions: -k'1,3' */
+
+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
+/* The character set is not based on ISO-646. */
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
+#endif
+
+struct kconf_id;
+/* maximum key range = 47, duplicates = 0 */
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static unsigned int
+kconf_id_hash (register const char *str, register unsigned int len)
+{
+ static unsigned char asso_values[] =
+ {
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 11, 5,
+ 0, 0, 5, 49, 5, 20, 49, 49, 5, 20,
+ 5, 0, 30, 49, 0, 15, 0, 10, 0, 49,
+ 25, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49
+ };
+ register int hval = len;
+
+ switch (hval)
+ {
+ default:
+ hval += asso_values[(unsigned char)str[2]];
+ /*FALLTHROUGH*/
+ case 2:
+ case 1:
+ hval += asso_values[(unsigned char)str[0]];
+ break;
+ }
+ return hval;
+}
+
+struct kconf_id_strings_t
+ {
+ char kconf_id_strings_str2[sizeof("on")];
+ char kconf_id_strings_str3[sizeof("env")];
+ char kconf_id_strings_str5[sizeof("endif")];
+ char kconf_id_strings_str6[sizeof("option")];
+ char kconf_id_strings_str7[sizeof("endmenu")];
+ char kconf_id_strings_str8[sizeof("optional")];
+ char kconf_id_strings_str9[sizeof("endchoice")];
+ char kconf_id_strings_str10[sizeof("range")];
+ char kconf_id_strings_str11[sizeof("choice")];
+ char kconf_id_strings_str12[sizeof("default")];
+ char kconf_id_strings_str13[sizeof("def_bool")];
+ char kconf_id_strings_str14[sizeof("help")];
+ char kconf_id_strings_str15[sizeof("bool")];
+ char kconf_id_strings_str16[sizeof("config")];
+ char kconf_id_strings_str17[sizeof("def_tristate")];
+ char kconf_id_strings_str18[sizeof("boolean")];
+ char kconf_id_strings_str19[sizeof("defconfig_list")];
+ char kconf_id_strings_str21[sizeof("string")];
+ char kconf_id_strings_str22[sizeof("if")];
+ char kconf_id_strings_str23[sizeof("int")];
+ char kconf_id_strings_str26[sizeof("select")];
+ char kconf_id_strings_str27[sizeof("modules")];
+ char kconf_id_strings_str28[sizeof("tristate")];
+ char kconf_id_strings_str29[sizeof("menu")];
+ char kconf_id_strings_str31[sizeof("source")];
+ char kconf_id_strings_str32[sizeof("comment")];
+ char kconf_id_strings_str33[sizeof("hex")];
+ char kconf_id_strings_str35[sizeof("menuconfig")];
+ char kconf_id_strings_str36[sizeof("prompt")];
+ char kconf_id_strings_str37[sizeof("depends")];
+ char kconf_id_strings_str48[sizeof("mainmenu")];
+ };
+static struct kconf_id_strings_t kconf_id_strings_contents =
+ {
+ "on",
+ "env",
+ "endif",
+ "option",
+ "endmenu",
+ "optional",
+ "endchoice",
+ "range",
+ "choice",
+ "default",
+ "def_bool",
+ "help",
+ "bool",
+ "config",
+ "def_tristate",
+ "boolean",
+ "defconfig_list",
+ "string",
+ "if",
+ "int",
+ "select",
+ "modules",
+ "tristate",
+ "menu",
+ "source",
+ "comment",
+ "hex",
+ "menuconfig",
+ "prompt",
+ "depends",
+ "mainmenu"
+ };
+#define kconf_id_strings ((const char *) &kconf_id_strings_contents)
+#ifdef __GNUC__
+__inline
+#ifdef __GNUC_STDC_INLINE__
+__attribute__ ((__gnu_inline__))
+#endif
+#endif
+struct kconf_id *
+kconf_id_lookup (register const char *str, register unsigned int len)
+{
+ enum
+ {
+ TOTAL_KEYWORDS = 31,
+ MIN_WORD_LENGTH = 2,
+ MAX_WORD_LENGTH = 14,
+ MIN_HASH_VALUE = 2,
+ MAX_HASH_VALUE = 48
+ };
+
+ static struct kconf_id wordlist[] =
+ {
+ {-1}, {-1},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_ON, TF_PARAM},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3, T_OPT_ENV, TF_OPTION},
+ {-1},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5, T_ENDIF, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str6, T_OPTION, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_ENDMENU, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8, T_OPTIONAL, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9, T_ENDCHOICE, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str10, T_RANGE, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str11, T_CHOICE, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_DEFAULT, TF_COMMAND, S_UNKNOWN},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13, T_DEFAULT, TF_COMMAND, S_BOOLEAN},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_HELP, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str15, T_TYPE, TF_COMMAND, S_BOOLEAN},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str16, T_CONFIG, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_DEFAULT, TF_COMMAND, S_TRISTATE},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18, T_TYPE, TF_COMMAND, S_BOOLEAN},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str19, T_OPT_DEFCONFIG_LIST,TF_OPTION},
+ {-1},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21, T_TYPE, TF_COMMAND, S_STRING},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22, T_IF, TF_COMMAND|TF_PARAM},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23, T_TYPE, TF_COMMAND, S_INT},
+ {-1}, {-1},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str26, T_SELECT, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27, T_OPT_MODULES, TF_OPTION},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str28, T_TYPE, TF_COMMAND, S_TRISTATE},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str29, T_MENU, TF_COMMAND},
+ {-1},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31, T_SOURCE, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32, T_COMMENT, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33, T_TYPE, TF_COMMAND, S_HEX},
+ {-1},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str35, T_MENUCONFIG, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36, T_PROMPT, TF_COMMAND},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str37, T_DEPENDS, TF_COMMAND},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str48, T_MAINMENU, TF_COMMAND}
+ };
+
+ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+ {
+ register int key = kconf_id_hash (str, len);
+
+ if (key <= MAX_HASH_VALUE && key >= 0)
+ {
+ register int o = wordlist[key].name;
+ if (o >= 0)
+ {
+ register const char *s = o + kconf_id_strings;
+
+ if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
+ return &wordlist[key];
+ }
+ }
+ }
+ return 0;
+}
+
diff --git a/config/zconf.l b/config/zconf.l
index 3a4947a88..21ff69c9a 100644
--- a/config/zconf.l
+++ b/config/zconf.l
@@ -1,5 +1,6 @@
%option backup nostdinit noyywrap never-interactive full ecs
%option 8bit backup nodefault perf-report perf-report
+%option noinput
%x COMMAND HELP STRING PARAM
%{
/*
@@ -12,15 +13,18 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <glob.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
#define START_STRSIZE 16
-char *text;
-static char *text_ptr;
+static struct {
+ struct file *file;
+ int lineno;
+} current_pos;
+
+static char *text;
static int text_size, text_asize;
struct buffer {
@@ -33,29 +37,28 @@ struct buffer *current_buf;
static int last_ts, first_ts;
static void zconf_endhelp(void);
-static struct buffer *zconf_endfile(void);
+static void zconf_endfile(void);
void new_string(void)
{
text = malloc(START_STRSIZE);
text_asize = START_STRSIZE;
- text_ptr = text;
text_size = 0;
- *text_ptr = 0;
+ *text = 0;
}
void append_string(const char *str, int size)
{
int new_size = text_size + size + 1;
if (new_size > text_asize) {
+ new_size += START_STRSIZE - 1;
+ new_size &= -START_STRSIZE;
text = realloc(text, new_size);
text_asize = new_size;
- text_ptr = text + text_size;
}
- memcpy(text_ptr, str, size);
- text_ptr += size;
+ memcpy(text + text_size, str, size);
text_size += size;
- *text_ptr = 0;
+ text[text_size] = 0;
}
void alloc_string(const char *str, int size)
@@ -73,10 +76,13 @@ n [A-Za-z0-9_]
int str = 0;
int ts, i;
-[ \t]*#.*\n current_file->lineno++;
+[ \t]*#.*\n |
+[ \t]*\n {
+ current_file->lineno++;
+ return T_EOL;
+}
[ \t]*#.*
-[ \t]*\n current_file->lineno++; return T_EOL;
[ \t]+ {
BEGIN(COMMAND);
@@ -89,42 +95,25 @@ n [A-Za-z0-9_]
<COMMAND>{
- "mainmenu" BEGIN(PARAM); return T_MAINMENU;
- "menu" BEGIN(PARAM); return T_MENU;
- "endmenu" BEGIN(PARAM); return T_ENDMENU;
- "source" BEGIN(PARAM); return T_SOURCE;
- "choice" BEGIN(PARAM); return T_CHOICE;
- "endchoice" BEGIN(PARAM); return T_ENDCHOICE;
- "comment" BEGIN(PARAM); return T_COMMENT;
- "config" BEGIN(PARAM); return T_CONFIG;
- "menuconfig" BEGIN(PARAM); return T_MENUCONFIG;
- "help" BEGIN(PARAM); return T_HELP;
- "if" BEGIN(PARAM); return T_IF;
- "endif" BEGIN(PARAM); return T_ENDIF;
- "depends" BEGIN(PARAM); return T_DEPENDS;
- "requires" BEGIN(PARAM); return T_REQUIRES;
- "optional" BEGIN(PARAM); return T_OPTIONAL;
- "default" BEGIN(PARAM); return T_DEFAULT;
- "prompt" BEGIN(PARAM); return T_PROMPT;
- "tristate" BEGIN(PARAM); return T_TRISTATE;
- "def_tristate" BEGIN(PARAM); return T_DEF_TRISTATE;
- "bool" BEGIN(PARAM); return T_BOOLEAN;
- "boolean" BEGIN(PARAM); return T_BOOLEAN;
- "def_bool" BEGIN(PARAM); return T_DEF_BOOLEAN;
- "def_boolean" BEGIN(PARAM); return T_DEF_BOOLEAN;
- "int" BEGIN(PARAM); return T_INT;
- "hex" BEGIN(PARAM); return T_HEX;
- "string" BEGIN(PARAM); return T_STRING;
- "select" BEGIN(PARAM); return T_SELECT;
- "enable" BEGIN(PARAM); return T_SELECT;
- "range" BEGIN(PARAM); return T_RANGE;
{n}+ {
+ struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
+ BEGIN(PARAM);
+ current_pos.file = current_file;
+ current_pos.lineno = current_file->lineno;
+ if (id && id->flags & TF_COMMAND) {
+ zconflval.id = id;
+ return id->token;
+ }
alloc_string(yytext, yyleng);
zconflval.string = text;
return T_WORD;
}
.
- \n current_file->lineno++; BEGIN(INITIAL);
+ \n {
+ BEGIN(INITIAL);
+ current_file->lineno++;
+ return T_EOL;
+ }
}
<PARAM>{
@@ -135,8 +124,6 @@ n [A-Za-z0-9_]
"!" return T_NOT;
"=" return T_EQUAL;
"!=" return T_UNEQUAL;
- "if" return T_IF;
- "on" return T_ON;
\"|\' {
str = yytext[0];
new_string();
@@ -145,6 +132,11 @@ n [A-Za-z0-9_]
\n BEGIN(INITIAL); current_file->lineno++; return T_EOL;
--- /* ignore */
({n}|[-/.])+ {
+ struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
+ if (id && id->flags & TF_PARAM) {
+ zconflval.id = id;
+ return id->token;
+ }
alloc_string(yytext, yyleng);
zconflval.string = text;
return T_WORD;
@@ -226,6 +218,11 @@ n [A-Za-z0-9_]
append_string("\n", 1);
}
[^ \t\n].* {
+ while (yyleng) {
+ if ((yytext[yyleng-1] != ' ') && (yytext[yyleng-1] != '\t'))
+ break;
+ yyleng--;
+ }
append_string(yytext, yyleng);
if (!first_ts)
first_ts = last_ts;
@@ -237,9 +234,9 @@ n [A-Za-z0-9_]
}
<<EOF>> {
- if (current_buf) {
+ if (current_file) {
zconf_endfile();
- return T_EOF;
+ return T_EOL;
}
fclose(yyin);
yyterminate();
@@ -274,7 +271,7 @@ FILE *zconf_fopen(const char *name)
FILE *f;
f = fopen(name, "r");
- if (!f && name[0] != '/') {
+ if (!f && name != NULL && name[0] != '/') {
env = getenv(SRCTREE);
if (env) {
sprintf(fullname, "%s/%s", env, name);
@@ -302,55 +299,38 @@ void zconf_initscan(const char *name)
void zconf_nextfile(const char *name)
{
- size_t i;
- int retval;
- glob_t files;
- char *filename;
- struct file *file;
- struct buffer *buf;
-
- retval = glob(name, GLOB_ERR | GLOB_MARK, NULL, &files);
- if (retval == GLOB_NOSPACE || retval == GLOB_ABORTED || retval == GLOB_NOMATCH) {
- printf("%s:%d: glob failed: %s \"%s\"\n", zconf_curname(), zconf_lineno(),
- retval == GLOB_NOSPACE ? "failed to allocate memory" :
- retval == GLOB_ABORTED ? "read error" : "no match",
- name);
+ struct file *file = file_lookup(name);
+ struct buffer *buf = malloc(sizeof(*buf));
+ memset(buf, 0, sizeof(*buf));
+
+ current_buf->state = YY_CURRENT_BUFFER;
+ yyin = zconf_fopen(name);
+ if (!yyin) {
+ printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
exit(1);
}
+ yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
+ buf->parent = current_buf;
+ current_buf = buf;
- for (i = files.gl_pathc-1; i != (size_t)-1; --i) {
- filename = files.gl_pathv[i];
-
- file = file_lookup(filename);
- buf = malloc(sizeof(*buf));
- memset(buf, 0, sizeof(*buf));
- current_buf->state = YY_CURRENT_BUFFER;
- zconfin = zconf_fopen(filename);
- if (!zconfin) {
- printf("%s:%d: can't open file \"%s\"\n",
- zconf_curname(), zconf_lineno(), filename);
- exit(1);
- }
- zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
- buf->parent = current_buf;
- current_buf = buf;
-
- if (file->flags & FILE_BUSY) {
- printf("recursive scan (%s)?\n", filename);
- exit(1);
- }
- if (file->flags & FILE_SCANNED) {
- printf("file %s already scanned?\n", filename);
- exit(1);
- }
- file->flags |= FILE_BUSY;
- file->lineno = 1;
- file->parent = current_file;
- current_file = file;
+ if (file->flags & FILE_BUSY) {
+ printf("%s:%d: do not source '%s' from itself\n",
+ zconf_curname(), zconf_lineno(), name);
+ exit(1);
}
+ if (file->flags & FILE_SCANNED) {
+ printf("%s:%d: file '%s' is already sourced from '%s'\n",
+ zconf_curname(), zconf_lineno(), name,
+ file->parent->name);
+ exit(1);
+ }
+ file->flags |= FILE_BUSY;
+ file->lineno = 1;
+ file->parent = current_file;
+ current_file = file;
}
-static struct buffer *zconf_endfile(void)
+static void zconf_endfile(void)
{
struct buffer *parent;
@@ -366,22 +346,14 @@ static struct buffer *zconf_endfile(void)
}
free(current_buf);
current_buf = parent;
-
- return parent;
}
int zconf_lineno(void)
{
- if (current_buf)
- return current_file->lineno - 1;
- else
- return 0;
+ return current_pos.lineno;
}
char *zconf_curname(void)
{
- if (current_buf)
- return current_file->name;
- else
- return "<none>";
+ return current_pos.file ? current_pos.file->name : "<none>";
}
diff --git a/config/zconf.output b/config/zconf.output
deleted file mode 100644
index a4d86e975..000000000
--- a/config/zconf.output
+++ /dev/null
@@ -1,2133 +0,0 @@
-State 52 conflicts: 1 shift/reduce
-State 53 conflicts: 1 shift/reduce
-State 54 conflicts: 1 shift/reduce
-State 55 conflicts: 10 shift/reduce
-State 56 conflicts: 12 shift/reduce
-State 57 conflicts: 1 shift/reduce
-State 58 conflicts: 13 shift/reduce
-State 59 conflicts: 1 shift/reduce
-
-
-Grammar
-
- 0 $accept: input $end
-
- 1 input: /* empty */
- 2 | input block
-
- 3 block: common_block
- 4 | choice_stmt
- 5 | menu_stmt
- 6 | T_MAINMENU prompt nl_or_eof
- 7 | T_ENDMENU
- 8 | T_ENDIF
- 9 | T_ENDCHOICE
- 10 | error nl_or_eof
-
- 11 common_block: if_stmt
- 12 | comment_stmt
- 13 | config_stmt
- 14 | menuconfig_stmt
- 15 | source_stmt
- 16 | nl_or_eof
-
- 17 config_entry_start: T_CONFIG T_WORD T_EOL
-
- 18 config_stmt: config_entry_start config_option_list
-
- 19 menuconfig_entry_start: T_MENUCONFIG T_WORD T_EOL
-
- 20 menuconfig_stmt: menuconfig_entry_start config_option_list
-
- 21 config_option_list: /* empty */
- 22 | config_option_list config_option
- 23 | config_option_list depends
- 24 | config_option_list help
- 25 | config_option_list T_EOL
-
- 26 config_option: T_TRISTATE prompt_stmt_opt T_EOL
- 27 | T_DEF_TRISTATE expr if_expr T_EOL
- 28 | T_BOOLEAN prompt_stmt_opt T_EOL
- 29 | T_DEF_BOOLEAN expr if_expr T_EOL
- 30 | T_INT prompt_stmt_opt T_EOL
- 31 | T_HEX prompt_stmt_opt T_EOL
- 32 | T_STRING prompt_stmt_opt T_EOL
- 33 | T_PROMPT prompt if_expr T_EOL
- 34 | T_DEFAULT expr if_expr T_EOL
- 35 | T_SELECT T_WORD if_expr T_EOL
- 36 | T_SELECT T_NOT T_WORD if_expr T_EOL
- 37 | T_RANGE symbol symbol if_expr T_EOL
-
- 38 choice: T_CHOICE T_EOL
-
- 39 choice_entry: choice choice_option_list
-
- 40 choice_end: end
-
- 41 choice_stmt: choice_entry choice_block choice_end
- 42 | choice_entry choice_block
-
- 43 choice_option_list: /* empty */
- 44 | choice_option_list choice_option
- 45 | choice_option_list depends
- 46 | choice_option_list help
- 47 | choice_option_list T_EOL
-
- 48 choice_option: T_PROMPT prompt if_expr T_EOL
- 49 | T_TRISTATE prompt_stmt_opt T_EOL
- 50 | T_BOOLEAN prompt_stmt_opt T_EOL
- 51 | T_OPTIONAL T_EOL
- 52 | T_DEFAULT T_WORD if_expr T_EOL
-
- 53 choice_block: /* empty */
- 54 | choice_block common_block
-
- 55 if: T_IF expr T_EOL
-
- 56 if_end: end
-
- 57 if_stmt: if if_block if_end
- 58 | if if_block
-
- 59 if_block: /* empty */
- 60 | if_block common_block
- 61 | if_block menu_stmt
- 62 | if_block choice_stmt
-
- 63 menu: T_MENU prompt T_EOL
-
- 64 menu_entry: menu depends_list
-
- 65 menu_end: end
-
- 66 menu_stmt: menu_entry menu_block menu_end
- 67 | menu_entry menu_block
-
- 68 menu_block: /* empty */
- 69 | menu_block common_block
- 70 | menu_block menu_stmt
- 71 | menu_block choice_stmt
- 72 | menu_block error T_EOL
-
- 73 source: T_SOURCE prompt T_EOL
-
- 74 source_stmt: source
-
- 75 comment: T_COMMENT prompt T_EOL
-
- 76 comment_stmt: comment depends_list
-
- 77 help_start: T_HELP T_EOL
-
- 78 help: help_start T_HELPTEXT
-
- 79 depends_list: /* empty */
- 80 | depends_list depends
- 81 | depends_list T_EOL
-
- 82 depends: T_DEPENDS T_ON expr T_EOL
- 83 | T_DEPENDS expr T_EOL
- 84 | T_REQUIRES expr T_EOL
-
- 85 prompt_stmt_opt: /* empty */
- 86 | prompt if_expr
-
- 87 prompt: T_WORD
- 88 | T_WORD_QUOTE
-
- 89 end: T_ENDMENU nl_or_eof
- 90 | T_ENDCHOICE nl_or_eof
- 91 | T_ENDIF nl_or_eof
-
- 92 nl_or_eof: T_EOL
- 93 | T_EOF
-
- 94 if_expr: /* empty */
- 95 | T_IF expr
-
- 96 expr: symbol
- 97 | symbol T_EQUAL symbol
- 98 | symbol T_UNEQUAL symbol
- 99 | T_OPEN_PAREN expr T_CLOSE_PAREN
- 100 | T_NOT expr
- 101 | expr T_OR expr
- 102 | expr T_AND expr
-
- 103 symbol: T_WORD
- 104 | T_WORD_QUOTE
-
-
-Terminals, with rules where they appear
-
-$end (0) 0
-error (256) 10 72
-T_MAINMENU (258) 6
-T_MENU (259) 63
-T_ENDMENU (260) 7 89
-T_SOURCE (261) 73
-T_CHOICE (262) 38
-T_ENDCHOICE (263) 9 90
-T_COMMENT (264) 75
-T_CONFIG (265) 17
-T_MENUCONFIG (266) 19
-T_HELP (267) 77
-T_HELPTEXT (268) 78
-T_IF (269) 55 95
-T_ENDIF (270) 8 91
-T_DEPENDS (271) 82 83
-T_REQUIRES (272) 84
-T_OPTIONAL (273) 51
-T_PROMPT (274) 33 48
-T_DEFAULT (275) 34 52
-T_TRISTATE (276) 26 49
-T_DEF_TRISTATE (277) 27
-T_BOOLEAN (278) 28 50
-T_DEF_BOOLEAN (279) 29
-T_STRING (280) 32
-T_INT (281) 30
-T_HEX (282) 31
-T_WORD (283) 17 19 35 36 52 87 103
-T_WORD_QUOTE (284) 88 104
-T_UNEQUAL (285) 98
-T_EOF (286) 93
-T_EOL (287) 17 19 25 26 27 28 29 30 31 32 33 34 35 36 37 38 47 48 49
- 50 51 52 55 63 72 73 75 77 81 82 83 84 92
-T_CLOSE_PAREN (288) 99
-T_OPEN_PAREN (289) 99
-T_ON (290) 82
-T_SELECT (291) 35 36
-T_RANGE (292) 37
-T_OR (293) 101
-T_AND (294) 102
-T_EQUAL (295) 97
-T_NOT (296) 36 100
-
-
-Nonterminals, with rules where they appear
-
-$accept (42)
- on left: 0
-input (43)
- on left: 1 2, on right: 0 2
-block (44)
- on left: 3 4 5 6 7 8 9 10, on right: 2
-common_block (45)
- on left: 11 12 13 14 15 16, on right: 3 54 60 69
-config_entry_start (46)
- on left: 17, on right: 18
-config_stmt (47)
- on left: 18, on right: 13
-menuconfig_entry_start (48)
- on left: 19, on right: 20
-menuconfig_stmt (49)
- on left: 20, on right: 14
-config_option_list (50)
- on left: 21 22 23 24 25, on right: 18 20 22 23 24 25
-config_option (51)
- on left: 26 27 28 29 30 31 32 33 34 35 36 37, on right: 22
-choice (52)
- on left: 38, on right: 39
-choice_entry (53)
- on left: 39, on right: 41 42
-choice_end (54)
- on left: 40, on right: 41
-choice_stmt (55)
- on left: 41 42, on right: 4 62 71
-choice_option_list (56)
- on left: 43 44 45 46 47, on right: 39 44 45 46 47
-choice_option (57)
- on left: 48 49 50 51 52, on right: 44
-choice_block (58)
- on left: 53 54, on right: 41 42 54
-if (59)
- on left: 55, on right: 57 58
-if_end (60)
- on left: 56, on right: 57
-if_stmt (61)
- on left: 57 58, on right: 11
-if_block (62)
- on left: 59 60 61 62, on right: 57 58 60 61 62
-menu (63)
- on left: 63, on right: 64
-menu_entry (64)
- on left: 64, on right: 66 67
-menu_end (65)
- on left: 65, on right: 66
-menu_stmt (66)
- on left: 66 67, on right: 5 61 70
-menu_block (67)
- on left: 68 69 70 71 72, on right: 66 67 69 70 71 72
-source (68)
- on left: 73, on right: 74
-source_stmt (69)
- on left: 74, on right: 15
-comment (70)
- on left: 75, on right: 76
-comment_stmt (71)
- on left: 76, on right: 12
-help_start (72)
- on left: 77, on right: 78
-help (73)
- on left: 78, on right: 24 46
-depends_list (74)
- on left: 79 80 81, on right: 64 76 80 81
-depends (75)
- on left: 82 83 84, on right: 23 45 80
-prompt_stmt_opt (76)
- on left: 85 86, on right: 26 28 30 31 32 49 50
-prompt (77)
- on left: 87 88, on right: 6 33 48 63 73 75 86
-end (78)
- on left: 89 90 91, on right: 40 56 65
-nl_or_eof (79)
- on left: 92 93, on right: 6 10 16 89 90 91
-if_expr (80)
- on left: 94 95, on right: 27 29 33 34 35 36 37 48 52 86
-expr (81)
- on left: 96 97 98 99 100 101 102, on right: 27 29 34 55 82 83 84
- 95 99 100 101 102
-symbol (82)
- on left: 103 104, on right: 37 96 97 98
-
-
-state 0
-
- 0 $accept: . input $end
-
- $default reduce using rule 1 (input)
-
- input go to state 1
-
-
-state 1
-
- 0 $accept: input . $end
- 2 input: input . block
-
- $end shift, and go to state 2
- error shift, and go to state 3
- T_MAINMENU shift, and go to state 4
- T_MENU shift, and go to state 5
- T_ENDMENU shift, and go to state 6
- T_SOURCE shift, and go to state 7
- T_CHOICE shift, and go to state 8
- T_ENDCHOICE shift, and go to state 9
- T_COMMENT shift, and go to state 10
- T_CONFIG shift, and go to state 11
- T_MENUCONFIG shift, and go to state 12
- T_IF shift, and go to state 13
- T_ENDIF shift, and go to state 14
- T_EOF shift, and go to state 15
- T_EOL shift, and go to state 16
-
- block go to state 17
- common_block go to state 18
- config_entry_start go to state 19
- config_stmt go to state 20
- menuconfig_entry_start go to state 21
- menuconfig_stmt go to state 22
- choice go to state 23
- choice_entry go to state 24
- choice_stmt go to state 25
- if go to state 26
- if_stmt go to state 27
- menu go to state 28
- menu_entry go to state 29
- menu_stmt go to state 30
- source go to state 31
- source_stmt go to state 32
- comment go to state 33
- comment_stmt go to state 34
- nl_or_eof go to state 35
-
-
-state 2
-
- 0 $accept: input $end .
-
- $default accept
-
-
-state 3
-
- 10 block: error . nl_or_eof
-
- T_EOF shift, and go to state 15
- T_EOL shift, and go to state 16
-
- nl_or_eof go to state 36
-
-
-state 4
-
- 6 block: T_MAINMENU . prompt nl_or_eof
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- prompt go to state 39
-
-
-state 5
-
- 63 menu: T_MENU . prompt T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- prompt go to state 40
-
-
-state 6
-
- 7 block: T_ENDMENU .
-
- $default reduce using rule 7 (block)
-
-
-state 7
-
- 73 source: T_SOURCE . prompt T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- prompt go to state 41
-
-
-state 8
-
- 38 choice: T_CHOICE . T_EOL
-
- T_EOL shift, and go to state 42
-
-
-state 9
-
- 9 block: T_ENDCHOICE .
-
- $default reduce using rule 9 (block)
-
-
-state 10
-
- 75 comment: T_COMMENT . prompt T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- prompt go to state 43
-
-
-state 11
-
- 17 config_entry_start: T_CONFIG . T_WORD T_EOL
-
- T_WORD shift, and go to state 44
-
-
-state 12
-
- 19 menuconfig_entry_start: T_MENUCONFIG . T_WORD T_EOL
-
- T_WORD shift, and go to state 45
-
-
-state 13
-
- 55 if: T_IF . expr T_EOL
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_NOT shift, and go to state 49
-
- expr go to state 50
- symbol go to state 51
-
-
-state 14
-
- 8 block: T_ENDIF .
-
- $default reduce using rule 8 (block)
-
-
-state 15
-
- 93 nl_or_eof: T_EOF .
-
- $default reduce using rule 93 (nl_or_eof)
-
-
-state 16
-
- 92 nl_or_eof: T_EOL .
-
- $default reduce using rule 92 (nl_or_eof)
-
-
-state 17
-
- 2 input: input block .
-
- $default reduce using rule 2 (input)
-
-
-state 18
-
- 3 block: common_block .
-
- $default reduce using rule 3 (block)
-
-
-state 19
-
- 18 config_stmt: config_entry_start . config_option_list
-
- $default reduce using rule 21 (config_option_list)
-
- config_option_list go to state 52
-
-
-state 20
-
- 13 common_block: config_stmt .
-
- $default reduce using rule 13 (common_block)
-
-
-state 21
-
- 20 menuconfig_stmt: menuconfig_entry_start . config_option_list
-
- $default reduce using rule 21 (config_option_list)
-
- config_option_list go to state 53
-
-
-state 22
-
- 14 common_block: menuconfig_stmt .
-
- $default reduce using rule 14 (common_block)
-
-
-state 23
-
- 39 choice_entry: choice . choice_option_list
-
- $default reduce using rule 43 (choice_option_list)
-
- choice_option_list go to state 54
-
-
-state 24
-
- 41 choice_stmt: choice_entry . choice_block choice_end
- 42 | choice_entry . choice_block
-
- $default reduce using rule 53 (choice_block)
-
- choice_block go to state 55
-
-
-state 25
-
- 4 block: choice_stmt .
-
- $default reduce using rule 4 (block)
-
-
-state 26
-
- 57 if_stmt: if . if_block if_end
- 58 | if . if_block
-
- $default reduce using rule 59 (if_block)
-
- if_block go to state 56
-
-
-state 27
-
- 11 common_block: if_stmt .
-
- $default reduce using rule 11 (common_block)
-
-
-state 28
-
- 64 menu_entry: menu . depends_list
-
- $default reduce using rule 79 (depends_list)
-
- depends_list go to state 57
-
-
-state 29
-
- 66 menu_stmt: menu_entry . menu_block menu_end
- 67 | menu_entry . menu_block
-
- $default reduce using rule 68 (menu_block)
-
- menu_block go to state 58
-
-
-state 30
-
- 5 block: menu_stmt .
-
- $default reduce using rule 5 (block)
-
-
-state 31
-
- 74 source_stmt: source .
-
- $default reduce using rule 74 (source_stmt)
-
-
-state 32
-
- 15 common_block: source_stmt .
-
- $default reduce using rule 15 (common_block)
-
-
-state 33
-
- 76 comment_stmt: comment . depends_list
-
- $default reduce using rule 79 (depends_list)
-
- depends_list go to state 59
-
-
-state 34
-
- 12 common_block: comment_stmt .
-
- $default reduce using rule 12 (common_block)
-
-
-state 35
-
- 16 common_block: nl_or_eof .
-
- $default reduce using rule 16 (common_block)
-
-
-state 36
-
- 10 block: error nl_or_eof .
-
- $default reduce using rule 10 (block)
-
-
-state 37
-
- 87 prompt: T_WORD .
-
- $default reduce using rule 87 (prompt)
-
-
-state 38
-
- 88 prompt: T_WORD_QUOTE .
-
- $default reduce using rule 88 (prompt)
-
-
-state 39
-
- 6 block: T_MAINMENU prompt . nl_or_eof
-
- T_EOF shift, and go to state 15
- T_EOL shift, and go to state 16
-
- nl_or_eof go to state 60
-
-
-state 40
-
- 63 menu: T_MENU prompt . T_EOL
-
- T_EOL shift, and go to state 61
-
-
-state 41
-
- 73 source: T_SOURCE prompt . T_EOL
-
- T_EOL shift, and go to state 62
-
-
-state 42
-
- 38 choice: T_CHOICE T_EOL .
-
- $default reduce using rule 38 (choice)
-
-
-state 43
-
- 75 comment: T_COMMENT prompt . T_EOL
-
- T_EOL shift, and go to state 63
-
-
-state 44
-
- 17 config_entry_start: T_CONFIG T_WORD . T_EOL
-
- T_EOL shift, and go to state 64
-
-
-state 45
-
- 19 menuconfig_entry_start: T_MENUCONFIG T_WORD . T_EOL
-
- T_EOL shift, and go to state 65
-
-
-state 46
-
- 103 symbol: T_WORD .
-
- $default reduce using rule 103 (symbol)
-
-
-state 47
-
- 104 symbol: T_WORD_QUOTE .
-
- $default reduce using rule 104 (symbol)
-
-
-state 48
-
- 99 expr: T_OPEN_PAREN . expr T_CLOSE_PAREN
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_NOT shift, and go to state 49
-
- expr go to state 66
- symbol go to state 51
-
-
-state 49
-
- 100 expr: T_NOT . expr
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_NOT shift, and go to state 49
-
- expr go to state 67
- symbol go to state 51
-
-
-state 50
-
- 55 if: T_IF expr . T_EOL
- 101 expr: expr . T_OR expr
- 102 | expr . T_AND expr
-
- T_EOL shift, and go to state 68
- T_OR shift, and go to state 69
- T_AND shift, and go to state 70
-
-
-state 51
-
- 96 expr: symbol .
- 97 | symbol . T_EQUAL symbol
- 98 | symbol . T_UNEQUAL symbol
-
- T_UNEQUAL shift, and go to state 71
- T_EQUAL shift, and go to state 72
-
- $default reduce using rule 96 (expr)
-
-
-state 52
-
- 18 config_stmt: config_entry_start config_option_list .
- 22 config_option_list: config_option_list . config_option
- 23 | config_option_list . depends
- 24 | config_option_list . help
- 25 | config_option_list . T_EOL
-
- T_HELP shift, and go to state 73
- T_DEPENDS shift, and go to state 74
- T_REQUIRES shift, and go to state 75
- T_PROMPT shift, and go to state 76
- T_DEFAULT shift, and go to state 77
- T_TRISTATE shift, and go to state 78
- T_DEF_TRISTATE shift, and go to state 79
- T_BOOLEAN shift, and go to state 80
- T_DEF_BOOLEAN shift, and go to state 81
- T_STRING shift, and go to state 82
- T_INT shift, and go to state 83
- T_HEX shift, and go to state 84
- T_EOL shift, and go to state 85
- T_SELECT shift, and go to state 86
- T_RANGE shift, and go to state 87
-
- T_EOL [reduce using rule 18 (config_stmt)]
- $default reduce using rule 18 (config_stmt)
-
- config_option go to state 88
- help_start go to state 89
- help go to state 90
- depends go to state 91
-
-
-state 53
-
- 20 menuconfig_stmt: menuconfig_entry_start config_option_list .
- 22 config_option_list: config_option_list . config_option
- 23 | config_option_list . depends
- 24 | config_option_list . help
- 25 | config_option_list . T_EOL
-
- T_HELP shift, and go to state 73
- T_DEPENDS shift, and go to state 74
- T_REQUIRES shift, and go to state 75
- T_PROMPT shift, and go to state 76
- T_DEFAULT shift, and go to state 77
- T_TRISTATE shift, and go to state 78
- T_DEF_TRISTATE shift, and go to state 79
- T_BOOLEAN shift, and go to state 80
- T_DEF_BOOLEAN shift, and go to state 81
- T_STRING shift, and go to state 82
- T_INT shift, and go to state 83
- T_HEX shift, and go to state 84
- T_EOL shift, and go to state 85
- T_SELECT shift, and go to state 86
- T_RANGE shift, and go to state 87
-
- T_EOL [reduce using rule 20 (menuconfig_stmt)]
- $default reduce using rule 20 (menuconfig_stmt)
-
- config_option go to state 88
- help_start go to state 89
- help go to state 90
- depends go to state 91
-
-
-state 54
-
- 39 choice_entry: choice choice_option_list .
- 44 choice_option_list: choice_option_list . choice_option
- 45 | choice_option_list . depends
- 46 | choice_option_list . help
- 47 | choice_option_list . T_EOL
-
- T_HELP shift, and go to state 73
- T_DEPENDS shift, and go to state 74
- T_REQUIRES shift, and go to state 75
- T_OPTIONAL shift, and go to state 92
- T_PROMPT shift, and go to state 93
- T_DEFAULT shift, and go to state 94
- T_TRISTATE shift, and go to state 95
- T_BOOLEAN shift, and go to state 96
- T_EOL shift, and go to state 97
-
- T_EOL [reduce using rule 39 (choice_entry)]
- $default reduce using rule 39 (choice_entry)
-
- choice_option go to state 98
- help_start go to state 89
- help go to state 99
- depends go to state 100
-
-
-state 55
-
- 41 choice_stmt: choice_entry choice_block . choice_end
- 42 | choice_entry choice_block .
- 54 choice_block: choice_block . common_block
-
- T_ENDMENU shift, and go to state 101
- T_SOURCE shift, and go to state 7
- T_ENDCHOICE shift, and go to state 102
- T_COMMENT shift, and go to state 10
- T_CONFIG shift, and go to state 11
- T_MENUCONFIG shift, and go to state 12
- T_IF shift, and go to state 13
- T_ENDIF shift, and go to state 103
- T_EOF shift, and go to state 15
- T_EOL shift, and go to state 16
-
- T_ENDMENU [reduce using rule 42 (choice_stmt)]
- T_SOURCE [reduce using rule 42 (choice_stmt)]
- T_ENDCHOICE [reduce using rule 42 (choice_stmt)]
- T_COMMENT [reduce using rule 42 (choice_stmt)]
- T_CONFIG [reduce using rule 42 (choice_stmt)]
- T_MENUCONFIG [reduce using rule 42 (choice_stmt)]
- T_IF [reduce using rule 42 (choice_stmt)]
- T_ENDIF [reduce using rule 42 (choice_stmt)]
- T_EOF [reduce using rule 42 (choice_stmt)]
- T_EOL [reduce using rule 42 (choice_stmt)]
- $default reduce using rule 42 (choice_stmt)
-
- common_block go to state 104
- config_entry_start go to state 19
- config_stmt go to state 20
- menuconfig_entry_start go to state 21
- menuconfig_stmt go to state 22
- choice_end go to state 105
- if go to state 26
- if_stmt go to state 27
- source go to state 31
- source_stmt go to state 32
- comment go to state 33
- comment_stmt go to state 34
- end go to state 106
- nl_or_eof go to state 35
-
-
-state 56
-
- 57 if_stmt: if if_block . if_end
- 58 | if if_block .
- 60 if_block: if_block . common_block
- 61 | if_block . menu_stmt
- 62 | if_block . choice_stmt
-
- T_MENU shift, and go to state 5
- T_ENDMENU shift, and go to state 101
- T_SOURCE shift, and go to state 7
- T_CHOICE shift, and go to state 8
- T_ENDCHOICE shift, and go to state 102
- T_COMMENT shift, and go to state 10
- T_CONFIG shift, and go to state 11
- T_MENUCONFIG shift, and go to state 12
- T_IF shift, and go to state 13
- T_ENDIF shift, and go to state 103
- T_EOF shift, and go to state 15
- T_EOL shift, and go to state 16
-
- T_MENU [reduce using rule 58 (if_stmt)]
- T_ENDMENU [reduce using rule 58 (if_stmt)]
- T_SOURCE [reduce using rule 58 (if_stmt)]
- T_CHOICE [reduce using rule 58 (if_stmt)]
- T_ENDCHOICE [reduce using rule 58 (if_stmt)]
- T_COMMENT [reduce using rule 58 (if_stmt)]
- T_CONFIG [reduce using rule 58 (if_stmt)]
- T_MENUCONFIG [reduce using rule 58 (if_stmt)]
- T_IF [reduce using rule 58 (if_stmt)]
- T_ENDIF [reduce using rule 58 (if_stmt)]
- T_EOF [reduce using rule 58 (if_stmt)]
- T_EOL [reduce using rule 58 (if_stmt)]
- $default reduce using rule 58 (if_stmt)
-
- common_block go to state 107
- config_entry_start go to state 19
- config_stmt go to state 20
- menuconfig_entry_start go to state 21
- menuconfig_stmt go to state 22
- choice go to state 23
- choice_entry go to state 24
- choice_stmt go to state 108
- if go to state 26
- if_end go to state 109
- if_stmt go to state 27
- menu go to state 28
- menu_entry go to state 29
- menu_stmt go to state 110
- source go to state 31
- source_stmt go to state 32
- comment go to state 33
- comment_stmt go to state 34
- end go to state 111
- nl_or_eof go to state 35
-
-
-state 57
-
- 64 menu_entry: menu depends_list .
- 80 depends_list: depends_list . depends
- 81 | depends_list . T_EOL
-
- T_DEPENDS shift, and go to state 74
- T_REQUIRES shift, and go to state 75
- T_EOL shift, and go to state 112
-
- T_EOL [reduce using rule 64 (menu_entry)]
- $default reduce using rule 64 (menu_entry)
-
- depends go to state 113
-
-
-state 58
-
- 66 menu_stmt: menu_entry menu_block . menu_end
- 67 | menu_entry menu_block .
- 69 menu_block: menu_block . common_block
- 70 | menu_block . menu_stmt
- 71 | menu_block . choice_stmt
- 72 | menu_block . error T_EOL
-
- error shift, and go to state 114
- T_MENU shift, and go to state 5
- T_ENDMENU shift, and go to state 101
- T_SOURCE shift, and go to state 7
- T_CHOICE shift, and go to state 8
- T_ENDCHOICE shift, and go to state 102
- T_COMMENT shift, and go to state 10
- T_CONFIG shift, and go to state 11
- T_MENUCONFIG shift, and go to state 12
- T_IF shift, and go to state 13
- T_ENDIF shift, and go to state 103
- T_EOF shift, and go to state 15
- T_EOL shift, and go to state 16
-
- $end reduce using rule 67 (menu_stmt)
- error [reduce using rule 67 (menu_stmt)]
- T_MAINMENU reduce using rule 67 (menu_stmt)
- T_MENU [reduce using rule 67 (menu_stmt)]
- T_ENDMENU [reduce using rule 67 (menu_stmt)]
- T_SOURCE [reduce using rule 67 (menu_stmt)]
- T_CHOICE [reduce using rule 67 (menu_stmt)]
- T_ENDCHOICE [reduce using rule 67 (menu_stmt)]
- T_COMMENT [reduce using rule 67 (menu_stmt)]
- T_CONFIG [reduce using rule 67 (menu_stmt)]
- T_MENUCONFIG [reduce using rule 67 (menu_stmt)]
- T_IF [reduce using rule 67 (menu_stmt)]
- T_ENDIF [reduce using rule 67 (menu_stmt)]
- T_EOF [reduce using rule 67 (menu_stmt)]
- T_EOL [reduce using rule 67 (menu_stmt)]
-
- common_block go to state 115
- config_entry_start go to state 19
- config_stmt go to state 20
- menuconfig_entry_start go to state 21
- menuconfig_stmt go to state 22
- choice go to state 23
- choice_entry go to state 24
- choice_stmt go to state 116
- if go to state 26
- if_stmt go to state 27
- menu go to state 28
- menu_entry go to state 29
- menu_end go to state 117
- menu_stmt go to state 118
- source go to state 31
- source_stmt go to state 32
- comment go to state 33
- comment_stmt go to state 34
- end go to state 119
- nl_or_eof go to state 35
-
-
-state 59
-
- 76 comment_stmt: comment depends_list .
- 80 depends_list: depends_list . depends
- 81 | depends_list . T_EOL
-
- T_DEPENDS shift, and go to state 74
- T_REQUIRES shift, and go to state 75
- T_EOL shift, and go to state 112
-
- T_EOL [reduce using rule 76 (comment_stmt)]
- $default reduce using rule 76 (comment_stmt)
-
- depends go to state 113
-
-
-state 60
-
- 6 block: T_MAINMENU prompt nl_or_eof .
-
- $default reduce using rule 6 (block)
-
-
-state 61
-
- 63 menu: T_MENU prompt T_EOL .
-
- $default reduce using rule 63 (menu)
-
-
-state 62
-
- 73 source: T_SOURCE prompt T_EOL .
-
- $default reduce using rule 73 (source)
-
-
-state 63
-
- 75 comment: T_COMMENT prompt T_EOL .
-
- $default reduce using rule 75 (comment)
-
-
-state 64
-
- 17 config_entry_start: T_CONFIG T_WORD T_EOL .
-
- $default reduce using rule 17 (config_entry_start)
-
-
-state 65
-
- 19 menuconfig_entry_start: T_MENUCONFIG T_WORD T_EOL .
-
- $default reduce using rule 19 (menuconfig_entry_start)
-
-
-state 66
-
- 99 expr: T_OPEN_PAREN expr . T_CLOSE_PAREN
- 101 | expr . T_OR expr
- 102 | expr . T_AND expr
-
- T_CLOSE_PAREN shift, and go to state 120
- T_OR shift, and go to state 69
- T_AND shift, and go to state 70
-
-
-state 67
-
- 100 expr: T_NOT expr .
- 101 | expr . T_OR expr
- 102 | expr . T_AND expr
-
- $default reduce using rule 100 (expr)
-
-
-state 68
-
- 55 if: T_IF expr T_EOL .
-
- $default reduce using rule 55 (if)
-
-
-state 69
-
- 101 expr: expr T_OR . expr
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_NOT shift, and go to state 49
-
- expr go to state 121
- symbol go to state 51
-
-
-state 70
-
- 102 expr: expr T_AND . expr
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_NOT shift, and go to state 49
-
- expr go to state 122
- symbol go to state 51
-
-
-state 71
-
- 98 expr: symbol T_UNEQUAL . symbol
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
-
- symbol go to state 123
-
-
-state 72
-
- 97 expr: symbol T_EQUAL . symbol
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
-
- symbol go to state 124
-
-
-state 73
-
- 77 help_start: T_HELP . T_EOL
-
- T_EOL shift, and go to state 125
-
-
-state 74
-
- 82 depends: T_DEPENDS . T_ON expr T_EOL
- 83 | T_DEPENDS . expr T_EOL
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_ON shift, and go to state 126
- T_NOT shift, and go to state 49
-
- expr go to state 127
- symbol go to state 51
-
-
-state 75
-
- 84 depends: T_REQUIRES . expr T_EOL
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_NOT shift, and go to state 49
-
- expr go to state 128
- symbol go to state 51
-
-
-state 76
-
- 33 config_option: T_PROMPT . prompt if_expr T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- prompt go to state 129
-
-
-state 77
-
- 34 config_option: T_DEFAULT . expr if_expr T_EOL
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_NOT shift, and go to state 49
-
- expr go to state 130
- symbol go to state 51
-
-
-state 78
-
- 26 config_option: T_TRISTATE . prompt_stmt_opt T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- $default reduce using rule 85 (prompt_stmt_opt)
-
- prompt_stmt_opt go to state 131
- prompt go to state 132
-
-
-state 79
-
- 27 config_option: T_DEF_TRISTATE . expr if_expr T_EOL
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_NOT shift, and go to state 49
-
- expr go to state 133
- symbol go to state 51
-
-
-state 80
-
- 28 config_option: T_BOOLEAN . prompt_stmt_opt T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- $default reduce using rule 85 (prompt_stmt_opt)
-
- prompt_stmt_opt go to state 134
- prompt go to state 132
-
-
-state 81
-
- 29 config_option: T_DEF_BOOLEAN . expr if_expr T_EOL
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_NOT shift, and go to state 49
-
- expr go to state 135
- symbol go to state 51
-
-
-state 82
-
- 32 config_option: T_STRING . prompt_stmt_opt T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- $default reduce using rule 85 (prompt_stmt_opt)
-
- prompt_stmt_opt go to state 136
- prompt go to state 132
-
-
-state 83
-
- 30 config_option: T_INT . prompt_stmt_opt T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- $default reduce using rule 85 (prompt_stmt_opt)
-
- prompt_stmt_opt go to state 137
- prompt go to state 132
-
-
-state 84
-
- 31 config_option: T_HEX . prompt_stmt_opt T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- $default reduce using rule 85 (prompt_stmt_opt)
-
- prompt_stmt_opt go to state 138
- prompt go to state 132
-
-
-state 85
-
- 25 config_option_list: config_option_list T_EOL .
-
- $default reduce using rule 25 (config_option_list)
-
-
-state 86
-
- 35 config_option: T_SELECT . T_WORD if_expr T_EOL
- 36 | T_SELECT . T_NOT T_WORD if_expr T_EOL
-
- T_WORD shift, and go to state 139
- T_NOT shift, and go to state 140
-
-
-state 87
-
- 37 config_option: T_RANGE . symbol symbol if_expr T_EOL
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
-
- symbol go to state 141
-
-
-state 88
-
- 22 config_option_list: config_option_list config_option .
-
- $default reduce using rule 22 (config_option_list)
-
-
-state 89
-
- 78 help: help_start . T_HELPTEXT
-
- T_HELPTEXT shift, and go to state 142
-
-
-state 90
-
- 24 config_option_list: config_option_list help .
-
- $default reduce using rule 24 (config_option_list)
-
-
-state 91
-
- 23 config_option_list: config_option_list depends .
-
- $default reduce using rule 23 (config_option_list)
-
-
-state 92
-
- 51 choice_option: T_OPTIONAL . T_EOL
-
- T_EOL shift, and go to state 143
-
-
-state 93
-
- 48 choice_option: T_PROMPT . prompt if_expr T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- prompt go to state 144
-
-
-state 94
-
- 52 choice_option: T_DEFAULT . T_WORD if_expr T_EOL
-
- T_WORD shift, and go to state 145
-
-
-state 95
-
- 49 choice_option: T_TRISTATE . prompt_stmt_opt T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- $default reduce using rule 85 (prompt_stmt_opt)
-
- prompt_stmt_opt go to state 146
- prompt go to state 132
-
-
-state 96
-
- 50 choice_option: T_BOOLEAN . prompt_stmt_opt T_EOL
-
- T_WORD shift, and go to state 37
- T_WORD_QUOTE shift, and go to state 38
-
- $default reduce using rule 85 (prompt_stmt_opt)
-
- prompt_stmt_opt go to state 147
- prompt go to state 132
-
-
-state 97
-
- 47 choice_option_list: choice_option_list T_EOL .
-
- $default reduce using rule 47 (choice_option_list)
-
-
-state 98
-
- 44 choice_option_list: choice_option_list choice_option .
-
- $default reduce using rule 44 (choice_option_list)
-
-
-state 99
-
- 46 choice_option_list: choice_option_list help .
-
- $default reduce using rule 46 (choice_option_list)
-
-
-state 100
-
- 45 choice_option_list: choice_option_list depends .
-
- $default reduce using rule 45 (choice_option_list)
-
-
-state 101
-
- 89 end: T_ENDMENU . nl_or_eof
-
- T_EOF shift, and go to state 15
- T_EOL shift, and go to state 16
-
- nl_or_eof go to state 148
-
-
-state 102
-
- 90 end: T_ENDCHOICE . nl_or_eof
-
- T_EOF shift, and go to state 15
- T_EOL shift, and go to state 16
-
- nl_or_eof go to state 149
-
-
-state 103
-
- 91 end: T_ENDIF . nl_or_eof
-
- T_EOF shift, and go to state 15
- T_EOL shift, and go to state 16
-
- nl_or_eof go to state 150
-
-
-state 104
-
- 54 choice_block: choice_block common_block .
-
- $default reduce using rule 54 (choice_block)
-
-
-state 105
-
- 41 choice_stmt: choice_entry choice_block choice_end .
-
- $default reduce using rule 41 (choice_stmt)
-
-
-state 106
-
- 40 choice_end: end .
-
- $default reduce using rule 40 (choice_end)
-
-
-state 107
-
- 60 if_block: if_block common_block .
-
- $default reduce using rule 60 (if_block)
-
-
-state 108
-
- 62 if_block: if_block choice_stmt .
-
- $default reduce using rule 62 (if_block)
-
-
-state 109
-
- 57 if_stmt: if if_block if_end .
-
- $default reduce using rule 57 (if_stmt)
-
-
-state 110
-
- 61 if_block: if_block menu_stmt .
-
- $default reduce using rule 61 (if_block)
-
-
-state 111
-
- 56 if_end: end .
-
- $default reduce using rule 56 (if_end)
-
-
-state 112
-
- 81 depends_list: depends_list T_EOL .
-
- $default reduce using rule 81 (depends_list)
-
-
-state 113
-
- 80 depends_list: depends_list depends .
-
- $default reduce using rule 80 (depends_list)
-
-
-state 114
-
- 72 menu_block: menu_block error . T_EOL
-
- T_EOL shift, and go to state 151
-
-
-state 115
-
- 69 menu_block: menu_block common_block .
-
- $default reduce using rule 69 (menu_block)
-
-
-state 116
-
- 71 menu_block: menu_block choice_stmt .
-
- $default reduce using rule 71 (menu_block)
-
-
-state 117
-
- 66 menu_stmt: menu_entry menu_block menu_end .
-
- $default reduce using rule 66 (menu_stmt)
-
-
-state 118
-
- 70 menu_block: menu_block menu_stmt .
-
- $default reduce using rule 70 (menu_block)
-
-
-state 119
-
- 65 menu_end: end .
-
- $default reduce using rule 65 (menu_end)
-
-
-state 120
-
- 99 expr: T_OPEN_PAREN expr T_CLOSE_PAREN .
-
- $default reduce using rule 99 (expr)
-
-
-state 121
-
- 101 expr: expr . T_OR expr
- 101 | expr T_OR expr .
- 102 | expr . T_AND expr
-
- T_AND shift, and go to state 70
-
- $default reduce using rule 101 (expr)
-
-
-state 122
-
- 101 expr: expr . T_OR expr
- 102 | expr . T_AND expr
- 102 | expr T_AND expr .
-
- $default reduce using rule 102 (expr)
-
-
-state 123
-
- 98 expr: symbol T_UNEQUAL symbol .
-
- $default reduce using rule 98 (expr)
-
-
-state 124
-
- 97 expr: symbol T_EQUAL symbol .
-
- $default reduce using rule 97 (expr)
-
-
-state 125
-
- 77 help_start: T_HELP T_EOL .
-
- $default reduce using rule 77 (help_start)
-
-
-state 126
-
- 82 depends: T_DEPENDS T_ON . expr T_EOL
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_NOT shift, and go to state 49
-
- expr go to state 152
- symbol go to state 51
-
-
-state 127
-
- 83 depends: T_DEPENDS expr . T_EOL
- 101 expr: expr . T_OR expr
- 102 | expr . T_AND expr
-
- T_EOL shift, and go to state 153
- T_OR shift, and go to state 69
- T_AND shift, and go to state 70
-
-
-state 128
-
- 84 depends: T_REQUIRES expr . T_EOL
- 101 expr: expr . T_OR expr
- 102 | expr . T_AND expr
-
- T_EOL shift, and go to state 154
- T_OR shift, and go to state 69
- T_AND shift, and go to state 70
-
-
-state 129
-
- 33 config_option: T_PROMPT prompt . if_expr T_EOL
-
- T_IF shift, and go to state 155
-
- $default reduce using rule 94 (if_expr)
-
- if_expr go to state 156
-
-
-state 130
-
- 34 config_option: T_DEFAULT expr . if_expr T_EOL
- 101 expr: expr . T_OR expr
- 102 | expr . T_AND expr
-
- T_IF shift, and go to state 155
- T_OR shift, and go to state 69
- T_AND shift, and go to state 70
-
- $default reduce using rule 94 (if_expr)
-
- if_expr go to state 157
-
-
-state 131
-
- 26 config_option: T_TRISTATE prompt_stmt_opt . T_EOL
-
- T_EOL shift, and go to state 158
-
-
-state 132
-
- 86 prompt_stmt_opt: prompt . if_expr
-
- T_IF shift, and go to state 155
-
- $default reduce using rule 94 (if_expr)
-
- if_expr go to state 159
-
-
-state 133
-
- 27 config_option: T_DEF_TRISTATE expr . if_expr T_EOL
- 101 expr: expr . T_OR expr
- 102 | expr . T_AND expr
-
- T_IF shift, and go to state 155
- T_OR shift, and go to state 69
- T_AND shift, and go to state 70
-
- $default reduce using rule 94 (if_expr)
-
- if_expr go to state 160
-
-
-state 134
-
- 28 config_option: T_BOOLEAN prompt_stmt_opt . T_EOL
-
- T_EOL shift, and go to state 161
-
-
-state 135
-
- 29 config_option: T_DEF_BOOLEAN expr . if_expr T_EOL
- 101 expr: expr . T_OR expr
- 102 | expr . T_AND expr
-
- T_IF shift, and go to state 155
- T_OR shift, and go to state 69
- T_AND shift, and go to state 70
-
- $default reduce using rule 94 (if_expr)
-
- if_expr go to state 162
-
-
-state 136
-
- 32 config_option: T_STRING prompt_stmt_opt . T_EOL
-
- T_EOL shift, and go to state 163
-
-
-state 137
-
- 30 config_option: T_INT prompt_stmt_opt . T_EOL
-
- T_EOL shift, and go to state 164
-
-
-state 138
-
- 31 config_option: T_HEX prompt_stmt_opt . T_EOL
-
- T_EOL shift, and go to state 165
-
-
-state 139
-
- 35 config_option: T_SELECT T_WORD . if_expr T_EOL
-
- T_IF shift, and go to state 155
-
- $default reduce using rule 94 (if_expr)
-
- if_expr go to state 166
-
-
-state 140
-
- 36 config_option: T_SELECT T_NOT . T_WORD if_expr T_EOL
-
- T_WORD shift, and go to state 167
-
-
-state 141
-
- 37 config_option: T_RANGE symbol . symbol if_expr T_EOL
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
-
- symbol go to state 168
-
-
-state 142
-
- 78 help: help_start T_HELPTEXT .
-
- $default reduce using rule 78 (help)
-
-
-state 143
-
- 51 choice_option: T_OPTIONAL T_EOL .
-
- $default reduce using rule 51 (choice_option)
-
-
-state 144
-
- 48 choice_option: T_PROMPT prompt . if_expr T_EOL
-
- T_IF shift, and go to state 155
-
- $default reduce using rule 94 (if_expr)
-
- if_expr go to state 169
-
-
-state 145
-
- 52 choice_option: T_DEFAULT T_WORD . if_expr T_EOL
-
- T_IF shift, and go to state 155
-
- $default reduce using rule 94 (if_expr)
-
- if_expr go to state 170
-
-
-state 146
-
- 49 choice_option: T_TRISTATE prompt_stmt_opt . T_EOL
-
- T_EOL shift, and go to state 171
-
-
-state 147
-
- 50 choice_option: T_BOOLEAN prompt_stmt_opt . T_EOL
-
- T_EOL shift, and go to state 172
-
-
-state 148
-
- 89 end: T_ENDMENU nl_or_eof .
-
- $default reduce using rule 89 (end)
-
-
-state 149
-
- 90 end: T_ENDCHOICE nl_or_eof .
-
- $default reduce using rule 90 (end)
-
-
-state 150
-
- 91 end: T_ENDIF nl_or_eof .
-
- $default reduce using rule 91 (end)
-
-
-state 151
-
- 72 menu_block: menu_block error T_EOL .
-
- $default reduce using rule 72 (menu_block)
-
-
-state 152
-
- 82 depends: T_DEPENDS T_ON expr . T_EOL
- 101 expr: expr . T_OR expr
- 102 | expr . T_AND expr
-
- T_EOL shift, and go to state 173
- T_OR shift, and go to state 69
- T_AND shift, and go to state 70
-
-
-state 153
-
- 83 depends: T_DEPENDS expr T_EOL .
-
- $default reduce using rule 83 (depends)
-
-
-state 154
-
- 84 depends: T_REQUIRES expr T_EOL .
-
- $default reduce using rule 84 (depends)
-
-
-state 155
-
- 95 if_expr: T_IF . expr
-
- T_WORD shift, and go to state 46
- T_WORD_QUOTE shift, and go to state 47
- T_OPEN_PAREN shift, and go to state 48
- T_NOT shift, and go to state 49
-
- expr go to state 174
- symbol go to state 51
-
-
-state 156
-
- 33 config_option: T_PROMPT prompt if_expr . T_EOL
-
- T_EOL shift, and go to state 175
-
-
-state 157
-
- 34 config_option: T_DEFAULT expr if_expr . T_EOL
-
- T_EOL shift, and go to state 176
-
-
-state 158
-
- 26 config_option: T_TRISTATE prompt_stmt_opt T_EOL .
-
- $default reduce using rule 26 (config_option)
-
-
-state 159
-
- 86 prompt_stmt_opt: prompt if_expr .
-
- $default reduce using rule 86 (prompt_stmt_opt)
-
-
-state 160
-
- 27 config_option: T_DEF_TRISTATE expr if_expr . T_EOL
-
- T_EOL shift, and go to state 177
-
-
-state 161
-
- 28 config_option: T_BOOLEAN prompt_stmt_opt T_EOL .
-
- $default reduce using rule 28 (config_option)
-
-
-state 162
-
- 29 config_option: T_DEF_BOOLEAN expr if_expr . T_EOL
-
- T_EOL shift, and go to state 178
-
-
-state 163
-
- 32 config_option: T_STRING prompt_stmt_opt T_EOL .
-
- $default reduce using rule 32 (config_option)
-
-
-state 164
-
- 30 config_option: T_INT prompt_stmt_opt T_EOL .
-
- $default reduce using rule 30 (config_option)
-
-
-state 165
-
- 31 config_option: T_HEX prompt_stmt_opt T_EOL .
-
- $default reduce using rule 31 (config_option)
-
-
-state 166
-
- 35 config_option: T_SELECT T_WORD if_expr . T_EOL
-
- T_EOL shift, and go to state 179
-
-
-state 167
-
- 36 config_option: T_SELECT T_NOT T_WORD . if_expr T_EOL
-
- T_IF shift, and go to state 155
-
- $default reduce using rule 94 (if_expr)
-
- if_expr go to state 180
-
-
-state 168
-
- 37 config_option: T_RANGE symbol symbol . if_expr T_EOL
-
- T_IF shift, and go to state 155
-
- $default reduce using rule 94 (if_expr)
-
- if_expr go to state 181
-
-
-state 169
-
- 48 choice_option: T_PROMPT prompt if_expr . T_EOL
-
- T_EOL shift, and go to state 182
-
-
-state 170
-
- 52 choice_option: T_DEFAULT T_WORD if_expr . T_EOL
-
- T_EOL shift, and go to state 183
-
-
-state 171
-
- 49 choice_option: T_TRISTATE prompt_stmt_opt T_EOL .
-
- $default reduce using rule 49 (choice_option)
-
-
-state 172
-
- 50 choice_option: T_BOOLEAN prompt_stmt_opt T_EOL .
-
- $default reduce using rule 50 (choice_option)
-
-
-state 173
-
- 82 depends: T_DEPENDS T_ON expr T_EOL .
-
- $default reduce using rule 82 (depends)
-
-
-state 174
-
- 95 if_expr: T_IF expr .
- 101 expr: expr . T_OR expr
- 102 | expr . T_AND expr
-
- T_OR shift, and go to state 69
- T_AND shift, and go to state 70
-
- $default reduce using rule 95 (if_expr)
-
-
-state 175
-
- 33 config_option: T_PROMPT prompt if_expr T_EOL .
-
- $default reduce using rule 33 (config_option)
-
-
-state 176
-
- 34 config_option: T_DEFAULT expr if_expr T_EOL .
-
- $default reduce using rule 34 (config_option)
-
-
-state 177
-
- 27 config_option: T_DEF_TRISTATE expr if_expr T_EOL .
-
- $default reduce using rule 27 (config_option)
-
-
-state 178
-
- 29 config_option: T_DEF_BOOLEAN expr if_expr T_EOL .
-
- $default reduce using rule 29 (config_option)
-
-
-state 179
-
- 35 config_option: T_SELECT T_WORD if_expr T_EOL .
-
- $default reduce using rule 35 (config_option)
-
-
-state 180
-
- 36 config_option: T_SELECT T_NOT T_WORD if_expr . T_EOL
-
- T_EOL shift, and go to state 184
-
-
-state 181
-
- 37 config_option: T_RANGE symbol symbol if_expr . T_EOL
-
- T_EOL shift, and go to state 185
-
-
-state 182
-
- 48 choice_option: T_PROMPT prompt if_expr T_EOL .
-
- $default reduce using rule 48 (choice_option)
-
-
-state 183
-
- 52 choice_option: T_DEFAULT T_WORD if_expr T_EOL .
-
- $default reduce using rule 52 (choice_option)
-
-
-state 184
-
- 36 config_option: T_SELECT T_NOT T_WORD if_expr T_EOL .
-
- $default reduce using rule 36 (config_option)
-
-
-state 185
-
- 37 config_option: T_RANGE symbol symbol if_expr T_EOL .
-
- $default reduce using rule 37 (config_option)
diff --git a/config/zconf.tab.c_shipped b/config/zconf.tab.c_shipped
new file mode 100644
index 000000000..3bdcb3a97
--- /dev/null
+++ b/config/zconf.tab.c_shipped
@@ -0,0 +1,2490 @@
+/* A Bison parser, made by GNU Bison 2.3. */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names. */
+#define yyparse zconfparse
+#define yylex zconflex
+#define yyerror zconferror
+#define yylval zconflval
+#define yychar zconfchar
+#define yydebug zconfdebug
+#define yynerrs zconfnerrs
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ T_MAINMENU = 258,
+ T_MENU = 259,
+ T_ENDMENU = 260,
+ T_SOURCE = 261,
+ T_CHOICE = 262,
+ T_ENDCHOICE = 263,
+ T_COMMENT = 264,
+ T_CONFIG = 265,
+ T_MENUCONFIG = 266,
+ T_HELP = 267,
+ T_HELPTEXT = 268,
+ T_IF = 269,
+ T_ENDIF = 270,
+ T_DEPENDS = 271,
+ T_OPTIONAL = 272,
+ T_PROMPT = 273,
+ T_TYPE = 274,
+ T_DEFAULT = 275,
+ T_SELECT = 276,
+ T_RANGE = 277,
+ T_OPTION = 278,
+ T_ON = 279,
+ T_WORD = 280,
+ T_WORD_QUOTE = 281,
+ T_UNEQUAL = 282,
+ T_CLOSE_PAREN = 283,
+ T_OPEN_PAREN = 284,
+ T_EOL = 285,
+ T_OR = 286,
+ T_AND = 287,
+ T_EQUAL = 288,
+ T_NOT = 289
+ };
+#endif
+/* Tokens. */
+#define T_MAINMENU 258
+#define T_MENU 259
+#define T_ENDMENU 260
+#define T_SOURCE 261
+#define T_CHOICE 262
+#define T_ENDCHOICE 263
+#define T_COMMENT 264
+#define T_CONFIG 265
+#define T_MENUCONFIG 266
+#define T_HELP 267
+#define T_HELPTEXT 268
+#define T_IF 269
+#define T_ENDIF 270
+#define T_DEPENDS 271
+#define T_OPTIONAL 272
+#define T_PROMPT 273
+#define T_TYPE 274
+#define T_DEFAULT 275
+#define T_SELECT 276
+#define T_RANGE 277
+#define T_OPTION 278
+#define T_ON 279
+#define T_WORD 280
+#define T_WORD_QUOTE 281
+#define T_UNEQUAL 282
+#define T_CLOSE_PAREN 283
+#define T_OPEN_PAREN 284
+#define T_EOL 285
+#define T_OR 286
+#define T_AND 287
+#define T_EQUAL 288
+#define T_NOT 289
+
+
+
+
+/* Copy the first part of user declarations. */
+
+
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+#include "zconf.hash.c"
+
+#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
+
+#define PRINTD 0x0001
+#define DEBUG_PARSE 0x0002
+
+int cdebug = PRINTD;
+
+extern int zconflex(void);
+static void zconfprint(const char *err, ...);
+static void zconf_error(const char *err, ...);
+static void zconferror(const char *err);
+static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
+
+struct symbol *symbol_hash[257];
+
+static struct menu *current_menu, *current_entry;
+
+#define YYDEBUG 0
+#if YYDEBUG
+#define YYERROR_VERBOSE
+#endif
+
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+
+{
+ char *string;
+ struct file *file;
+ struct symbol *symbol;
+ struct expr *expr;
+ struct menu *menu;
+ struct kconf_id *id;
+}
+/* Line 187 of yacc.c. */
+
+ YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations. */
+
+
+/* Line 216 of yacc.c. */
+
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+ int i;
+#endif
+{
+ return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined _STDLIB_H \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss;
+ YYSTYPE yyvs;
+ };
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 3
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 259
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 35
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 46
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 110
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 180
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 289
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ 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
+};
+
+/* 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
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 104, 104, 106, 108, 109, 110, 111, 112, 113,
+ 114, 118, 122, 122, 122, 122, 122, 122, 122, 126,
+ 127, 128, 129, 130, 131, 135, 136, 142, 150, 156,
+ 164, 174, 176, 177, 178, 179, 180, 181, 184, 192,
+ 198, 208, 214, 220, 223, 225, 236, 237, 242, 251,
+ 256, 264, 267, 269, 270, 271, 272, 273, 276, 282,
+ 293, 299, 309, 311, 316, 324, 332, 335, 337, 338,
+ 339, 344, 351, 356, 364, 367, 369, 370, 371, 374,
+ 382, 389, 396, 402, 409, 411, 412, 413, 416, 424,
+ 426, 431, 432, 435, 436, 437, 441, 442, 445, 446,
+ 449, 450, 451, 452, 453, 454, 455, 458, 459, 462,
+ 463
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU",
+ "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
+ "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
+ "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",
+ "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
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289
+};
+# endif
+
+/* 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
+};
+
+/* 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
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+ 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
+};
+
+/* 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
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -80
+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
+};
+
+/* 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
+};
+
+/* 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
+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
+};
+
+static const yytype_int16 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,
+ 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,
+ 30, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 68, 69, 25, 71, 69, 1, 71, 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
+};
+
+/* 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
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
+
+#define YYFAIL goto yyerrlab
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yytoken = YYTRANSLATE (yychar); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+ This macro was not mandated originally: define only if we know
+ we won't break user code: when these are the locations we know. */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+# define YY_LOCATION_PRINT(File, Loc) \
+ fprintf (File, "%d.%d-%d.%d", \
+ (Loc).first_line, (Loc).first_column, \
+ (Loc).last_line, (Loc).last_column)
+# else
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+ yytype_int16 *bottom;
+ yytype_int16 *top;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; bottom <= top; ++bottom)
+ YYFPRINTF (stderr, " %d", *bottom);
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ fprintf (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ fprintf (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+ YYCHAR while in state YYSTATE. Return the number of bytes copied,
+ including the terminating null byte. If YYRESULT is null, do not
+ copy anything; just return the number of bytes that would be
+ copied. As a special case, return 0 if an ordinary "syntax error"
+ message will do. Return YYSIZE_MAXIMUM if overflow occurs during
+ size calculation. */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+ int yyn = yypact[yystate];
+
+ if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+ return 0;
+ else
+ {
+ int yytype = YYTRANSLATE (yychar);
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ int yysize_overflow = 0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ int yyx;
+
+# if 0
+ /* This is so xgettext sees the translatable formats that are
+ constructed on the fly. */
+ YY_("syntax error, unexpected %s");
+ YY_("syntax error, unexpected %s, expecting %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+ char *yyfmt;
+ char const *yyf;
+ static char const yyunexpected[] = "syntax error, unexpected %s";
+ static char const yyexpecting[] = ", expecting %s";
+ static char const yyor[] = " or %s";
+ char yyformat[sizeof yyunexpected
+ + sizeof yyexpecting - 1
+ + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+ * (sizeof yyor - 1))];
+ char const *yyprefix = yyexpecting;
+
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yycount = 1;
+
+ yyarg[0] = yytname[yytype];
+ yyfmt = yystpcpy (yyformat, yyunexpected);
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ yyformat[sizeof yyunexpected - 1] = '\0';
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+ yyfmt = yystpcpy (yyfmt, yyprefix);
+ yyprefix = yyor;
+ }
+
+ yyf = YY_(yyformat);
+ yysize1 = yysize + yystrlen (yyf);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+
+ if (yysize_overflow)
+ return YYSIZE_MAXIMUM;
+
+ if (yyresult)
+ {
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ char *yyp = yyresult;
+ int yyi = 0;
+ while ((*yyp = *yyf) != '\0')
+ {
+ if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyf += 2;
+ }
+ else
+ {
+ yyp++;
+ yyf++;
+ }
+ }
+ }
+ return yysize;
+ }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+ case 51: /* "choice_entry" */
+
+ {
+ fprintf(stderr, "%s:%d: missing end statement for this entry\n",
+ (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
+ if (current_menu == (yyvaluep->menu))
+ menu_end_menu();
+};
+
+ break;
+ case 57: /* "if_entry" */
+
+ {
+ fprintf(stderr, "%s:%d: missing end statement for this entry\n",
+ (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
+ if (current_menu == (yyvaluep->menu))
+ menu_end_menu();
+};
+
+ break;
+ case 62: /* "menu_entry" */
+
+ {
+ fprintf(stderr, "%s:%d: missing end statement for this entry\n",
+ (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
+ if (current_menu == (yyvaluep->menu))
+ menu_end_menu();
+};
+
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes. */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol. */
+int yychar;
+
+/* The semantic value of the look-ahead symbol. */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+ int yystate;
+ int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Look-ahead token as an internal (translated) token number. */
+ int yytoken = 0;
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+ `yyvs': related to semantic values,
+ `yyls': related to locations.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss = yyssa;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ look-ahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to look-ahead token. */
+ yyn = yypact[yystate];
+ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+ /* Not known => get a look-ahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yyn == 0 || yyn == YYTABLE_NINF)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the look-ahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 8:
+
+ { zconf_error("unexpected end statement"); ;}
+ break;
+
+ case 9:
+
+ { zconf_error("unknown statement \"%s\"", (yyvsp[(2) - (4)].string)); ;}
+ break;
+
+ case 10:
+
+ {
+ zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[(2) - (4)].id)->name);
+;}
+ break;
+
+ case 11:
+
+ { zconf_error("invalid statement"); ;}
+ break;
+
+ case 25:
+
+ { zconf_error("unknown option \"%s\"", (yyvsp[(1) - (3)].string)); ;}
+ break;
+
+ case 26:
+
+ { zconf_error("invalid option"); ;}
+ break;
+
+ case 27:
+
+ {
+ struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
+ sym->flags |= SYMBOL_OPTIONAL;
+ menu_add_entry(sym);
+ printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
+;}
+ break;
+
+ case 28:
+
+ {
+ menu_end_entry();
+ printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
+;}
+ break;
+
+ case 29:
+
+ {
+ struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
+ sym->flags |= SYMBOL_OPTIONAL;
+ menu_add_entry(sym);
+ printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
+;}
+ break;
+
+ case 30:
+
+ {
+ if (current_entry->prompt)
+ current_entry->prompt->type = P_MENU;
+ else
+ zconfprint("warning: menuconfig statement without prompt");
+ menu_end_entry();
+ printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
+;}
+ break;
+
+ case 38:
+
+ {
+ menu_set_type((yyvsp[(1) - (3)].id)->stype);
+ printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
+ zconf_curname(), zconf_lineno(),
+ (yyvsp[(1) - (3)].id)->stype);
+;}
+ break;
+
+ case 39:
+
+ {
+ menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
+ printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
+;}
+ break;
+
+ case 40:
+
+ {
+ menu_add_expr(P_DEFAULT, (yyvsp[(2) - (4)].expr), (yyvsp[(3) - (4)].expr));
+ if ((yyvsp[(1) - (4)].id)->stype != S_UNKNOWN)
+ menu_set_type((yyvsp[(1) - (4)].id)->stype);
+ printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
+ zconf_curname(), zconf_lineno(),
+ (yyvsp[(1) - (4)].id)->stype);
+;}
+ break;
+
+ case 41:
+
+ {
+ menu_add_symbol(P_SELECT, sym_lookup((yyvsp[(2) - (4)].string), 0), (yyvsp[(3) - (4)].expr));
+ printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
+;}
+ break;
+
+ case 42:
+
+ {
+ menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,(yyvsp[(2) - (5)].symbol), (yyvsp[(3) - (5)].symbol)), (yyvsp[(4) - (5)].expr));
+ printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
+;}
+ break;
+
+ case 45:
+
+ {
+ struct kconf_id *id = kconf_id_lookup((yyvsp[(2) - (3)].string), strlen((yyvsp[(2) - (3)].string)));
+ if (id && id->flags & TF_OPTION)
+ menu_add_option(id->token, (yyvsp[(3) - (3)].string));
+ else
+ zconfprint("warning: ignoring unknown option %s", (yyvsp[(2) - (3)].string));
+ free((yyvsp[(2) - (3)].string));
+;}
+ break;
+
+ case 46:
+
+ { (yyval.string) = NULL; ;}
+ break;
+
+ case 47:
+
+ { (yyval.string) = (yyvsp[(2) - (2)].string); ;}
+ break;
+
+ case 48:
+
+ {
+ struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), SYMBOL_CHOICE);
+ sym->flags |= SYMBOL_AUTO;
+ menu_add_entry(sym);
+ menu_add_expr(P_CHOICE, NULL, NULL);
+ printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
+;}
+ break;
+
+ case 49:
+
+ {
+ (yyval.menu) = menu_add_menu();
+;}
+ break;
+
+ case 50:
+
+ {
+ if (zconf_endtoken((yyvsp[(1) - (1)].id), T_CHOICE, T_ENDCHOICE)) {
+ menu_end_menu();
+ printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
+ }
+;}
+ break;
+
+ case 58:
+
+ {
+ menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
+ printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
+;}
+ break;
+
+ case 59:
+
+ {
+ if ((yyvsp[(1) - (3)].id)->stype == S_BOOLEAN || (yyvsp[(1) - (3)].id)->stype == S_TRISTATE) {
+ menu_set_type((yyvsp[(1) - (3)].id)->stype);
+ printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
+ zconf_curname(), zconf_lineno(),
+ (yyvsp[(1) - (3)].id)->stype);
+ } else
+ YYERROR;
+;}
+ break;
+
+ case 60:
+
+ {
+ current_entry->sym->flags |= SYMBOL_OPTIONAL;
+ printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
+;}
+ break;
+
+ case 61:
+
+ {
+ if ((yyvsp[(1) - (4)].id)->stype == S_UNKNOWN) {
+ menu_add_symbol(P_DEFAULT, sym_lookup((yyvsp[(2) - (4)].string), 0), (yyvsp[(3) - (4)].expr));
+ printd(DEBUG_PARSE, "%s:%d:default\n",
+ zconf_curname(), zconf_lineno());
+ } else
+ YYERROR;
+;}
+ break;
+
+ case 64:
+
+ {
+ printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
+ menu_add_entry(NULL);
+ menu_add_dep((yyvsp[(2) - (3)].expr));
+ (yyval.menu) = menu_add_menu();
+;}
+ break;
+
+ case 65:
+
+ {
+ if (zconf_endtoken((yyvsp[(1) - (1)].id), T_IF, T_ENDIF)) {
+ menu_end_menu();
+ printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
+ }
+;}
+ break;
+
+ case 71:
+
+ {
+ menu_add_entry(NULL);
+ menu_add_prompt(P_MENU, (yyvsp[(2) - (3)].string), NULL);
+ printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
+;}
+ break;
+
+ case 72:
+
+ {
+ (yyval.menu) = menu_add_menu();
+;}
+ break;
+
+ case 73:
+
+ {
+ if (zconf_endtoken((yyvsp[(1) - (1)].id), T_MENU, T_ENDMENU)) {
+ menu_end_menu();
+ printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
+ }
+;}
+ break;
+
+ case 79:
+
+ {
+ printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
+ zconf_nextfile((yyvsp[(2) - (3)].string));
+;}
+ break;
+
+ case 80:
+
+ {
+ menu_add_entry(NULL);
+ menu_add_prompt(P_COMMENT, (yyvsp[(2) - (3)].string), NULL);
+ printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
+;}
+ break;
+
+ case 81:
+
+ {
+ menu_end_entry();
+;}
+ break;
+
+ case 82:
+
+ {
+ printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
+ zconf_starthelp();
+;}
+ break;
+
+ case 83:
+
+ {
+ current_entry->help = (yyvsp[(2) - (2)].string);
+;}
+ break;
+
+ case 88:
+
+ {
+ menu_add_dep((yyvsp[(3) - (4)].expr));
+ printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
+;}
+ break;
+
+ case 90:
+
+ {
+ menu_add_prompt(P_PROMPT, (yyvsp[(1) - (2)].string), (yyvsp[(2) - (2)].expr));
+;}
+ break;
+
+ case 93:
+
+ { (yyval.id) = (yyvsp[(1) - (2)].id); ;}
+ break;
+
+ case 94:
+
+ { (yyval.id) = (yyvsp[(1) - (2)].id); ;}
+ break;
+
+ case 95:
+
+ { (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)); ;}
+ break;
+
+ case 101:
+
+ { (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
+ break;
+
+ case 102:
+
+ { (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
+ break;
+
+ case 103:
+
+ { (yyval.expr) = (yyvsp[(2) - (3)].expr); ;}
+ break;
+
+ case 104:
+
+ { (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[(2) - (2)].expr)); ;}
+ break;
+
+ case 105:
+
+ { (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
+ break;
+
+ case 106:
+
+ { (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
+ break;
+
+ case 107:
+
+ { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 0); free((yyvsp[(1) - (1)].string)); ;}
+ break;
+
+ case 108:
+
+ { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); ;}
+ break;
+
+ case 109:
+
+ { (yyval.string) = NULL; ;}
+ break;
+
+
+/* Line 1267 of yacc.c. */
+
+ default: break;
+ }
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+ {
+ YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+ if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+ {
+ YYSIZE_T yyalloc = 2 * yysize;
+ if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+ yyalloc = YYSTACK_ALLOC_MAXIMUM;
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+ if (yymsg)
+ yymsg_alloc = yyalloc;
+ else
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ }
+ }
+
+ if (0 < yysize && yysize <= yymsg_alloc)
+ {
+ (void) yysyntax_error (yymsg, yystate, yychar);
+ yyerror (yymsg);
+ }
+ else
+ {
+ yyerror (YY_("syntax error"));
+ if (yysize != 0)
+ goto yyexhaustedlab;
+ }
+ }
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse look-ahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse look-ahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (yyn != YYPACT_NINF)
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEOF && yychar != YYEMPTY)
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+
+
+
+void conf_parse(const char *name)
+{
+ struct symbol *sym;
+ int i;
+
+ zconf_initscan(name);
+
+ sym_init();
+ menu_init();
+ modules_sym = sym_lookup(NULL, 0);
+ modules_sym->type = S_BOOLEAN;
+ modules_sym->flags |= SYMBOL_AUTO;
+ rootmenu.prompt = menu_add_prompt(P_MENU, "OpenADK Configuration", NULL);
+
+#if YYDEBUG
+ if (getenv("ZCONF_DEBUG"))
+ zconfdebug = 1;
+#endif
+ zconfparse();
+ if (zconfnerrs)
+ exit(1);
+ if (!modules_sym->prop) {
+ struct property *prop;
+
+ prop = prop_alloc(P_DEFAULT, modules_sym);
+ prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0));
+ }
+ menu_finalize(&rootmenu);
+ for_all_symbols(i, sym) {
+ if (sym_check_deps(sym))
+ zconfnerrs++;
+ }
+ if (zconfnerrs)
+ exit(1);
+ sym_set_change_count(1);
+}
+
+const char *zconf_tokenname(int token)
+{
+ switch (token) {
+ case T_MENU: return "menu";
+ case T_ENDMENU: return "endmenu";
+ case T_CHOICE: return "choice";
+ case T_ENDCHOICE: return "endchoice";
+ case T_IF: return "if";
+ case T_ENDIF: return "endif";
+ case T_DEPENDS: return "depends";
+ }
+ return "<token>";
+}
+
+static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
+{
+ if (id->token != endtoken) {
+ zconf_error("unexpected '%s' within %s block",
+ kconf_id_strings + id->name, zconf_tokenname(starttoken));
+ zconfnerrs++;
+ return false;
+ }
+ if (current_menu->file != current_file) {
+ zconf_error("'%s' in different file than '%s'",
+ kconf_id_strings + id->name, zconf_tokenname(starttoken));
+ fprintf(stderr, "%s:%d: location of the '%s'\n",
+ current_menu->file->name, current_menu->lineno,
+ zconf_tokenname(starttoken));
+ zconfnerrs++;
+ return false;
+ }
+ return true;
+}
+
+static void zconfprint(const char *err, ...)
+{
+ va_list ap;
+
+ fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
+ va_start(ap, err);
+ vfprintf(stderr, err, ap);
+ va_end(ap);
+ fprintf(stderr, "\n");
+}
+
+static void zconf_error(const char *err, ...)
+{
+ va_list ap;
+
+ zconfnerrs++;
+ fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
+ va_start(ap, err);
+ vfprintf(stderr, err, ap);
+ va_end(ap);
+ fprintf(stderr, "\n");
+}
+
+static void zconferror(const char *err)
+{
+#if YYDEBUG
+ fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
+#endif
+}
+
+void print_quoted_string(FILE *out, const char *str)
+{
+ const char *p;
+ int len;
+
+ putc('"', out);
+ while ((p = strchr(str, '"'))) {
+ len = p - str;
+ if (len)
+ fprintf(out, "%.*s", len, str);
+ fputs("\\\"", out);
+ str = p + 1;
+ }
+ fputs(str, out);
+ putc('"', out);
+}
+
+void print_symbol(FILE *out, struct menu *menu)
+{
+ struct symbol *sym = menu->sym;
+ struct property *prop;
+
+ if (sym_is_choice(sym))
+ fprintf(out, "choice\n");
+ else
+ fprintf(out, "config %s\n", sym->name);
+ switch (sym->type) {
+ case S_BOOLEAN:
+ fputs(" boolean\n", out);
+ break;
+ case S_TRISTATE:
+ fputs(" tristate\n", out);
+ break;
+ case S_STRING:
+ fputs(" string\n", out);
+ break;
+ case S_INT:
+ fputs(" integer\n", out);
+ break;
+ case S_HEX:
+ fputs(" hex\n", out);
+ break;
+ default:
+ fputs(" ???\n", out);
+ break;
+ }
+ for (prop = sym->prop; prop; prop = prop->next) {
+ if (prop->menu != menu)
+ continue;
+ switch (prop->type) {
+ case P_PROMPT:
+ fputs(" prompt ", out);
+ print_quoted_string(out, prop->text);
+ if (!expr_is_yes(prop->visible.expr)) {
+ fputs(" if ", out);
+ expr_fprint(prop->visible.expr, out);
+ }
+ fputc('\n', out);
+ break;
+ case P_DEFAULT:
+ fputs( " default ", out);
+ expr_fprint(prop->expr, out);
+ if (!expr_is_yes(prop->visible.expr)) {
+ fputs(" if ", out);
+ expr_fprint(prop->visible.expr, out);
+ }
+ fputc('\n', out);
+ break;
+ case P_CHOICE:
+ fputs(" #choice value\n", out);
+ break;
+ default:
+ fprintf(out, " unknown prop %d!\n", prop->type);
+ break;
+ }
+ }
+ if (menu->help) {
+ int len = strlen(menu->help);
+ while (menu->help[--len] == '\n')
+ menu->help[len] = 0;
+ fprintf(out, " help\n%s\n", menu->help);
+ }
+ fputc('\n', out);
+}
+
+void zconfdump(FILE *out)
+{
+ struct property *prop;
+ struct symbol *sym;
+ struct menu *menu;
+
+ menu = rootmenu.list;
+ while (menu) {
+ if ((sym = menu->sym))
+ print_symbol(out, menu);
+ else if ((prop = menu->prompt)) {
+ switch (prop->type) {
+ case P_COMMENT:
+ fputs("\ncomment ", out);
+ print_quoted_string(out, prop->text);
+ fputs("\n", out);
+ break;
+ case P_MENU:
+ fputs("\nmenu ", out);
+ print_quoted_string(out, prop->text);
+ fputs("\n", out);
+ break;
+ default:
+ ;
+ }
+ if (!expr_is_yes(prop->visible.expr)) {
+ fputs(" depends ", out);
+ expr_fprint(prop->visible.expr, out);
+ fputc('\n', out);
+ }
+ fputs("\n", out);
+ }
+
+ if (menu->list)
+ menu = menu->list;
+ else if (menu->next)
+ menu = menu->next;
+ else while ((menu = menu->parent)) {
+ if (menu->prompt && menu->prompt->type == P_MENU)
+ fputs("\nendmenu\n", out);
+ if (menu->next) {
+ menu = menu->next;
+ break;
+ }
+ }
+ }
+}
+
+#include "lex.zconf.c"
+#include "util.c"
+#include "confdata.c"
+#include "expr.c"
+#include "symbol.c"
+#include "menu.c"
+
diff --git a/config/zconf.y b/config/zconf.y
index e1f1c151c..b4240c846 100644
--- a/config/zconf.y
+++ b/config/zconf.y
@@ -11,6 +11,11 @@
#include <string.h>
#include <stdbool.h>
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+#include "zconf.hash.c"
+
#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
#define PRINTD 0x0001
@@ -20,59 +25,59 @@ int cdebug = PRINTD;
extern int zconflex(void);
static void zconfprint(const char *err, ...);
+static void zconf_error(const char *err, ...);
static void zconferror(const char *err);
-static bool zconf_endtoken(int token, int starttoken, int endtoken);
+static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
struct symbol *symbol_hash[257];
+static struct menu *current_menu, *current_entry;
+
+#define YYDEBUG 0
+#if YYDEBUG
#define YYERROR_VERBOSE
+#endif
%}
-%expect 40
+%expect 26
%union
{
- int token;
char *string;
+ struct file *file;
struct symbol *symbol;
struct expr *expr;
struct menu *menu;
+ struct kconf_id *id;
}
-%token T_MAINMENU
-%token T_MENU
-%token T_ENDMENU
-%token T_SOURCE
-%token T_CHOICE
-%token T_ENDCHOICE
-%token T_COMMENT
-%token T_CONFIG
-%token T_MENUCONFIG
-%token T_HELP
+%token <id>T_MAINMENU
+%token <id>T_MENU
+%token <id>T_ENDMENU
+%token <id>T_SOURCE
+%token <id>T_CHOICE
+%token <id>T_ENDCHOICE
+%token <id>T_COMMENT
+%token <id>T_CONFIG
+%token <id>T_MENUCONFIG
+%token <id>T_HELP
%token <string> T_HELPTEXT
-%token T_IF
-%token T_ENDIF
-%token T_DEPENDS
-%token T_REQUIRES
-%token T_OPTIONAL
-%token T_PROMPT
-%token T_DEFAULT
-%token T_TRISTATE
-%token T_DEF_TRISTATE
-%token T_BOOLEAN
-%token T_DEF_BOOLEAN
-%token T_STRING
-%token T_INT
-%token T_HEX
+%token <id>T_IF
+%token <id>T_ENDIF
+%token <id>T_DEPENDS
+%token <id>T_OPTIONAL
+%token <id>T_PROMPT
+%token <id>T_TYPE
+%token <id>T_DEFAULT
+%token <id>T_SELECT
+%token <id>T_RANGE
+%token <id>T_OPTION
+%token <id>T_ON
%token <string> T_WORD
%token <string> T_WORD_QUOTE
%token T_UNEQUAL
-%token T_EOF
-%token T_EOL
%token T_CLOSE_PAREN
%token T_OPEN_PAREN
-%token T_ON
-%token T_SELECT
-%token T_RANGE
+%token T_EOL
%left T_OR
%left T_AND
@@ -80,38 +85,55 @@ struct symbol *symbol_hash[257];
%nonassoc T_NOT
%type <string> prompt
-%type <string> source
%type <symbol> symbol
%type <expr> expr
%type <expr> if_expr
-%type <token> end
+%type <id> end
+%type <id> option_name
+%type <menu> if_entry menu_entry choice_entry
+%type <string> symbol_option_arg word_opt
+
+%destructor {
+ fprintf(stderr, "%s:%d: missing end statement for this entry\n",
+ $$->file->name, $$->lineno);
+ if (current_menu == $$)
+ menu_end_menu();
+} if_entry menu_entry choice_entry
-%{
-#define LKC_DIRECT_LINK
-#include "lkc.h"
-%}
%%
-input: /* empty */
- | input block
+input: 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
+{
+ zconf_error("unexpected option \"%s\"", kconf_id_strings + $2->name);
+}
+ | stmt_list error T_EOL { zconf_error("invalid statement"); }
;
-block: common_block
- | choice_stmt
- | menu_stmt
- | T_MAINMENU prompt nl_or_eof
- | T_ENDMENU { zconfprint("unexpected 'endmenu' statement"); }
- | T_ENDIF { zconfprint("unexpected 'endif' statement"); }
- | T_ENDCHOICE { zconfprint("unexpected 'endchoice' statement"); }
- | error nl_or_eof { zconfprint("syntax error"); yyerrok; }
+option_name:
+ T_DEPENDS | T_PROMPT | T_TYPE | T_SELECT | T_OPTIONAL | T_RANGE | T_DEFAULT
;
-common_block:
- if_stmt
+common_stmt:
+ T_EOL
+ | if_stmt
| comment_stmt
| config_stmt
| menuconfig_stmt
| source_stmt
- | nl_or_eof
+;
+
+option_error:
+ T_WORD error T_EOL { zconf_error("unknown option \"%s\"", $1); }
+ | error T_EOL { zconf_error("invalid option"); }
;
@@ -152,53 +174,19 @@ menuconfig_stmt: menuconfig_entry_start config_option_list
config_option_list:
/* empty */
| config_option_list config_option
+ | config_option_list symbol_option
| config_option_list depends
| config_option_list help
+ | config_option_list option_error
| config_option_list T_EOL
;
-config_option: T_TRISTATE prompt_stmt_opt T_EOL
-{
- menu_set_type(S_TRISTATE);
- printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
-};
-
-config_option: T_DEF_TRISTATE expr if_expr T_EOL
-{
- menu_add_expr(P_DEFAULT, $2, $3);
- menu_set_type(S_TRISTATE);
- printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
-};
-
-config_option: T_BOOLEAN prompt_stmt_opt T_EOL
+config_option: T_TYPE prompt_stmt_opt T_EOL
{
- menu_set_type(S_BOOLEAN);
- printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
-};
-
-config_option: T_DEF_BOOLEAN expr if_expr T_EOL
-{
- menu_add_expr(P_DEFAULT, $2, $3);
- menu_set_type(S_BOOLEAN);
- printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
-};
-
-config_option: T_INT prompt_stmt_opt T_EOL
-{
- menu_set_type(S_INT);
- printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno());
-};
-
-config_option: T_HEX prompt_stmt_opt T_EOL
-{
- menu_set_type(S_HEX);
- printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno());
-};
-
-config_option: T_STRING prompt_stmt_opt T_EOL
-{
- menu_set_type(S_STRING);
- printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno());
+ menu_set_type($1->stype);
+ printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
+ zconf_curname(), zconf_lineno(),
+ $1->stype);
};
config_option: T_PROMPT prompt if_expr T_EOL
@@ -210,7 +198,11 @@ config_option: T_PROMPT prompt if_expr T_EOL
config_option: T_DEFAULT expr if_expr T_EOL
{
menu_add_expr(P_DEFAULT, $2, $3);
- printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
+ if ($1->stype != S_UNKNOWN)
+ menu_set_type($1->stype);
+ printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
+ zconf_curname(), zconf_lineno(),
+ $1->stype);
};
config_option: T_SELECT T_WORD if_expr T_EOL
@@ -219,24 +211,38 @@ config_option: T_SELECT T_WORD if_expr T_EOL
printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
};
-config_option: T_SELECT T_NOT T_WORD if_expr T_EOL
-{
- menu_add_symbol(P_SELECTNOT, sym_lookup($3, 0), $4);
- printd(DEBUG_PARSE, "%s:%d:selectnot\n", zconf_curname(), zconf_lineno());
-};
-
config_option: T_RANGE symbol symbol if_expr T_EOL
{
menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,$2, $3), $4);
printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
};
+symbol_option: T_OPTION symbol_option_list T_EOL
+;
+
+symbol_option_list:
+ /* empty */
+ | symbol_option_list T_WORD symbol_option_arg
+{
+ struct kconf_id *id = kconf_id_lookup($2, strlen($2));
+ if (id && id->flags & TF_OPTION)
+ menu_add_option(id->token, $3);
+ else
+ zconfprint("warning: ignoring unknown option %s", $2);
+ free($2);
+};
+
+symbol_option_arg:
+ /* empty */ { $$ = NULL; }
+ | T_EQUAL prompt { $$ = $2; }
+;
+
/* choice entry */
-choice: T_CHOICE T_EOL
+choice: T_CHOICE word_opt T_EOL
{
- struct symbol *sym = sym_lookup(NULL, 0);
- sym->flags |= SYMBOL_CHOICE;
+ struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE);
+ sym->flags |= SYMBOL_AUTO;
menu_add_entry(sym);
menu_add_expr(P_CHOICE, NULL, NULL);
printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
@@ -244,8 +250,7 @@ choice: T_CHOICE T_EOL
choice_entry: choice choice_option_list
{
- menu_end_entry();
- menu_add_menu();
+ $$ = menu_add_menu();
};
choice_end: end
@@ -256,13 +261,8 @@ choice_end: end
}
};
-choice_stmt:
- choice_entry choice_block choice_end
- | choice_entry choice_block
-{
- printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno);
- zconfnerrs++;
-};
+choice_stmt: choice_entry choice_block choice_end
+;
choice_option_list:
/* empty */
@@ -270,6 +270,7 @@ choice_option_list:
| choice_option_list depends
| choice_option_list help
| choice_option_list T_EOL
+ | choice_option_list option_error
;
choice_option: T_PROMPT prompt if_expr T_EOL
@@ -278,16 +279,15 @@ choice_option: T_PROMPT prompt if_expr T_EOL
printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
};
-choice_option: T_TRISTATE prompt_stmt_opt T_EOL
+choice_option: T_TYPE prompt_stmt_opt T_EOL
{
- menu_set_type(S_TRISTATE);
- printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
-};
-
-choice_option: T_BOOLEAN prompt_stmt_opt T_EOL
-{
- menu_set_type(S_BOOLEAN);
- printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
+ if ($1->stype == S_BOOLEAN || $1->stype == S_TRISTATE) {
+ menu_set_type($1->stype);
+ printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
+ zconf_curname(), zconf_lineno(),
+ $1->stype);
+ } else
+ YYERROR;
};
choice_option: T_OPTIONAL T_EOL
@@ -298,24 +298,27 @@ choice_option: T_OPTIONAL T_EOL
choice_option: T_DEFAULT T_WORD if_expr T_EOL
{
- menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3);
- printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
+ if ($1->stype == S_UNKNOWN) {
+ menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3);
+ printd(DEBUG_PARSE, "%s:%d:default\n",
+ zconf_curname(), zconf_lineno());
+ } else
+ YYERROR;
};
choice_block:
/* empty */
- | choice_block common_block
+ | choice_block common_stmt
;
/* if entry */
-if: T_IF expr T_EOL
+if_entry: T_IF expr nl
{
printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
menu_add_entry(NULL);
menu_add_dep($2);
- menu_end_entry();
- menu_add_menu();
+ $$ = menu_add_menu();
};
if_end: end
@@ -326,17 +329,12 @@ if_end: end
}
};
-if_stmt:
- if if_block if_end
- | if if_block
-{
- printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno);
- zconfnerrs++;
-};
+if_stmt: if_entry if_block if_end
+;
if_block:
/* empty */
- | if_block common_block
+ | if_block common_stmt
| if_block menu_stmt
| if_block choice_stmt
;
@@ -346,14 +344,13 @@ if_block:
menu: T_MENU prompt T_EOL
{
menu_add_entry(NULL);
- menu_add_prop(P_MENU, $2, NULL, NULL);
+ menu_add_prompt(P_MENU, $2, NULL);
printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
};
menu_entry: menu depends_list
{
- menu_end_entry();
- menu_add_menu();
+ $$ = menu_add_menu();
};
menu_end: end
@@ -364,31 +361,20 @@ menu_end: end
}
};
-menu_stmt:
- menu_entry menu_block menu_end
- | menu_entry menu_block
-{
- printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno);
- zconfnerrs++;
-};
+menu_stmt: menu_entry menu_block menu_end
+;
menu_block:
/* empty */
- | menu_block common_block
+ | menu_block common_stmt
| menu_block menu_stmt
| menu_block choice_stmt
- | menu_block error T_EOL { zconfprint("invalid menu option"); yyerrok; }
;
-source: T_SOURCE prompt T_EOL
+source_stmt: T_SOURCE prompt T_EOL
{
- $$ = $2;
printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2);
-};
-
-source_stmt: source
-{
- zconf_nextfile($1);
+ zconf_nextfile($2);
};
/* comment entry */
@@ -396,7 +382,7 @@ source_stmt: source
comment: T_COMMENT prompt T_EOL
{
menu_add_entry(NULL);
- menu_add_prop(P_COMMENT, $2, NULL, NULL);
+ menu_add_prompt(P_COMMENT, $2, NULL);
printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
};
@@ -415,30 +401,22 @@ help_start: T_HELP T_EOL
help: help_start T_HELPTEXT
{
- current_entry->sym->help = $2;
+ current_entry->help = $2;
};
/* depends option */
-depends_list: /* empty */
- | depends_list depends
- | depends_list T_EOL
+depends_list:
+ /* empty */
+ | depends_list depends
+ | depends_list T_EOL
+ | depends_list option_error
;
depends: T_DEPENDS T_ON expr T_EOL
{
menu_add_dep($3);
printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
-}
- | T_DEPENDS expr T_EOL
-{
- menu_add_dep($2);
- printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno());
-}
- | T_REQUIRES expr T_EOL
-{
- menu_add_dep($2);
- printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno());
};
/* prompt statement */
@@ -447,20 +425,22 @@ prompt_stmt_opt:
/* empty */
| prompt if_expr
{
- menu_add_prop(P_PROMPT, $1, NULL, $2);
+ menu_add_prompt(P_PROMPT, $1, $2);
};
prompt: T_WORD
| T_WORD_QUOTE
;
-end: T_ENDMENU nl_or_eof { $$ = T_ENDMENU; }
- | T_ENDCHOICE nl_or_eof { $$ = T_ENDCHOICE; }
- | T_ENDIF nl_or_eof { $$ = T_ENDIF; }
+end: T_ENDMENU T_EOL { $$ = $1; }
+ | T_ENDCHOICE T_EOL { $$ = $1; }
+ | T_ENDIF T_EOL { $$ = $1; }
;
-nl_or_eof:
- T_EOL | T_EOF;
+nl:
+ T_EOL
+ | nl T_EOL
+;
if_expr: /* empty */ { $$ = NULL; }
| T_IF expr { $$ = $2; }
@@ -476,9 +456,12 @@ expr: symbol { $$ = expr_alloc_symbol($1); }
;
symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); }
- | T_WORD_QUOTE { $$ = sym_lookup($1, 1); free($1); }
+ | T_WORD_QUOTE { $$ = sym_lookup($1, SYMBOL_CONST); free($1); }
;
+word_opt: /* empty */ { $$ = NULL; }
+ | T_WORD
+
%%
void conf_parse(const char *name)
@@ -490,22 +473,32 @@ void conf_parse(const char *name)
sym_init();
menu_init();
- modules_sym = sym_lookup("MODULES", 0);
- rootmenu.prompt = menu_add_prop(P_MENU, "OpenADK Configuration", NULL, NULL);
-
- //zconfdebug = 1;
+ modules_sym = sym_lookup(NULL, 0);
+ modules_sym->type = S_BOOLEAN;
+ modules_sym->flags |= SYMBOL_AUTO;
+ rootmenu.prompt = menu_add_prompt(P_MENU, "OpenADK Configuration", NULL);
+
+#if YYDEBUG
+ if (getenv("ZCONF_DEBUG"))
+ zconfdebug = 1;
+#endif
zconfparse();
if (zconfnerrs)
exit(1);
+ if (!modules_sym->prop) {
+ struct property *prop;
+
+ prop = prop_alloc(P_DEFAULT, modules_sym);
+ prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0));
+ }
menu_finalize(&rootmenu);
for_all_symbols(i, sym) {
- if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym))
- printf("\n");
- else
- sym->flags |= SYMBOL_CHECK_DONE;
+ if (sym_check_deps(sym))
+ zconfnerrs++;
}
-
- sym_change_count = 1;
+ if (zconfnerrs)
+ exit(1);
+ sym_set_change_count(1);
}
const char *zconf_tokenname(int token)
@@ -517,20 +510,25 @@ const char *zconf_tokenname(int token)
case T_ENDCHOICE: return "endchoice";
case T_IF: return "if";
case T_ENDIF: return "endif";
+ case T_DEPENDS: return "depends";
}
return "<token>";
}
-static bool zconf_endtoken(int token, int starttoken, int endtoken)
+static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
{
- if (token != endtoken) {
- zconfprint("unexpected '%s' within %s block", zconf_tokenname(token), zconf_tokenname(starttoken));
+ if (id->token != endtoken) {
+ zconf_error("unexpected '%s' within %s block",
+ kconf_id_strings + id->name, zconf_tokenname(starttoken));
zconfnerrs++;
return false;
}
if (current_menu->file != current_file) {
- zconfprint("'%s' in different file than '%s'", zconf_tokenname(token), zconf_tokenname(starttoken));
- zconfprint("location of the '%s'", zconf_tokenname(starttoken));
+ zconf_error("'%s' in different file than '%s'",
+ kconf_id_strings + id->name, zconf_tokenname(starttoken));
+ fprintf(stderr, "%s:%d: location of the '%s'\n",
+ current_menu->file->name, current_menu->lineno,
+ zconf_tokenname(starttoken));
zconfnerrs++;
return false;
}
@@ -541,7 +539,19 @@ static void zconfprint(const char *err, ...)
{
va_list ap;
- fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1);
+ fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
+ va_start(ap, err);
+ vfprintf(stderr, err, ap);
+ va_end(ap);
+ fprintf(stderr, "\n");
+}
+
+static void zconf_error(const char *err, ...)
+{
+ va_list ap;
+
+ zconfnerrs++;
+ fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
va_start(ap, err);
vfprintf(stderr, err, ap);
va_end(ap);
@@ -550,7 +560,9 @@ static void zconfprint(const char *err, ...)
static void zconferror(const char *err)
{
+#if YYDEBUG
fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
+#endif
}
void print_quoted_string(FILE *out, const char *str)
@@ -629,11 +641,11 @@ void print_symbol(FILE *out, struct menu *menu)
break;
}
}
- if (sym->help) {
- int len = strlen(sym->help);
- while (sym->help[--len] == '\n')
- sym->help[len] = 0;
- fprintf(out, " help\n%s\n", sym->help);
+ if (menu->help) {
+ int len = strlen(menu->help);
+ while (menu->help[--len] == '\n')
+ menu->help[len] = 0;
+ fprintf(out, " help\n%s\n", menu->help);
}
fputc('\n', out);
}
@@ -687,6 +699,7 @@ void zconfdump(FILE *out)
}
#include "lex.zconf.c"
+#include "util.c"
#include "confdata.c"
#include "expr.c"
#include "symbol.c"
diff --git a/mk/build.mk b/mk/build.mk
index c74e16045..399d57216 100644
--- a/mk/build.mk
+++ b/mk/build.mk
@@ -158,6 +158,9 @@ all: menuconfig
# configuration
# ---------------------------------------------------------------------------
+# force entering the subdir, as dependency checking is done there
+.PHONY: $(CONFIG)/conf $(CONFIG)/mconf
+
$(CONFIG)/conf:
@$(MAKE) -C $(CONFIG) conf
diff --git a/package/Config.in b/package/Config.in
index eb1f5aa65..b88026c44 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -201,7 +201,7 @@ source "package/wput/Config.in"
endmenu
menu "IPv6"
-depends ADK_IPV6
+depends on ADK_IPV6
source "package/6tunnel/Config.in"
source "package/aiccu/Config.in"
source "package/miredo/Config.in"
@@ -453,7 +453,7 @@ source "package/zlib/Config.in"
endmenu
menu "X"
-depends ADK_X11
+depends on ADK_X11
source "package/xorg-server/Config.in"
source "package/xf86-video-geode/Config.in"
diff --git a/package/apr/Config.in b/package/apr/Config.in
index 0cee1afbc..5a875e10e 100644
--- a/package/apr/Config.in
+++ b/package/apr/Config.in
@@ -8,9 +8,9 @@ config ADK_PACKAGE_APR
http://apr.apache.org
config ADK_PACKAGE_APR_THREADING
- prompt " Enable threading support"
+ prompt "Enable threading support"
bool
default n
- depends ADK_PACKAGE_APR
+ depends on ADK_PACKAGE_APR
help
Enable threading support in APR.
diff --git a/package/asterisk/Config.in b/package/asterisk/Config.in
index 70c88064f..72f8b6bca 100644
--- a/package/asterisk/Config.in
+++ b/package/asterisk/Config.in
@@ -12,7 +12,7 @@ config ADK_PACKAGE_ASTERISK_CHAN_MGCP
prompt "asterisk-chan-mgcp.............. Media Gateway Control Protocol implementation"
tristate
default n
- depends ADK_PACKAGE_ASTERISK
+ depends on ADK_PACKAGE_ASTERISK
help
Media Gateway Control Protocol implementation for Asterisk
@@ -20,7 +20,7 @@ config ADK_PACKAGE_ASTERISK_CHAN_SKINNY
prompt "asterisk-chan-skinny............ Skinny Client Control Protocol implementation"
tristate
default n
- depends ADK_PACKAGE_ASTERISK
+ depends on ADK_PACKAGE_ASTERISK
help
Skinny Client Control Protocol implementation for Asterisk
@@ -28,7 +28,7 @@ config ADK_PACKAGE_ASTERISK_CHAN_IAX2
prompt "asterisk-chan-iax2.............. Support for the Inter Asterisk Protocol"
tristate
default n
- depends ADK_PACKAGE_ASTERISK
+ depends on ADK_PACKAGE_ASTERISK
help
IAX2 allows trunking communication channels together.
@@ -39,7 +39,7 @@ config ADK_PACKAGE_ASTERISK_CODEC_SPEEX
prompt "asterisk-codec-speex............ Speex/PCM16 Codec Translator"
tristate
default n
- depends ADK_PACKAGE_ASTERISK
+ depends on ADK_PACKAGE_ASTERISK
select ADK_PACKAGE_LIBSPEEX
help
The Speex speech compression codec for Asterisk
@@ -48,7 +48,7 @@ config ADK_PACKAGE_ASTERISK_CODEC_GSM
prompt "asterisk-codec-gsm.............. GSM Codec"
tristate
default n
- depends ADK_PACKAGE_ASTERISK
+ depends on ADK_PACKAGE_ASTERISK
help
The GSM codec for Asterisk
@@ -56,7 +56,7 @@ config ADK_PACKAGE_ASTERISK_PBX_DUNDI
prompt "asterisk-pbx-dundi.............. Distributed Universal Number Discovery (DUNDi) support"
tristate
default n
- depends ADK_PACKAGE_ASTERISK
+ depends on ADK_PACKAGE_ASTERISK
help
Distributed Universal Number Discovery (DUNDi) support for Asterisk
@@ -64,7 +64,7 @@ config ADK_PACKAGE_ASTERISK_RES_AGI
prompt "asterisk-res-agi................ Asterisk Gateway Interface module"
tristate
default n
- depends ADK_PACKAGE_ASTERISK
+ depends on ADK_PACKAGE_ASTERISK
help
Asterisk Gateway Interface module
@@ -72,7 +72,7 @@ config ADK_PACKAGE_ASTERISK_PGSQL
prompt "asterisk-pgsql.................. PostgreSQL modules"
tristate
default n
- depends ADK_PACKAGE_ASTERISK
+ depends on ADK_PACKAGE_ASTERISK
select ADK_PACKAGE_LIBPQ
help
PostgreSQL modules for Asterisk
@@ -81,7 +81,7 @@ config ADK_PACKAGE_ASTERISK_SOUNDS
prompt "asterisk-sounds................. Sound files"
tristate
default n
- depends ADK_PACKAGE_ASTERISK
+ depends on ADK_PACKAGE_ASTERISK
help
Sound files for Asterisk
@@ -89,7 +89,7 @@ config ADK_PACKAGE_ASTERISK_VOICEMAIL
prompt "asterisk-voicemail.............. Voicemail support"
tristate
default n
- depends ADK_PACKAGE_ASTERISK
+ depends on ADK_PACKAGE_ASTERISK
help
Voicemail related modules for Asterisk
diff --git a/package/atftp/Config.in b/package/atftp/Config.in
index 11e1c02b2..8d48e2094 100644
--- a/package/atftp/Config.in
+++ b/package/atftp/Config.in
@@ -3,7 +3,7 @@
config ADK_COMPILE_ATFTP
tristate
default n
- depends ADK_PACKAGE_ATFTP || ADK_PACKAGE_ATFTPD
+ depends on ADK_PACKAGE_ATFTP || ADK_PACKAGE_ATFTPD
select ADK_PACKAGE_LIBREADLINE
config ADK_PACKAGE_ATFTP
diff --git a/package/avahi/Config.in b/package/avahi/Config.in
index 260096bb6..53d0e1ff8 100644
--- a/package/avahi/Config.in
+++ b/package/avahi/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_AVAHI
tristate
default n
- depends ADK_PACKAGE_AVAHI_DAEMON || ADK_PACKAGE_AVAHI_DNSCONFD || ADK_PACKAGE_LIBAVAHI
+ depends on ADK_PACKAGE_AVAHI_DAEMON || ADK_PACKAGE_AVAHI_DNSCONFD || ADK_PACKAGE_LIBAVAHI
config ADK_PACKAGE_AVAHI_DAEMON
prompt "avahi-daemon...................... An mDNS/DNS-SD (ZeroConf) implementation (daemon)"
@@ -28,7 +28,7 @@ config ADK_PACKAGE_AVAHI_DNSCONFD
tristate
default n
select ADK_COMPILE_AVAHI
- depends ADK_PACKAGE_AVAHI_DAEMON
+ depends on ADK_PACKAGE_AVAHI_DAEMON
help
Avahi is a system which facilitates service discovery on a local network --
this means that you can plug your laptop or computer into a network and
diff --git a/package/axtls/Config.in b/package/axtls/Config.in
index 5d1459da9..7c99a9617 100644
--- a/package/axtls/Config.in
+++ b/package/axtls/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_AXTLS
tristate
default n
- depends ADK_PACKAGE_LIBAXTLS || ADK_PACKAGE_AXHTTPD
+ depends on ADK_PACKAGE_LIBAXTLS || ADK_PACKAGE_AXHTTPD
config ADK_PACKAGE_AXHTTPD
prompt "axhttpd........................... small embedded webserver"
diff --git a/package/bc/Config.in b/package/bc/Config.in
index cae451a06..20a7d15c4 100644
--- a/package/bc/Config.in
+++ b/package/bc/Config.in
@@ -1,6 +1,6 @@
config ADK_COMPILE_BC
tristate
- depends ADK_PACKAGE_BC || ADK_PACKAGE_DC
+ depends on ADK_PACKAGE_BC || ADK_PACKAGE_DC
default n
config ADK_PACKAGE_BC
diff --git a/package/bind/Config.in b/package/bind/Config.in
index 1286057ba..b561312fc 100644
--- a/package/bind/Config.in
+++ b/package/bind/Config.in
@@ -12,7 +12,7 @@ config ADK_PACKAGE_BIND_RNDC
prompt "bind-rndc......................... Bind administration tools (rndc & rndc-confgen only)"
tristate
default n
- depends ADK_DUMMY_BIND
+ depends on ADK_DUMMY_BIND
select ADK_COMPILE_BIND
select ADK_PACKAGE_LIBBIND
help
@@ -23,7 +23,7 @@ config ADK_PACKAGE_BIND_CHECK
prompt "bind-check........................ Bind administration tools (named-checkconf & named-checkzone only)"
tristate
default n
- depends ADK_DUMMY_BIND
+ depends on ADK_DUMMY_BIND
select ADK_COMPILE_BIND
select ADK_PACKAGE_LIBBIND
help
@@ -34,7 +34,7 @@ config ADK_PACKAGE_BIND_DNSSEC
prompt "bind-dnssec....................... Bind administration tools (dnssec-keygen & dnssec-signzone only)"
tristate
default n
- depends ADK_DUMMY_BIND
+ depends on ADK_DUMMY_BIND
select ADK_COMPILE_BIND
select ADK_PACKAGE_LIBBIND
help
@@ -45,7 +45,7 @@ config ADK_PACKAGE_BIND_HOST
prompt "bind-host......................... A simple DNS client"
tristate
default n
- depends ADK_DUMMY_BIND
+ depends on ADK_DUMMY_BIND
select ADK_COMPILE_BIND
select ADK_PACKAGE_LIBBIND
help
@@ -57,7 +57,7 @@ config ADK_PACKAGE_BIND_DIG
prompt "bind-dig.......................... A DNS client"
tristate
default n
- depends ADK_DUMMY_BIND
+ depends on ADK_DUMMY_BIND
select ADK_COMPILE_BIND
select ADK_PACKAGE_LIBBIND
help
@@ -69,7 +69,7 @@ config ADK_PACKAGE_BIND_CLIENT
prompt "bind-client....................... A dynamic DNS client"
tristate
default n
- depends ADK_DUMMY_BIND
+ depends on ADK_DUMMY_BIND
select ADK_COMPILE_BIND
select ADK_PACKAGE_LIBBIND
help
@@ -80,7 +80,7 @@ config ADK_PACKAGE_BIND_SERVER
prompt "bind-server....................... A DNS server"
tristate
default n
- depends ADK_DUMMY_BIND
+ depends on ADK_DUMMY_BIND
select ADK_COMPILE_BIND
select ADK_PACKAGE_LIBBIND
help
@@ -91,7 +91,7 @@ config ADK_PACKAGE_LIBBIND
prompt "libbind........................... Support library for the bind tools and dns server/client."
tristate
default n
- depends ADK_DUMMY_BIND
+ depends on ADK_DUMMY_BIND
select ADK_COMPILE_BIND
help
http://www.isc.org/sw/bind/
diff --git a/package/bogofilter/Config.in b/package/bogofilter/Config.in
index 1dfb7d2d5..922f17376 100644
--- a/package/bogofilter/Config.in
+++ b/package/bogofilter/Config.in
@@ -12,15 +12,15 @@ config ADK_PACKAGE_BOGOFILTER
config ADK_PACKAGE_BOGOFILTER_BOGOUTIL
- prompt " include bogoutil in firmware image and package file"
+ prompt "include bogoutil in firmware image and package file"
bool
default n
- depends ADK_PACKAGE_BOGOFILTER
+ depends on ADK_PACKAGE_BOGOFILTER
config ADK_PACKAGE_BOGOFILTER_BOGOTUNE
- prompt " include bogotune in firmware image and package file"
+ prompt "include bogotune in firmware image and package file"
bool
default n
- depends ADK_PACKAGE_BOGOFILTER
+ depends on ADK_PACKAGE_BOGOFILTER
diff --git a/package/collectd/Config.in b/package/collectd/Config.in
index f645ee403..d040e581c 100644
--- a/package/collectd/Config.in
+++ b/package/collectd/Config.in
@@ -15,22 +15,22 @@ config ADK_PACKAGE_COLLECTD_CPU
prompt "Enable cpu support"
bool
default y
- depends ADK_PACKAGE_COLLECTD
+ depends on ADK_PACKAGE_COLLECTD
config ADK_PACKAGE_COLLECTD_LOAD
prompt "Enable load support"
bool
default y
- depends ADK_PACKAGE_COLLECTD
+ depends on ADK_PACKAGE_COLLECTD
config ADK_PACKAGE_COLLECTD_MEMORY
prompt "Enable memory support"
bool
default y
- depends ADK_PACKAGE_COLLECTD
+ depends on ADK_PACKAGE_COLLECTD
config ADK_PACKAGE_COLLECTD_PING
prompt "Enable ping support"
bool
default y
- depends ADK_PACKAGE_COLLECTD
+ depends on ADK_PACKAGE_COLLECTD
diff --git a/package/curl/Config.in b/package/curl/Config.in
index a74a823e2..b5d42ea1f 100644
--- a/package/curl/Config.in
+++ b/package/curl/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_CURL
tristate
default n
- depends ADK_PACKAGE_LIBCURL
+ depends on ADK_PACKAGE_LIBCURL
config ADK_PACKAGE_LIBCURL
prompt "libcurl........................... A client-side URL transfer library"
@@ -19,7 +19,7 @@ config ADK_PACKAGE_CURL
prompt "curl............................ A client-side URL transfer tool"
tristate
default n
- depends ADK_PACKAGE_LIBCURL
+ depends on ADK_PACKAGE_LIBCURL
help
A client-side URL transfer tool.
diff --git a/package/cyrus-sasl/Config.in b/package/cyrus-sasl/Config.in
index 6a03bbfb4..2b4657e5a 100644
--- a/package/cyrus-sasl/Config.in
+++ b/package/cyrus-sasl/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_CYRUS_SASL
tristate
default n
- depends ADK_PACKAGE_LIBSASL2
+ depends on ADK_PACKAGE_LIBSASL2
config ADK_PACKAGE_LIBSASL2
prompt "libsasl2.......................... General purpose authentication library"
diff --git a/package/dhcp/Config.in b/package/dhcp/Config.in
index 42fbf67f0..f58191e64 100644
--- a/package/dhcp/Config.in
+++ b/package/dhcp/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_DHCP
tristate
default n
- depends ADK_PACKAGE_DHCP_RELAY || ADK_PACKAGE_DHCP_SERVER
+ depends on ADK_PACKAGE_DHCP_RELAY || ADK_PACKAGE_DHCP_SERVER
config ADK_PACKAGE_DHCP_RELAY
prompt "dhcp-relay........................ ISC DHCP relay"
diff --git a/package/dropbear/Config.in b/package/dropbear/Config.in
index 0729a7422..ea087b8bb 100644
--- a/package/dropbear/Config.in
+++ b/package/dropbear/Config.in
@@ -11,4 +11,4 @@ config ADK_PACKAGE_DBCONVERT
prompt "dropbearconvert................. Utility for converting SSH keys"
tristate
default n
- depends ADK_PACKAGE_DROPBEAR
+ depends on ADK_PACKAGE_DROPBEAR
diff --git a/package/e2fsprogs/Config.in b/package/e2fsprogs/Config.in
index 6638f88fc..0dff689d1 100644
--- a/package/e2fsprogs/Config.in
+++ b/package/e2fsprogs/Config.in
@@ -13,14 +13,14 @@ config ADK_PACKAGE_E2FSPROGS
config ADK_PACKAGE_LIBUUID
prompt "libuuid......................... UUID library"
- depends ADK_PACKAGE_E2FSPROGS
+ depends on ADK_PACKAGE_E2FSPROGS
tristate
default n
help
config ADK_PACKAGE_LIBCOM_ERR
prompt "libcom_err...................... Common error library"
- depends ADK_PACKAGE_E2FSPROGS
+ depends on ADK_PACKAGE_E2FSPROGS
tristate
default n
help
diff --git a/package/expat/Config.in b/package/expat/Config.in
index 861777a94..209d357b7 100644
--- a/package/expat/Config.in
+++ b/package/expat/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_EXPAT
tristate
default n
- depends ADK_PACKAGE_LIBEXPAT
+ depends on ADK_PACKAGE_LIBEXPAT
config ADK_PACKAGE_LIBEXPAT
prompt "libexpat.......................... A fast, non-validating, stream-oriented XML parsing library"
diff --git a/package/faad2/Config.in b/package/faad2/Config.in
index 21d3194c3..8d554727d 100644
--- a/package/faad2/Config.in
+++ b/package/faad2/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_FAAD2
tristate
default n
- depends ADK_PACKAGE_LIBFAAD2
+ depends on ADK_PACKAGE_LIBFAAD2
config ADK_PACKAGE_LIBFAAD2
prompt "libfaad2.......................... MP4 decoding library"
diff --git a/package/fetchmail/Config.in b/package/fetchmail/Config.in
index fa7f1bfe2..5319a963f 100644
--- a/package/fetchmail/Config.in
+++ b/package/fetchmail/Config.in
@@ -9,8 +9,8 @@ config ADK_PACKAGE_FETCHMAIL
Known to be full of security holes, beware.
config ADK_PACKAGE_FETCHMAIL_SSL
- bool " Enable SSL/TLS support"
- depends ADK_PACKAGE_FETCHMAIL
+ bool "Enable SSL/TLS support"
+ depends on ADK_PACKAGE_FETCHMAIL
select ADK_PACKAGE_LIBOPENSSL
default n
help
diff --git a/package/flac/Config.in b/package/flac/Config.in
index bef5c0876..346e70e75 100644
--- a/package/flac/Config.in
+++ b/package/flac/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_FLAC
tristate
default n
- depends ADK_PACKAGE_LIBFLAC
+ depends on ADK_PACKAGE_LIBFLAC
config ADK_PACKAGE_LIBFLAC
prompt "libflac........................... Free Lossless Audio Codec library"
diff --git a/package/freeradius-client/Config.in b/package/freeradius-client/Config.in
index 79325a755..987c52c0a 100644
--- a/package/freeradius-client/Config.in
+++ b/package/freeradius-client/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_FREERADIUS_CLIENT
tristate
default n
- depends ADK_PACKAGE_LIBFREERADIUS_CLIENT
+ depends on ADK_PACKAGE_LIBFREERADIUS_CLIENT
config ADK_PACKAGE_FREERADIUS_CLIENT
prompt "freeradius-client................. RADIUS client"
diff --git a/package/freeradius-server/Config.in b/package/freeradius-server/Config.in
index 56fcf16ea..d7dc0cb03 100644
--- a/package/freeradius-server/Config.in
+++ b/package/freeradius-server/Config.in
@@ -10,89 +10,89 @@ config ADK_PACKAGE_FREERADIUS_SERVER
http://www.freeradius.org/
config ADK_PACKAGE_FREERADIUS_DEMOCERTS
- prompt " freeradius-democerts.......... Demo certificates to test the server"
+ prompt "freeradius-democerts.......... Demo certificates to test the server"
tristate
default n
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
config ADK_PACKAGE_FREERADIUS_MOD_CHAP
- prompt " freeradius-mod-chap........... CHAP module"
+ prompt "freeradius-mod-chap........... CHAP module"
tristate
default n
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
config ADK_PACKAGE_FREERADIUS_MOD_DETAIL
- prompt " freeradius-mod-detail......... Detailed accounting module"
+ prompt "freeradius-mod-detail......... Detailed accounting module"
tristate
default n
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
config ADK_PACKAGE_FREERADIUS_MOD_DIGEST
- prompt " freeradius-mod-digest......... Digest authentication"
+ prompt "freeradius-mod-digest......... Digest authentication"
tristate
default n
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
config ADK_PACKAGE_FREERADIUS_MOD_FILES
- prompt " freeradius-mod-files.......... Module using local files for authorization"
+ prompt "freeradius-mod-files.......... Module using local files for authorization"
tristate
default y
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
config ADK_PACKAGE_FREERADIUS_MOD_LDAP
- prompt " freeradius-mod-ldap........... LDAP module"
+ prompt "freeradius-mod-ldap........... LDAP module"
tristate
default n
select ADK_PACKAGE_LIBOPENLDAP
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
config ADK_PACKAGE_FREERADIUS_MOD_MSCHAP
- prompt " freeradius-mod-mschap......... MS-CHAP and MS-CHAPv2 module"
+ prompt "freeradius-mod-mschap......... MS-CHAP and MS-CHAPv2 module"
tristate
default n
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
config ADK_PACKAGE_FREERADIUS_MOD_PAP
- prompt " freeradius-mod-pap............ PAP module"
+ prompt "freeradius-mod-pap............ PAP module"
tristate
default n
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
config ADK_PACKAGE_FREERADIUS_MOD_PREPROCESS
- prompt " freeradius-mod-preprocess..... Request pre-processing module"
+ prompt "freeradius-mod-preprocess..... Request pre-processing module"
tristate
default n
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
config ADK_PACKAGE_FREERADIUS_MOD_REALM
- prompt " freeradius-mod-realm.......... Realms handling module"
+ prompt "freeradius-mod-realm.......... Realms handling module"
tristate
default n
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
config ADK_PACKAGE_FREERADIUS_MOD_SQL
- prompt " freeradius-mod-sql............ Base SQL module"
+ prompt "freeradius-mod-sql............ Base SQL module"
tristate
default n
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
config ADK_PACKAGE_FREERADIUS_MOD_SQL_MYSQL
- prompt " freeradius-mod-sql-mysql.... MySQL module"
+ prompt "freeradius-mod-sql-mysql.... MySQL module"
tristate
default n
depends on ADK_CXX
- depends ADK_PACKAGE_FREERADIUS_MOD_SQL
+ depends on ADK_PACKAGE_FREERADIUS_MOD_SQL
select ADK_PACKAGE_LIBMYSQLCLIENT
config ADK_PACKAGE_FREERADIUS_MOD_SQL_PGSQL
- prompt " freeradius-mod-sql-pgsql.... PostgreSQL module"
+ prompt "freeradius-mod-sql-pgsql.... PostgreSQL module"
tristate
default n
- depends ADK_PACKAGE_FREERADIUS_MOD_SQL
+ depends on ADK_PACKAGE_FREERADIUS_MOD_SQL
select ADK_PACKAGE_LIBPQ
config ADK_PACKAGE_FREERADIUS_UTILS
- prompt " freeradius-utils.............. Misc. client utilities"
+ prompt "freeradius-utils.............. Misc. client utilities"
tristate
default n
- depends ADK_PACKAGE_FREERADIUS_SERVER
+ depends on ADK_PACKAGE_FREERADIUS_SERVER
diff --git a/package/freetype/Config.in b/package/freetype/Config.in
index f860e7ce0..408998aa8 100644
--- a/package/freetype/Config.in
+++ b/package/freetype/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_FREETYPE
tristate
default n
- depends ADK_PACKAGE_LIBFREETYPE
+ depends on ADK_PACKAGE_LIBFREETYPE
config ADK_PACKAGE_LIBFREETYPE
tristate "libfreetype....................... A free, high-quality and portable font engine"
diff --git a/package/gmp/Config.in b/package/gmp/Config.in
index e681b6519..9ef3f1e4a 100644
--- a/package/gmp/Config.in
+++ b/package/gmp/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_GMP
tristate
default n
- depends ADK_PACKAGE_LIBGMP
+ depends on ADK_PACKAGE_LIBGMP
config ADK_PACKAGE_LIBGMP
prompt "libgmp............................ GNU multiprecision arithmetic library"
diff --git a/package/gnutls/Config.in b/package/gnutls/Config.in
index ffe1125b0..83db1d706 100644
--- a/package/gnutls/Config.in
+++ b/package/gnutls/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_GNUTLS
tristate
default n
- depends ADK_PACKAGE_LIBGNUTLS
+ depends on ADK_PACKAGE_LIBGNUTLS
config ADK_PACKAGE_LIBGNUTLS
prompt "libgnutls......................... The GNU TLS library"
@@ -41,7 +41,7 @@ config ADK_PACKAGE_LIBGNUTLS_EXTRA
prompt "libgnutls-extra................... The GNU TLS extra library"
tristate
default n
- depends ADK_PACKAGE_LIBGNUTLS
+ depends on ADK_PACKAGE_LIBGNUTLS
select ADK_PACKAGE_LIBOPENCDK
select ADK_PACKAGE_LIBLZO
help
@@ -58,7 +58,7 @@ config ADK_PACKAGE_LIBGNUTLS_OPENSSL
prompt "libgnutls-openssl................. The GNU TLS OpenSSL compatibility layer library"
tristate
default n
- depends ADK_PACKAGE_LIBGNUTLS
+ depends on ADK_PACKAGE_LIBGNUTLS
help
GnuTLS is a project that aims to develop a library which provides a
secure layer, over a reliable transport layer. Currently the GnuTLS
@@ -73,7 +73,7 @@ config ADK_PACKAGE_LIBGNUTLSXX
tristate
default n
depends on ADK_CXX
- depends ADK_PACKAGE_LIBGNUTLS
+ depends on ADK_PACKAGE_LIBGNUTLS
help
GnuTLS is a project that aims to develop a library which provides a
secure layer, over a reliable transport layer. Currently the GnuTLS
@@ -104,7 +104,7 @@ config ADK_PACKAGE_GNUTLS_UTILS
prompt "gnutls-utils...................... The GNU TLS utilities"
tristate
default n
- depends ADK_PACKAGE_LIBGNUTLS
+ depends on ADK_PACKAGE_LIBGNUTLS
select ADK_PACKAGE_LIBGNUTLS_EXTRA
help
GnuTLS is a project that aims to develop a library which provides a
diff --git a/package/gsm/Config.in b/package/gsm/Config.in
index 77bf91626..9af1d7dda 100644
--- a/package/gsm/Config.in
+++ b/package/gsm/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_GSM
tristate
default n
- depends ADK_PACKAGE_LIBGSM
+ depends on ADK_PACKAGE_LIBGSM
config ADK_PACKAGE_LIBGSM
prompt "libgsm............................ A GSM 06.10 full-rate speech transcoding implementation (library)"
@@ -20,7 +20,7 @@ config ADK_PACKAGE_GSM_UTILS
prompt "gsm-utils....................... A GSM 06.10 full-rate speech transcoding implementation (utilities)"
tristate
default n
- depends ADK_PACKAGE_LIBGSM
+ depends on ADK_PACKAGE_LIBGSM
help
An implementation of the European GSM 06.10 provisional standard
for full-rate speech transcoding, prI-ETS 300 036, which uses
diff --git a/package/hostapd/Config.in b/package/hostapd/Config.in
index 562f1f23c..bd0ec3865 100644
--- a/package/hostapd/Config.in
+++ b/package/hostapd/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_HOSTAPD
tristate
default n
- depends ADK_PACKAGE_HOSTAPD || ADK_PACKAGE_HOSTAPD_UTILS
+ depends on ADK_PACKAGE_HOSTAPD || ADK_PACKAGE_HOSTAPD_UTILS
config ADK_PACKAGE_HOSTAPD
prompt "hostapd........................... An IEEE 802.11 AP, IEEE 802.1x/WPA/WPA2/EAP/RADIUS Authenticator"
diff --git a/package/iptables/Config.in b/package/iptables/Config.in
index bf7fd0ebb..5b82599ad 100644
--- a/package/iptables/Config.in
+++ b/package/iptables/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_IPTABLES
bool
default n
- depends ADK_PACKAGE_IPTABLES || ADK_PACKAGE_IP6TABLES
+ depends on ADK_PACKAGE_IPTABLES || ADK_PACKAGE_IP6TABLES
config ADK_PACKAGE_IPTABLES
prompt "iptables.......................... IPv4 firewall administration tool"
@@ -25,7 +25,7 @@ config ADK_PACKAGE_IPTABLES_UTILS
prompt "iptables-utils.................. Save and restore utilities"
tristate
default n
- depends ADK_PACKAGE_IPTABLES
+ depends on ADK_PACKAGE_IPTABLES
help
iptables-save and iptables-restore for Iptables (IPv4)
diff --git a/package/irssi/Config.in b/package/irssi/Config.in
index 44fa5d5a4..79047c471 100644
--- a/package/irssi/Config.in
+++ b/package/irssi/Config.in
@@ -10,8 +10,8 @@ config ADK_PACKAGE_IRSSI
http://irssi.org
config ADK_PACKAGE_IRSSI_SSL
- bool " Enable SSL/TLS support"
- depends ADK_PACKAGE_IRSSI
+ bool "Enable SSL/TLS support"
+ depends on ADK_PACKAGE_IRSSI
select ADK_PACKAGE_LIBOPENSSL
default n
help
diff --git a/package/jpeg/Config.in b/package/jpeg/Config.in
index 4d05a0761..4fe390d21 100644
--- a/package/jpeg/Config.in
+++ b/package/jpeg/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_JPEG
tristate
default n
- depends ADK_PACKAGE_LIBJPEG
+ depends on ADK_PACKAGE_LIBJPEG
config ADK_PACKAGE_LIBJPEG
prompt "libjpeg........................... The Independent JPEG Group's JPEG runtime library"
diff --git a/package/kismet/Config.in b/package/kismet/Config.in
index 84b256509..2583f88d2 100644
--- a/package/kismet/Config.in
+++ b/package/kismet/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_KISMET
tristate
default n
- depends ADK_PACKAGE_KISMET_CLIENT || ADK_PACKAGE_KISMET_DRONE || ADK_PACKAGE_KISMET_SERVER
+ depends on ADK_PACKAGE_KISMET_CLIENT || ADK_PACKAGE_KISMET_DRONE || ADK_PACKAGE_KISMET_SERVER
config ADK_PACKAGE_KISMET_CLIENT
prompt "kismet-client..................... The Kismet client"
diff --git a/package/knock/Config.in b/package/knock/Config.in
index ada7f06c8..291ea3b0d 100644
--- a/package/knock/Config.in
+++ b/package/knock/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_KNOCK
tristate
default n
- depends ADK_PACKAGE_KNOCK || ADK_PACKAGE_KNOCKD
+ depends on ADK_PACKAGE_KNOCK || ADK_PACKAGE_KNOCKD
config ADK_PACKAGE_KNOCK
prompt "knock............................. A port-knocking client"
diff --git a/package/libdb/Config.in b/package/libdb/Config.in
index f8360bee8..510311508 100644
--- a/package/libdb/Config.in
+++ b/package/libdb/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_DB
tristate
default n
- depends ADK_PACKAGE_LIBDB
+ depends on ADK_PACKAGE_LIBDB
config ADK_PACKAGE_LIBDB
prompt "libdb............................. Berkeley DB"
diff --git a/package/libshout/Config.in b/package/libshout/Config.in
index 9c9aaf3d5..2a34f2c1b 100644
--- a/package/libshout/Config.in
+++ b/package/libshout/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_LIBSHOUT
tristate
default n
- depends ADK_PACKAGE_LIBSHOUT
+ depends on ADK_PACKAGE_LIBSHOUT
config ADK_PACKAGE_LIBSHOUT
prompt "libshout.......................... Streaming library"
diff --git a/package/libtirpc/Makefile b/package/libtirpc/Makefile
index 0a8ee70e8..08d0d765e 100644
--- a/package/libtirpc/Makefile
+++ b/package/libtirpc/Makefile
@@ -16,11 +16,19 @@ DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.bz2
include ${TOPDIR}/mk/package.mk
+ifeq (${ADK_IPV6},y)
+PKG_DEPENDS+= libgssglue
+endif
+
$(eval $(call PKG_template,LIBTIRPC,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
CONFIGURE_STYLE:= autotool gnu
ifneq (${ADK_COMPILE_NFS_UTILS_WITH_KERBEROS},y)
+ifneq (${ADK_IPV6},y)
CONFIGURE_ARGS+= --disable-gss
+else
+CONFIGURE_ARGS+= --enable-gss
+endif
endif
BUILD_STYLE:= auto
INSTALL_STYLE:= auto
diff --git a/package/libtool/Config.in b/package/libtool/Config.in
index aed0c9640..5d26b838b 100644
--- a/package/libtool/Config.in
+++ b/package/libtool/Config.in
@@ -1,6 +1,6 @@
config ADK_COMPILE_LIBTOOL
tristate
- depends ADK_PACKAGE_LIBLTDL
+ depends on ADK_PACKAGE_LIBLTDL
config ADK_PACKAGE_LIBLTDL
prompt "libltdl........................... A generic dynamic object loading library"
diff --git a/package/libtorrent/Config.in b/package/libtorrent/Config.in
index be20ecbea..ab8ae5585 100644
--- a/package/libtorrent/Config.in
+++ b/package/libtorrent/Config.in
@@ -22,7 +22,7 @@ config ADK_COMPILE_LIBTORRENT_WITH_STDCXX
config ADK_COMPILE_LIBTORRENT_WITH_UCLIBCXX
bool "Embedded uClibc++ library"
select ADK_PACKAGE_UCLIBCXX
- depends ADK_BROKEN
+ depends on ADK_BROKEN
help
endchoice
diff --git a/package/lighttpd/Config.in b/package/lighttpd/Config.in
index 6eea65df2..b56fa8bff 100644
--- a/package/lighttpd/Config.in
+++ b/package/lighttpd/Config.in
@@ -11,103 +11,103 @@ config ADK_PACKAGE_LIGHTTPD
http://www.lighttpd.net/
config ADK_COMPILE_LIGHTTPD_WITH_OPENSSL
- bool " Use OpenSSL for https support"
+ bool "Use OpenSSL for https support"
default y
depends on ADK_PACKAGE_LIGHTTPD
select ADK_PACKAGE_LIBOPENSSL
config ADK_PACKAGE_LIGHTTPD_MOD_ACCESSLOG
- prompt " lighttpd-mod-accesslog........ Access logging module"
+ prompt "lighttpd-mod-accesslog........ Access logging module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_ALIAS
- prompt " lighttpd-mod-alias............ Directory alias module"
+ prompt "lighttpd-mod-alias............ Directory alias module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_AUTH
- prompt " lighttpd-mod-auth............. Authentication module"
+ prompt "lighttpd-mod-auth............. Authentication module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_CGI
- prompt " lighttpd-mod-cgi.............. CGI module"
+ prompt "lighttpd-mod-cgi.............. CGI module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_EVASIVE
- prompt " lighttpd-mod-evasive.......... Evasive module"
+ prompt "lighttpd-mod-evasive.......... Evasive module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_EXPIRE
- prompt " lighttpd-mod-expire........... Expire module"
+ prompt "lighttpd-mod-expire........... Expire module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_FASTCGI
- prompt " lighttpd-mod-fastcgi.......... FastCGI module"
+ prompt "lighttpd-mod-fastcgi.......... FastCGI module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_PROXY
- prompt " lighttpd-mod-proxy............ Proxy module"
+ prompt "lighttpd-mod-proxy............ Proxy module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_REDIRECT
- prompt " lighttpd-mod-redirect......... URL redirection module"
+ prompt "lighttpd-mod-redirect......... URL redirection module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_REWRITE
- prompt " lighttpd-mod-rewrite.......... URL rewriting module"
+ prompt "lighttpd-mod-rewrite.......... URL rewriting module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_SETENV
- prompt " lighttpd-mod-setenv........... Environment variable setting module"
+ prompt "lighttpd-mod-setenv........... Environment variable setting module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_SIMPLE_VHOST
- prompt " lighttpd-mod-simple-vhost..... Simple virtual hosting module"
+ prompt "lighttpd-mod-simple-vhost..... Simple virtual hosting module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_SSI
- prompt " lighttpd-mod-ssi.............. SSI module"
+ prompt "lighttpd-mod-ssi.............. SSI module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_STATUS
- prompt " lighttpd-mod-status........... Server status display module"
+ prompt "lighttpd-mod-status........... Server status display module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_USERTRACK
- prompt " lighttpd-mod-usertrack........ User tracking module"
+ prompt "lighttpd-mod-usertrack........ User tracking module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
config ADK_PACKAGE_LIGHTTPD_MOD_WEBDAV
- prompt " lighttpd-mod-webdav........... webdav module"
+ prompt "lighttpd-mod-webdav........... webdav module"
tristate
default n
- depends ADK_PACKAGE_LIGHTTPD
+ depends on ADK_PACKAGE_LIGHTTPD
diff --git a/package/lua/Config.in b/package/lua/Config.in
index 1fbff9ebe..580d82217 100644
--- a/package/lua/Config.in
+++ b/package/lua/Config.in
@@ -3,7 +3,7 @@
config ADK_COMPILE_LUA
tristate
default n
- depends ADK_PACKAGE_LIBLUA
+ depends on ADK_PACKAGE_LIBLUA
config ADK_PACKAGE_LIBLUA
prompt "liblua............................ LUA programming language shared libraries"
diff --git a/package/mini_httpd/Config.in b/package/mini_httpd/Config.in
index 3922f14cd..bd83fdb09 100644
--- a/package/mini_httpd/Config.in
+++ b/package/mini_httpd/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_MINI_HTTPD
tristate
default n
- depends ADK_PACKAGE_MINI_HTTPD || ADK_PACKAGE_MINI_HTTPD_OPENSSL
+ depends on ADK_PACKAGE_MINI_HTTPD || ADK_PACKAGE_MINI_HTTPD_OPENSSL
config ADK_PACKAGE_MINI_HTTPD
prompt "mini-httpd........................ A small web server"
diff --git a/package/miredo/Config.in b/package/miredo/Config.in
index 928e06c5d..8fb215c06 100644
--- a/package/miredo/Config.in
+++ b/package/miredo/Config.in
@@ -3,13 +3,13 @@ config ADK_COMPILE_MIREDO
default n
depends on ADK_CXX
depends on ADK_IPV6
- depends ADK_PACKAGE_MIREDO || ADK_PACKAGE_MIREDO_SERVER
+ depends on ADK_PACKAGE_MIREDO || ADK_PACKAGE_MIREDO_SERVER
config ADK_PACKAGE_MIREDO
prompt "miredo............................ Teredo (IPv6 tunneling over UDP through NAT) client and relay daemon"
tristate
default n
- depends ADK_IPV6
+ depends on ADK_IPV6
depends on ADK_CXX
select ADK_COMPILE_MIREDO
select ADK_KPACKAGE_KMOD_IPV6
@@ -23,7 +23,7 @@ config ADK_PACKAGE_MIREDO_SERVER
prompt "miredo-server..................... Teredo (IPv6 tunneling over UDP through NAT) server daemon"
tristate
default n
- depends ADK_IPV6
+ depends on ADK_IPV6
depends on ADK_CXX
select ADK_COMPILE_MIREDO
select ADK_KPACKAGE_KMOD_IPV6
diff --git a/package/mksh/Config.in b/package/mksh/Config.in
index 39f792af3..50578b0d2 100644
--- a/package/mksh/Config.in
+++ b/package/mksh/Config.in
@@ -21,8 +21,8 @@ config ADK_PACKAGE_MKSH
http://mirbsd.de/mksh
config ADK_PACKAGE_MKSH_FULL
- bool " Include all features"
- depends ADK_PACKAGE_MKSH
+ bool "Include all features"
+ depends on ADK_PACKAGE_MKSH
default y
help
Disable this to remove a few functions from mksh to make it smaller.
diff --git a/package/mpd/Config.in b/package/mpd/Config.in
index 259df005f..89a98f24e 100644
--- a/package/mpd/Config.in
+++ b/package/mpd/Config.in
@@ -15,28 +15,28 @@ config ADK_PACKAGE_MPD
http://www.musicpd.org/
config ADK_COMPILE_MPD_WITH_MP3
- prompt " MP3 support"
+ prompt "MP3 support"
bool
default y
- depends ADK_PACKAGE_MPD
+ depends on ADK_PACKAGE_MPD
select ADK_PACKAGE_LIBMAD
select ADK_PACKAGE_LIBID3TAG
help
Enable mp3 support (libmad).
config ADK_COMPILE_MPD_WITH_MP4
- prompt " MP4/AAC support"
+ prompt "MP4/AAC support"
bool
default y
- depends ADK_PACKAGE_MPD
+ depends on ADK_PACKAGE_MPD
select ADK_PACKAGE_LIBFAAD2
help
Enable mp4/aac support (libfaad2).
config ADK_COMPILE_MPD_OGG
- prompt " Ogg/Vorbis Support"
+ prompt "Ogg/Vorbis Support"
tristate
- depends ADK_PACKAGE_MPD
+ depends on ADK_PACKAGE_MPD
select ADK_COMPILE_MPD_WITH_OGG if ADK_COMPILE_MPD_OGG_FLOAT
select ADK_COMPILE_MPD_WITH_TREMOR if ADK_COMPILE_MPD_OGG_FIXED
default y
@@ -55,8 +55,8 @@ endchoice
config ADK_COMPILE_MPD_WITH_OGG
bool
default n
- depends ADK_PACKAGE_MPD
- depends ADK_COMPILE_MPD_OGG_FLOAT
+ depends on ADK_PACKAGE_MPD
+ depends on ADK_COMPILE_MPD_OGG_FLOAT
select ADK_PACKAGE_LIBOGG
select ADK_PACKAGE_LIBVORBIS
help
@@ -65,28 +65,28 @@ config ADK_COMPILE_MPD_WITH_OGG
config ADK_COMPILE_MPD_WITH_TREMOR
bool
default n
- depends ADK_PACKAGE_MPD
- depends ADK_COMPILE_MPD_OGG_FIXED
+ depends on ADK_PACKAGE_MPD
+ depends on ADK_COMPILE_MPD_OGG_FIXED
select ADK_PACKAGE_LIBVORBISIDEC
help
Enable ogg support (tremor).
Can not be used with shout plugin.
config ADK_COMPILE_MPD_WITH_FLAC
- prompt " FLAC Support"
+ prompt "FLAC Support"
bool
default y
- depends ADK_PACKAGE_MPD
+ depends on ADK_PACKAGE_MPD
select ADK_PACKAGE_LIBFLAC
help
Enable flac support (libflac).
config ADK_COMPILE_MPD_WITH_SHOUT
- prompt " Shout Support (Streaming support)"
+ prompt "Shout Support (Streaming support)"
bool
default y
- depends ADK_PACKAGE_MPD
- depends ADK_COMPILE_MPD_WITH_OGG
+ depends on ADK_PACKAGE_MPD
+ depends on ADK_COMPILE_MPD_WITH_OGG
select ADK_PACKAGE_LIBSHOUT
select ADK_PACKAGE_LIBVORBISENC
select ADK_PACKAGE_LIBLAME
diff --git a/package/mysql/Config.in b/package/mysql/Config.in
index 14b27169e..411823eb7 100644
--- a/package/mysql/Config.in
+++ b/package/mysql/Config.in
@@ -1,8 +1,8 @@
config ADK_COMPILE_MYSQL
tristate
default n
- depends ADK_PACKAGE_LIBMYSQLCLIENT
- depends ADK_CXX
+ depends on ADK_PACKAGE_LIBMYSQLCLIENT
+ depends on ADK_CXX
select ADK_PACKAGE_LIBNCURSES
select ADK_PACKAGE_ZLIB
select ADK_PACKAGE_LIBREADLINE
@@ -11,7 +11,7 @@ config ADK_PACKAGE_LIBMYSQLCLIENT
prompt "libmysqlclient.................... MySQL client library"
tristate
default n
- depends ADK_CXX
+ depends on ADK_CXX
select ADK_COMPILE_MYSQL
help
MySQL client library.
diff --git a/package/nano/Config.in b/package/nano/Config.in
index 7b164fa22..9ba6cc157 100644
--- a/package/nano/Config.in
+++ b/package/nano/Config.in
@@ -9,10 +9,10 @@ config ADK_PACKAGE_NANO
http://www.nano-editor.org/
config ADK_PACKAGE_NANO_TINY
- prompt " only compile a minimal nano (using --enable-tiny)"
+ prompt "only compile a minimal nano (using --enable-tiny)"
bool
default y
- depends ADK_PACKAGE_NANO
+ depends on ADK_PACKAGE_NANO
help
If not selected, nano will support justify, line wrapping, tab completion and multiple open file buffers.
diff --git a/package/ncurses/Config.in b/package/ncurses/Config.in
index 4847013b6..e5526dbcc 100644
--- a/package/ncurses/Config.in
+++ b/package/ncurses/Config.in
@@ -1,6 +1,6 @@
config ADK_COMPILE_NCURSES
tristate
- depends ADK_PACKAGE_LIBNCURSES
+ depends on ADK_PACKAGE_LIBNCURSES
config ADK_PACKAGE_LIBNCURSES
prompt "libncurses........................ Terminal handling library"
diff --git a/package/ndisc/Config.in b/package/ndisc/Config.in
index e7cafd5ee..c5723d37b 100644
--- a/package/ndisc/Config.in
+++ b/package/ndisc/Config.in
@@ -3,14 +3,14 @@
config ADK_COMPILE_NDISC6
tristate
default n
- depends ADK_IPV6
- depends ADK_PACKAGE_NDISC6 || ADK_PACKAGE_RDISC6 || ADK_PACKAGE_TCPTRACEROUTE6
+ depends on ADK_IPV6
+ depends on ADK_PACKAGE_NDISC6 || ADK_PACKAGE_RDISC6 || ADK_PACKAGE_TCPTRACEROUTE6
config ADK_PACKAGE_NDISC6
prompt "ndisc6............................ An ICMPv6 neighbour discovery tool"
tristate
default n
- depends ADK_IPV6
+ depends on ADK_IPV6
select ADK_COMPILE_NDISC6
help
@@ -22,7 +22,7 @@ config ADK_PACKAGE_RDISC6
prompt "rdisc6............................ An ICMPv6 router discovery tool"
tristate
default n
- depends ADK_IPV6
+ depends on ADK_IPV6
select ADK_COMPILE_NDISC6
help
@@ -34,7 +34,7 @@ config ADK_PACKAGE_TCPTRACEROUTE6
prompt "tcptraceroute6.................... A TCP/IPv6-based traceroute implementation"
tristate
default n
- depends ADK_IPV6
+ depends on ADK_IPV6
select ADK_COMPILE_NDISC6
help
diff --git a/package/olsrd/Config.in b/package/olsrd/Config.in
index c715b9ada..4d8d47429 100644
--- a/package/olsrd/Config.in
+++ b/package/olsrd/Config.in
@@ -10,27 +10,27 @@ config ADK_PACKAGE_OLSRD
http://www.olsr.org/
config ADK_PACKAGE_OLSRD_MOD_DYN_GW
- prompt " olsrd-mod-dyn-gw.............. Dynamic internet gateway plugin"
+ prompt "olsrd-mod-dyn-gw.............. Dynamic internet gateway plugin"
tristate
default n
- depends ADK_PACKAGE_OLSRD
+ depends on ADK_PACKAGE_OLSRD
config ADK_PACKAGE_OLSRD_MOD_HTTPINFO
- prompt " olsrd-mod-httpinfo............ Small informative web server plugin"
+ prompt "olsrd-mod-httpinfo............ Small informative web server plugin"
tristate
default n
- depends ADK_PACKAGE_OLSRD
+ depends on ADK_PACKAGE_OLSRD
config ADK_PACKAGE_OLSRD_MOD_NAMESERVICE
- prompt " olsrd-mod-nameservice......... Lightweight hostname resolver plugin"
+ prompt "olsrd-mod-nameservice......... Lightweight hostname resolver plugin"
tristate
default n
- depends ADK_PACKAGE_OLSRD
+ depends on ADK_PACKAGE_OLSRD
config ADK_PACKAGE_OLSRD_MOD_TAS
- prompt " olsrd-mod-tas................. Tiny Application Server (TAS) plugin for olsrd"
+ prompt "olsrd-mod-tas................. Tiny Application Server (TAS) plugin for olsrd"
tristate
default n
- depends ADK_PACKAGE_OLSRD
+ depends on ADK_PACKAGE_OLSRD
#endmenu
diff --git a/package/opencdk/Config.in b/package/opencdk/Config.in
index dffbc2b32..ce8fdf27c 100644
--- a/package/opencdk/Config.in
+++ b/package/opencdk/Config.in
@@ -1,7 +1,7 @@
config ADK_PACKAGE_OPENCDK
tristate
default n
- depends ADK_PACKAGE_LIBOPENCDK
+ depends on ADK_PACKAGE_LIBOPENCDK
config ADK_PACKAGE_LIBOPENCDK
prompt "libopencdk........................ The Open Crypto Development Kit library"
diff --git a/package/opensips/Config.in b/package/opensips/Config.in
index bc03bd78a..31c565218 100644
--- a/package/opensips/Config.in
+++ b/package/opensips/Config.in
@@ -10,186 +10,186 @@ config ADK_PACKAGE_OPENSIPS
configurable, free SIP server.
config ADK_PACKAGE_OPENSIPS_MOD_ACCOUNTING
- prompt " opensips-mod-acc............... Accounting support"
+ prompt "opensips-mod-acc............... Accounting support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable accounting support
config ADK_PACKAGE_OPENSIPS_MOD_AUTH
- prompt " opensips-mod-auth.............. Authentication support"
+ prompt "opensips-mod-auth.............. Authentication support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable authentication support
config ADK_PACKAGE_OPENSIPS_MOD_AUTH_DB
- prompt " opensips-mod-auth-db......... Authentication with database support"
+ prompt "opensips-mod-auth-db......... Authentication with database support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS_MOD_AUTH
+ depends on ADK_PACKAGE_OPENSIPS_MOD_AUTH
help
Enable authentication with database support
config ADK_PACKAGE_OPENSIPS_MOD_AVPOPS
- prompt " opensips-mod-avpops............ AVP options support"
+ prompt "opensips-mod-avpops............ AVP options support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable AVP options support
config ADK_PACKAGE_OPENSIPS_MOD_DISPATCHER
- prompt " opensips-mod-dispatcher........ dispatcher support"
+ prompt "opensips-mod-dispatcher........ dispatcher support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable dispatcher options support
config ADK_PACKAGE_OPENSIPS_MOD_DIVERSION
- prompt " opensips-mod-diversion......... diversion support"
+ prompt "opensips-mod-diversion......... diversion support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable diversion options support
config ADK_PACKAGE_OPENSIPS_MOD_FLATSTORE
- prompt " opensips-mod-flatstore......... flatstore support"
+ prompt "opensips-mod-flatstore......... flatstore support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable flatstore support
config ADK_PACKAGE_OPENSIPS_MOD_GFLAGS
- prompt " opensips-mod-gflags............ gflags support"
+ prompt "opensips-mod-gflags............ gflags support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable GFlags support
config ADK_PACKAGE_OPENSIPS_MOD_GROUP
- prompt " opensips-mod-group............. group support"
+ prompt "opensips-mod-group............. group support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable group support
config ADK_PACKAGE_OPENSIPS_MOD_MEDIAPROXY
- prompt " opensips-mod-mediaproxy........ Mediaproxy support"
+ prompt "opensips-mod-mediaproxy........ Mediaproxy support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable mediaproxy support
config ADK_PACKAGE_OPENSIPS_MOD_MSILO
- prompt " opensips-mod-msilo............. MSilo support"
+ prompt "opensips-mod-msilo............. MSilo support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable msilo support
config ADK_PACKAGE_OPENSIPS_MOD_NATHELPER
- prompt " opensips-mod-nathelper......... NAT helper support"
+ prompt "opensips-mod-nathelper......... NAT helper support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
NAT helper support
config ADK_PACKAGE_OPENSIPS_MOD_OPTIONS
- prompt " opensips-mod-options........... options support"
+ prompt "opensips-mod-options........... options support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable options support
config ADK_PACKAGE_OPENSIPS_MOD_PDT
- prompt " opensips-mod-pdt............... PDT support"
+ prompt "opensips-mod-pdt............... PDT support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable pdt support
config ADK_PACKAGE_OPENSIPS_MOD_PERMISSIONS
- prompt " opensips-mod-permissions....... Permissions support"
+ prompt "opensips-mod-permissions....... Permissions support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable permissions support
config ADK_PACKAGE_OPENSIPS_MOD_PIKE
- prompt " opensips-mod-pike.............. PIKE support"
+ prompt "opensips-mod-pike.............. PIKE support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable pike support
config ADK_PACKAGE_OPENSIPS_MOD_SMS
- prompt " opensips-mod-sms............... SMS support"
+ prompt "opensips-mod-sms............... SMS support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
SMS support
config ADK_PACKAGE_OPENSIPS_MOD_SPEEDDIAL
- prompt " opensips-mod-speeddial......... Speed Dial support"
+ prompt "opensips-mod-speeddial......... Speed Dial support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Speed Dial support
config ADK_PACKAGE_OPENSIPS_MOD_UAC
- prompt " opensips-mod-uac............... UAC support"
+ prompt "opensips-mod-uac............... UAC support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable UAC support
config ADK_PACKAGE_OPENSIPS_MOD_UAC_REDIRECT
- prompt " opensips-mod-uac............... UAC redirect support"
+ prompt "opensips-mod-uac............... UAC redirect support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable UAC redirect support
config ADK_PACKAGE_OPENSIPS_MOD_URI
- prompt " opensips-mod-uri............... URI support"
+ prompt "opensips-mod-uri............... URI support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable URI support
config ADK_PACKAGE_OPENSIPS_MOD_URI_DB
- prompt " opensips-mod-uri-db............ URI database support"
+ prompt "opensips-mod-uri-db............ URI database support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Enable URI database support
config ADK_PACKAGE_OPENSIPS_MOD_XLOG
- prompt " opensips-mod-xlog.............. Logging support"
+ prompt "opensips-mod-xlog.............. Logging support"
tristate
default n
- depends ADK_PACKAGE_OPENSIPS
+ depends on ADK_PACKAGE_OPENSIPS
help
Logging support
diff --git a/package/openssl/Config.in b/package/openssl/Config.in
index 1375cc39a..172fa1355 100644
--- a/package/openssl/Config.in
+++ b/package/openssl/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_OPENSSL
tristate
default n
- depends ADK_PACKAGE_LIBOPENSSL
+ depends on ADK_PACKAGE_LIBOPENSSL
config ADK_PACKAGE_LIBOPENSSL
prompt "openssl........................... Open source SSL (Secure Socket Layer) libraries"
@@ -23,7 +23,7 @@ config ADK_PACKAGE_OPENSSL_UTIL
prompt "openssl-util.................... OpenSSL command line tool"
tristate
default n
- depends ADK_PACKAGE_LIBOPENSSL
+ depends on ADK_PACKAGE_LIBOPENSSL
help
The OpenSSL Project is a collaborative effort to develop a robust,
commercial-grade, full-featured, and Open Source toolkit implementing
@@ -38,4 +38,4 @@ config ADK_PACKAGE_CA_CERTS
prompt "ca-certificates................... X.509 Root CA Certs of common CAs"
tristate
default n
- depends ADK_COMPILE_OPENSSL
+ depends on ADK_COMPILE_OPENSSL
diff --git a/package/openvpn/Config.in b/package/openvpn/Config.in
index 18fd4f298..28d9696a2 100644
--- a/package/openvpn/Config.in
+++ b/package/openvpn/Config.in
@@ -15,19 +15,19 @@ config ADK_COMPILE_OPENVPN_WITH_SERVER
prompt "server support.................. enable to use OpenVPN as server"
bool
default y
- depends ADK_PACKAGE_OPENVPN
+ depends on ADK_PACKAGE_OPENVPN
config ADK_COMPILE_OPENVPN_WITH_HTTP
prompt "enable http proxy support....... allow tunneling through http-proxy"
bool
default y
- depends ADK_PACKAGE_OPENVPN
+ depends on ADK_PACKAGE_OPENVPN
config ADK_COMPILE_OPENVPN_WITH_OPENSSL
prompt "enable openssl.................. encryption support"
bool
default y
- depends ADK_PACKAGE_OPENVPN
+ depends on ADK_PACKAGE_OPENVPN
select ADK_PACKAGE_LIBOPENSSL
help
if unsure say "y" you really want that!
@@ -36,27 +36,27 @@ config ADK_COMPILE_OPENVPN_WITH_LZO
prompt "enable lzo...................... Enable transparent compression"
bool
default y
- depends ADK_PACKAGE_OPENVPN
+ depends on ADK_PACKAGE_OPENVPN
select ADK_PACKAGE_LIBLZO
config ADK_COMPILE_OPENVPN_WITH_PASSWORD_SAVE
prompt "Enable password saving.......... allow to read passwords for PKCS12 from file"
bool
default y
- depends ADK_PACKAGE_OPENVPN
+ depends on ADK_PACKAGE_OPENVPN
config ADK_COMPILE_OPENVPN_WITH_SMALL
prompt "Reduce executable size.......... disable OCC, usage message, and verb 4 parm list"
bool
default n
- depends ADK_PACKAGE_OPENVPN
+ depends on ADK_PACKAGE_OPENVPN
config ADK_PACKAGE_OPENVPN_EASY_RSA
prompt "openvpn-easy-rsa................ simple shell scripts to manage a Certificate Authority"
tristate
default n
select ADK_PACKAGE_OPENSSL_UTIL
- depends ADK_PACKAGE_OPENVPN
+ depends on ADK_PACKAGE_OPENVPN
help
collection of shell scripts to manage a simple CA infrastructure
diff --git a/package/osiris/Config.in b/package/osiris/Config.in
index 84a16435a..b8bfe8210 100644
--- a/package/osiris/Config.in
+++ b/package/osiris/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_OSIRIS
tristate
default n
- depends ADK_PACKAGE_OSIRISD
+ depends on ADK_PACKAGE_OSIRISD
config ADK_PACKAGE_OSIRISD
prompt "osirisd........................... Host integrity monitoring system (scanning agent)"
diff --git a/package/pcre/Config.in b/package/pcre/Config.in
index 955cd3ca4..21a23884c 100644
--- a/package/pcre/Config.in
+++ b/package/pcre/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_PCRE
tristate
default n
- depends ADK_PACKAGE_LIBPCRE
+ depends on ADK_PACKAGE_LIBPCRE
config ADK_PACKAGE_LIBPCRE
prompt "libpcre........................... A Perl Compatible Regular Expression library"
diff --git a/package/php/Config.in b/package/php/Config.in
index 422ede8c2..57ab1f333 100644
--- a/package/php/Config.in
+++ b/package/php/Config.in
@@ -27,20 +27,20 @@ config ADK_PACKAGE_PHP_MOD_CURL
prompt "php-mod-curl..................... cURL module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
select ADK_PACKAGE_LIBCURL
config ADK_PACKAGE_PHP_MOD_FTP
prompt "php-mod-ftp...................... FTP module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
config ADK_PACKAGE_PHP_MOD_GD
prompt "php-mod-gd....................... GD graphics library module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
select ADK_PACKAGE_LIBGD
select ADK_PACKAGE_LIBPNG
@@ -48,69 +48,69 @@ config ADK_PACKAGE_PHP_MOD_GMP
prompt "php-mod-gmp...................... GMP module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
select ADK_PACKAGE_LIBGMP
config ADK_PACKAGE_PHP_MOD_LDAP
prompt "php-mod-ldap..................... LDAP module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
select ADK_PACKAGE_LIBOPENLDAP
config ADK_PACKAGE_PHP_MOD_MYSQL
prompt "php-mod-mysql.................... MySQL module"
tristate
default n
- depends ADK_CXX
- depends ADK_COMPILE_PHP
+ depends on ADK_CXX
+ depends on ADK_COMPILE_PHP
select ADK_PACKAGE_LIBMYSQLCLIENT
config ADK_PACKAGE_PHP_MOD_OPENSSL
prompt "php-mod-openssl.................. OpenSSL module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
select ADK_PACKAGE_LIBOPENSSL
config ADK_PACKAGE_PHP_MOD_PCRE
prompt "php-mod-pcre..................... PCRE module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
select ADK_PACKAGE_LIBPCRE
config ADK_PACKAGE_PHP_MOD_PGSQL
prompt "php-mod-pgsql.................... PostgreSQL module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
select ADK_PACKAGE_LIBPQ
config ADK_PACKAGE_PHP_MOD_SESSION
prompt "php-mod-session.................. Sessions module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
config ADK_PACKAGE_PHP_MOD_SQLITE
prompt "php-mod-sqlite................... SQLite module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
select ADK_PACKAGE_LIBSQLITE
config ADK_PACKAGE_PHP_MOD_SOCKETS
prompt "php-mod-sockets.................. Sockets module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
config ADK_PACKAGE_PHP_MOD_XML
prompt "php-mod-xml...................... XML module"
tristate
default n
- depends ADK_COMPILE_PHP
+ depends on ADK_COMPILE_PHP
select ADK_PACKAGE_LIBEXPAT
endmenu
diff --git a/package/pmacct/Config.in b/package/pmacct/Config.in
index ef1e85a41..fe3e4d99d 100644
--- a/package/pmacct/Config.in
+++ b/package/pmacct/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_PMACCT
tristate
default n
- depends ADK_PACKAGE_PMACCTD || ADK_PACKAGE_PMACCT_CLIENT || ADK_PACKAGE_SFACCTD || ADK_PACKAGE_NFACCTD
+ depends on ADK_PACKAGE_PMACCTD || ADK_PACKAGE_PMACCT_CLIENT || ADK_PACKAGE_SFACCTD || ADK_PACKAGE_NFACCTD
config ADK_PACKAGE_PMACCTD
prompt "pmacctd....................... IP accounting daemon (libpcap based)"
diff --git a/package/popt/Config.in b/package/popt/Config.in
index 554cd3b32..a16ba04d5 100644
--- a/package/popt/Config.in
+++ b/package/popt/Config.in
@@ -1,6 +1,6 @@
config ADK_COMPILE_POPT
tristate
- depends ADK_PACKAGE_LIBPOPT
+ depends on ADK_PACKAGE_LIBPOPT
config ADK_PACKAGE_LIBPOPT
prompt "libpopt........................... Command line option parsing library"
diff --git a/package/portmap/Config.in b/package/portmap/Config.in
index ac4415a05..cc5169ce9 100644
--- a/package/portmap/Config.in
+++ b/package/portmap/Config.in
@@ -8,7 +8,7 @@ config ADK_PACKAGE_PORTMAP
to make RPC calls. Services that use RPC include NFS and NIS.
config ADK_PACKAGE_PORTMAP_LIBWRAP
- bool " Use tcp_wrappers"
+ bool "Use tcp_wrappers"
default n
depends on ADK_PACKAGE_PORTMAP
select ADK_PACKAGE_LIBWRAP
diff --git a/package/postgresql/Config.in b/package/postgresql/Config.in
index d1d0d09fe..d2e77a9c4 100644
--- a/package/postgresql/Config.in
+++ b/package/postgresql/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_POSTGRESQL
tristate
default n
- depends ADK_PACKAGE_LIBPQ
+ depends on ADK_PACKAGE_LIBPQ
config ADK_PACKAGE_LIBPQ
prompt "libpq............................. PostgreSQL client library"
diff --git a/package/ppp/Config.in b/package/ppp/Config.in
index 493c74e58..0969ae40a 100644
--- a/package/ppp/Config.in
+++ b/package/ppp/Config.in
@@ -10,38 +10,38 @@ config ADK_PACKAGE_PPP
# tristate
# default n
# select ADK_KPACKAGE_KMOD_PPPOATM
-# depends ADK_PACKAGE_PPP
+# depends on ADK_PACKAGE_PPP
config ADK_PACKAGE_PPP_MOD_PPPOE
prompt "ppp-mod-pppoe................... PPPoE (PPP over Ethernet) plugin"
tristate
default n
select ADK_KPACKAGE_KMOD_PPPOE
- depends ADK_PACKAGE_PPP
+ depends on ADK_PACKAGE_PPP
config ADK_PACKAGE_PPP_MOD_RADIUS
prompt "ppp-mod-radius.................. RADIUS (Remote Authentication Dial-In User Service) plugin"
tristate
default n
- depends ADK_PACKAGE_PPP
+ depends on ADK_PACKAGE_PPP
config ADK_PACKAGE_PPP_MOD_CHAT
prompt "chat............................ Utility to establish conversation with other PPP servers (via a modem)"
tristate
default n
- depends ADK_PACKAGE_PPP
+ depends on ADK_PACKAGE_PPP
config ADK_PACKAGE_PPP_MOD_PPPDUMP
prompt "pppdump......................... Utility to read PPP record file"
tristate
default n
- depends ADK_PACKAGE_PPP
+ depends on ADK_PACKAGE_PPP
config ADK_PACKAGE_PPP_MOD_PPPSTATS
prompt "pppstats........................ Utility to report PPP statistics"
tristate
default n
- depends ADK_PACKAGE_PPP
+ depends on ADK_PACKAGE_PPP
config ADK_PACKAGE_PPP_MOD_PPPUMTS
prompt "GPRS/UMTS support............... Package with scripts and dependencies to run UMTS/GRPS"
@@ -49,4 +49,4 @@ config ADK_PACKAGE_PPP_MOD_PPPUMTS
default n
select ADK_PACKAGE_COMGT
select ADK_KPACKAGE_KMOD_USB_SERIAL
- depends ADK_PACKAGE_PPP
+ depends on ADK_PACKAGE_PPP
diff --git a/package/quagga/Config.in b/package/quagga/Config.in
index 93ae9a2f4..446d7ab9e 100644
--- a/package/quagga/Config.in
+++ b/package/quagga/Config.in
@@ -3,7 +3,7 @@
config ADK_PACKAGE_QUAGGA
prompt "quagga............................ The Quagga Software Routing Suite"
tristate
- depends ADK_IPV6
+ depends on ADK_IPV6
default n
help
A routing software package that provides TCP/IP based routing services
@@ -13,53 +13,53 @@ config ADK_PACKAGE_QUAGGA
http://www.quagga.net/
config ADK_PACKAGE_QUAGGA_BGPD
- prompt " quagga-bgpd................... BGPv4, BGPv4+, BGPv4- routing engine"
+ prompt "quagga-bgpd................... BGPv4, BGPv4+, BGPv4- routing engine"
tristate
default n
- depends ADK_PACKAGE_QUAGGA
+ depends on ADK_PACKAGE_QUAGGA
help
A BGPv4, BGPv4+, BGPv4- routing engine for use with Quagga routing
software.
config ADK_PACKAGE_QUAGGA_OSPFD
- prompt " quagga-ospfd.................. OSPFv2 routing engine"
+ prompt "quagga-ospfd.................. OSPFv2 routing engine"
tristate
default n
- depends ADK_PACKAGE_QUAGGA
+ depends on ADK_PACKAGE_QUAGGA
help
An OSPFv2 (IPv4) routing engine for use with Quagga routing software.
config ADK_PACKAGE_QUAGGA_OSPF6D
- prompt " quagga-ospf6d................. OSPFv3 routing engine"
+ prompt "quagga-ospf6d................. OSPFv3 routing engine"
tristate
default n
- depends ADK_PACKAGE_QUAGGA
- depends ADK_IPV6
+ depends on ADK_PACKAGE_QUAGGA
+ depends on ADK_IPV6
help
An OSPFv3 (IPv6) routing engine for use with Quagga routing software.
config ADK_PACKAGE_QUAGGA_RIPD
- prompt " quagga-ripd................... RIP routing engine"
+ prompt "quagga-ripd................... RIP routing engine"
tristate
default n
- depends ADK_PACKAGE_QUAGGA
+ depends on ADK_PACKAGE_QUAGGA
help
A RIP (IPv4) routing engine for use with Quagga routing software.
config ADK_PACKAGE_QUAGGA_RIPNGD
- prompt " quagga-ripngd................. RIPNG routing engine"
+ prompt "quagga-ripngd................. RIPNG routing engine"
tristate
default n
- depends ADK_PACKAGE_QUAGGA
- depends ADK_IPV6
+ depends on ADK_PACKAGE_QUAGGA
+ depends on ADK_IPV6
help
A RIPNG (IPv6) routing engine for use with Quagga routing software.
config ADK_PACKAGE_QUAGGA_VTYSH
- prompt " quagga-vtysh.................. integrated shell for Quagga routing software"
+ prompt "quagga-vtysh.................. integrated shell for Quagga routing software"
tristate
default n
- depends ADK_PACKAGE_QUAGGA
+ depends on ADK_PACKAGE_QUAGGA
select ADK_PACKAGE_LIBREADLINE
select ADK_PACKAGE_LIBNCURSES
help
diff --git a/package/readline/Config.in b/package/readline/Config.in
index aa126e21f..c46e6fe22 100644
--- a/package/readline/Config.in
+++ b/package/readline/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_READLINE
tristate
default n
- depends ADK_PACKAGE_LIBREADLINE
+ depends on ADK_PACKAGE_LIBREADLINE
config ADK_PACKAGE_LIBREADLINE
prompt "libreadline....................... Command lines edition library"
diff --git a/package/rp-pppoe/Config.in b/package/rp-pppoe/Config.in
index 439d582ee..6d27ecb4b 100644
--- a/package/rp-pppoe/Config.in
+++ b/package/rp-pppoe/Config.in
@@ -3,7 +3,7 @@
config ADK_COMPILE_RP_PPPOE
tristate
default n
- depends ADK_PACKAGE_PPPOE_CLIENT || ADK_PACKAGE_PPPOE_RELAY || ADK_PACKAGE_PPPOE_SERVER || ADK_PACKAGE_PPPOE_SNIFF
+ depends on ADK_PACKAGE_PPPOE_CLIENT || ADK_PACKAGE_PPPOE_RELAY || ADK_PACKAGE_PPPOE_SERVER || ADK_PACKAGE_PPPOE_SNIFF
config ADK_PACKAGE_PPPOE_CLIENT
prompt "pppoe-client...................... PPPoE (PPP over Ethernet) client"
diff --git a/package/rrdcollect/Config.in b/package/rrdcollect/Config.in
index a6935c706..1c35e092a 100644
--- a/package/rrdcollect/Config.in
+++ b/package/rrdcollect/Config.in
@@ -1,8 +1,8 @@
config ADK_PACKAGE_RRDCOLLECT
- prompt " rrdcollect...................... Round-Robin Database (RRD) collecting daemon"
+ prompt "rrdcollect...................... Round-Robin Database (RRD) collecting daemon"
tristate
default n
- depends ADK_PACKAGE_LIBRRD || ADK_PACKAGE_LIBRRD1
+ depends on ADK_PACKAGE_LIBRRD || ADK_PACKAGE_LIBRRD1
help
RRDcollect is a daemon which polls ceratin files in /proc/
directory, gathering data and storing it inside RRDtool's
@@ -15,10 +15,10 @@ config ADK_PACKAGE_RRDCOLLECT
This package contains only the deamon program.
config ADK_PACKAGE_RRDCOLLECT_EXAMPLE
- prompt " rrdcollect-example.......... Example setup for RRD collecting daemon above"
+ prompt "rrdcollect-example.......... Example setup for RRD collecting daemon above"
tristate
default n
- depends ADK_PACKAGE_RRDCOLLECT
+ depends on ADK_PACKAGE_RRDCOLLECT
help
RRDcollect is a daemon which polls ceratin files in /proc/
directory, gathering data and storing it inside RRDtool's
diff --git a/package/rrs/Config.in b/package/rrs/Config.in
index 6fe48d0fd..901492074 100644
--- a/package/rrs/Config.in
+++ b/package/rrs/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_RRS
tristate
default n
- depends ADK_PACKAGE_RRS || ADK_PACKAGE_RRS_NOSSL
+ depends on ADK_PACKAGE_RRS || ADK_PACKAGE_RRS_NOSSL
config ADK_PACKAGE_RRS
prompt "rrs............................... A reverse (connecting) remote shell, with SSL support"
diff --git a/package/samba/Config.in b/package/samba/Config.in
index f548a5e2b..b26d2791e 100644
--- a/package/samba/Config.in
+++ b/package/samba/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_SAMBA
tristate
default n
- depends ADK_PACKAGE_SAMBA || ADK_PACKAGE_SAMBA_CLIENT || ADK_PACKAGE_SMBFS
+ depends on ADK_PACKAGE_SAMBA || ADK_PACKAGE_SAMBA_CLIENT || ADK_PACKAGE_SMBFS
config ADK_PACKAGE_SAMBA
prompt "samba............................. NetBIOS/SMB file and print server"
diff --git a/package/sane-backends/Config.in b/package/sane-backends/Config.in
index dd0e2522f..de3c1ecd2 100644
--- a/package/sane-backends/Config.in
+++ b/package/sane-backends/Config.in
@@ -20,7 +20,7 @@ config ADK_PACKAGE_SANE_BACKEND_ABATON
prompt "sane-backend-abaton............. Scanner Access Now Easy (ABATON)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -31,7 +31,7 @@ config ADK_PACKAGE_SANE_BACKEND_AGFAFOCUS
prompt "sane-backend-agfafocus.......... Scanner Access Now Easy (AGFAFOCUS)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -42,7 +42,7 @@ config ADK_PACKAGE_SANE_BACKEND_APPLE
prompt "sane-backend-apple.............. Scanner Access Now Easy (APPLE)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -53,7 +53,7 @@ config ADK_PACKAGE_SANE_BACKEND_ARTEC_EPLUS48U
prompt "sane-backend-artec-eplus48u..... Scanner Access Now Easy (ARTEC_EPLUS48U)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -64,7 +64,7 @@ config ADK_PACKAGE_SANE_BACKEND_ARTEC
prompt "sane-backend-artec.............. Scanner Access Now Easy (ARTEC)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -75,7 +75,7 @@ config ADK_PACKAGE_SANE_BACKEND_AS6E
prompt "sane-backend-as6e............... Scanner Access Now Easy (AS6E)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -86,7 +86,7 @@ config ADK_PACKAGE_SANE_BACKEND_AVISION
prompt "sane-backend-avision............ Scanner Access Now Easy (AVISION)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -97,7 +97,7 @@ config ADK_PACKAGE_SANE_BACKEND_BH
prompt "sane-backend-bh................. Scanner Access Now Easy (BH)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -108,7 +108,7 @@ config ADK_PACKAGE_SANE_BACKEND_CANON630U
prompt "sane-backend-canon630u.......... Scanner Access Now Easy (CANON630U)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -119,7 +119,7 @@ config ADK_PACKAGE_SANE_BACKEND_CANON
prompt "sane-backend-canon.............. Scanner Access Now Easy (CANON)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -130,7 +130,7 @@ config ADK_PACKAGE_SANE_BACKEND_COOLSCAN2
prompt "sane-backend-coolscan2.......... Scanner Access Now Easy (COOLSCAN2)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -141,7 +141,7 @@ config ADK_PACKAGE_SANE_BACKEND_COOLSCAN
prompt "sane-backend-coolscan........... Scanner Access Now Easy (COOLSCAN)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -152,7 +152,7 @@ config ADK_PACKAGE_SANE_BACKEND_DC25
prompt "sane-backend-dc25............... Scanner Access Now Easy (DC25)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -163,7 +163,7 @@ config ADK_PACKAGE_SANE_BACKEND_DMC
prompt "sane-backend-dmc................ Scanner Access Now Easy (DMC)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -174,7 +174,7 @@ config ADK_PACKAGE_SANE_BACKEND_EPSON
prompt "sane-backend-epson.............. Scanner Access Now Easy (EPSON)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -185,7 +185,7 @@ config ADK_PACKAGE_SANE_BACKEND_FUJITSU
prompt "sane-backend-fujitsu............ Scanner Access Now Easy (FUJITSU)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -196,7 +196,7 @@ config ADK_PACKAGE_SANE_BACKEND_GENESYS
prompt "sane-backend-genesys............ Scanner Access Now Easy (GENESYS)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -207,7 +207,7 @@ config ADK_PACKAGE_SANE_BACKEND_GT68XX
prompt "sane-backend-gt68xx............. Scanner Access Now Easy (GT68XX)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -218,7 +218,7 @@ config ADK_PACKAGE_SANE_BACKEND_HP3500
prompt "sane-backend-hp3500............. Scanner Access Now Easy (HP3500)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -229,7 +229,7 @@ config ADK_PACKAGE_SANE_BACKEND_HP4200
prompt "sane-backend-hp4200............. Scanner Access Now Easy (HP4200)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -240,7 +240,7 @@ config ADK_PACKAGE_SANE_BACKEND_HP5400
prompt "sane-backend-hp5400............. Scanner Access Now Easy (HP5400)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -251,7 +251,7 @@ config ADK_PACKAGE_SANE_BACKEND_HP
prompt "sane-backend-hp................. Scanner Access Now Easy (HP)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -262,7 +262,7 @@ config ADK_PACKAGE_SANE_BACKEND_IBM
prompt "sane-backend-ibm................ Scanner Access Now Easy (IBM)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -273,7 +273,7 @@ config ADK_PACKAGE_SANE_BACKEND_LEO
prompt "sane-backend-leo................ Scanner Access Now Easy (LEO)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -284,7 +284,7 @@ config ADK_PACKAGE_SANE_BACKEND_LEXMARK
prompt "sane-backend-lexmark............ Scanner Access Now Easy (LEXMARK)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -295,7 +295,7 @@ config ADK_PACKAGE_SANE_BACKEND_MA1509
prompt "sane-backend-ma1509............. Scanner Access Now Easy (MA1509)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -306,7 +306,7 @@ config ADK_PACKAGE_SANE_BACKEND_MATSUSHITA
prompt "sane-backend-matsushita......... Scanner Access Now Easy (MATSUSHITA)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -317,7 +317,7 @@ config ADK_PACKAGE_SANE_BACKEND_MICROTEK2
prompt "sane-backend-microtek2.......... Scanner Access Now Easy (MICROTEK2)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -328,7 +328,7 @@ config ADK_PACKAGE_SANE_BACKEND_MICROTEK
prompt "sane-backend-microtek........... Scanner Access Now Easy (MICROTEK)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -339,7 +339,7 @@ config ADK_PACKAGE_SANE_BACKEND_MUSTEK
prompt "sane-backend-mustek............. Scanner Access Now Easy (MUSTEK)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -350,7 +350,7 @@ config ADK_PACKAGE_SANE_BACKEND_MUSTEK_USB2
prompt "sane-backend-mustek-usb2........ Scanner Access Now Easy (MUSTEK_USB2)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -361,7 +361,7 @@ config ADK_PACKAGE_SANE_BACKEND_MUSTEK_USB
prompt "sane-backend-mustek-usb......... Scanner Access Now Easy (MUSTEK_USB)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -372,7 +372,7 @@ config ADK_PACKAGE_SANE_BACKEND_NEC
prompt "sane-backend-nec................ Scanner Access Now Easy (NEC)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -383,7 +383,7 @@ config ADK_PACKAGE_SANE_BACKEND_NIASH
prompt "sane-backend-niash.............. Scanner Access Now Easy (NIASH)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -394,7 +394,7 @@ config ADK_PACKAGE_SANE_BACKEND_PIE
prompt "sane-backend-pie................ Scanner Access Now Easy (PIE)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -405,7 +405,7 @@ config ADK_PACKAGE_SANE_BACKEND_PIXMA
prompt "sane-backend-pixma.............. Scanner Access Now Easy (PIXMA)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -416,7 +416,7 @@ config ADK_PACKAGE_SANE_BACKEND_PLUSTEK_PP
prompt "sane-backend-plustek-pp......... Scanner Access Now Easy (PLUSTEK_PP)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -426,7 +426,7 @@ config ADK_PACKAGE_SANE_BACKEND_PLUSTEK
prompt "sane-backend-plustek............ Scanner Access Now Easy (PLUSTEK)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -437,7 +437,7 @@ config ADK_PACKAGE_SANE_BACKEND_QCAM
prompt "sane-backend-qcam............... Scanner Access Now Easy (QCAM)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -448,7 +448,7 @@ config ADK_PACKAGE_SANE_BACKEND_RICOH
prompt "sane-backend-ricoh.............. Scanner Access Now Easy (RICOH)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -459,7 +459,7 @@ config ADK_PACKAGE_SANE_BACKEND_S9036
prompt "sane-backend-s9036.............. Scanner Access Now Easy (S9036)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -470,7 +470,7 @@ config ADK_PACKAGE_SANE_BACKEND_SCEPTRE
prompt "sane-backend-sceptre............ Scanner Access Now Easy (SCEPTRE)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -481,7 +481,7 @@ config ADK_PACKAGE_SANE_BACKEND_SHARP
prompt "sane-backend-sharp.............. Scanner Access Now Easy (SHARP)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -492,7 +492,7 @@ config ADK_PACKAGE_SANE_BACKEND_SM3600
prompt "sane-backend-sm3600............. Scanner Access Now Easy (SM3600)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -503,7 +503,7 @@ config ADK_PACKAGE_SANE_BACKEND_SM3840
prompt "sane-backend-sm3840............. Scanner Access Now Easy (SM3840)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -514,7 +514,7 @@ config ADK_PACKAGE_SANE_BACKEND_SNAPSCAN
prompt "sane-backend-snapscan........... Scanner Access Now Easy (SNAPSCAN)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -525,7 +525,7 @@ config ADK_PACKAGE_SANE_BACKEND_SP15C
prompt "sane-backend-sp15c.............. Scanner Access Now Easy (SP15C)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -536,7 +536,7 @@ config ADK_PACKAGE_SANE_BACKEND_ST400
prompt "sane-backend-st400.............. Scanner Access Now Easy (ST400)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -547,7 +547,7 @@ config ADK_PACKAGE_SANE_BACKEND_STV680
prompt "sane-backend-stv680............. Scanner Access Now Easy (STV680)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -558,7 +558,7 @@ config ADK_PACKAGE_SANE_BACKEND_TAMARACK
prompt "sane-backend-tamarack........... Scanner Access Now Easy (TAMARACK)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -569,7 +569,7 @@ config ADK_PACKAGE_SANE_BACKEND_TECO1
prompt "sane-backend-teco1.............. Scanner Access Now Easy (TECO1)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -580,7 +580,7 @@ config ADK_PACKAGE_SANE_BACKEND_TECO2
prompt "sane-backend-teco2.............. Scanner Access Now Easy (TECO2)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -591,7 +591,7 @@ config ADK_PACKAGE_SANE_BACKEND_TECO3
prompt "sane-backend-teco3.............. Scanner Access Now Easy (TECO3)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -602,7 +602,7 @@ config ADK_PACKAGE_SANE_BACKEND_TEST
prompt "sane-backend-test............... Scanner Access Now Easy (TEST)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -613,7 +613,7 @@ config ADK_PACKAGE_SANE_BACKEND_U12
prompt "sane-backend-u12................ Scanner Access Now Easy (U12)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -624,7 +624,7 @@ config ADK_PACKAGE_SANE_BACKEND_UMAX1220U
prompt "sane-backend-umax1220u.......... Scanner Access Now Easy (UMAX1220U)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -635,7 +635,7 @@ config ADK_PACKAGE_SANE_BACKEND_UMAX_PP
prompt "sane-backend-umax-pp............ Scanner Access Now Easy (UMAX_PP)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
@@ -645,7 +645,7 @@ config ADK_PACKAGE_SANE_BACKEND_UMAX
prompt "sane-backend-umax............... Scanner Access Now Easy (UMAX)"
tristate
default n
- depends ADK_PACKAGE_SANE_BACKENDS
+ depends on ADK_PACKAGE_SANE_BACKENDS
select ADK_PACKAGE_LIBUSB
help
SANE (Scanner Access Now Easy) is a universal scanner interface.
diff --git a/package/shorewall-common/Config.in b/package/shorewall-common/Config.in
index d45386d64..59296e1fe 100644
--- a/package/shorewall-common/Config.in
+++ b/package/shorewall-common/Config.in
@@ -17,7 +17,7 @@ config ADK_PACKAGE_SHOREWALL_STRIPCONF
prompt "Strip shorewall configuration files"
bool
default n
- depends ADK_PACKAGE_SHOREWALL
+ depends on ADK_PACKAGE_SHOREWALL
help
To save space, all shorewall files in /etc/shorewall will get striped.
This means that all comments, empty lines etc. are removed.
@@ -29,7 +29,7 @@ config ADK_PACKAGE_SHOREWALL_STRIPSHARED
prompt "Strip shared shorewall files (macros & actions mainly)"
bool
default y
- depends ADK_PACKAGE_SHOREWALL
+ depends on ADK_PACKAGE_SHOREWALL
help
To save space, all shared shorewall files in /usr/share/shorewall
will get striped. This means that all comments, empty lines etc.
diff --git a/package/shorewall-shell/Config.in b/package/shorewall-shell/Config.in
index 76270351b..03f119786 100644
--- a/package/shorewall-shell/Config.in
+++ b/package/shorewall-shell/Config.in
@@ -1,7 +1,7 @@
config ADK_PACKAGE_SHOREWALL_SHELL
prompt "shorewall-shell................. shorewall shell compiler"
tristate
- depends ADK_PACKAGE_SHOREWALL
+ depends on ADK_PACKAGE_SHOREWALL
default y
help
http://www.shorewall.net/
diff --git a/package/speex/Config.in b/package/speex/Config.in
index f9cfe97ba..6fa3d9995 100644
--- a/package/speex/Config.in
+++ b/package/speex/Config.in
@@ -1,8 +1,8 @@
config ADK_COMPILE_SPEEX
tristate
default n
- depends ADK_CXX
- depends ADK_PACKAGE_LIBSPEEX
+ depends on ADK_CXX
+ depends on ADK_PACKAGE_LIBSPEEX
config ADK_PACKAGE_LIBSPEEX
prompt "libspeex.......................... Open source patent-free speech compression codec"
diff --git a/package/sqlite/Config.in b/package/sqlite/Config.in
index b534356b6..870f02c82 100644
--- a/package/sqlite/Config.in
+++ b/package/sqlite/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_SQLITE
tristate
default n
- depends ADK_PACKAGE_LIBSQLITE
+ depends on ADK_PACKAGE_LIBSQLITE
config ADK_PACKAGE_LIBSQLITE
prompt "libsqlite......................... Self-contained, embeddable, zero-configuration SQL database engine"
@@ -42,7 +42,7 @@ config ADK_PACKAGE_SQLITE_CLI
prompt "sqlite-cli...................... Command line interface for SQLite"
tristate
default n
- depends ADK_PACKAGE_LIBSQLITE
+ depends on ADK_PACKAGE_LIBSQLITE
help
SQLite is a small C library that implements a self-contained, embeddable,
zero-configuration SQL database engine. Features include:
diff --git a/package/squid/Config.in b/package/squid/Config.in
index bdace2a49..483b27468 100644
--- a/package/squid/Config.in
+++ b/package/squid/Config.in
@@ -3,7 +3,7 @@ config ADK_PACKAGE_SQUID
prompt "squid............................. full-featured Web proxy cache"
tristate
default n
- depends ADK_CXX
+ depends on ADK_CXX
select ADK_PACKAGE_LIBOPENSSL
help
Squid is a high-performance proxy caching server for web clients,
@@ -16,58 +16,58 @@ config ADK_PACKAGE_SQUID
menu "squid............................. proxy and web cache modules"
config ADK_PACKAGE_SQUID_MOD_BASIC_AUTH_GETPWNAM
- prompt " squid-mod-basic-auth-getpwnam....... getpwnam basic authentication helper"
+ prompt "squid-mod-basic-auth-getpwnam....... getpwnam basic authentication helper"
tristate
- depends ADK_PACKAGE_SQUID
+ depends on ADK_PACKAGE_SQUID
help
Password basic authentication helper
config ADK_PACKAGE_SQUID_MOD_BASIC_AUTH_NCSA
- prompt " squid-mod-basic-auth-ncsa........... NCSA basic authentication helper"
+ prompt "squid-mod-basic-auth-ncsa........... NCSA basic authentication helper"
tristate
- depends ADK_PACKAGE_SQUID
+ depends on ADK_PACKAGE_SQUID
help
NCSA basic authentication helper
config ADK_PACKAGE_SQUID_MOD_BASIC_AUTH_SMB
- prompt " squid-mod-basic-auth-smb............ Samba basic authentication helper"
+ prompt "squid-mod-basic-auth-smb............ Samba basic authentication helper"
tristate
- depends ADK_PACKAGE_SQUID
+ depends on ADK_PACKAGE_SQUID
help
Samba basic authentication helper
config ADK_PACKAGE_SQUID_MOD_DIGEST_AUTH_PASSWORD
- prompt " squid-mod-digest-auth-password...... Password digest authentication ehlper"
+ prompt "squid-mod-digest-auth-password...... Password digest authentication ehlper"
tristate
- depends ADK_PACKAGE_SQUID
+ depends on ADK_PACKAGE_SQUID
help
Password digest authentication helper
config ADK_PACKAGE_SQUID_MOD_EXTERNAL_ACL_IP_USER
- prompt " squid-mod-external-acl-ip_user...... IP user external ACL helper"
+ prompt "squid-mod-external-acl-ip_user...... IP user external ACL helper"
tristate
- depends ADK_PACKAGE_SQUID
+ depends on ADK_PACKAGE_SQUID
help
IP user external ACL helper
config ADK_PACKAGE_SQUID_MOD_EXTERNAL_ACL_UNIX_GROUP
- prompt " squid-mod-external-acl-unix-group... Unix group external ACL helper"
+ prompt "squid-mod-external-acl-unix-group... Unix group external ACL helper"
tristate
- depends ADK_PACKAGE_SQUID
+ depends on ADK_PACKAGE_SQUID
help
Unix group external ACL helper
config ADK_PACKAGE_SQUID_MOD_NTLM_AUTH_FAKEAUTH
- prompt " squid-mod-ntlm-auth-fakeauth........ Fakeauth NTLM authentication helper"
+ prompt "squid-mod-ntlm-auth-fakeauth........ Fakeauth NTLM authentication helper"
tristate
- depends ADK_PACKAGE_SQUID
+ depends on ADK_PACKAGE_SQUID
help
Fakeauth NTLM authentication helper
config ADK_PACKAGE_SQUID_MOD_NTLM_AUTH_SMB_AUTH
- prompt " squid-mod-ntlm-auth-smb-auth........ Samba NTLM authentication helper"
+ prompt "squid-mod-ntlm-auth-smb-auth........ Samba NTLM authentication helper"
tristate
- depends ADK_PACKAGE_SQUID
+ depends on ADK_PACKAGE_SQUID
help
Samba NTLM authentication helper
diff --git a/package/subversion/Config.in b/package/subversion/Config.in
index 4ab4537dc..a7bb57950 100644
--- a/package/subversion/Config.in
+++ b/package/subversion/Config.in
@@ -12,10 +12,10 @@ config ADK_PACKAGE_SUBVERSION
http://subversion.tigris.org
config ADK_PACKAGE_SUBVERSION_NEON
- prompt " Enable interaction with remote repositories over WebDAV"
+ prompt "Enable interaction with remote repositories over WebDAV"
bool
default n
- depends ADK_PACKAGE_SUBVERSION
+ depends on ADK_PACKAGE_SUBVERSION
select ADK_PACKAGE_NEON
help
Allows a Subversion client to interact with remote
diff --git a/package/tcp_wrappers/Config.in b/package/tcp_wrappers/Config.in
index 7da5381fb..0066cad78 100644
--- a/package/tcp_wrappers/Config.in
+++ b/package/tcp_wrappers/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_TCP_WRAPPERS
bool
default n
- depends ADK_PACKAGE_LIBWRAP
+ depends on ADK_PACKAGE_LIBWRAP
config ADK_PACKAGE_LIBWRAP
prompt "libwrap........................... Security wrapper library for TCP services"
diff --git a/package/tinyproxy/Config.in b/package/tinyproxy/Config.in
index c7182965b..293d8ec69 100644
--- a/package/tinyproxy/Config.in
+++ b/package/tinyproxy/Config.in
@@ -10,21 +10,21 @@ config ADK_PACKAGE_TINYPROXY
http://tinyproxy.sourceforge.net
config ADK_COMPILE_TINYPROXY_WITH_TRANSPARENT_PROXY
- prompt " Enable transparent proxying"
+ prompt "Enable transparent proxying"
bool
default y
- depends ADK_PACKAGE_TINYPROXY
+ depends on ADK_PACKAGE_TINYPROXY
config ADK_COMPILE_TINYPROXY_WITH_FILTER
- prompt " Enable filtering support"
+ prompt "Enable filtering support"
bool
default y
- depends ADK_PACKAGE_TINYPROXY
+ depends on ADK_PACKAGE_TINYPROXY
config ADK_COMPILE_TINYPROXY_WITH_UPSTREAM
- prompt " Enable upstream support"
+ prompt "Enable upstream support"
bool
default y
- depends ADK_PACKAGE_TINYPROXY
+ depends on ADK_PACKAGE_TINYPROXY
#endmenu
diff --git a/package/tntnet/Config.in b/package/tntnet/Config.in
index 9abab9b82..0d4391674 100644
--- a/package/tntnet/Config.in
+++ b/package/tntnet/Config.in
@@ -24,13 +24,13 @@ config ADK_COMPILE_TNTNET_WITHOUT_OPENSSL
config ADK_COMPILE_TNTNET_WITH_OPENSSL
bool "enable openssl encryption support"
- depends ADK_PACKAGE_TNTNET
+ depends on ADK_PACKAGE_TNTNET
select ADK_PACKAGE_LIBOPENSSL
help
config ADK_COMPILE_TNTNET_WITH_GNUTLS
bool "enable gnutls encryption support"
- depends ADK_PACKAGE_TNTNET
+ depends on ADK_PACKAGE_TNTNET
select ADK_PACKAGE_LIBGNUTLS
help
diff --git a/package/ulogd/Config.in b/package/ulogd/Config.in
index e725f2807..dc0949777 100644
--- a/package/ulogd/Config.in
+++ b/package/ulogd/Config.in
@@ -11,38 +11,38 @@ config ADK_PACKAGE_ULOGD
http://gnumonks.org/projects/ulogd
config ADK_PACKAGE_ULOGD_MOD_MYSQL
- prompt " ulogd-mod-mysql............... Output plugin for logging into a MySQL database"
+ prompt "ulogd-mod-mysql............... Output plugin for logging into a MySQL database"
tristate
default n
depends on ADK_CXX
- depends ADK_PACKAGE_ULOGD
+ depends on ADK_PACKAGE_ULOGD
select ADK_PACKAGE_LIBMYSQLCLIENT
config ADK_PACKAGE_ULOGD_MOD_PCAP
- prompt " ulogd-mod-pcap................. Output plugin for logging into pcap format"
+ prompt "ulogd-mod-pcap................. Output plugin for logging into pcap format"
tristate
default n
- depends ADK_PACKAGE_ULOGD
+ depends on ADK_PACKAGE_ULOGD
select ADK_PACKAGE_LIBPCAP
config ADK_PACKAGE_ULOGD_MOD_PGSQL
- prompt " ulogd-mod-pgsql............... Output plugin for logging into a PostgreSQL database"
+ prompt "ulogd-mod-pgsql............... Output plugin for logging into a PostgreSQL database"
tristate
default n
- depends ADK_PACKAGE_ULOGD
+ depends on ADK_PACKAGE_ULOGD
select ADK_PACKAGE_LIBPQ
config ADK_PACKAGE_ULOGD_MOD_SQLITE
- prompt " ulogd-mod-sqlite.............. Output plugin for logging into an SQLite database"
+ prompt "ulogd-mod-sqlite.............. Output plugin for logging into an SQLite database"
tristate
default n
- depends ADK_PACKAGE_ULOGD
+ depends on ADK_PACKAGE_ULOGD
select ADK_PACKAGE_LIBSQLITE
config ADK_PACKAGE_ULOGD_MOD_EXTRA
- prompt " ulogd-mod-extra............... All other plugins"
+ prompt "ulogd-mod-extra............... All other plugins"
tristate
default n
- depends ADK_PACKAGE_ULOGD
+ depends on ADK_PACKAGE_ULOGD
#endmenu
diff --git a/package/updatedd/Config.in b/package/updatedd/Config.in
index 763961614..08e800d59 100644
--- a/package/updatedd/Config.in
+++ b/package/updatedd/Config.in
@@ -14,54 +14,54 @@ config ADK_PACKAGE_UPDATEDD
config ADK_PACKAGE_UPDATEDD_MOD_CHANGEIP
prompt "updatedd-mod-changeip........... changeip.com"
tristate
- depends ADK_PACKAGE_UPDATEDD
+ depends on ADK_PACKAGE_UPDATEDD
default n
config ADK_PACKAGE_UPDATEDD_MOD_DYNDNS
prompt "updatedd-mod-dyndns............. dyndns.org"
tristate
- depends ADK_PACKAGE_UPDATEDD
+ depends on ADK_PACKAGE_UPDATEDD
default n
config ADK_PACKAGE_UPDATEDD_MOD_EURODYNDNS
prompt "updatedd-mod-eurodyndns......... eurodyndns.org"
tristate
- depends ADK_PACKAGE_UPDATEDD
+ depends on ADK_PACKAGE_UPDATEDD
default n
config ADK_PACKAGE_UPDATEDD_MOD_HN
prompt "updatedd-mod-hn................. hn.org"
tristate
- depends ADK_PACKAGE_UPDATEDD
+ depends on ADK_PACKAGE_UPDATEDD
default n
config ADK_PACKAGE_UPDATEDD_MOD_NOIP
prompt "updatedd-mod-noip............... no-ip.com"
tristate
- depends ADK_PACKAGE_UPDATEDD
+ depends on ADK_PACKAGE_UPDATEDD
default n
config ADK_PACKAGE_UPDATEDD_MOD_ODS
prompt "updatedd-mod-ods................ ods.org"
tristate
- depends ADK_PACKAGE_UPDATEDD
+ depends on ADK_PACKAGE_UPDATEDD
default n
config ADK_PACKAGE_UPDATEDD_MOD_OVH
prompt "updatedd-mod-ovh................ ovh.com"
tristate
- depends ADK_PACKAGE_UPDATEDD
+ depends on ADK_PACKAGE_UPDATEDD
default n
config ADK_PACKAGE_UPDATEDD_MOD_REGFISH
prompt "updatedd-mod-regfish............ regfish.com"
tristate
- depends ADK_PACKAGE_UPDATEDD
+ depends on ADK_PACKAGE_UPDATEDD
default n
config ADK_PACKAGE_UPDATEDD_MOD_TZO
prompt "updatedd-mod-tzo................ tzo.com"
tristate
- depends ADK_PACKAGE_UPDATEDD
+ depends on ADK_PACKAGE_UPDATEDD
default n
diff --git a/package/usbutils/Config.in b/package/usbutils/Config.in
index e73eb1008..8b80238ea 100644
--- a/package/usbutils/Config.in
+++ b/package/usbutils/Config.in
@@ -1,6 +1,6 @@
config ADK_COMPILE_USBUTILS
tristate
- depends ADK_PACKAGE_LSUSB
+ depends on ADK_PACKAGE_LSUSB
config ADK_PACKAGE_LSUSB
prompt "lsusb............................. USB devices listing program"
diff --git a/package/util-linux-ng/Config.in b/package/util-linux-ng/Config.in
index 705c3cbff..8c39f0a55 100644
--- a/package/util-linux-ng/Config.in
+++ b/package/util-linux-ng/Config.in
@@ -1,7 +1,7 @@
config ADK_COMPILE_UTIL_LINUX_NG
tristate
default n
- depends ADK_PACKAGE_FDISK || ADK_PACKAGE_SWAP_UTILS
+ depends on ADK_PACKAGE_FDISK || ADK_PACKAGE_SWAP_UTILS
config ADK_PACKAGE_FDISK
prompt "fdisk............................. Partition table manipulation utility"
diff --git a/package/weechat/Config.in b/package/weechat/Config.in
index 0945c9dc9..4073c3979 100644
--- a/package/weechat/Config.in
+++ b/package/weechat/Config.in
@@ -15,12 +15,12 @@ config ADK_COMPILE_WEECHAT_WITH_TLS
prompt " Enable TLS support"
bool
select ADK_PACKAGE_LIBGNUTLS
- depends ADK_PACKAGE_WEECHAT
+ depends on ADK_PACKAGE_WEECHAT
config ADK_COMPILE_WEECHAT_WITH_LUA
prompt " Enable LUA scripting"
bool
select ADK_PACKAGE_LIBLUA
- depends ADK_PACKAGE_WEECHAT
+ depends on ADK_PACKAGE_WEECHAT
#endmenu
diff --git a/package/wpa_supplicant/Config.in b/package/wpa_supplicant/Config.in
index 325b71bf1..b0044856a 100644
--- a/package/wpa_supplicant/Config.in
+++ b/package/wpa_supplicant/Config.in
@@ -18,13 +18,13 @@ default ADK_COMPILE_WPA_SUPPLICANT_WITH_OPENSSL
config ADK_COMPILE_WPA_SUPPLICANT_WITH_OPENSSL
bool "enable openssl encryption support"
- depends ADK_PACKAGE_WPA_SUPPLICANT
+ depends on ADK_PACKAGE_WPA_SUPPLICANT
select ADK_PACKAGE_LIBOPENSSL
help
config ADK_COMPILE_WPA_SUPPLICANT_WITH_INCLUDED
bool "enable included encryption support"
- depends ADK_PACKAGE_WPA_SUPPLICANT
+ depends on ADK_PACKAGE_WPA_SUPPLICANT
help
endchoice
diff --git a/target/Config.in b/target/Config.in
index d569d629e..32424365c 100644
--- a/target/Config.in
+++ b/target/Config.in
@@ -245,7 +245,7 @@ config ADK_LINUX_MIPS64EL_QEMU
config ADK_LINUX_CRIS_QEMU
bool "cris"
select ADK_qemu_cris
- select ADK_BROKEN
+# select ADK_BROKEN
help
Qemu support for CRISv32 architecture.
@@ -310,7 +310,7 @@ source "target/linux/config/Config.in.kernel"
choice
prompt "Target C library"
-depends ! ADK_NATIVE
+depends on ! ADK_NATIVE
config ADK_TARGET_LIB_UCLIBC
bool "uClibc embedded C library"
help
diff --git a/target/linux/config/Config.in.block b/target/linux/config/Config.in.block
index 1c9f0aa49..5ceacf608 100644
--- a/target/linux/config/Config.in.block
+++ b/target/linux/config/Config.in.block
@@ -157,8 +157,8 @@ config ADK_KPACKAGE_KMOD_SCSI
config ADK_KPACKAGE_KMOD_BLK_DEV_SD
prompt "kmod-scsi-disk.................... SCSI disk support"
- depends !ADK_KERNEL_SCSI
- depends ADK_KPACKAGE_KMOD_SCSI
+ depends on !ADK_KERNEL_SCSI
+ depends on ADK_KPACKAGE_KMOD_SCSI
tristate
help
If you want to use SCSI hard disks, Fibre Channel disks,
@@ -170,8 +170,8 @@ config ADK_KPACKAGE_KMOD_BLK_DEV_SD
config ADK_KPACKAGE_KMOD_BLK_DEV_SR
prompt "kmod-scsi-cdrom................... SCSI CDROM support"
- depends !ADK_KERNEL_SCSI
- depends ADK_KPACKAGE_KMOD_SCSI
+ depends on !ADK_KERNEL_SCSI
+ depends on ADK_KPACKAGE_KMOD_SCSI
tristate
help
If you want to use a SCSI or FireWire CD-ROM under Linux,
@@ -188,19 +188,19 @@ config ADK_KPACKAGE_KMOD_BLK_DEV_MD
config ADK_KPACKAGE_KMOD_MD_RAID0
prompt "kmod-md-raid0..................... RAID0 support"
tristate
- depends ADK_KPACKAGE_KMOD_BLK_DEV_MD
+ depends on ADK_KPACKAGE_KMOD_BLK_DEV_MD
help
config ADK_KPACKAGE_KMOD_MD_RAID1
prompt "kmod-md-raid1..................... RAID1 support"
tristate
- depends ADK_KPACKAGE_KMOD_BLK_DEV_MD
+ depends on ADK_KPACKAGE_KMOD_BLK_DEV_MD
help
config ADK_KPACKAGE_KMOD_MD_RAID456
prompt "kmod-md-raid456................... RAID456 support"
tristate
- depends ADK_KPACKAGE_KMOD_BLK_DEV_MD
+ depends on ADK_KPACKAGE_KMOD_BLK_DEV_MD
help
config ADK_KPACKAGE_KMOD_BLK_DEV_DM
diff --git a/target/linux/config/Config.in.bluetooth b/target/linux/config/Config.in.bluetooth
index 7d868ace5..7342a0f52 100644
--- a/target/linux/config/Config.in.bluetooth
+++ b/target/linux/config/Config.in.bluetooth
@@ -25,7 +25,7 @@ config ADK_KPACKAGE_KMOD_BT_L2CAP
prompt "kmod-bluetooth-l2cap.............. L2CAP protocol support"
tristate
default n
- depends ADK_KPACKAGE_KMOD_BT
+ depends on ADK_KPACKAGE_KMOD_BT
help
L2CAP (Logical Link Control and Adaptation Protocol) provides
connection oriented and connection-less data transport. L2CAP
@@ -36,7 +36,7 @@ config ADK_KPACKAGE_KMOD_BT_SCO
prompt "kmod-bluetooth-sco................ SCO links support"
tristate
default n
- depends ADK_KPACKAGE_KMOD_BT
+ depends on ADK_KPACKAGE_KMOD_BT
help
SCO link provides voice transport over Bluetooth. SCO support is
required for voice applications like Headset and Audio.
@@ -45,8 +45,8 @@ config ADK_KPACKAGE_KMOD_BT_RFCOMM
prompt "kmod-bluetooth-rfcomm............. RFCOMM protocol support"
tristate
default n
- depends ADK_KPACKAGE_KMOD_BT
- depends ADK_KPACKAGE_KMOD_BT_L2CAP
+ depends on ADK_KPACKAGE_KMOD_BT
+ depends on ADK_KPACKAGE_KMOD_BT_L2CAP
help
RFCOMM provides connection oriented stream transport. RFCOMM
support is required for Dialup Networking, OBEX and other Bluetooth
@@ -56,8 +56,8 @@ config ADK_KPACKAGE_KMOD_BT_BNEP
prompt "kmod-bluetooth-bnep............... BNEP protocol support"
tristate
default n
- depends ADK_KPACKAGE_KMOD_BT
- depends ADK_KPACKAGE_KMOD_BT_L2CAP
+ depends on ADK_KPACKAGE_KMOD_BT
+ depends on ADK_KPACKAGE_KMOD_BT_L2CAP
help
BNEP (Bluetooth Network Encapsulation Protocol) is Ethernet
emulation layer on top of Bluetooth. BNEP is required for
@@ -68,8 +68,8 @@ config ADK_KPACKAGE_KMOD_BT_HIDP
tristate
default n
select ADK_KERNEL_HID
- depends ADK_KPACKAGE_KMOD_BT
- depends ADK_KPACKAGE_KMOD_BT_L2CAP
+ depends on ADK_KPACKAGE_KMOD_BT
+ depends on ADK_KPACKAGE_KMOD_BT_L2CAP
help
HIDP (Human Interface Device Protocol) is a transport layer
for HID reports. HIDP is required for the Bluetooth Human
@@ -79,7 +79,7 @@ config ADK_KPACKAGE_KMOD_BT_HCIBTUSB
prompt "kmod-bluetooth-hci-usb............ HCI USB driver"
tristate
default n
- depends ADK_KPACKAGE_KMOD_BT
+ depends on ADK_KPACKAGE_KMOD_BT
help
Bluetooth HCI USB driver.
This driver is required if you want to use Bluetooth devices with
@@ -89,7 +89,7 @@ config ADK_KPACKAGE_KMOD_BT_HCIUART
prompt "kmod-bluetooth-hci-uart........... HCI UART driver"
tristate
default n
- depends ADK_KPACKAGE_KMOD_BT
+ depends on ADK_KPACKAGE_KMOD_BT
help
Bluetooth HCI UART driver.
This driver is required if you want to use Bluetooth devices with
@@ -101,7 +101,7 @@ config ADK_KPACKAGE_KMOD_BT_HCIBCM203X
prompt "kmod-bluetooth-hci-bcm203x........ HCI BCM203x USB driver"
tristate
default n
- depends ADK_KPACKAGE_KMOD_BT
+ depends on ADK_KPACKAGE_KMOD_BT
help
Bluetooth HCI BCM203x USB driver.
This driver provides the firmware loading mechanism for the Broadcom
@@ -111,7 +111,7 @@ config ADK_KPACKAGE_KMOD_BT_HCIBPA10X
prompt "kmod-bluetooth-hci-bpa10x......... HCI BPA10x USB driver"
tristate
default n
- depends ADK_KPACKAGE_KMOD_BT
+ depends on ADK_KPACKAGE_KMOD_BT
help
Bluetooth HCI BPA10x USB driver.
This driver provides support for the Digianswer BPA 100/105 Bluetooth
diff --git a/target/linux/config/Config.in.fs b/target/linux/config/Config.in.fs
index 020025f95..5b96e96ce 100644
--- a/target/linux/config/Config.in.fs
+++ b/target/linux/config/Config.in.fs
@@ -21,8 +21,8 @@ config ADK_KPACKAGE_KMOD_EXT2_FS
prompt "kmod-fs-ext2...................... EXT2 filesystem support"
tristate
default n
- depends !ADK_TARGET_ROOTFS_EXT2_CF
- depends !ADK_KERNEL_EXT2_FS
+ depends on !ADK_TARGET_ROOTFS_EXT2_CF
+ depends on !ADK_KERNEL_EXT2_FS
help
Ext2 is a standard Linux file system for hard disks.
diff --git a/target/linux/config/Config.in.fsnet b/target/linux/config/Config.in.fsnet
index 3cb37e52f..78c21d52c 100644
--- a/target/linux/config/Config.in.fsnet
+++ b/target/linux/config/Config.in.fsnet
@@ -94,7 +94,7 @@ config ADK_KPACKAGE_KMOD_NFSD
default n
select ADK_KPACKAGE_KMOD_EXPORTFS
select ADK_KERNEL_NFSD_V3
- depends ADK_KPACKAGE_KMOD_NFS_FS
+ depends on ADK_KPACKAGE_KMOD_NFS_FS
help
If you want your Linux box to act as an NFS *server*, so that other
computers on your local network which support NFS can access certain
diff --git a/target/linux/config/Config.in.ipvs b/target/linux/config/Config.in.ipvs
index cec68d6cf..1a5fbd063 100644
--- a/target/linux/config/Config.in.ipvs
+++ b/target/linux/config/Config.in.ipvs
@@ -10,10 +10,10 @@ config ADK_KERNEL_IP_VS_DEBUG
prompt "enable debugging support"
boolean
default n
- depends ADK_KPACKAGE_KMOD_IP_VS
+ depends on ADK_KPACKAGE_KMOD_IP_VS
menu "IPVS transport protocol load balancing support"
- depends ADK_KPACKAGE_KMOD_IP_VS
+ depends on ADK_KPACKAGE_KMOD_IP_VS
config ADK_KERNEL_IP_VS_PROTO_TCP
prompt "TCP load balancing support"
@@ -50,7 +50,7 @@ config ADK_KERNEL_IP_VS_PROTO_AH
endmenu
menu "IPVS Scheduler"
- depends ADK_KPACKAGE_KMOD_IP_VS
+ depends on ADK_KPACKAGE_KMOD_IP_VS
config ADK_KPACKAGE_KMOD_IP_VS_RR
prompt "kmod-ip-vs-rr......................... round-robin"
@@ -105,7 +105,7 @@ config ADK_KPACKAGE_KMOD_IP_VS_NQ
endmenu
menu "IPVS application helper"
- depends ADK_KPACKAGE_KMOD_IP_VS
+ depends on ADK_KPACKAGE_KMOD_IP_VS
config ADK_KPACKAGE_KMOD_IP_VS_FTP
prompt "kmod-ip-vs-ftp........................ FTP protocol"
diff --git a/target/linux/config/Config.in.lib b/target/linux/config/Config.in.lib
index e7b223c43..0f8847010 100644
--- a/target/linux/config/Config.in.lib
+++ b/target/linux/config/Config.in.lib
@@ -17,7 +17,7 @@ config ADK_KPACKAGE_KMOD_CRC_ITU_T
config ADK_KPACKAGE_KMOD_CRC32
prompt "kmod-crc32.......................... provide CRC32 library functions"
tristate
- depends ! ADK_KERNEL_CRC32
+ depends on ! ADK_KERNEL_CRC32
default n
help
diff --git a/target/linux/config/Config.in.multimedia b/target/linux/config/Config.in.multimedia
index 88ee9e00c..d485d31ec 100644
--- a/target/linux/config/Config.in.multimedia
+++ b/target/linux/config/Config.in.multimedia
@@ -39,7 +39,7 @@ config ADK_KPACKAGE_KMOD_SND
config ADK_KPACKAGE_KMOD_SND_OSSEMUL
prompt "kmod-sound-alsa-oss-emul........ ALSA OSS Emulation"
- depends ADK_KPACKAGE_KMOD_SND
+ depends on ADK_KPACKAGE_KMOD_SND
select ADK_KERNEL_SND_MIXER_OSS
select ADK_KERNEL_SND_PCM_OSS
tristate
@@ -49,7 +49,7 @@ config ADK_KPACKAGE_KMOD_SND_OSSEMUL
config ADK_KPACKAGE_KMOD_SND_AC97_CODEC
prompt "kmod-sound-alsa-ac97-codec..... ALSA AC97 codec"
- depends ADK_KPACKAGE_KMOD_SND
+ depends on ADK_KPACKAGE_KMOD_SND
tristate
default n
help
@@ -57,7 +57,7 @@ config ADK_KPACKAGE_KMOD_SND_AC97_CODEC
config ADK_KPACKAGE_KMOD_SND_VIA82XX
prompt "kmod-sound-alsa-via82xx........ ALSA VIA82XX driver"
- depends ADK_KPACKAGE_KMOD_SND
+ depends on ADK_KPACKAGE_KMOD_SND
select ADK_KPACKAGE_KMOD_SND_AC97_CODEC
tristate
default n
@@ -66,7 +66,7 @@ config ADK_KPACKAGE_KMOD_SND_VIA82XX
config ADK_KPACKAGE_KMOD_SND_CS5535AUDIO
prompt "kmod-sound-alsa-cs5535......... ALSA AMD CS5535 driver (ALIX1C)"
- depends ADK_KPACKAGE_KMOD_SND
+ depends on ADK_KPACKAGE_KMOD_SND
select ADK_KPACKAGE_KMOD_SND_AC97_CODEC
depends on ADK_LINUX_X86_ALIX1C
tristate
@@ -97,7 +97,7 @@ config ADK_KPACKAGE_KMOD_VIDEO_V4L1
prompt "................................ Enable Video For Linux API 1 (DEPRECATED)"
boolean
default n
- depends ADK_KPACKAGE_KMOD_VIDEO_DEV
+ depends on ADK_KPACKAGE_KMOD_VIDEO_DEV
help
Enables a compatibility API used by most V4L2 devices to allow
its usage with legacy applications that supports only V4L1 api.
@@ -105,7 +105,7 @@ config ADK_KPACKAGE_KMOD_VIDEO_V4L1
config ADK_KPACKAGE_KMOD_USB_PWC
prompt "kmod-usb-pwc.................... Kernel driver for USB Philips Cameras"
tristate
- depends ADK_KPACKAGE_KMOD_USB
+ depends on ADK_KPACKAGE_KMOD_USB
default n
help
diff --git a/target/linux/config/Config.in.netfilter b/target/linux/config/Config.in.netfilter
index 48db426ef..a4dc9b7c7 100644
--- a/target/linux/config/Config.in.netfilter
+++ b/target/linux/config/Config.in.netfilter
@@ -199,7 +199,7 @@ config ADK_KPACKAGE_KMOD_NF_CONNTRACK_IPV4
config ADK_KPACKAGE_KMOD_IP_NF_CT_ACCT
bool 'Connection tracking flow accounting'
- depends ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
+ depends on ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
help
If this option is enabled, the connection tracking code will
keep per-flow packet and byte counters.
@@ -209,7 +209,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_CT_ACCT
config ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK_MARK
bool 'Connection mark tracking support'
- depends ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
+ depends on ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
select ADK_KERNEL_IP_NF_MATCH_CONNMARK
help
This option enables support for connection marks, used by the
@@ -219,7 +219,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK_MARK
config ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK_SECMARK
bool 'Connection tracking security mark support'
- depends ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
+ depends on ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
#FIXME select NETWORK_SECMARK
help
This option enables security markings to be applied to
@@ -230,7 +230,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK_SECMARK
config ADK_KPACKAGE_KMOD_IP_NF_FTP
tristate 'FTP protocol support'
- depends ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
+ depends on ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
help
Tracking FTP connections is problematic: special helpers are
required for tracking them, and doing masquerading and other forms
@@ -238,7 +238,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_FTP
config ADK_KPACKAGE_KMOD_IP_NF_IRC
tristate 'IRC protocol support'
- depends ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
+ depends on ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
help
There is a commonly-used extension to IRC called
Direct Client-to-Client Protocol (DCC). This enables users to send
@@ -251,7 +251,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_IRC
config ADK_KPACKAGE_KMOD_IP_NF_NETBIOS_NS
tristate 'NetBIOS name service protocol support (EXPERIMENTAL)'
- depends ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
+ depends on ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
help
NetBIOS name service requests are sent as broadcast messages from an
unprivileged port and responded to with unicast messages to the
@@ -268,7 +268,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_NETBIOS_NS
config ADK_KPACKAGE_KMOD_IP_NF_TFTP
tristate 'TFTP protocol support'
- depends ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
+ depends on ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
help
TFTP connection tracking helper, this is required depending
on how restrictive your ruleset is.
@@ -277,7 +277,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_TFTP
config ADK_KPACKAGE_KMOD_IP_NF_AMANDA
tristate 'Amanda backup protocol support'
- depends ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
+ depends on ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
#FIXME TEXTSEARCH && TEXTSEARCH_KMP
help
If you are running the Amanda backup package <http://www.amanda.org/>
@@ -289,7 +289,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_AMANDA
config ADK_KPACKAGE_KMOD_IP_NF_PPTP
tristate 'PPTP protocol support'
- depends ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
+ depends on ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
help
This module adds support for PPTP (Point to Point Tunnelling
Protocol, RFC2637) connection tracking and NAT.
@@ -303,7 +303,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_PPTP
config ADK_KPACKAGE_KMOD_IP_NF_H323
tristate 'H.323 protocol support (EXPERIMENTAL)'
- depends ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
+ depends on ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
help
H.323 is a VoIP signalling protocol from ITU-T. As one of the most
important VoIP protocols, it is widely used by voice hardware and
@@ -320,7 +320,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_H323
config ADK_KPACKAGE_KMOD_IP_NF_SIP
tristate 'SIP protocol support (EXPERIMENTAL)'
- depends ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
+ depends on ADK_KPACKAGE_KMOD_IP_NF_CONNTRACK
help
SIP is an application-layer control protocol that can establish,
modify, and terminate multimedia sessions (conferences) such as
@@ -340,7 +340,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_IPTABLES
config ADK_KPACKAGE_KMOD_IP_NF_FILTER
tristate 'Packet Filtering'
- depends ADK_KPACKAGE_KMOD_IP_NF_IPTABLES
+ depends on ADK_KPACKAGE_KMOD_IP_NF_IPTABLES
help
Packet filtering defines a table `filter', which has a series of
rules for simple packet filtering at local input, forwarding and
@@ -348,7 +348,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_FILTER
config ADK_KPACKAGE_KMOD_NF_NAT
tristate 'Full NAT'
- depends ADK_KPACKAGE_KMOD_IP_NF_IPTABLES
+ depends on ADK_KPACKAGE_KMOD_IP_NF_IPTABLES
help
The Full NAT option allows masquerading, port forwarding and other
forms of full Network Address Port Translation. It is controlled by
@@ -356,7 +356,7 @@ config ADK_KPACKAGE_KMOD_NF_NAT
config ADK_KPACKAGE_KMOD_IP_NF_TARGET_MASQUERADE
tristate 'MASQUERADE target support'
- depends ADK_KPACKAGE_KMOD_NF_NAT
+ depends on ADK_KPACKAGE_KMOD_NF_NAT
help
Masquerading is a special case of NAT: all outgoing connections are
changed to seem to come from a particular interface's address, and
@@ -366,7 +366,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_TARGET_MASQUERADE
config ADK_KPACKAGE_KMOD_IP_NF_TARGET_REJECT
tristate 'REJECT target support'
- depends ADK_KPACKAGE_KMOD_IP_NF_FILTER
+ depends on ADK_KPACKAGE_KMOD_IP_NF_FILTER
help
The REJECT target allows a filtering rule to specify that an ICMP
error should be issued in response to an incoming packet, rather
@@ -374,14 +374,14 @@ config ADK_KPACKAGE_KMOD_IP_NF_TARGET_REJECT
config ADK_KPACKAGE_KMOD_IP_NF_TARGET_LOG
tristate 'LOG target support'
- depends ADK_KPACKAGE_KMOD_IP_NF_FILTER
+ depends on ADK_KPACKAGE_KMOD_IP_NF_FILTER
help
This option adds a `LOG' target, which allows you to create rules in
any iptables table which records the packet header to the syslog.
config ADK_KPACKAGE_KMOD_IP_NF_TARGET_ULOG
tristate 'ULOG target support (ipv4 only)'
- depends ADK_KPACKAGE_KMOD_IP_NF_FILTER
+ depends on ADK_KPACKAGE_KMOD_IP_NF_FILTER
help
This option enables the old IPv4-only "ipt_ULOG" implementation
which has been obsoleted by the new "nfnetlink_log" code (see
@@ -397,7 +397,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_TARGET_ULOG
config ADK_KPACKAGE_KMOD_IP_NF_TARGET_REDIRECT
tristate 'REDIRECT target support'
- depends ADK_KPACKAGE_KMOD_IP_NF_NAT
+ depends on ADK_KPACKAGE_KMOD_IP_NF_NAT
help
REDIRECT is a special case of NAT: all incoming connections are
mapped onto the incoming interface's address, causing the packets to
@@ -406,7 +406,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_TARGET_REDIRECT
config ADK_KPACKAGE_KMOD_IP_NF_TARGET_NETMAP
tristate 'NETMAP target support'
- depends ADK_KPACKAGE_KMOD_IP_NF_NAT
+ depends on ADK_KPACKAGE_KMOD_IP_NF_NAT
help
NETMAP is an implementation of static 1:1 NAT mapping of network
addresses. It maps the network address part, while keeping the host
@@ -415,14 +415,14 @@ config ADK_KPACKAGE_KMOD_IP_NF_TARGET_NETMAP
config ADK_KPACKAGE_KMOD_IP_NF_TARGET_SAME
tristate 'SAME target support'
- depends ADK_KPACKAGE_KMOD_IP_NF_NAT
+ depends on ADK_KPACKAGE_KMOD_IP_NF_NAT
help
This option adds a `SAME' target, which works like the standard SNAT
target, but attempts to give clients the same IP for all connections.
config ADK_KPACKAGE_KMOD_IP_NF_MANGLE
tristate 'Packet mangling'
- depends ADK_KPACKAGE_KMOD_IP_NF_IPTABLES
+ depends on ADK_KPACKAGE_KMOD_IP_NF_IPTABLES
help
This option adds a `mangle' table to iptables: see the man page for
iptables(8). This table is used for various packet alterations
@@ -430,7 +430,7 @@ config ADK_KPACKAGE_KMOD_IP_NF_MANGLE
config ADK_KPACKAGE_KMOD_IP_NF_TARGET_ECN
tristate 'ECN target support'
- depends ADK_KPACKAGE_KMOD_IP_NF_MANGLE
+ depends on ADK_KPACKAGE_KMOD_IP_NF_MANGLE
help
This option adds a `ECN' target, which can be used in the iptables mangle
table.
diff --git a/target/linux/config/Config.in.network b/target/linux/config/Config.in.network
index 255e17738..4fa5d37a5 100644
--- a/target/linux/config/Config.in.network
+++ b/target/linux/config/Config.in.network
@@ -108,7 +108,7 @@ config ADK_KPACKAGE_KMOD_NET_IPIP
config ADK_KPACKAGE_KMOD_NET_IPGRE
prompt "kmod-net-ipgre.................... GRE tunnels over IP"
tristate
- #depends ADK_KPACKAGE_KMOD_NET_IPGRE_BROADCAST
+ #depends on ADK_KPACKAGE_KMOD_NET_IPGRE_BROADCAST
default n
help
Tunneling means encapsulating data of one protocol type within
@@ -124,7 +124,7 @@ config ADK_KPACKAGE_KMOD_NET_IPGRE
config ADK_KPACKAGE_KMOD_IPV6
prompt "kmod-ipv6......................... IPv6 support"
tristate
- depends ADK_IPV6
+ depends on ADK_IPV6
default n
help
This is complemental support for the IP version 6.
@@ -139,7 +139,7 @@ config ADK_KPACKAGE_KMOD_IPV6
config ADK_KPACKAGE_KMOD_IPV6_SIT
prompt "kmod-ipv6-sit..................... IPv6-in-IPv4 tunnel (SIT driver)"
tristate
- depends ADK_IPV6
+ depends on ADK_IPV6
select ADK_KPACKAGE_KMOD_INET_TUNNEL
default n
help
@@ -182,7 +182,7 @@ config ADK_KPACKAGE_KMOD_PPP_MPPE
prompt "kmod-ppp-mppe................... PPP MPPE/MPPC module"
tristate
default n
- depends ADK_KPACKAGE_KMOD_PPP
+ depends on ADK_KPACKAGE_KMOD_PPP
select ADK_KERNEL_CRYPTO
select ADK_KPACKAGE_KMOD_CRYPTO_ARC4
select ADK_KPACKAGE_KMOD_CRYPTO_SHA1
@@ -198,7 +198,7 @@ config ADK_KPACKAGE_KMOD_PPP_MPPE
# prompt "kmod-pppoatm.................... PPPoA (PPP over ATM) kernel support"
# tristate
# default n
-# depends ADK_KPACKAGE_KMOD_PPP
+# depends on ADK_KPACKAGE_KMOD_PPP
# select ADK_KPACKAGE_KMOD_ATM
# help
# Support for PPP over ATM
@@ -207,7 +207,7 @@ config ADK_KPACKAGE_KMOD_PPPOE
prompt "kmod-pppoe...................... PPPoE (PPP over Ethernet) kernel support"
tristate
default n
- depends ADK_KPACKAGE_KMOD_PPP
+ depends on ADK_KPACKAGE_KMOD_PPP
help
Support for PPP over Ethernet
diff --git a/target/linux/config/Config.in.nls b/target/linux/config/Config.in.nls
index e656fe7f9..657103f74 100644
--- a/target/linux/config/Config.in.nls
+++ b/target/linux/config/Config.in.nls
@@ -18,7 +18,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_437
prompt "kmod-nls-codepage-437........... Codepage 437 (United States, Canada)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored
@@ -33,7 +33,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_737
prompt "kmod-nls-codepage-737........... Codepage 737 (Greek)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored
@@ -48,7 +48,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_775
prompt "kmod-nls-codepage-775........... Codepage 775 (Baltic Rim)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored
@@ -64,7 +64,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_850
prompt "kmod-nls-codepage-850........... Codepage 850 (Western European Languages)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -81,7 +81,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_852
prompt "kmod-nls-codepage-852........... Codepage 852 (Eastern European Languages)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -99,7 +99,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_855
prompt "kmod-nls-codepage-855........... Codepage 855 (Cyrillic)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -113,7 +113,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_857
prompt "kmod-nls-codepage-857........... Codepage 857 (Turkish)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -127,7 +127,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_860
prompt "kmod-nls-codepage-860........... Codepage 860 (Portuguese)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -141,7 +141,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_861
prompt "kmod-nls-codepage-861........... Codepage 861 (Icelandic)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -155,7 +155,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_862
prompt "kmod-nls-codepage-862........... Codepage 862 (Hebrew)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -169,7 +169,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_863
prompt "kmod-nls-codepage-863........... Codepage 863 (French Canadian)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -184,7 +184,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_864
prompt "kmod-nls-codepage-864........... Codepage 864 (Arabic)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -198,7 +198,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_865
prompt "kmod-nls-codepage-865........... Codepage 865 (Norwegian, Danish)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -213,7 +213,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_866
prompt "kmod-nls-codepage-866........... Codepage 866 (Cyrillic/Russian)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -228,7 +228,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_869
prompt "kmod-nls-codepage-869........... Codepage 869 (Greek)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -242,7 +242,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_874
prompt "kmod-nls-codepage-874........... Codepage 874 (Thai)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -256,7 +256,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_932
prompt "kmod-nls-codepage-932........... Codepage 932 (Japanese)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -272,7 +272,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_936
prompt "kmod-nls-codepage-936........... Codepage 936 (Simplified Chinese)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -287,7 +287,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_949
prompt "kmod-nls-codepage-949........... Codepage 949 (Korean)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -301,7 +301,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_950
prompt "kmod-nls-codepage-950........... Codepage 950 (Traditional Chinese)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -316,7 +316,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_1250
prompt "kmod-nls-codepage-1250.......... Codepage 1250 (Slavic/Central European)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CDROMs
@@ -330,7 +330,7 @@ config ADK_KPACKAGE_KMOD_NLS_CODEPAGE_1251
prompt "kmod-nls-codepage-1251.......... Codepage 1251 (Bulgarian, Belarusian)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
The Microsoft FAT file system family can deal with filenames in
native language character sets. These character sets are stored in
@@ -345,7 +345,7 @@ config ADK_KPACKAGE_KMOD_NLS_ASCII
prompt "kmod-nls-ascii.................. ASCII (United States)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
An ASCII NLS module is needed if you want to override the
DEFAULT NLS with this very basic charset and don't want any
@@ -355,7 +355,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_1
prompt "kmod-nls-iso8859-1.............. NLS ISO 8859-1 (Latin-1; Western European Languages)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -370,7 +370,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_2
prompt "kmod-nls-iso8859-2.............. NLS ISO 8859-2 (Latin-2; Central European Languages)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -384,7 +384,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_3
prompt "kmod-nls-iso8859-3.............. NLS ISO 8859-3 (Latin-3; Esperanto, Galician, Maltese, Turkish)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -397,7 +397,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_4
prompt "kmod-nls-iso8859-4.............. NLS ISO 8859-4 (Latin-4; old Baltic charset)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -410,7 +410,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_5
prompt "kmod-nls-iso8859-5.............. NLS ISO 8859-5 (Cyrillic)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -424,7 +424,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_6
prompt "kmod-nls-iso8859-6.............. NLS ISO 8859-6 (Arabic)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -436,7 +436,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_7
prompt "kmod-nls-iso8859-7.............. NLS ISO 8859-7 (Greek)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -448,7 +448,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_8
prompt "kmod-nls-iso8859-8.............. NLS ISO 8859-8 (Hebrew)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -460,7 +460,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_9
prompt "kmod-nls-iso8859-9.............. NLS ISO 8859-9 (Latin-5; Turkish)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -473,7 +473,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_13
prompt "kmod-nls-iso8859-13............. NLS ISO 8859-13 (Latin-7; Baltic Rim)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -486,7 +486,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_14
prompt "kmod-nls-iso8859-14............. NLS ISO 8859-14 (Latin-8; Celtic)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -500,7 +500,7 @@ config ADK_KPACKAGE_KMOD_NLS_ISO8859_15
prompt "kmod-nls-iso8859-15............. NLS ISO 8859-15 (Latin-9; Western European Languages with Euro)"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -519,7 +519,7 @@ config ADK_KPACKAGE_KMOD_NLS_KOI8_R
prompt "kmod-nls-koi8-r................. NLS KOI8-R (Cryllic for Russian and Bulgarian"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -531,7 +531,7 @@ config ADK_KPACKAGE_KMOD_NLS_KOI8_U
prompt "kmod-nls-koi8-u................. NLS KOI8-U (Cyrillic for Russian, Bulgarian and Ukrainian"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
@@ -543,7 +543,7 @@ config ADK_KPACKAGE_KMOD_NLS_UTF8
prompt "kmod-nls-utf8................... NLS UTF8"
tristate
default n
- depends ADK_KPACKAGE_KMOD_NLS
+ depends on ADK_KPACKAGE_KMOD_NLS
help
If you want to display filenames with native language characters
from the Microsoft FAT file system family or from JOLIET CD-ROMs
diff --git a/target/linux/config/Config.in.pcmcia b/target/linux/config/Config.in.pcmcia
index f06ad0783..385ede11b 100644
--- a/target/linux/config/Config.in.pcmcia
+++ b/target/linux/config/Config.in.pcmcia
@@ -12,14 +12,14 @@ config ADK_KPACKAGE_KMOD_PCCARD
config ADK_KPACKAGE_KMOD_PCMCIA
prompt "kmod-pcmcia....................... 16-bit PCMCIA support"
tristate
- depends ADK_KPACKAGE_KMOD_PCCARD
+ depends on ADK_KPACKAGE_KMOD_PCCARD
select ADK_KERNEL_CRC32
default n
config ADK_KPACKAGE_KMOD_YENTA
prompt "kmod-cardbus...................... 32-bit CardBus support"
tristate
- depends ADK_KPACKAGE_KMOD_PCCARD
+ depends on ADK_KPACKAGE_KMOD_PCCARD
select ADK_KERNEL_CARDBUS
default n
diff --git a/target/linux/config/Config.in.sched b/target/linux/config/Config.in.sched
index c5a992ba4..808b00e41 100644
--- a/target/linux/config/Config.in.sched
+++ b/target/linux/config/Config.in.sched
@@ -92,7 +92,7 @@ config ADK_KPACKAGE_KMOD_NET_SCH_HFSC
config ADK_KPACKAGE_KMOD_NET_SCH_ATM
prompt "kmod-sched-atm.................... ATM Virtual Circuits (ATM)"
tristate
- depends ADK_KPACKAGE_KMOD_ATM
+ depends on ADK_KPACKAGE_KMOD_ATM
select ADK_KERNEL_NET_SCHED
default n
help
@@ -248,7 +248,7 @@ config ADK_KPACKAGE_KMOD_NET_CLS_U32_PERF
prompt ".................................. Performance counters support"
bool
select ADK_KERNEL_NET_CLS
- depends ADK_KPACKAGE_KMOD_NET_CLS_U32
+ depends on ADK_KPACKAGE_KMOD_NET_CLS_U32
default n
help
Say Y here to make u32 gather additional statistics useful for
@@ -258,8 +258,8 @@ config ADK_KPACKAGE_KMOD_NET_CLS_U32_MARK
prompt ".................................. Netfilter marks support"
bool
select ADK_KERNEL_NET_CLS
- depends ADK_KPACKAGE_KMOD_NET_CLS_U32
- depends ADK_KPACKAGE_KMOD_NET_CLS_FW
+ depends on ADK_KPACKAGE_KMOD_NET_CLS_U32
+ depends on ADK_KPACKAGE_KMOD_NET_CLS_FW
default n
help
Say Y here to be able to use netfilter marks as u32 key.
@@ -276,7 +276,7 @@ config ADK_KPACKAGE_KMOD_NET_CLS_POLICE
prompt "kmod-act-police................... Traffic Policing"
tristate
select ADK_KERNEL_NET_CLS_ACT
- depends ADK_LINUX_2_4
+ depends on ADK_LINUX_2_4
default n
help
Say Y here if you want to do traffic policing, i.e. strict
@@ -287,7 +287,7 @@ config ADK_KPACKAGE_KMOD_NET_ACT_POLICE
prompt "kmod-act-police................... Traffic Policing"
tristate
select ADK_KERNEL_NET_CLS_ACT
- depends ADK_LINUX_2_6
+ depends on ADK_LINUX_2_6
default n
help
Say Y here if you want to do traffic policing, i.e. strict
@@ -298,7 +298,7 @@ config ADK_KPACKAGE_KMOD_NET_ACT_GACT
prompt "kmod-act-gact..................... Generic actions"
tristate
select ADK_KERNEL_NET_CLS_ACT
- depends ADK_LINUX_2_6
+ depends on ADK_LINUX_2_6
default n
help
Say Y here to take generic actions such as dropping and
@@ -308,7 +308,7 @@ config ADK_KPACKAGE_KMOD_NET_ACT_MIRRED
prompt "kmod-act-mirred................... Redirecting and Mirroring"
tristate
select ADK_KERNEL_NET_CLS_ACT
- depends ADK_LINUX_2_6
+ depends on ADK_LINUX_2_6
default n
help
Say Y here to allow packets to be mirrored or redirected to
@@ -319,7 +319,7 @@ config ADK_KPACKAGE_KMOD_NET_ACT_IPT
tristate
select ADK_KERNEL_NET_CLS_ACT
select ADK_KPACKAGE_KMOD_IP_NF_IPTABLES
- depends ADK_LINUX_2_6
+ depends on ADK_LINUX_2_6
default n
help
Say Y here to be able to invoke iptables targets after successful
@@ -329,7 +329,7 @@ config ADK_KPACKAGE_KMOD_NET_ACT_PEDIT
prompt "kmod-act-pedit.................... Packet Editing"
tristate
select ADK_KERNEL_NET_CLS_ACT
- depends ADK_LINUX_2_6
+ depends on ADK_LINUX_2_6
default n
help
Say Y here if you want to mangle the content of packets.
diff --git a/target/linux/config/Config.in.usb b/target/linux/config/Config.in.usb
index b3dfa9cbd..2efab411b 100644
--- a/target/linux/config/Config.in.usb
+++ b/target/linux/config/Config.in.usb
@@ -50,8 +50,8 @@ config ADK_KPACKAGE_KMOD_USB
config ADK_KPACKAGE_KMOD_USB_UHCI_HCD
prompt "kmod-usb-uhci................... Support for UHCI controllers"
tristate
- depends ADK_KPACKAGE_KMOD_USB
- depends !ADK_LINUX_CRIS_FOXBOARD
+ depends on ADK_KPACKAGE_KMOD_USB
+ depends on !ADK_LINUX_CRIS_FOXBOARD
select ADK_PACKAGE_KMOD_USB_CONTROLLER
help
The Universal Host Controller Interface is a standard by Intel for
@@ -68,8 +68,8 @@ config ADK_KPACKAGE_KMOD_USB_OHCI_HCD
tristate
default y if ADK_LINUX_X86_ALIX1C
default n
- depends !ADK_LINUX_CRIS_FOXBOARD
- depends ADK_KPACKAGE_KMOD_USB
+ depends on !ADK_LINUX_CRIS_FOXBOARD
+ depends on ADK_KPACKAGE_KMOD_USB
select ADK_PACKAGE_KMOD_USB_CONTROLLER
help
The Open Host Controller Interface (OHCI) is a standard for accessing
@@ -85,7 +85,7 @@ config ADK_KPACKAGE_KMOD_USB_ISP116X_HCD
prompt "kmod-usb-isp116x................ ISP116X HCD support"
tristate
default n
- depends !ADK_LINUX_CRIS_FOXBOARD
+ depends on !ADK_LINUX_CRIS_FOXBOARD
depends on ADK_KPACKAGE_KMOD_USB
select ADK_PACKAGE_KMOD_USB_CONTROLLER
help
@@ -98,7 +98,7 @@ config ADK_KPACKAGE_KMOD_USB_SL811_HCD
prompt "kmod-usb-sl811.................. SL811HS HCD support"
tristate
default n
- depends !ADK_LINUX_CRIS_FOXBOARD
+ depends on !ADK_LINUX_CRIS_FOXBOARD
depends on ADK_KPACKAGE_KMOD_USB
select ADK_PACKAGE_KMOD_USB_CONTROLLER
help
@@ -111,10 +111,10 @@ config ADK_KPACKAGE_KMOD_USB_SL811_HCD
config ADK_KPACKAGE_KMOD_USB_EHCI_HCD
prompt "kmod-usb-ehci................... Support for USB 2.0 controllers"
tristate
- depends !ADK_LINUX_CRIS_FOXBOARD
+ depends on !ADK_LINUX_CRIS_FOXBOARD
default y if ADK_LINUX_X86_ALIX1C
default n
- depends ADK_KPACKAGE_KMOD_USB
+ depends on ADK_KPACKAGE_KMOD_USB
select ADK_PACKAGE_KMOD_USB_CONTROLLER
help
The Enhanced Host Controller Interface (EHCI) is standard for USB 2.0
@@ -145,25 +145,25 @@ config ADK_KPACKAGE_KMOD_USB_ACM
prompt "kmod-usb-acm...................... Support for USB modems/isdn controllers"
tristate
default n
- depends ADK_PACKAGE_KMOD_USB_CONTROLLER
+ depends on ADK_PACKAGE_KMOD_USB_CONTROLLER
config ADK_KPACKAGE_KMOD_USB_PEGASUS
prompt "kmod-usb-pegasus.................. Support for USB Pegasus"
tristate
default n
- depends ADK_PACKAGE_KMOD_USB_CONTROLLER
+ depends on ADK_PACKAGE_KMOD_USB_CONTROLLER
config ADK_KPACKAGE_KMOD_USB_PRINTER
prompt "kmod-usb-printer.................. Support for USB printers"
tristate
default n
- depends ADK_PACKAGE_KMOD_USB_CONTROLLER
+ depends on ADK_PACKAGE_KMOD_USB_CONTROLLER
config ADK_KPACKAGE_KMOD_USB_SERIAL
prompt "kmod-usb-serial................... Support for USB-to-serial converters"
tristate
default n
- depends ADK_PACKAGE_KMOD_USB_CONTROLLER
+ depends on ADK_PACKAGE_KMOD_USB_CONTROLLER
help
Say Y here if you have a USB device that provides normal serial
ports, or acts like a serial device, and you want to connect it to
@@ -178,7 +178,7 @@ config ADK_KPACKAGE_KMOD_USB_SERIAL_BELKIN
prompt "kmod-usb-serial-belkin.......... Support for Belkin USB-to-serial converters"
tristate
default n
- depends ADK_KPACKAGE_KMOD_USB_SERIAL
+ depends on ADK_KPACKAGE_KMOD_USB_SERIAL
help
Say Y here if you want to use a Belkin USB Serial single port
adaptor (F5U103 is one of the model numbers) or the Peracom single
@@ -188,7 +188,7 @@ config ADK_KPACKAGE_KMOD_USB_SERIAL_FTDI_SIO
prompt "kmod-usb-serial-ftdi............ Support for FTDI USB-to-serial converter"
tristate
default n
- depends ADK_KPACKAGE_KMOD_USB_SERIAL
+ depends on ADK_KPACKAGE_KMOD_USB_SERIAL
help
Say Y here if you want to use a FTDI SIO single port USB to serial
converter device. The implementation I have is called the USC-1000.
@@ -201,7 +201,7 @@ config ADK_KPACKAGE_KMOD_USB_SERIAL_MCT_U232
prompt "kmod-usb-serial-mct-u232........ Support for Magic Control Technology USB-to-Serial converters"
tristate
default n
- depends ADK_KPACKAGE_KMOD_USB_SERIAL
+ depends on ADK_KPACKAGE_KMOD_USB_SERIAL
help
Say Y here if you want to use a USB Serial single port adapter from
Magic Control Technology Corp. (U232 is one of the model numbers).
@@ -213,7 +213,7 @@ config ADK_KPACKAGE_KMOD_USB_SERIAL_PL2303
prompt "kmod-usb-serial-pl2303.......... Support for Prolific PL2303 USB-to-Serial converters"
tristate
default n
- depends ADK_KPACKAGE_KMOD_USB_SERIAL
+ depends on ADK_KPACKAGE_KMOD_USB_SERIAL
help
Say Y here if you want to use the PL2303 USB Serial single port
adapter from Prolific.
@@ -222,7 +222,7 @@ config ADK_KPACKAGE_KMOD_USB_SERIAL_VISOR
prompt "kmod-usb-serial-visor........... Support for Handspring Visor / Palm m50x / Sony Clie Driver"
tristate
default n
- depends ADK_KPACKAGE_KMOD_USB_SERIAL
+ depends on ADK_KPACKAGE_KMOD_USB_SERIAL
help
Say Y here if you want to connect to your HandSpring Visor, Palm
m500 or m505 through its USB docking station. See
@@ -233,7 +233,7 @@ config ADK_KPACKAGE_KMOD_USB_STORAGE
prompt "kmod-usb-storage.................. Support for USB storage devices"
tristate
default n
- depends ADK_PACKAGE_KMOD_USB_CONTROLLER
+ depends on ADK_PACKAGE_KMOD_USB_CONTROLLER
select ADK_KPACKAGE_KMOD_SCSI if !ADK_KERNEL_SCSI
select ADK_KPACKAGE_KMOD_BLK_DEV_SD if !ADK_KERNEL_SCSI
@@ -241,24 +241,24 @@ config ADK_KPACKAGE_KMOD_USB_ATM
prompt "kmod-usb-atm...................... Support for USB ATM devices"
tristate
default n
- depends ADK_PACKAGE_KMOD_USB_CONTROLLER
+ depends on ADK_PACKAGE_KMOD_USB_CONTROLLER
config ADK_KPACKAGE_KMOD_USB_ATM_SPEEDTOUCH
prompt "kmod-usb-atm-speedtouch......... Support for USB Speedtouch ADSL modem"
tristate
default n
- depends ADK_KPACKAGE_KMOD_USB_ATM
+ depends on ADK_KPACKAGE_KMOD_USB_ATM
config ADK_KPACKAGE_KMOD_USB_USBNET
prompt "kmod-usb-usbnet................... Multi-purpose USB Networking Framework"
tristate
default n
- depends ADK_PACKAGE_KMOD_USB_CONTROLLER
+ depends on ADK_PACKAGE_KMOD_USB_CONTROLLER
config ADK_KPACKAGE_KMOD_USB_SISUSBVGA
prompt "kmod-usb-svga..................... USB 2.0 SVGA dongle support (Net2280/SiS315)"
tristate
default n
- depends ADK_PACKAGE_KMOD_USB_CONTROLLER
+ depends on ADK_PACKAGE_KMOD_USB_CONTROLLER
endmenu