aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/.gitignore4
-rw-r--r--scripts/basic/.gitignore3
-rw-r--r--scripts/kconfig/.gitignore16
-rw-r--r--scripts/kconfig/Makefile101
-rw-r--r--scripts/kconfig/conf.c37
-rw-r--r--scripts/kconfig/confdata.c112
-rw-r--r--scripts/kconfig/expr.h1
-rw-r--r--scripts/kconfig/lex.zconf.c_shipped1749
-rw-r--r--scripts/kconfig/lkc.h22
-rw-r--r--scripts/kconfig/lkc_proto.h1
-rw-r--r--scripts/kconfig/mconf.c3
-rw-r--r--scripts/kconfig/menu.c15
-rw-r--r--scripts/kconfig/symbol.c80
-rw-r--r--scripts/kconfig/zconf.gperf43
-rw-r--r--scripts/kconfig/zconf.hash.c_shipped231
-rw-r--r--scripts/kconfig/zconf.l96
-rw-r--r--scripts/kconfig/zconf.tab.c_shipped1177
-rw-r--r--scripts/kconfig/zconf.tab.h_shipped125
-rw-r--r--scripts/kconfig/zconf.y315
-rwxr-xr-xscripts/kernel-doc13
-rw-r--r--scripts/mod/.gitignore4
-rw-r--r--scripts/mod/file2alias.c12
22 files changed, 1609 insertions, 2551 deletions
diff --git a/scripts/.gitignore b/scripts/.gitignore
new file mode 100644
index 000000000000..b46d68bb9e17
--- /dev/null
+++ b/scripts/.gitignore
@@ -0,0 +1,4 @@
1conmakehash
2kallsyms
3pnmtologo
4
diff --git a/scripts/basic/.gitignore b/scripts/basic/.gitignore
new file mode 100644
index 000000000000..7304e19782c7
--- /dev/null
+++ b/scripts/basic/.gitignore
@@ -0,0 +1,3 @@
1fixdep
2split-include
3docproc
diff --git a/scripts/kconfig/.gitignore b/scripts/kconfig/.gitignore
new file mode 100644
index 000000000000..2dac3442e0ac
--- /dev/null
+++ b/scripts/kconfig/.gitignore
@@ -0,0 +1,16 @@
1#
2# Generated files
3#
4config*
5lex.*.c
6*.tab.c
7*.tab.h
8
9#
10# configuration programs
11#
12conf
13mconf
14qconf
15gconf
16kxgettext
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 2fcb244a9e18..a96153fc793f 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -114,57 +114,75 @@ gconf-objs := gconf.o kconfig_load.o zconf.tab.o
114endif 114endif
115 115
116clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \ 116clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \
117 .tmp_gtkcheck zconf.tab.c zconf.tab.h lex.zconf.c 117 .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c
118
119# Needed for systems without gettext
120KBUILD_HAVE_NLS := $(shell \
121 if echo "\#include <libintl.h>" | $(HOSTCC) $(HOSTCFLAGS) -E - > /dev/null 2>&1 ; \
122 then echo yes ; \
123 else echo no ; fi)
124ifeq ($(KBUILD_HAVE_NLS),no)
125HOSTCFLAGS += -DKBUILD_NO_NLS
126endif
118 127
119# generated files seem to need this to find local include files 128# generated files seem to need this to find local include files
120HOSTCFLAGS_lex.zconf.o := -I$(src) 129HOSTCFLAGS_lex.zconf.o := -I$(src)
121HOSTCFLAGS_zconf.tab.o := -I$(src) 130HOSTCFLAGS_zconf.tab.o := -I$(src)
122 131
123HOSTLOADLIBES_qconf = -L$(QTLIBPATH) -Wl,-rpath,$(QTLIBPATH) -l$(QTLIB) -ldl 132HOSTLOADLIBES_qconf = $(KC_QT_LIBS) -ldl
124HOSTCXXFLAGS_qconf.o = -I$(QTDIR)/include -D LKC_DIRECT_LINK 133HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK
125 134
126HOSTLOADLIBES_gconf = `pkg-config gtk+-2.0 gmodule-2.0 libglade-2.0 --libs` 135HOSTLOADLIBES_gconf = `pkg-config gtk+-2.0 gmodule-2.0 libglade-2.0 --libs`
127HOSTCFLAGS_gconf.o = `pkg-config gtk+-2.0 gmodule-2.0 libglade-2.0 --cflags` \ 136HOSTCFLAGS_gconf.o = `pkg-config gtk+-2.0 gmodule-2.0 libglade-2.0 --cflags` \
128 -D LKC_DIRECT_LINK 137 -D LKC_DIRECT_LINK
129 138
130$(obj)/conf.o $(obj)/mconf.o $(obj)/qconf.o $(obj)/gconf.o $(obj)/kxgettext: $(obj)/zconf.tab.h
131
132$(obj)/zconf.tab.h: $(src)/zconf.tab.h_shipped
133$(obj)/zconf.tab.c: $(src)/zconf.tab.c_shipped
134$(obj)/lex.zconf.c: $(src)/lex.zconf.c_shipped
135
136$(obj)/qconf.o: $(obj)/.tmp_qtcheck 139$(obj)/qconf.o: $(obj)/.tmp_qtcheck
137 140
138ifeq ($(qconf-target),1) 141ifeq ($(qconf-target),1)
139MOC = $(QTDIR)/bin/moc 142$(obj)/.tmp_qtcheck: $(src)/Makefile
140QTLIBPATH = $(QTDIR)/lib
141-include $(obj)/.tmp_qtcheck 143-include $(obj)/.tmp_qtcheck
142 144
143# QT needs some extra effort... 145# QT needs some extra effort...
144$(obj)/.tmp_qtcheck: 146$(obj)/.tmp_qtcheck:
145 @set -e; for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \ 147 @set -e; echo " CHECK qt"; dir=""; pkg=""; \
146 if [ -f $$d/include/qconfig.h ]; then DIR=$$d; break; fi; \ 148 pkg-config --exists qt 2> /dev/null && pkg=qt; \
147 done; \ 149 pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
148 if [ -z "$$DIR" ]; then \ 150 if [ -n "$$pkg" ]; then \
149 echo "*"; \ 151 cflags="\$$(shell pkg-config $$pkg --cflags)"; \
150 echo "* Unable to find the QT installation. Please make sure that the"; \ 152 libs="\$$(shell pkg-config $$pkg --libs)"; \
151 echo "* QT development package is correctly installed and the QTDIR"; \ 153 moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
152 echo "* environment variable is set to the correct location."; \ 154 dir="$$(pkg-config $$pkg --variable=prefix)"; \
153 echo "*"; \ 155 else \
154 false; \ 156 for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
157 if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
158 done; \
159 if [ -z "$$dir" ]; then \
160 echo "*"; \
161 echo "* Unable to find the QT installation. Please make sure that"; \
162 echo "* the QT development package is correctly installed and"; \
163 echo "* either install pkg-config or set the QTDIR environment"; \
164 echo "* variable to the correct location."; \
165 echo "*"; \
166 false; \
167 fi; \
168 libpath=$$dir/lib; lib=qt; osdir=""; \
169 $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
170 osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
171 test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
172 test -f $$libpath/libqt-mt.so && lib=qt-mt; \
173 cflags="-I$$dir/include"; \
174 libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
175 moc="$$dir/bin/moc"; \
155 fi; \ 176 fi; \
156 LIBPATH=$$DIR/lib; LIB=qt; \ 177 if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
157 $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
158 LIBPATH=$$DIR/lib/$$($(HOSTCXX) -print-multi-os-directory); \
159 if [ -f $$LIBPATH/libqt-mt.so ]; then LIB=qt-mt; fi; \
160 echo "QTDIR=$$DIR" > $@; echo "QTLIBPATH=$$LIBPATH" >> $@; \
161 echo "QTLIB=$$LIB" >> $@; \
162 if [ ! -x $$DIR/bin/moc -a -x /usr/bin/moc ]; then \
163 echo "*"; \ 178 echo "*"; \
164 echo "* Unable to find $$DIR/bin/moc, using /usr/bin/moc instead."; \ 179 echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
165 echo "*"; \ 180 echo "*"; \
166 echo "MOC=/usr/bin/moc" >> $@; \ 181 moc="/usr/bin/moc"; \
167 fi 182 fi; \
183 echo "KC_QT_CFLAGS=$$cflags" > $@; \
184 echo "KC_QT_LIBS=$$libs" >> $@; \
185 echo "KC_QT_MOC=$$moc" >> $@
168endif 186endif
169 187
170$(obj)/gconf.o: $(obj)/.tmp_gtkcheck 188$(obj)/gconf.o: $(obj)/.tmp_gtkcheck
@@ -193,7 +211,7 @@ $(obj)/.tmp_gtkcheck:
193 fi 211 fi
194endif 212endif
195 213
196$(obj)/zconf.tab.o: $(obj)/lex.zconf.c 214$(obj)/zconf.tab.o: $(obj)/lex.zconf.c $(obj)/zconf.hash.c
197 215
198$(obj)/kconfig_load.o: $(obj)/lkc_defs.h 216$(obj)/kconfig_load.o: $(obj)/lkc_defs.h
199 217
@@ -202,27 +220,34 @@ $(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h
202$(obj)/gconf.o: $(obj)/lkc_defs.h 220$(obj)/gconf.o: $(obj)/lkc_defs.h
203 221
204$(obj)/%.moc: $(src)/%.h 222$(obj)/%.moc: $(src)/%.h
205 $(MOC) -i $< -o $@ 223 $(KC_QT_MOC) -i $< -o $@
206 224
207$(obj)/lkc_defs.h: $(src)/lkc_proto.h 225$(obj)/lkc_defs.h: $(src)/lkc_proto.h
208 sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/' 226 sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
209 227
210 228
211### 229###
212# The following requires flex/bison 230# The following requires flex/bison/gperf
213# By default we use the _shipped versions, uncomment the following line if 231# By default we use the _shipped versions, uncomment the following line if
214# you are modifying the flex/bison src. 232# you are modifying the flex/bison src.
215# LKC_GENPARSER := 1 233# LKC_GENPARSER := 1
216 234
217ifdef LKC_GENPARSER 235ifdef LKC_GENPARSER
218 236
219$(obj)/zconf.tab.c: $(obj)/zconf.y 237$(obj)/zconf.tab.c: $(src)/zconf.y
220$(obj)/zconf.tab.h: $(obj)/zconf.tab.c 238$(obj)/lex.zconf.c: $(src)/zconf.l
239$(obj)/zconf.hash.c: $(src)/zconf.gperf
221 240
222%.tab.c: %.y 241%.tab.c: %.y
223 bison -t -d -v -b $* -p $(notdir $*) $< 242 bison -l -b $* -p $(notdir $*) $<
243 cp $@ $@_shipped
224 244
225lex.%.c: %.l 245lex.%.c: %.l
226 flex -P$(notdir $*) -o$@ $< 246 flex -L -P$(notdir $*) -o$@ $<
247 cp $@ $@_shipped
248
249%.hash.c: %.gperf
250 gperf < $< > $@
251 cp $@ $@_shipped
227 252
228endif 253endif
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
index bc20cab9d0d6..8ba5d29d3d42 100644
--- a/scripts/kconfig/conf.c
+++ b/scripts/kconfig/conf.c
@@ -82,6 +82,15 @@ static void conf_askvalue(struct symbol *sym, const char *def)
82 } 82 }
83 83
84 switch (input_mode) { 84 switch (input_mode) {
85 case set_no:
86 case set_mod:
87 case set_yes:
88 case set_random:
89 if (sym_has_value(sym)) {
90 printf("%s\n", def);
91 return;
92 }
93 break;
85 case ask_new: 94 case ask_new:
86 case ask_silent: 95 case ask_silent:
87 if (sym_has_value(sym)) { 96 if (sym_has_value(sym)) {
@@ -467,15 +476,14 @@ static void check_conf(struct menu *menu)
467 return; 476 return;
468 477
469 sym = menu->sym; 478 sym = menu->sym;
470 if (sym) { 479 if (sym && !sym_has_value(sym)) {
471 if (sym_is_changable(sym) && !sym_has_value(sym)) { 480 if (sym_is_changable(sym) ||
481 (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
472 if (!conf_cnt++) 482 if (!conf_cnt++)
473 printf(_("*\n* Restart config...\n*\n")); 483 printf(_("*\n* Restart config...\n*\n"));
474 rootEntry = menu_get_parent_menu(menu); 484 rootEntry = menu_get_parent_menu(menu);
475 conf(rootEntry); 485 conf(rootEntry);
476 } 486 }
477 if (sym_is_choice(sym) && sym_get_tristate_value(sym) != mod)
478 return;
479 } 487 }
480 488
481 for (child = menu->list; child; child = child->next) 489 for (child = menu->list; child; child = child->next)
@@ -559,6 +567,27 @@ int main(int ac, char **av)
559 case ask_new: 567 case ask_new:
560 conf_read(NULL); 568 conf_read(NULL);
561 break; 569 break;
570 case set_no:
571 case set_mod:
572 case set_yes:
573 case set_random:
574 name = getenv("KCONFIG_ALLCONFIG");
575 if (name && !stat(name, &tmpstat)) {
576 conf_read_simple(name);
577 break;
578 }
579 switch (input_mode) {
580 case set_no: name = "allno.config"; break;
581 case set_mod: name = "allmod.config"; break;
582 case set_yes: name = "allyes.config"; break;
583 case set_random: name = "allrandom.config"; break;
584 default: break;
585 }
586 if (!stat(name, &tmpstat))
587 conf_read_simple(name);
588 else if (!stat("all.config", &tmpstat))
589 conf_read_simple("all.config");
590 break;
562 default: 591 default:
563 break; 592 break;
564 } 593 }
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 02f670cc6bb9..ccd45130c482 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -14,6 +14,12 @@
14#define LKC_DIRECT_LINK 14#define LKC_DIRECT_LINK
15#include "lkc.h" 15#include "lkc.h"
16 16
17static void conf_warning(const char *fmt, ...)
18 __attribute__ ((format (printf, 1, 2)));
19
20static const char *conf_filename;
21static int conf_lineno, conf_warnings, conf_unsaved;
22
17const char conf_def_filename[] = ".config"; 23const char conf_def_filename[] = ".config";
18 24
19const char conf_defname[] = "arch/$ARCH/defconfig"; 25const char conf_defname[] = "arch/$ARCH/defconfig";
@@ -27,6 +33,17 @@ const char *conf_confnames[] = {
27 NULL, 33 NULL,
28}; 34};
29 35
36static void conf_warning(const char *fmt, ...)
37{
38 va_list ap;
39 va_start(ap, fmt);
40 fprintf(stderr, "%s:%d:warning: ", conf_filename, conf_lineno);
41 vfprintf(stderr, fmt, ap);
42 fprintf(stderr, "\n");
43 va_end(ap);
44 conf_warnings++;
45}
46
30static char *conf_expand_value(const char *in) 47static char *conf_expand_value(const char *in)
31{ 48{
32 struct symbol *sym; 49 struct symbol *sym;
@@ -69,15 +86,12 @@ char *conf_get_default_confname(void)
69 return name; 86 return name;
70} 87}
71 88
72int conf_read(const char *name) 89int conf_read_simple(const char *name)
73{ 90{
74 FILE *in = NULL; 91 FILE *in = NULL;
75 char line[1024]; 92 char line[1024];
76 char *p, *p2; 93 char *p, *p2;
77 int lineno = 0;
78 struct symbol *sym; 94 struct symbol *sym;
79 struct property *prop;
80 struct expr *e;
81 int i; 95 int i;
82 96
83 if (name) { 97 if (name) {
@@ -95,12 +109,18 @@ int conf_read(const char *name)
95 } 109 }
96 } 110 }
97 } 111 }
98
99 if (!in) 112 if (!in)
100 return 1; 113 return 1;
101 114
115 conf_filename = name;
116 conf_lineno = 0;
117 conf_warnings = 0;
118 conf_unsaved = 0;
119
102 for_all_symbols(i, sym) { 120 for_all_symbols(i, sym) {
103 sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED; 121 sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED;
122 if (sym_is_choice(sym))
123 sym->flags &= ~SYMBOL_NEW;
104 sym->flags &= ~SYMBOL_VALID; 124 sym->flags &= ~SYMBOL_VALID;
105 switch (sym->type) { 125 switch (sym->type) {
106 case S_INT: 126 case S_INT:
@@ -115,7 +135,7 @@ int conf_read(const char *name)
115 } 135 }
116 136
117 while (fgets(line, sizeof(line), in)) { 137 while (fgets(line, sizeof(line), in)) {
118 lineno++; 138 conf_lineno++;
119 sym = NULL; 139 sym = NULL;
120 switch (line[0]) { 140 switch (line[0]) {
121 case '#': 141 case '#':
@@ -129,7 +149,10 @@ int conf_read(const char *name)
129 continue; 149 continue;
130 sym = sym_find(line + 9); 150 sym = sym_find(line + 9);
131 if (!sym) { 151 if (!sym) {
132 fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 9); 152 conf_warning("trying to assign nonexistent symbol %s", line + 9);
153 break;
154 } else if (!(sym->flags & SYMBOL_NEW)) {
155 conf_warning("trying to reassign symbol %s", sym->name);
133 break; 156 break;
134 } 157 }
135 switch (sym->type) { 158 switch (sym->type) {
@@ -143,8 +166,10 @@ int conf_read(const char *name)
143 } 166 }
144 break; 167 break;
145 case 'C': 168 case 'C':
146 if (memcmp(line, "CONFIG_", 7)) 169 if (memcmp(line, "CONFIG_", 7)) {
170 conf_warning("unexpected data");
147 continue; 171 continue;
172 }
148 p = strchr(line + 7, '='); 173 p = strchr(line + 7, '=');
149 if (!p) 174 if (!p)
150 continue; 175 continue;
@@ -154,7 +179,10 @@ int conf_read(const char *name)
154 *p2 = 0; 179 *p2 = 0;
155 sym = sym_find(line + 7); 180 sym = sym_find(line + 7);
156 if (!sym) { 181 if (!sym) {
157 fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 7); 182 conf_warning("trying to assign nonexistent symbol %s", line + 7);
183 break;
184 } else if (!(sym->flags & SYMBOL_NEW)) {
185 conf_warning("trying to reassign symbol %s", sym->name);
158 break; 186 break;
159 } 187 }
160 switch (sym->type) { 188 switch (sym->type) {
@@ -175,6 +203,7 @@ int conf_read(const char *name)
175 sym->flags &= ~SYMBOL_NEW; 203 sym->flags &= ~SYMBOL_NEW;
176 break; 204 break;
177 } 205 }
206 conf_warning("symbol value '%s' invalid for %s", p, sym->name);
178 break; 207 break;
179 case S_STRING: 208 case S_STRING:
180 if (*p++ != '"') 209 if (*p++ != '"')
@@ -187,8 +216,8 @@ int conf_read(const char *name)
187 memmove(p2, p2 + 1, strlen(p2)); 216 memmove(p2, p2 + 1, strlen(p2));
188 } 217 }
189 if (!p2) { 218 if (!p2) {
190 fprintf(stderr, "%s:%d: invalid string found\n", name, lineno); 219 conf_warning("invalid string found");
191 exit(1); 220 continue;
192 } 221 }
193 case S_INT: 222 case S_INT:
194 case S_HEX: 223 case S_HEX:
@@ -196,8 +225,8 @@ int conf_read(const char *name)
196 sym->user.val = strdup(p); 225 sym->user.val = strdup(p);
197 sym->flags &= ~SYMBOL_NEW; 226 sym->flags &= ~SYMBOL_NEW;
198 } else { 227 } else {
199 fprintf(stderr, "%s:%d: symbol value '%s' invalid for %s\n", name, lineno, p, sym->name); 228 conf_warning("symbol value '%s' invalid for %s", p, sym->name);
200 exit(1); 229 continue;
201 } 230 }
202 break; 231 break;
203 default: 232 default:
@@ -207,6 +236,7 @@ int conf_read(const char *name)
207 case '\n': 236 case '\n':
208 break; 237 break;
209 default: 238 default:
239 conf_warning("unexpected data");
210 continue; 240 continue;
211 } 241 }
212 if (sym && sym_is_choice_value(sym)) { 242 if (sym && sym_is_choice_value(sym)) {
@@ -215,25 +245,63 @@ int conf_read(const char *name)
215 case no: 245 case no:
216 break; 246 break;
217 case mod: 247 case mod:
218 if (cs->user.tri == yes) 248 if (cs->user.tri == yes) {
219 /* warn? */; 249 conf_warning("%s creates inconsistent choice state", sym->name);
250 cs->flags |= SYMBOL_NEW;
251 }
220 break; 252 break;
221 case yes: 253 case yes:
222 if (cs->user.tri != no) 254 if (cs->user.tri != no) {
223 /* warn? */; 255 conf_warning("%s creates inconsistent choice state", sym->name);
224 cs->user.val = sym; 256 cs->flags |= SYMBOL_NEW;
257 } else
258 cs->user.val = sym;
225 break; 259 break;
226 } 260 }
227 cs->user.tri = E_OR(cs->user.tri, sym->user.tri); 261 cs->user.tri = E_OR(cs->user.tri, sym->user.tri);
228 cs->flags &= ~SYMBOL_NEW;
229 } 262 }
230 } 263 }
231 fclose(in); 264 fclose(in);
232 265
233 if (modules_sym) 266 if (modules_sym)
234 sym_calc_value(modules_sym); 267 sym_calc_value(modules_sym);
268 return 0;
269}
270
271int conf_read(const char *name)
272{
273 struct symbol *sym;
274 struct property *prop;
275 struct expr *e;
276 int i;
277
278 if (conf_read_simple(name))
279 return 1;
280
235 for_all_symbols(i, sym) { 281 for_all_symbols(i, sym) {
236 sym_calc_value(sym); 282 sym_calc_value(sym);
283 if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO))
284 goto sym_ok;
285 if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) {
286 /* check that calculated value agrees with saved value */
287 switch (sym->type) {
288 case S_BOOLEAN:
289 case S_TRISTATE:
290 if (sym->user.tri != sym_get_tristate_value(sym))
291 break;
292 if (!sym_is_choice(sym))
293 goto sym_ok;
294 default:
295 if (!strcmp(sym->curr.val, sym->user.val))
296 goto sym_ok;
297 break;
298 }
299 } else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE))
300 /* no previous value and not saved */
301 goto sym_ok;
302 conf_unsaved++;
303 /* maybe print value in verbose mode... */
304 sym_ok:
237 if (sym_has_value(sym) && !sym_is_choice_value(sym)) { 305 if (sym_has_value(sym) && !sym_is_choice_value(sym)) {
238 if (sym->visible == no) 306 if (sym->visible == no)
239 sym->flags |= SYMBOL_NEW; 307 sym->flags |= SYMBOL_NEW;
@@ -241,8 +309,10 @@ int conf_read(const char *name)
241 case S_STRING: 309 case S_STRING:
242 case S_INT: 310 case S_INT:
243 case S_HEX: 311 case S_HEX:
244 if (!sym_string_within_range(sym, sym->user.val)) 312 if (!sym_string_within_range(sym, sym->user.val)) {
245 sym->flags |= SYMBOL_NEW; 313 sym->flags |= SYMBOL_NEW;
314 sym->flags &= ~SYMBOL_VALID;
315 }
246 default: 316 default:
247 break; 317 break;
248 } 318 }
@@ -255,7 +325,7 @@ int conf_read(const char *name)
255 sym->flags |= e->right.sym->flags & SYMBOL_NEW; 325 sym->flags |= e->right.sym->flags & SYMBOL_NEW;
256 } 326 }
257 327
258 sym_change_count = 1; 328 sym_change_count = conf_warnings && conf_unsaved;
259 329
260 return 0; 330 return 0;
261} 331}
diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h
index 7d39ff43e6e1..1b36ef18c48d 100644
--- a/scripts/kconfig/expr.h
+++ b/scripts/kconfig/expr.h
@@ -93,7 +93,6 @@ struct symbol {
93#define SYMBOL_NEW 0x0800 93#define SYMBOL_NEW 0x0800
94#define SYMBOL_AUTO 0x1000 94#define SYMBOL_AUTO 0x1000
95#define SYMBOL_CHECKED 0x2000 95#define SYMBOL_CHECKED 0x2000
96#define SYMBOL_CHECK_DONE 0x4000
97#define SYMBOL_WARNED 0x8000 96#define SYMBOL_WARNED 0x8000
98 97
99#define SYMBOL_MAXLENGTH 256 98#define SYMBOL_MAXLENGTH 256
diff --git a/scripts/kconfig/lex.zconf.c_shipped b/scripts/kconfig/lex.zconf.c_shipped
index 22dda11f758b..24e3c8cbb7ac 100644
--- a/scripts/kconfig/lex.zconf.c_shipped
+++ b/scripts/kconfig/lex.zconf.c_shipped
@@ -1,5 +1,5 @@
1 1
2#line 3 "lex.zconf.c" 2#line 3 "scripts/kconfig/lex.zconf.c"
3 3
4#define YY_INT_ALIGNED short int 4#define YY_INT_ALIGNED short int
5 5
@@ -323,7 +323,7 @@ void zconffree (void * );
323 323
324/* Begin user sect3 */ 324/* Begin user sect3 */
325 325
326#define zconfwrap(n) 1 326#define zconfwrap() 1
327#define YY_SKIP_YYWRAP 327#define YY_SKIP_YYWRAP
328 328
329typedef unsigned char YY_CHAR; 329typedef unsigned char YY_CHAR;
@@ -338,1567 +338,323 @@ int zconflineno = 1;
338 338
339extern char *zconftext; 339extern char *zconftext;
340#define yytext_ptr zconftext 340#define yytext_ptr zconftext
341static yyconst flex_int16_t yy_nxt[][38] = 341static yyconst flex_int16_t yy_nxt[][17] =
342 { 342 {
343 { 343 {
344 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
345 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345 0, 0, 0, 0, 0, 0, 0
346 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
347 0, 0, 0, 0, 0, 0, 0, 0
348 }, 346 },
349 347
350 { 348 {
351 11, 12, 13, 14, 12, 12, 15, 12, 12, 12, 349 11, 12, 13, 14, 12, 12, 15, 12, 12, 12,
352 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 350 12, 12, 12, 12, 12, 12, 12
353 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
354 12, 12, 12, 12, 12, 12, 12, 12
355 }, 351 },
356 352
357 { 353 {
358 11, 12, 13, 14, 12, 12, 15, 12, 12, 12, 354 11, 12, 13, 14, 12, 12, 15, 12, 12, 12,
359 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 355 12, 12, 12, 12, 12, 12, 12
360
361 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
362 12, 12, 12, 12, 12, 12, 12, 12
363 }, 356 },
364 357
365 { 358 {
366 11, 16, 16, 17, 16, 16, 16, 16, 16, 16, 359 11, 16, 16, 17, 16, 16, 16, 16, 16, 16,
367 16, 16, 16, 18, 16, 16, 18, 18, 19, 20, 360 16, 16, 16, 18, 16, 16, 16
368 21, 22, 18, 18, 23, 24, 18, 25, 18, 26,
369 27, 18, 28, 29, 30, 18, 18, 16
370 }, 361 },
371 362
372 { 363 {
373 11, 16, 16, 17, 16, 16, 16, 16, 16, 16, 364 11, 16, 16, 17, 16, 16, 16, 16, 16, 16,
374 16, 16, 16, 18, 16, 16, 18, 18, 19, 20, 365 16, 16, 16, 18, 16, 16, 16
375 21, 22, 18, 18, 23, 24, 18, 25, 18, 26,
376 27, 18, 28, 29, 30, 18, 18, 16
377 366
378 }, 367 },
379 368
380 { 369 {
381 11, 31, 32, 33, 31, 31, 31, 31, 31, 31, 370 11, 19, 20, 21, 19, 19, 19, 19, 19, 19,
382 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 371 19, 19, 19, 19, 19, 19, 19
383 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
384 31, 31, 31, 31, 31, 31, 31, 31
385 }, 372 },
386 373
387 { 374 {
388 11, 31, 32, 33, 31, 31, 31, 31, 31, 31, 375 11, 19, 20, 21, 19, 19, 19, 19, 19, 19,
389 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 376 19, 19, 19, 19, 19, 19, 19
390 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
391 31, 31, 31, 31, 31, 31, 31, 31
392 }, 377 },
393 378
394 { 379 {
395 11, 34, 34, 35, 34, 36, 34, 34, 36, 34, 380 11, 22, 22, 23, 22, 24, 22, 22, 24, 22,
396 34, 34, 34, 34, 34, 37, 34, 34, 34, 34, 381 22, 22, 22, 22, 22, 25, 22
397
398 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
399 34, 34, 34, 34, 34, 34, 34, 34
400 }, 382 },
401 383
402 { 384 {
403 11, 34, 34, 35, 34, 36, 34, 34, 36, 34, 385 11, 22, 22, 23, 22, 24, 22, 22, 24, 22,
404 34, 34, 34, 34, 34, 37, 34, 34, 34, 34, 386 22, 22, 22, 22, 22, 25, 22
405 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
406 34, 34, 34, 34, 34, 34, 34, 34
407 }, 387 },
408 388
409 { 389 {
410 11, 38, 38, 39, 40, 41, 42, 43, 41, 44, 390 11, 26, 26, 27, 28, 29, 30, 31, 29, 32,
411 45, 46, 47, 47, 48, 49, 47, 47, 47, 47, 391 33, 34, 35, 35, 36, 37, 38
412 47, 47, 47, 47, 47, 50, 47, 47, 47, 51,
413 47, 47, 47, 47, 47, 47, 47, 52
414 392
415 }, 393 },
416 394
417 { 395 {
418 11, 38, 38, 39, 40, 41, 42, 43, 41, 44, 396 11, 26, 26, 27, 28, 29, 30, 31, 29, 32,
419 45, 46, 47, 47, 48, 49, 47, 47, 47, 47, 397 33, 34, 35, 35, 36, 37, 38
420 47, 47, 47, 47, 47, 50, 47, 47, 47, 51,
421 47, 47, 47, 47, 47, 47, 47, 52
422 }, 398 },
423 399
424 { 400 {
425 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 401 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11,
426 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 402 -11, -11, -11, -11, -11, -11, -11
427 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11,
428 -11, -11, -11, -11, -11, -11, -11, -11
429 }, 403 },
430 404
431 { 405 {
432 11, -12, -12, -12, -12, -12, -12, -12, -12, -12, 406 11, -12, -12, -12, -12, -12, -12, -12, -12, -12,
433 -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, 407 -12, -12, -12, -12, -12, -12, -12
434
435 -12, -12, -12, -12, -12, -12, -12, -12, -12, -12,
436 -12, -12, -12, -12, -12, -12, -12, -12
437 }, 408 },
438 409
439 { 410 {
440 11, -13, 53, 54, -13, -13, 55, -13, -13, -13, 411 11, -13, 39, 40, -13, -13, 41, -13, -13, -13,
441 -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, 412 -13, -13, -13, -13, -13, -13, -13
442 -13, -13, -13, -13, -13, -13, -13, -13, -13, -13,
443 -13, -13, -13, -13, -13, -13, -13, -13
444 }, 413 },
445 414
446 { 415 {
447 11, -14, -14, -14, -14, -14, -14, -14, -14, -14, 416 11, -14, -14, -14, -14, -14, -14, -14, -14, -14,
448 -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, 417 -14, -14, -14, -14, -14, -14, -14
449 -14, -14, -14, -14, -14, -14, -14, -14, -14, -14,
450 -14, -14, -14, -14, -14, -14, -14, -14
451 418
452 }, 419 },
453 420
454 { 421 {
455 11, 56, 56, 57, 56, 56, 56, 56, 56, 56, 422 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
456 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 423 42, 42, 42, 42, 42, 42, 42
457 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
458 56, 56, 56, 56, 56, 56, 56, 56
459 }, 424 },
460 425
461 { 426 {
462 11, -16, -16, -16, -16, -16, -16, -16, -16, -16, 427 11, -16, -16, -16, -16, -16, -16, -16, -16, -16,
463 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 428 -16, -16, -16, -16, -16, -16, -16
464 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
465 -16, -16, -16, -16, -16, -16, -16, -16
466 }, 429 },
467 430
468 { 431 {
469 11, -17, -17, -17, -17, -17, -17, -17, -17, -17, 432 11, -17, -17, -17, -17, -17, -17, -17, -17, -17,
470 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 433 -17, -17, -17, -17, -17, -17, -17
471
472 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17,
473 -17, -17, -17, -17, -17, -17, -17, -17
474 }, 434 },
475 435
476 { 436 {
477 11, -18, -18, -18, -18, -18, -18, -18, -18, -18, 437 11, -18, -18, -18, -18, -18, -18, -18, -18, -18,
478 -18, -18, -18, 58, -18, -18, 58, 58, 58, 58, 438 -18, -18, -18, 44, -18, -18, -18
479 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
480 58, 58, 58, 58, 58, 58, 58, -18
481 }, 439 },
482 440
483 { 441 {
484 11, -19, -19, -19, -19, -19, -19, -19, -19, -19, 442 11, 45, 45, -19, 45, 45, 45, 45, 45, 45,
485 -19, -19, -19, 58, -19, -19, 58, 58, 58, 58, 443 45, 45, 45, 45, 45, 45, 45
486 58, 58, 58, 58, 58, 58, 58, 58, 58, 59,
487 58, 58, 58, 58, 58, 58, 58, -19
488 444
489 }, 445 },
490 446
491 { 447 {
492 11, -20, -20, -20, -20, -20, -20, -20, -20, -20, 448 11, -20, 46, 47, -20, -20, -20, -20, -20, -20,
493 -20, -20, -20, 58, -20, -20, 58, 58, 58, 58, 449 -20, -20, -20, -20, -20, -20, -20
494 58, 58, 58, 58, 60, 58, 58, 58, 58, 61,
495 58, 58, 58, 58, 58, 58, 58, -20
496 }, 450 },
497 451
498 { 452 {
499 11, -21, -21, -21, -21, -21, -21, -21, -21, -21, 453 11, 48, -21, -21, 48, 48, 48, 48, 48, 48,
500 -21, -21, -21, 58, -21, -21, 58, 58, 58, 58, 454 48, 48, 48, 48, 48, 48, 48
501 58, 62, 58, 58, 58, 58, 58, 58, 58, 58,
502 58, 58, 58, 58, 58, 58, 58, -21
503 }, 455 },
504 456
505 { 457 {
506 11, -22, -22, -22, -22, -22, -22, -22, -22, -22, 458 11, 49, 49, 50, 49, -22, 49, 49, -22, 49,
507 -22, -22, -22, 58, -22, -22, 58, 58, 58, 58, 459 49, 49, 49, 49, 49, -22, 49
508
509 58, 58, 58, 58, 58, 58, 58, 58, 63, 58,
510 58, 58, 58, 58, 58, 58, 58, -22
511 }, 460 },
512 461
513 { 462 {
514 11, -23, -23, -23, -23, -23, -23, -23, -23, -23, 463 11, -23, -23, -23, -23, -23, -23, -23, -23, -23,
515 -23, -23, -23, 58, -23, -23, 58, 58, 58, 58, 464 -23, -23, -23, -23, -23, -23, -23
516 58, 64, 58, 58, 58, 58, 58, 58, 58, 58,
517 58, 58, 58, 58, 58, 58, 58, -23
518 }, 465 },
519 466
520 { 467 {
521 11, -24, -24, -24, -24, -24, -24, -24, -24, -24, 468 11, -24, -24, -24, -24, -24, -24, -24, -24, -24,
522 -24, -24, -24, 58, -24, -24, 58, 58, 58, 58, 469 -24, -24, -24, -24, -24, -24, -24
523 58, 58, 65, 58, 58, 58, 58, 58, 66, 58,
524 58, 58, 58, 58, 58, 58, 58, -24
525 470
526 }, 471 },
527 472
528 { 473 {
529 11, -25, -25, -25, -25, -25, -25, -25, -25, -25, 474 11, 51, 51, 52, 51, 51, 51, 51, 51, 51,
530 -25, -25, -25, 58, -25, -25, 58, 67, 58, 58, 475 51, 51, 51, 51, 51, 51, 51
531 58, 68, 58, 58, 58, 58, 58, 58, 58, 58,
532 58, 58, 58, 58, 58, 58, 58, -25
533 }, 476 },
534 477
535 { 478 {
536 11, -26, -26, -26, -26, -26, -26, -26, -26, -26, 479 11, -26, -26, -26, -26, -26, -26, -26, -26, -26,
537 -26, -26, -26, 58, -26, -26, 58, 58, 58, 58, 480 -26, -26, -26, -26, -26, -26, -26
538 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
539 69, 58, 58, 58, 58, 58, 58, -26
540 }, 481 },
541 482
542 { 483 {
543 11, -27, -27, -27, -27, -27, -27, -27, -27, -27, 484 11, -27, -27, -27, -27, -27, -27, -27, -27, -27,
544 -27, -27, -27, 58, -27, -27, 58, 58, 58, 58, 485 -27, -27, -27, -27, -27, -27, -27
545
546 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
547 58, 58, 70, 58, 58, 58, 58, -27
548 }, 486 },
549 487
550 { 488 {
551 11, -28, -28, -28, -28, -28, -28, -28, -28, -28, 489 11, -28, -28, -28, -28, -28, -28, -28, -28, -28,
552 -28, -28, -28, 58, -28, -28, 58, 71, 58, 58, 490 -28, -28, -28, -28, 53, -28, -28
553 58, 72, 58, 58, 58, 58, 58, 58, 58, 58,
554 58, 58, 58, 58, 58, 58, 58, -28
555 }, 491 },
556 492
557 { 493 {
558 11, -29, -29, -29, -29, -29, -29, -29, -29, -29, 494 11, -29, -29, -29, -29, -29, -29, -29, -29, -29,
559 -29, -29, -29, 58, -29, -29, 58, 58, 58, 58, 495 -29, -29, -29, -29, -29, -29, -29
560 58, 73, 58, 58, 58, 58, 58, 58, 58, 74,
561 58, 58, 58, 58, 75, 58, 58, -29
562 496
563 }, 497 },
564 498
565 { 499 {
566 11, -30, -30, -30, -30, -30, -30, -30, -30, -30, 500 11, 54, 54, -30, 54, 54, 54, 54, 54, 54,
567 -30, -30, -30, 58, -30, -30, 58, 58, 58, 58, 501 54, 54, 54, 54, 54, 54, 54
568 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
569 58, 58, 76, 58, 58, 58, 58, -30
570 }, 502 },
571 503
572 { 504 {
573 11, 77, 77, -31, 77, 77, 77, 77, 77, 77, 505 11, -31, -31, -31, -31, -31, -31, 55, -31, -31,
574 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 506 -31, -31, -31, -31, -31, -31, -31
575 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
576 77, 77, 77, 77, 77, 77, 77, 77
577 }, 507 },
578 508
579 { 509 {
580 11, -32, 78, 79, -32, -32, -32, -32, -32, -32, 510 11, -32, -32, -32, -32, -32, -32, -32, -32, -32,
581 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 511 -32, -32, -32, -32, -32, -32, -32
582
583 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32,
584 -32, -32, -32, -32, -32, -32, -32, -32
585 }, 512 },
586 513
587 { 514 {
588 11, 80, -33, -33, 80, 80, 80, 80, 80, 80, 515 11, -33, -33, -33, -33, -33, -33, -33, -33, -33,
589 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 516 -33, -33, -33, -33, -33, -33, -33
590 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
591 80, 80, 80, 80, 80, 80, 80, 80
592 }, 517 },
593 518
594 { 519 {
595 11, 81, 81, 82, 81, -34, 81, 81, -34, 81, 520 11, -34, -34, -34, -34, -34, -34, -34, -34, -34,
596 81, 81, 81, 81, 81, -34, 81, 81, 81, 81, 521 -34, 56, 57, 57, -34, -34, -34
597 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
598 81, 81, 81, 81, 81, 81, 81, 81
599 522
600 }, 523 },
601 524
602 { 525 {
603 11, -35, -35, -35, -35, -35, -35, -35, -35, -35, 526 11, -35, -35, -35, -35, -35, -35, -35, -35, -35,
604 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 527 -35, 57, 57, 57, -35, -35, -35
605 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35,
606 -35, -35, -35, -35, -35, -35, -35, -35
607 }, 528 },
608 529
609 { 530 {
610 11, -36, -36, -36, -36, -36, -36, -36, -36, -36, 531 11, -36, -36, -36, -36, -36, -36, -36, -36, -36,
611 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 532 -36, -36, -36, -36, -36, -36, -36
612 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36,
613 -36, -36, -36, -36, -36, -36, -36, -36
614 }, 533 },
615 534
616 { 535 {
617 11, 83, 83, 84, 83, 83, 83, 83, 83, 83, 536 11, -37, -37, 58, -37, -37, -37, -37, -37, -37,
618 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 537 -37, -37, -37, -37, -37, -37, -37
619
620 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
621 83, 83, 83, 83, 83, 83, 83, 83
622 }, 538 },
623 539
624 { 540 {
625 11, -38, -38, -38, -38, -38, -38, -38, -38, -38, 541 11, -38, -38, -38, -38, -38, -38, -38, -38, -38,
626 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 542 -38, -38, -38, -38, -38, -38, 59
627 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38,
628 -38, -38, -38, -38, -38, -38, -38, -38
629 }, 543 },
630 544
631 { 545 {
632 11, -39, -39, -39, -39, -39, -39, -39, -39, -39, 546 11, -39, 39, 40, -39, -39, 41, -39, -39, -39,
633 -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, 547 -39, -39, -39, -39, -39, -39, -39
634 -39, -39, -39, -39, -39, -39, -39, -39, -39, -39,
635 -39, -39, -39, -39, -39, -39, -39, -39
636 548
637 }, 549 },
638 550
639 { 551 {
640 11, -40, -40, -40, -40, -40, -40, -40, -40, -40, 552 11, -40, -40, -40, -40, -40, -40, -40, -40, -40,
641 -40, -40, -40, -40, 85, -40, -40, -40, -40, -40, 553 -40, -40, -40, -40, -40, -40, -40
642 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40,
643 -40, -40, -40, -40, -40, -40, -40, -40
644 }, 554 },
645 555
646 { 556 {
647 11, -41, -41, -41, -41, -41, -41, -41, -41, -41, 557 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
648 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 558 42, 42, 42, 42, 42, 42, 42
649 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41,
650 -41, -41, -41, -41, -41, -41, -41, -41
651 }, 559 },
652 560
653 { 561 {
654 11, 86, 86, -42, 86, 86, 86, 86, 86, 86, 562 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
655 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 563 42, 42, 42, 42, 42, 42, 42
656
657 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
658 86, 86, 86, 86, 86, 86, 86, 86
659 }, 564 },
660 565
661 { 566 {
662 11, -43, -43, -43, -43, -43, -43, 87, -43, -43, 567 11, -43, -43, -43, -43, -43, -43, -43, -43, -43,
663 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 568 -43, -43, -43, -43, -43, -43, -43
664 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43,
665 -43, -43, -43, -43, -43, -43, -43, -43
666 }, 569 },
667 570
668 { 571 {
669 11, -44, -44, -44, -44, -44, -44, -44, -44, -44, 572 11, -44, -44, -44, -44, -44, -44, -44, -44, -44,
670 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 573 -44, -44, -44, 44, -44, -44, -44
671 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44,
672 -44, -44, -44, -44, -44, -44, -44, -44
673 574
674 }, 575 },
675 576
676 { 577 {
677 11, -45, -45, -45, -45, -45, -45, -45, -45, -45, 578 11, 45, 45, -45, 45, 45, 45, 45, 45, 45,
678 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 579 45, 45, 45, 45, 45, 45, 45
679 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45,
680 -45, -45, -45, -45, -45, -45, -45, -45
681 }, 580 },
682 581
683 { 582 {
684 11, -46, -46, -46, -46, -46, -46, -46, -46, -46, 583 11, -46, 46, 47, -46, -46, -46, -46, -46, -46,
685 -46, 88, 89, 89, -46, -46, 89, 89, 89, 89, 584 -46, -46, -46, -46, -46, -46, -46
686 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
687 89, 89, 89, 89, 89, 89, 89, -46
688 }, 585 },
689 586
690 { 587 {
691 11, -47, -47, -47, -47, -47, -47, -47, -47, -47, 588 11, 48, -47, -47, 48, 48, 48, 48, 48, 48,
692 -47, 89, 89, 89, -47, -47, 89, 89, 89, 89, 589 48, 48, 48, 48, 48, 48, 48
693
694 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
695 89, 89, 89, 89, 89, 89, 89, -47
696 }, 590 },
697 591
698 { 592 {
699 11, -48, -48, -48, -48, -48, -48, -48, -48, -48, 593 11, -48, -48, -48, -48, -48, -48, -48, -48, -48,
700 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 594 -48, -48, -48, -48, -48, -48, -48
701 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48,
702 -48, -48, -48, -48, -48, -48, -48, -48
703 }, 595 },
704 596
705 { 597 {
706 11, -49, -49, 90, -49, -49, -49, -49, -49, -49, 598 11, 49, 49, 50, 49, -49, 49, 49, -49, 49,
707 -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, 599 49, 49, 49, 49, 49, -49, 49
708 -49, -49, -49, -49, -49, -49, -49, -49, -49, -49,
709 -49, -49, -49, -49, -49, -49, -49, -49
710 600
711 }, 601 },
712 602
713 { 603 {
714 11, -50, -50, -50, -50, -50, -50, -50, -50, -50, 604 11, -50, -50, -50, -50, -50, -50, -50, -50, -50,
715 -50, 89, 89, 89, -50, -50, 89, 89, 89, 89, 605 -50, -50, -50, -50, -50, -50, -50
716 89, 89, 91, 89, 89, 89, 89, 89, 89, 89,
717 89, 89, 89, 89, 89, 89, 89, -50
718 }, 606 },
719 607
720 { 608 {
721 11, -51, -51, -51, -51, -51, -51, -51, -51, -51, 609 11, -51, -51, 52, -51, -51, -51, -51, -51, -51,
722 -51, 89, 89, 89, -51, -51, 89, 89, 89, 89, 610 -51, -51, -51, -51, -51, -51, -51
723 89, 89, 89, 89, 89, 89, 89, 89, 92, 89,
724 89, 89, 89, 89, 89, 89, 89, -51
725 }, 611 },
726 612
727 { 613 {
728 11, -52, -52, -52, -52, -52, -52, -52, -52, -52, 614 11, -52, -52, -52, -52, -52, -52, -52, -52, -52,
729 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 615 -52, -52, -52, -52, -52, -52, -52
730
731 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52,
732 -52, -52, -52, -52, -52, -52, -52, 93
733 }, 616 },
734 617
735 { 618 {
736 11, -53, 53, 54, -53, -53, 55, -53, -53, -53, 619 11, -53, -53, -53, -53, -53, -53, -53, -53, -53,
737 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 620 -53, -53, -53, -53, -53, -53, -53
738 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53,
739 -53, -53, -53, -53, -53, -53, -53, -53
740 }, 621 },
741 622
742 { 623 {
743 11, -54, -54, -54, -54, -54, -54, -54, -54, -54, 624 11, 54, 54, -54, 54, 54, 54, 54, 54, 54,
744 -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 625 54, 54, 54, 54, 54, 54, 54
745 -54, -54, -54, -54, -54, -54, -54, -54, -54, -54,
746 -54, -54, -54, -54, -54, -54, -54, -54
747 626
748 }, 627 },
749 628
750 { 629 {
751 11, 56, 56, 57, 56, 56, 56, 56, 56, 56, 630 11, -55, -55, -55, -55, -55, -55, -55, -55, -55,
752 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 631 -55, -55, -55, -55, -55, -55, -55
753 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
754 56, 56, 56, 56, 56, 56, 56, 56
755 }, 632 },
756 633
757 { 634 {
758 11, 56, 56, 57, 56, 56, 56, 56, 56, 56, 635 11, -56, -56, -56, -56, -56, -56, -56, -56, -56,
759 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 636 -56, 60, 57, 57, -56, -56, -56
760 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
761 56, 56, 56, 56, 56, 56, 56, 56
762 }, 637 },
763 638
764 { 639 {
765 11, -57, -57, -57, -57, -57, -57, -57, -57, -57, 640 11, -57, -57, -57, -57, -57, -57, -57, -57, -57,
766 -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 641 -57, 57, 57, 57, -57, -57, -57
767
768 -57, -57, -57, -57, -57, -57, -57, -57, -57, -57,
769 -57, -57, -57, -57, -57, -57, -57, -57
770 }, 642 },
771 643
772 { 644 {
773 11, -58, -58, -58, -58, -58, -58, -58, -58, -58, 645 11, -58, -58, -58, -58, -58, -58, -58, -58, -58,
774 -58, -58, -58, 58, -58, -58, 58, 58, 58, 58, 646 -58, -58, -58, -58, -58, -58, -58
775 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
776 58, 58, 58, 58, 58, 58, 58, -58
777 }, 647 },
778 648
779 { 649 {
780 11, -59, -59, -59, -59, -59, -59, -59, -59, -59, 650 11, -59, -59, -59, -59, -59, -59, -59, -59, -59,
781 -59, -59, -59, 58, -59, -59, 58, 58, 58, 58, 651 -59, -59, -59, -59, -59, -59, -59
782 58, 58, 58, 58, 58, 58, 58, 58, 58, 94,
783 58, 58, 58, 58, 58, 58, 58, -59
784 652
785 }, 653 },
786 654
787 { 655 {
788 11, -60, -60, -60, -60, -60, -60, -60, -60, -60, 656 11, -60, -60, -60, -60, -60, -60, -60, -60, -60,
789 -60, -60, -60, 58, -60, -60, 58, 58, 58, 58, 657 -60, 57, 57, 57, -60, -60, -60
790 58, 58, 58, 58, 58, 58, 58, 58, 58, 95,
791 58, 58, 58, 58, 58, 58, 58, -60
792 },
793
794 {
795 11, -61, -61, -61, -61, -61, -61, -61, -61, -61,
796 -61, -61, -61, 58, -61, -61, 58, 58, 58, 58,
797 58, 58, 58, 58, 58, 58, 58, 96, 97, 58,
798 58, 58, 58, 58, 58, 58, 58, -61
799 },
800
801 {
802 11, -62, -62, -62, -62, -62, -62, -62, -62, -62,
803 -62, -62, -62, 58, -62, -62, 58, 58, 58, 58,
804
805 58, 58, 98, 58, 58, 58, 58, 58, 58, 58,
806 99, 58, 58, 58, 58, 58, 58, -62
807 },
808
809 {
810 11, -63, -63, -63, -63, -63, -63, -63, -63, -63,
811 -63, -63, -63, 58, -63, -63, 58, 100, 58, 58,
812 101, 58, 58, 58, 58, 58, 58, 58, 58, 58,
813 58, 58, 58, 58, 58, 58, 58, -63
814 },
815
816 {
817 11, -64, -64, -64, -64, -64, -64, -64, -64, -64,
818 -64, -64, -64, 58, -64, -64, 58, 58, 58, 58,
819 58, 58, 58, 58, 58, 58, 102, 58, 58, 58,
820 58, 58, 58, 58, 58, 58, 103, -64
821
822 },
823
824 {
825 11, -65, -65, -65, -65, -65, -65, -65, -65, -65,
826 -65, -65, -65, 58, -65, -65, 58, 58, 58, 58,
827 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
828 58, 58, 58, 58, 58, 58, 58, -65
829 },
830
831 {
832 11, -66, -66, -66, -66, -66, -66, -66, -66, -66,
833 -66, -66, -66, 58, -66, -66, 58, 58, 58, 58,
834 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
835 58, 58, 58, 58, 104, 58, 58, -66
836 },
837
838 {
839 11, -67, -67, -67, -67, -67, -67, -67, -67, -67,
840 -67, -67, -67, 58, -67, -67, 58, 58, 58, 58,
841
842 58, 58, 58, 58, 58, 105, 58, 58, 58, 58,
843 58, 58, 58, 58, 58, 58, 58, -67
844 },
845
846 {
847 11, -68, -68, -68, -68, -68, -68, -68, -68, -68,
848 -68, -68, -68, 58, -68, -68, 58, 58, 58, 58,
849 58, 58, 58, 58, 58, 58, 58, 58, 106, 58,
850 58, 58, 58, 58, 58, 58, 58, -68
851 },
852
853 {
854 11, -69, -69, -69, -69, -69, -69, -69, -69, -69,
855 -69, -69, -69, 58, -69, -69, 58, 58, 58, 58,
856 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
857 58, 58, 58, 58, 107, 58, 58, -69
858
859 },
860
861 {
862 11, -70, -70, -70, -70, -70, -70, -70, -70, -70,
863 -70, -70, -70, 58, -70, -70, 58, 58, 58, 58,
864 58, 58, 58, 58, 58, 58, 58, 58, 58, 108,
865 58, 58, 58, 58, 58, 58, 58, -70
866 },
867
868 {
869 11, -71, -71, -71, -71, -71, -71, -71, -71, -71,
870 -71, -71, -71, 58, -71, -71, 58, 58, 58, 58,
871 58, 58, 58, 58, 58, 58, 58, 58, 109, 58,
872 58, 58, 58, 58, 58, 58, 58, -71
873 },
874
875 {
876 11, -72, -72, -72, -72, -72, -72, -72, -72, -72,
877 -72, -72, -72, 58, -72, -72, 58, 58, 58, 58,
878
879 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
880 58, 110, 58, 58, 58, 58, 58, -72
881 },
882
883 {
884 11, -73, -73, -73, -73, -73, -73, -73, -73, -73,
885 -73, -73, -73, 58, -73, -73, 58, 58, 58, 58,
886 58, 58, 58, 58, 58, 58, 111, 58, 58, 58,
887 58, 58, 58, 58, 58, 58, 58, -73
888 },
889
890 {
891 11, -74, -74, -74, -74, -74, -74, -74, -74, -74,
892 -74, -74, -74, 58, -74, -74, 58, 58, 58, 58,
893 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
894 58, 58, 58, 58, 58, 112, 58, -74
895
896 },
897
898 {
899 11, -75, -75, -75, -75, -75, -75, -75, -75, -75,
900 -75, -75, -75, 58, -75, -75, 58, 58, 58, 58,
901 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
902 58, 58, 113, 58, 58, 58, 58, -75
903 },
904
905 {
906 11, -76, -76, -76, -76, -76, -76, -76, -76, -76,
907 -76, -76, -76, 58, -76, -76, 58, 58, 58, 58,
908 58, 58, 58, 58, 58, 114, 58, 58, 58, 58,
909 58, 58, 58, 58, 58, 58, 58, -76
910 },
911
912 {
913 11, 77, 77, -77, 77, 77, 77, 77, 77, 77,
914 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
915
916 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
917 77, 77, 77, 77, 77, 77, 77, 77
918 },
919
920 {
921 11, -78, 78, 79, -78, -78, -78, -78, -78, -78,
922 -78, -78, -78, -78, -78, -78, -78, -78, -78, -78,
923 -78, -78, -78, -78, -78, -78, -78, -78, -78, -78,
924 -78, -78, -78, -78, -78, -78, -78, -78
925 },
926
927 {
928 11, 80, -79, -79, 80, 80, 80, 80, 80, 80,
929 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
930 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
931 80, 80, 80, 80, 80, 80, 80, 80
932
933 },
934
935 {
936 11, -80, -80, -80, -80, -80, -80, -80, -80, -80,
937 -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
938 -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
939 -80, -80, -80, -80, -80, -80, -80, -80
940 },
941
942 {
943 11, 81, 81, 82, 81, -81, 81, 81, -81, 81,
944 81, 81, 81, 81, 81, -81, 81, 81, 81, 81,
945 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
946 81, 81, 81, 81, 81, 81, 81, 81
947 },
948
949 {
950 11, -82, -82, -82, -82, -82, -82, -82, -82, -82,
951 -82, -82, -82, -82, -82, -82, -82, -82, -82, -82,
952
953 -82, -82, -82, -82, -82, -82, -82, -82, -82, -82,
954 -82, -82, -82, -82, -82, -82, -82, -82
955 },
956
957 {
958 11, -83, -83, 84, -83, -83, -83, -83, -83, -83,
959 -83, -83, -83, -83, -83, -83, -83, -83, -83, -83,
960 -83, -83, -83, -83, -83, -83, -83, -83, -83, -83,
961 -83, -83, -83, -83, -83, -83, -83, -83
962 },
963
964 {
965 11, -84, -84, -84, -84, -84, -84, -84, -84, -84,
966 -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
967 -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
968 -84, -84, -84, -84, -84, -84, -84, -84
969
970 },
971
972 {
973 11, -85, -85, -85, -85, -85, -85, -85, -85, -85,
974 -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
975 -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
976 -85, -85, -85, -85, -85, -85, -85, -85
977 },
978
979 {
980 11, 86, 86, -86, 86, 86, 86, 86, 86, 86,
981 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
982 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
983 86, 86, 86, 86, 86, 86, 86, 86
984 },
985
986 {
987 11, -87, -87, -87, -87, -87, -87, -87, -87, -87,
988 -87, -87, -87, -87, -87, -87, -87, -87, -87, -87,
989
990 -87, -87, -87, -87, -87, -87, -87, -87, -87, -87,
991 -87, -87, -87, -87, -87, -87, -87, -87
992 },
993
994 {
995 11, -88, -88, -88, -88, -88, -88, -88, -88, -88,
996 -88, 115, 89, 89, -88, -88, 89, 89, 89, 89,
997 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
998 89, 89, 89, 89, 89, 89, 89, -88
999 },
1000
1001 {
1002 11, -89, -89, -89, -89, -89, -89, -89, -89, -89,
1003 -89, 89, 89, 89, -89, -89, 89, 89, 89, 89,
1004 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
1005 89, 89, 89, 89, 89, 89, 89, -89
1006
1007 },
1008
1009 {
1010 11, -90, -90, -90, -90, -90, -90, -90, -90, -90,
1011 -90, -90, -90, -90, -90, -90, -90, -90, -90, -90,
1012 -90, -90, -90, -90, -90, -90, -90, -90, -90, -90,
1013 -90, -90, -90, -90, -90, -90, -90, -90
1014 },
1015
1016 {
1017 11, -91, -91, -91, -91, -91, -91, -91, -91, -91,
1018 -91, 89, 89, 89, -91, -91, 89, 89, 89, 89,
1019 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
1020 89, 89, 89, 89, 89, 89, 89, -91
1021 },
1022
1023 {
1024 11, -92, -92, -92, -92, -92, -92, -92, -92, -92,
1025 -92, 89, 89, 89, -92, -92, 89, 89, 89, 89,
1026
1027 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
1028 89, 89, 89, 89, 89, 89, 89, -92
1029 },
1030
1031 {
1032 11, -93, -93, -93, -93, -93, -93, -93, -93, -93,
1033 -93, -93, -93, -93, -93, -93, -93, -93, -93, -93,
1034 -93, -93, -93, -93, -93, -93, -93, -93, -93, -93,
1035 -93, -93, -93, -93, -93, -93, -93, -93
1036 },
1037
1038 {
1039 11, -94, -94, -94, -94, -94, -94, -94, -94, -94,
1040 -94, -94, -94, 58, -94, -94, 58, 58, 58, 58,
1041 58, 58, 58, 58, 58, 58, 116, 58, 58, 58,
1042 58, 58, 58, 58, 58, 58, 58, -94
1043
1044 },
1045
1046 {
1047 11, -95, -95, -95, -95, -95, -95, -95, -95, -95,
1048 -95, -95, -95, 58, -95, -95, 58, 58, 58, 58,
1049 58, 58, 58, 58, 58, 117, 58, 58, 58, 58,
1050 58, 58, 58, 58, 58, 58, 58, -95
1051 },
1052
1053 {
1054 11, -96, -96, -96, -96, -96, -96, -96, -96, -96,
1055 -96, -96, -96, 58, -96, -96, 58, 58, 58, 58,
1056 58, 58, 58, 58, 58, 58, 58, 118, 58, 58,
1057 58, 58, 58, 58, 58, 58, 58, -96
1058 },
1059
1060 {
1061 11, -97, -97, -97, -97, -97, -97, -97, -97, -97,
1062 -97, -97, -97, 58, -97, -97, 58, 58, 58, 58,
1063
1064 58, 58, 119, 58, 58, 58, 58, 58, 58, 58,
1065 58, 58, 58, 58, 58, 58, 58, -97
1066 },
1067
1068 {
1069 11, -98, -98, -98, -98, -98, -98, -98, -98, -98,
1070 -98, -98, -98, 58, -98, -98, 120, 121, 58, 58,
1071 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1072 58, 58, 58, 58, 58, 58, 58, -98
1073 },
1074
1075 {
1076 11, -99, -99, -99, -99, -99, -99, -99, -99, -99,
1077 -99, -99, -99, 58, -99, -99, 58, 58, 58, 58,
1078 58, 122, 58, 58, 58, 58, 58, 58, 58, 58,
1079 58, 58, 58, 58, 58, 58, 58, -99
1080
1081 },
1082
1083 {
1084 11, -100, -100, -100, -100, -100, -100, -100, -100, -100,
1085 -100, -100, -100, 58, -100, -100, 58, 58, 123, 58,
1086 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1087 58, 58, 58, 58, 58, 58, 58, -100
1088 },
1089
1090 {
1091 11, -101, -101, -101, -101, -101, -101, -101, -101, -101,
1092 -101, -101, -101, 58, -101, -101, 58, 58, 58, 124,
1093 58, 58, 58, 58, 58, 125, 58, 126, 58, 58,
1094 58, 58, 58, 58, 58, 58, 58, -101
1095 },
1096
1097 {
1098 11, -102, -102, -102, -102, -102, -102, -102, -102, -102,
1099 -102, -102, -102, 58, -102, -102, 58, 58, 58, 58,
1100
1101 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1102 127, 58, 58, 58, 58, 58, 58, -102
1103 },
1104
1105 {
1106 11, -103, -103, -103, -103, -103, -103, -103, -103, -103,
1107 -103, -103, -103, 58, -103, -103, 58, 58, 58, 58,
1108 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1109 58, 58, 58, 58, 58, 58, 58, -103
1110 },
1111
1112 {
1113 11, -104, -104, -104, -104, -104, -104, -104, -104, -104,
1114 -104, -104, -104, 58, -104, -104, 58, 58, 58, 58,
1115 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1116 58, 58, 58, 58, 58, 58, 58, -104
1117
1118 },
1119
1120 {
1121 11, -105, -105, -105, -105, -105, -105, -105, -105, -105,
1122 -105, -105, -105, 58, -105, -105, 58, 58, 58, 58,
1123 58, 58, 58, 58, 58, 58, 58, 58, 128, 58,
1124 58, 58, 58, 58, 58, 58, 58, -105
1125 },
1126
1127 {
1128 11, -106, -106, -106, -106, -106, -106, -106, -106, -106,
1129 -106, -106, -106, 58, -106, -106, 58, 58, 58, 58,
1130 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1131 58, 58, 58, 58, 58, 129, 58, -106
1132 },
1133
1134 {
1135 11, -107, -107, -107, -107, -107, -107, -107, -107, -107,
1136 -107, -107, -107, 58, -107, -107, 58, 58, 58, 58,
1137
1138 58, 58, 58, 58, 58, 130, 58, 58, 58, 58,
1139 58, 58, 58, 58, 58, 58, 58, -107
1140 },
1141
1142 {
1143 11, -108, -108, -108, -108, -108, -108, -108, -108, -108,
1144 -108, -108, -108, 58, -108, -108, 58, 58, 58, 58,
1145 58, 58, 58, 58, 58, 58, 58, 131, 58, 58,
1146 58, 58, 58, 58, 58, 58, 58, -108
1147 },
1148
1149 {
1150 11, -109, -109, -109, -109, -109, -109, -109, -109, -109,
1151 -109, -109, -109, 58, -109, -109, 58, 58, 58, 58,
1152 58, 58, 58, 132, 58, 58, 58, 58, 58, 58,
1153 58, 58, 58, 58, 58, 58, 58, -109
1154
1155 },
1156
1157 {
1158 11, -110, -110, -110, -110, -110, -110, -110, -110, -110,
1159 -110, -110, -110, 58, -110, -110, 58, 58, 58, 58,
1160 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1161 58, 58, 58, 58, 58, 133, 58, -110
1162 },
1163
1164 {
1165 11, -111, -111, -111, -111, -111, -111, -111, -111, -111,
1166 -111, -111, -111, 58, -111, -111, 58, 58, 58, 58,
1167 58, 134, 58, 58, 58, 58, 58, 58, 58, 58,
1168 58, 58, 58, 58, 58, 58, 58, -111
1169 },
1170
1171 {
1172 11, -112, -112, -112, -112, -112, -112, -112, -112, -112,
1173 -112, -112, -112, 58, -112, -112, 58, 58, 58, 58,
1174
1175 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1176 58, 58, 135, 58, 58, 58, 58, -112
1177 },
1178
1179 {
1180 11, -113, -113, -113, -113, -113, -113, -113, -113, -113,
1181 -113, -113, -113, 58, -113, -113, 58, 58, 58, 58,
1182 58, 58, 58, 58, 58, 136, 58, 58, 58, 58,
1183 58, 58, 58, 58, 58, 58, 58, -113
1184 },
1185
1186 {
1187 11, -114, -114, -114, -114, -114, -114, -114, -114, -114,
1188 -114, -114, -114, 58, -114, -114, 58, 58, 58, 58,
1189 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1190 58, 58, 58, 137, 58, 58, 58, -114
1191
1192 },
1193
1194 {
1195 11, -115, -115, -115, -115, -115, -115, -115, -115, -115,
1196 -115, 89, 89, 89, -115, -115, 89, 89, 89, 89,
1197 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
1198 89, 89, 89, 89, 89, 89, 89, -115
1199 },
1200
1201 {
1202 11, -116, -116, -116, -116, -116, -116, -116, -116, -116,
1203 -116, -116, -116, 58, -116, -116, 58, 58, 58, 58,
1204 58, 138, 58, 58, 58, 58, 58, 58, 58, 58,
1205 58, 58, 58, 58, 58, 58, 58, -116
1206 },
1207
1208 {
1209 11, -117, -117, -117, -117, -117, -117, -117, -117, -117,
1210 -117, -117, -117, 58, -117, -117, 58, 58, 58, 139,
1211
1212 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1213 58, 58, 58, 58, 58, 58, 58, -117
1214 },
1215
1216 {
1217 11, -118, -118, -118, -118, -118, -118, -118, -118, -118,
1218 -118, -118, -118, 58, -118, -118, 58, 58, 58, 58,
1219 58, 140, 58, 58, 58, 58, 58, 58, 58, 58,
1220 58, 58, 58, 58, 58, 58, 58, -118
1221 },
1222
1223 {
1224 11, -119, -119, -119, -119, -119, -119, -119, -119, -119,
1225 -119, -119, -119, 58, -119, -119, 58, 58, 58, 58,
1226 58, 58, 58, 58, 58, 141, 58, 58, 58, 58,
1227 58, 58, 58, 58, 58, 58, 58, -119
1228
1229 },
1230
1231 {
1232 11, -120, -120, -120, -120, -120, -120, -120, -120, -120,
1233 -120, -120, -120, 58, -120, -120, 58, 58, 142, 58,
1234 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1235 58, 58, 58, 58, 143, 58, 58, -120
1236 },
1237
1238 {
1239 11, -121, -121, -121, -121, -121, -121, -121, -121, -121,
1240 -121, -121, -121, 58, -121, -121, 58, 58, 58, 58,
1241 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1242 58, 58, 58, 58, 58, 144, 58, -121
1243 },
1244
1245 {
1246 11, -122, -122, -122, -122, -122, -122, -122, -122, -122,
1247 -122, -122, -122, 58, -122, -122, 58, 58, 58, 58,
1248
1249 58, 58, 58, 58, 58, 58, 58, 58, 145, 58,
1250 58, 58, 58, 58, 58, 58, 58, -122
1251 },
1252
1253 {
1254 11, -123, -123, -123, -123, -123, -123, -123, -123, -123,
1255 -123, -123, -123, 58, -123, -123, 58, 58, 58, 58,
1256 58, 58, 58, 58, 58, 58, 146, 58, 58, 58,
1257 58, 58, 58, 58, 58, 58, 58, -123
1258 },
1259
1260 {
1261 11, -124, -124, -124, -124, -124, -124, -124, -124, -124,
1262 -124, -124, -124, 58, -124, -124, 58, 58, 58, 58,
1263 58, 58, 58, 58, 147, 58, 58, 58, 58, 58,
1264 58, 58, 58, 58, 58, 58, 58, -124
1265
1266 },
1267
1268 {
1269 11, -125, -125, -125, -125, -125, -125, -125, -125, -125,
1270 -125, -125, -125, 58, -125, -125, 58, 58, 58, 58,
1271 58, 58, 148, 58, 58, 58, 58, 58, 58, 58,
1272 58, 58, 58, 58, 58, 58, 58, -125
1273 },
1274
1275 {
1276 11, -126, -126, -126, -126, -126, -126, -126, -126, -126,
1277 -126, -126, -126, 58, -126, -126, 58, 58, 58, 58,
1278 58, 149, 58, 58, 58, 58, 58, 58, 58, 58,
1279 58, 58, 58, 58, 58, 58, 58, -126
1280 },
1281
1282 {
1283 11, -127, -127, -127, -127, -127, -127, -127, -127, -127,
1284 -127, -127, -127, 58, -127, -127, 58, 58, 58, 58,
1285
1286 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1287 58, 58, 58, 58, 58, 58, 58, -127
1288 },
1289
1290 {
1291 11, -128, -128, -128, -128, -128, -128, -128, -128, -128,
1292 -128, -128, -128, 58, -128, -128, 58, 58, 58, 58,
1293 58, 58, 58, 58, 58, 58, 58, 150, 58, 58,
1294 58, 58, 58, 58, 58, 58, 58, -128
1295 },
1296
1297 {
1298 11, -129, -129, -129, -129, -129, -129, -129, -129, -129,
1299 -129, -129, -129, 58, -129, -129, 58, 58, 58, 151,
1300 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1301 58, 58, 58, 58, 58, 58, 58, -129
1302
1303 },
1304
1305 {
1306 11, -130, -130, -130, -130, -130, -130, -130, -130, -130,
1307 -130, -130, -130, 58, -130, -130, 58, 58, 58, 58,
1308 58, 58, 58, 58, 58, 58, 58, 58, 58, 152,
1309 58, 58, 58, 58, 58, 58, 58, -130
1310 },
1311
1312 {
1313 11, -131, -131, -131, -131, -131, -131, -131, -131, -131,
1314 -131, -131, -131, 58, -131, -131, 58, 58, 58, 58,
1315 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1316 153, 58, 58, 58, 58, 58, 58, -131
1317 },
1318
1319 {
1320 11, -132, -132, -132, -132, -132, -132, -132, -132, -132,
1321 -132, -132, -132, 58, -132, -132, 58, 58, 58, 58,
1322
1323 58, 154, 58, 58, 58, 58, 58, 58, 58, 58,
1324 58, 58, 58, 58, 58, 58, 58, -132
1325 },
1326
1327 {
1328 11, -133, -133, -133, -133, -133, -133, -133, -133, -133,
1329 -133, -133, -133, 58, -133, -133, 58, 58, 58, 58,
1330 58, 58, 58, 58, 58, 155, 58, 58, 58, 58,
1331 58, 58, 58, 58, 58, 58, 58, -133
1332 },
1333
1334 {
1335 11, -134, -134, -134, -134, -134, -134, -134, -134, -134,
1336 -134, -134, -134, 58, -134, -134, 58, 58, 58, 156,
1337 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1338 58, 58, 58, 58, 58, 58, 58, -134
1339
1340 },
1341
1342 {
1343 11, -135, -135, -135, -135, -135, -135, -135, -135, -135,
1344 -135, -135, -135, 58, -135, -135, 58, 58, 58, 157,
1345 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1346 58, 58, 58, 58, 58, 58, 58, -135
1347 },
1348
1349 {
1350 11, -136, -136, -136, -136, -136, -136, -136, -136, -136,
1351 -136, -136, -136, 58, -136, -136, 58, 58, 58, 58,
1352 58, 58, 58, 58, 58, 58, 58, 58, 158, 58,
1353 58, 58, 58, 58, 58, 58, 58, -136
1354 },
1355
1356 {
1357 11, -137, -137, -137, -137, -137, -137, -137, -137, -137,
1358 -137, -137, -137, 58, -137, -137, 58, 58, 58, 58,
1359
1360 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1361 58, 58, 58, 58, 159, 58, 58, -137
1362 },
1363
1364 {
1365 11, -138, -138, -138, -138, -138, -138, -138, -138, -138,
1366 -138, -138, -138, 58, -138, -138, 58, 160, 58, 58,
1367 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1368 58, 58, 58, 58, 58, 58, 58, -138
1369 },
1370
1371 {
1372 11, -139, -139, -139, -139, -139, -139, -139, -139, -139,
1373 -139, -139, -139, 58, -139, -139, 58, 58, 58, 58,
1374 58, 161, 58, 58, 58, 58, 58, 58, 58, 58,
1375 58, 58, 58, 58, 58, 58, 58, -139
1376
1377 },
1378
1379 {
1380 11, -140, -140, -140, -140, -140, -140, -140, -140, -140,
1381 -140, -140, -140, 58, -140, -140, 58, 58, 58, 58,
1382 58, 58, 58, 58, 58, 58, 58, 58, 162, 58,
1383 58, 58, 58, 58, 58, 58, 58, -140
1384 },
1385
1386 {
1387 11, -141, -141, -141, -141, -141, -141, -141, -141, -141,
1388 -141, -141, -141, 58, -141, -141, 58, 58, 58, 58,
1389 58, 58, 58, 163, 58, 58, 58, 58, 58, 58,
1390 58, 58, 58, 58, 58, 58, 58, -141
1391 },
1392
1393 {
1394 11, -142, -142, -142, -142, -142, -142, -142, -142, -142,
1395 -142, -142, -142, 58, -142, -142, 58, 58, 58, 58,
1396
1397 58, 58, 58, 58, 58, 58, 58, 58, 58, 164,
1398 58, 58, 58, 58, 58, 58, 58, -142
1399 },
1400
1401 {
1402 11, -143, -143, -143, -143, -143, -143, -143, -143, -143,
1403 -143, -143, -143, 58, -143, -143, 58, 58, 58, 58,
1404 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1405 58, 58, 165, 58, 58, 58, 58, -143
1406 },
1407
1408 {
1409 11, -144, -144, -144, -144, -144, -144, -144, -144, -144,
1410 -144, -144, -144, 58, -144, -144, 58, 58, 58, 58,
1411 58, 58, 58, 58, 58, 58, 166, 58, 58, 58,
1412 58, 58, 58, 58, 58, 58, 58, -144
1413
1414 },
1415
1416 {
1417 11, -145, -145, -145, -145, -145, -145, -145, -145, -145,
1418 -145, -145, -145, 58, -145, -145, 58, 58, 58, 58,
1419 167, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1420 58, 58, 58, 58, 58, 58, 58, -145
1421 },
1422
1423 {
1424 11, -146, -146, -146, -146, -146, -146, -146, -146, -146,
1425 -146, -146, -146, 58, -146, -146, 58, 58, 58, 58,
1426 58, 168, 58, 58, 58, 58, 58, 58, 58, 58,
1427 58, 58, 58, 58, 58, 58, 58, -146
1428 },
1429
1430 {
1431 11, -147, -147, -147, -147, -147, -147, -147, -147, -147,
1432 -147, -147, -147, 58, -147, -147, 58, 58, 58, 58,
1433
1434 58, 58, 58, 58, 58, 58, 58, 58, 58, 169,
1435 58, 58, 58, 58, 58, 58, 58, -147
1436 },
1437
1438 {
1439 11, -148, -148, -148, -148, -148, -148, -148, -148, -148,
1440 -148, -148, -148, 58, -148, -148, 58, 58, 58, 58,
1441 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1442 58, 58, 58, 58, 58, 58, 58, -148
1443 },
1444
1445 {
1446 11, -149, -149, -149, -149, -149, -149, -149, -149, -149,
1447 -149, -149, -149, 58, -149, -149, 58, 58, 58, 58,
1448 58, 58, 58, 58, 58, 58, 58, 58, 170, 58,
1449 58, 58, 58, 58, 58, 58, 58, -149
1450
1451 },
1452
1453 {
1454 11, -150, -150, -150, -150, -150, -150, -150, -150, -150,
1455 -150, -150, -150, 58, -150, -150, 58, 58, 58, 58,
1456 58, 171, 58, 58, 58, 58, 58, 58, 58, 58,
1457 58, 58, 58, 58, 58, 58, 58, -150
1458 },
1459
1460 {
1461 11, -151, -151, -151, -151, -151, -151, -151, -151, -151,
1462 -151, -151, -151, 58, -151, -151, 58, 58, 58, 58,
1463 58, 58, 58, 58, 58, 58, 58, 58, 58, 172,
1464 58, 58, 58, 58, 58, 58, 58, -151
1465 },
1466
1467 {
1468 11, -152, -152, -152, -152, -152, -152, -152, -152, -152,
1469 -152, -152, -152, 58, -152, -152, 58, 58, 58, 58,
1470
1471 58, 58, 58, 58, 58, 58, 58, 58, 173, 58,
1472 58, 58, 58, 58, 58, 58, 58, -152
1473 },
1474
1475 {
1476 11, -153, -153, -153, -153, -153, -153, -153, -153, -153,
1477 -153, -153, -153, 58, -153, -153, 58, 58, 58, 58,
1478 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1479 58, 58, 58, 58, 174, 58, 58, -153
1480 },
1481
1482 {
1483 11, -154, -154, -154, -154, -154, -154, -154, -154, -154,
1484 -154, -154, -154, 58, -154, -154, 58, 58, 58, 58,
1485 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1486 58, 58, 58, 58, 58, 58, 58, -154
1487
1488 },
1489
1490 {
1491 11, -155, -155, -155, -155, -155, -155, -155, -155, -155,
1492 -155, -155, -155, 58, -155, -155, 58, 58, 58, 58,
1493 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1494 58, 58, 175, 58, 58, 58, 58, -155
1495 },
1496
1497 {
1498 11, -156, -156, -156, -156, -156, -156, -156, -156, -156,
1499 -156, -156, -156, 58, -156, -156, 58, 58, 58, 58,
1500 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1501 58, 58, 58, 58, 176, 58, 58, -156
1502 },
1503
1504 {
1505 11, -157, -157, -157, -157, -157, -157, -157, -157, -157,
1506 -157, -157, -157, 58, -157, -157, 58, 58, 58, 58,
1507
1508 58, 177, 58, 58, 58, 58, 58, 58, 58, 58,
1509 58, 58, 58, 58, 58, 58, 58, -157
1510 },
1511
1512 {
1513 11, -158, -158, -158, -158, -158, -158, -158, -158, -158,
1514 -158, -158, -158, 58, -158, -158, 58, 58, 58, 58,
1515 58, 58, 58, 178, 58, 58, 58, 58, 58, 58,
1516 58, 58, 58, 58, 58, 58, 58, -158
1517 },
1518
1519 {
1520 11, -159, -159, -159, -159, -159, -159, -159, -159, -159,
1521 -159, -159, -159, 58, -159, -159, 58, 179, 58, 58,
1522 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1523 58, 58, 58, 58, 58, 58, 58, -159
1524
1525 },
1526
1527 {
1528 11, -160, -160, -160, -160, -160, -160, -160, -160, -160,
1529 -160, -160, -160, 58, -160, -160, 58, 58, 58, 58,
1530 58, 58, 58, 58, 58, 58, 58, 58, 180, 58,
1531 58, 58, 58, 58, 58, 58, 58, -160
1532 },
1533
1534 {
1535 11, -161, -161, -161, -161, -161, -161, -161, -161, -161,
1536 -161, -161, -161, 58, -161, -161, 58, 58, 58, 58,
1537 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1538 58, 58, 58, 58, 58, 58, 58, -161
1539 },
1540
1541 {
1542 11, -162, -162, -162, -162, -162, -162, -162, -162, -162,
1543 -162, -162, -162, 58, -162, -162, 58, 58, 58, 58,
1544
1545 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1546 58, 58, 58, 58, 181, 58, 58, -162
1547 },
1548
1549 {
1550 11, -163, -163, -163, -163, -163, -163, -163, -163, -163,
1551 -163, -163, -163, 58, -163, -163, 58, 58, 58, 58,
1552 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1553 58, 58, 58, 58, 58, 58, 58, -163
1554 },
1555
1556 {
1557 11, -164, -164, -164, -164, -164, -164, -164, -164, -164,
1558 -164, -164, -164, 58, -164, -164, 58, 58, 58, 58,
1559 58, 58, 58, 58, 58, 58, 58, 58, 58, 182,
1560 58, 58, 58, 58, 58, 58, 58, -164
1561
1562 },
1563
1564 {
1565 11, -165, -165, -165, -165, -165, -165, -165, -165, -165,
1566 -165, -165, -165, 58, -165, -165, 58, 58, 58, 58,
1567 58, 58, 58, 58, 58, 183, 58, 58, 58, 58,
1568 58, 58, 58, 58, 58, 58, 58, -165
1569 },
1570
1571 {
1572 11, -166, -166, -166, -166, -166, -166, -166, -166, -166,
1573 -166, -166, -166, 58, -166, -166, 58, 58, 58, 58,
1574 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1575 58, 58, 58, 58, 184, 58, 58, -166
1576 },
1577
1578 {
1579 11, -167, -167, -167, -167, -167, -167, -167, -167, -167,
1580 -167, -167, -167, 58, -167, -167, 58, 58, 58, 58,
1581
1582 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1583 58, 58, 58, 185, 58, 58, 58, -167
1584 },
1585
1586 {
1587 11, -168, -168, -168, -168, -168, -168, -168, -168, -168,
1588 -168, -168, -168, 58, -168, -168, 58, 58, 58, 58,
1589 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1590 58, 58, 58, 58, 58, 58, 58, -168
1591 },
1592
1593 {
1594 11, -169, -169, -169, -169, -169, -169, -169, -169, -169,
1595 -169, -169, -169, 58, -169, -169, 58, 58, 58, 58,
1596 58, 58, 58, 58, 58, 186, 58, 58, 58, 58,
1597 58, 58, 58, 58, 58, 58, 58, -169
1598
1599 },
1600
1601 {
1602 11, -170, -170, -170, -170, -170, -170, -170, -170, -170,
1603 -170, -170, -170, 58, -170, -170, 58, 58, 58, 58,
1604 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1605 58, 58, 58, 58, 58, 187, 58, -170
1606 },
1607
1608 {
1609 11, -171, -171, -171, -171, -171, -171, -171, -171, -171,
1610 -171, -171, -171, 58, -171, -171, 58, 58, 58, 58,
1611 58, 58, 58, 58, 58, 58, 58, 58, 188, 58,
1612 58, 58, 58, 58, 58, 58, 58, -171
1613 },
1614
1615 {
1616 11, -172, -172, -172, -172, -172, -172, -172, -172, -172,
1617 -172, -172, -172, 58, -172, -172, 58, 58, 58, 58,
1618
1619 58, 58, 58, 58, 58, 58, 58, 58, 189, 58,
1620 58, 58, 58, 58, 58, 58, 58, -172
1621 },
1622
1623 {
1624 11, -173, -173, -173, -173, -173, -173, -173, -173, -173,
1625 -173, -173, -173, 58, -173, -173, 58, 190, 58, 58,
1626 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1627 58, 58, 58, 58, 58, 58, 58, -173
1628 },
1629
1630 {
1631 11, -174, -174, -174, -174, -174, -174, -174, -174, -174,
1632 -174, -174, -174, 58, -174, -174, 58, 58, 58, 58,
1633 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1634 58, 58, 58, 58, 58, 58, 58, -174
1635
1636 },
1637
1638 {
1639 11, -175, -175, -175, -175, -175, -175, -175, -175, -175,
1640 -175, -175, -175, 58, -175, -175, 58, 58, 58, 58,
1641 58, 191, 58, 58, 58, 58, 58, 58, 58, 58,
1642 58, 58, 58, 58, 58, 58, 58, -175
1643 },
1644
1645 {
1646 11, -176, -176, -176, -176, -176, -176, -176, -176, -176,
1647 -176, -176, -176, 58, -176, -176, 58, 58, 58, 58,
1648 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1649 58, 58, 58, 58, 58, 58, 58, -176
1650 },
1651
1652 {
1653 11, -177, -177, -177, -177, -177, -177, -177, -177, -177,
1654 -177, -177, -177, 58, -177, -177, 58, 58, 58, 58,
1655
1656 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1657 58, 58, 58, 58, 58, 58, 58, -177
1658 },
1659
1660 {
1661 11, -178, -178, -178, -178, -178, -178, -178, -178, -178,
1662 -178, -178, -178, 58, -178, -178, 58, 58, 58, 58,
1663 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1664 58, 58, 58, 58, 58, 58, 58, -178
1665 },
1666
1667 {
1668 11, -179, -179, -179, -179, -179, -179, -179, -179, -179,
1669 -179, -179, -179, 58, -179, -179, 58, 58, 58, 58,
1670 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1671 58, 58, 58, 58, 192, 58, 58, -179
1672
1673 },
1674
1675 {
1676 11, -180, -180, -180, -180, -180, -180, -180, -180, -180,
1677 -180, -180, -180, 58, -180, -180, 58, 58, 58, 58,
1678 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1679 58, 58, 58, 58, 58, 58, 58, -180
1680 },
1681
1682 {
1683 11, -181, -181, -181, -181, -181, -181, -181, -181, -181,
1684 -181, -181, -181, 58, -181, -181, 58, 58, 58, 58,
1685 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1686 58, 58, 58, 58, 58, 58, 58, -181
1687 },
1688
1689 {
1690 11, -182, -182, -182, -182, -182, -182, -182, -182, -182,
1691 -182, -182, -182, 58, -182, -182, 58, 58, 58, 58,
1692
1693 58, 58, 58, 58, 58, 58, 193, 58, 58, 58,
1694 58, 58, 58, 58, 58, 58, 58, -182
1695 },
1696
1697 {
1698 11, -183, -183, -183, -183, -183, -183, -183, -183, -183,
1699 -183, -183, -183, 58, -183, -183, 58, 58, 58, 58,
1700 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1701 58, 58, 58, 194, 58, 58, 58, -183
1702 },
1703
1704 {
1705 11, -184, -184, -184, -184, -184, -184, -184, -184, -184,
1706 -184, -184, -184, 58, -184, -184, 58, 58, 58, 58,
1707 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1708 58, 58, 58, 58, 58, 58, 58, -184
1709
1710 },
1711
1712 {
1713 11, -185, -185, -185, -185, -185, -185, -185, -185, -185,
1714 -185, -185, -185, 58, -185, -185, 58, 58, 58, 58,
1715 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1716 58, 58, 58, 58, 58, 58, 58, -185
1717 },
1718
1719 {
1720 11, -186, -186, -186, -186, -186, -186, -186, -186, -186,
1721 -186, -186, -186, 58, -186, -186, 58, 58, 58, 195,
1722 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1723 58, 58, 58, 58, 58, 58, 58, -186
1724 },
1725
1726 {
1727 11, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1728 -187, -187, -187, 58, -187, -187, 58, 58, 58, 58,
1729
1730 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1731 58, 58, 58, 58, 58, 58, 58, -187
1732 },
1733
1734 {
1735 11, -188, -188, -188, -188, -188, -188, -188, -188, -188,
1736 -188, -188, -188, 58, -188, -188, 58, 58, 58, 58,
1737 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1738 58, 58, 58, 58, 58, 196, 58, -188
1739 },
1740
1741 {
1742 11, -189, -189, -189, -189, -189, -189, -189, -189, -189,
1743 -189, -189, -189, 58, -189, -189, 58, 58, 58, 58,
1744 58, 58, 197, 58, 58, 58, 58, 58, 58, 58,
1745 58, 58, 58, 58, 58, 58, 58, -189
1746
1747 },
1748
1749 {
1750 11, -190, -190, -190, -190, -190, -190, -190, -190, -190,
1751 -190, -190, -190, 58, -190, -190, 58, 58, 58, 58,
1752 58, 58, 58, 58, 58, 58, 198, 58, 58, 58,
1753 58, 58, 58, 58, 58, 58, 58, -190
1754 },
1755
1756 {
1757 11, -191, -191, -191, -191, -191, -191, -191, -191, -191,
1758 -191, -191, -191, 58, -191, -191, 58, 58, 58, 58,
1759 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1760 58, 58, 58, 199, 58, 58, 58, -191
1761 },
1762
1763 {
1764 11, -192, -192, -192, -192, -192, -192, -192, -192, -192,
1765 -192, -192, -192, 58, -192, -192, 58, 58, 58, 58,
1766
1767 58, 200, 58, 58, 58, 58, 58, 58, 58, 58,
1768 58, 58, 58, 58, 58, 58, 58, -192
1769 },
1770
1771 {
1772 11, -193, -193, -193, -193, -193, -193, -193, -193, -193,
1773 -193, -193, -193, 58, -193, -193, 58, 58, 58, 58,
1774 58, 201, 58, 58, 58, 58, 58, 58, 58, 58,
1775 58, 58, 58, 58, 58, 58, 58, -193
1776 },
1777
1778 {
1779 11, -194, -194, -194, -194, -194, -194, -194, -194, -194,
1780 -194, -194, -194, 58, -194, -194, 58, 58, 58, 58,
1781 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1782 58, 58, 58, 58, 202, 58, 58, -194
1783
1784 },
1785
1786 {
1787 11, -195, -195, -195, -195, -195, -195, -195, -195, -195,
1788 -195, -195, -195, 58, -195, -195, 58, 58, 58, 58,
1789 58, 203, 58, 58, 58, 58, 58, 58, 58, 58,
1790 58, 58, 58, 58, 58, 58, 58, -195
1791 },
1792
1793 {
1794 11, -196, -196, -196, -196, -196, -196, -196, -196, -196,
1795 -196, -196, -196, 58, -196, -196, 58, 58, 58, 58,
1796 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1797 58, 58, 58, 58, 58, 58, 58, -196
1798 },
1799
1800 {
1801 11, -197, -197, -197, -197, -197, -197, -197, -197, -197,
1802 -197, -197, -197, 58, -197, -197, 58, 58, 58, 58,
1803
1804 58, 58, 58, 58, 58, 204, 58, 58, 58, 58,
1805 58, 58, 58, 58, 58, 58, 58, -197
1806 },
1807
1808 {
1809 11, -198, -198, -198, -198, -198, -198, -198, -198, -198,
1810 -198, -198, -198, 58, -198, -198, 58, 58, 58, 58,
1811 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1812 58, 58, 58, 58, 58, 58, 58, -198
1813 },
1814
1815 {
1816 11, -199, -199, -199, -199, -199, -199, -199, -199, -199,
1817 -199, -199, -199, 58, -199, -199, 58, 58, 58, 58,
1818 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1819 58, 58, 58, 58, 58, 58, 58, -199
1820
1821 },
1822
1823 {
1824 11, -200, -200, -200, -200, -200, -200, -200, -200, -200,
1825 -200, -200, -200, 58, -200, -200, 58, 58, 58, 58,
1826 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1827 58, 58, 58, 58, 58, 58, 58, -200
1828 },
1829
1830 {
1831 11, -201, -201, -201, -201, -201, -201, -201, -201, -201,
1832 -201, -201, -201, 58, -201, -201, 58, 205, 58, 58,
1833 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1834 58, 58, 58, 58, 58, 58, 58, -201
1835 },
1836
1837 {
1838 11, -202, -202, -202, -202, -202, -202, -202, -202, -202,
1839 -202, -202, -202, 58, -202, -202, 58, 206, 58, 58,
1840
1841 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1842 58, 58, 58, 58, 58, 58, 58, -202
1843 },
1844
1845 {
1846 11, -203, -203, -203, -203, -203, -203, -203, -203, -203,
1847 -203, -203, -203, 58, -203, -203, 58, 58, 58, 58,
1848 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1849 58, 58, 58, 58, 58, 58, 58, -203
1850 },
1851
1852 {
1853 11, -204, -204, -204, -204, -204, -204, -204, -204, -204,
1854 -204, -204, -204, 58, -204, -204, 58, 58, 58, 58,
1855 58, 58, 58, 207, 58, 58, 58, 58, 58, 58,
1856 58, 58, 58, 58, 58, 58, 58, -204
1857
1858 },
1859
1860 {
1861 11, -205, -205, -205, -205, -205, -205, -205, -205, -205,
1862 -205, -205, -205, 58, -205, -205, 58, 58, 58, 58,
1863 58, 58, 58, 58, 58, 58, 58, 58, 208, 58,
1864 58, 58, 58, 58, 58, 58, 58, -205
1865 },
1866
1867 {
1868 11, -206, -206, -206, -206, -206, -206, -206, -206, -206,
1869 -206, -206, -206, 58, -206, -206, 58, 58, 58, 58,
1870 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1871 58, 58, 58, 58, 209, 58, 58, -206
1872 },
1873
1874 {
1875 11, -207, -207, -207, -207, -207, -207, -207, -207, -207,
1876 -207, -207, -207, 58, -207, -207, 58, 58, 58, 58,
1877
1878 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1879 58, 58, 58, 58, 58, 58, 58, -207
1880 },
1881
1882 {
1883 11, -208, -208, -208, -208, -208, -208, -208, -208, -208,
1884 -208, -208, -208, 58, -208, -208, 58, 58, 58, 58,
1885 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1886 58, 58, 58, 58, 58, 58, 58, -208
1887 },
1888
1889 {
1890 11, -209, -209, -209, -209, -209, -209, -209, -209, -209,
1891 -209, -209, -209, 58, -209, -209, 58, 58, 58, 58,
1892 58, 210, 58, 58, 58, 58, 58, 58, 58, 58,
1893 58, 58, 58, 58, 58, 58, 58, -209
1894
1895 },
1896
1897 {
1898 11, -210, -210, -210, -210, -210, -210, -210, -210, -210,
1899 -210, -210, -210, 58, -210, -210, 58, 58, 58, 58,
1900 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
1901 58, 58, 58, 58, 58, 58, 58, -210
1902 }, 658 },
1903 659
1904 } ; 660 } ;
@@ -1918,8 +674,8 @@ static void yy_fatal_error (yyconst char msg[] );
1918 *yy_cp = '\0'; \ 674 *yy_cp = '\0'; \
1919 (yy_c_buf_p) = yy_cp; 675 (yy_c_buf_p) = yy_cp;
1920 676
1921#define YY_NUM_RULES 64 677#define YY_NUM_RULES 33
1922#define YY_END_OF_BUFFER 65 678#define YY_END_OF_BUFFER 34
1923/* This struct is not used in this scanner, 679/* This struct is not used in this scanner,
1924 but its presence is necessary. */ 680 but its presence is necessary. */
1925struct yy_trans_info 681struct yy_trans_info
@@ -1927,31 +683,14 @@ struct yy_trans_info
1927 flex_int32_t yy_verify; 683 flex_int32_t yy_verify;
1928 flex_int32_t yy_nxt; 684 flex_int32_t yy_nxt;
1929 }; 685 };
1930static yyconst flex_int16_t yy_accept[211] = 686static yyconst flex_int16_t yy_accept[61] =
1931 { 0, 687 { 0,
1932 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1933 65, 5, 4, 3, 2, 36, 37, 35, 35, 35, 689 34, 5, 4, 2, 3, 7, 8, 6, 32, 29,
1934 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 690 31, 24, 28, 27, 26, 22, 17, 13, 16, 20,
1935 63, 60, 62, 55, 59, 58, 57, 53, 48, 42, 691 22, 11, 12, 19, 19, 14, 22, 22, 4, 2,
1936 47, 51, 53, 40, 41, 50, 50, 43, 53, 50, 692 3, 3, 1, 6, 32, 29, 31, 30, 24, 23,
1937 50, 53, 4, 3, 2, 2, 1, 35, 35, 35, 693 26, 25, 15, 20, 9, 19, 19, 21, 10, 18
1938 35, 35, 35, 35, 16, 35, 35, 35, 35, 35,
1939 35, 35, 35, 35, 35, 35, 63, 60, 62, 61,
1940 55, 54, 57, 56, 44, 51, 38, 50, 50, 52,
1941 45, 46, 39, 35, 35, 35, 35, 35, 35, 35,
1942
1943 35, 35, 30, 29, 35, 35, 35, 35, 35, 35,
1944 35, 35, 35, 35, 49, 25, 35, 35, 35, 35,
1945 35, 35, 35, 35, 35, 35, 15, 35, 7, 35,
1946 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
1947 35, 35, 35, 35, 35, 35, 35, 17, 35, 35,
1948 35, 35, 35, 34, 35, 35, 35, 35, 35, 35,
1949 10, 35, 13, 35, 35, 35, 35, 33, 35, 35,
1950 35, 35, 35, 22, 35, 32, 9, 31, 35, 26,
1951 12, 35, 35, 21, 18, 35, 8, 35, 35, 35,
1952 35, 35, 27, 35, 35, 6, 35, 20, 19, 23,
1953
1954 35, 35, 11, 35, 35, 35, 14, 28, 35, 24
1955 } ; 694 } ;
1956 695
1957static yyconst flex_int32_t yy_ec[256] = 696static yyconst flex_int32_t yy_ec[256] =
@@ -1965,11 +704,11 @@ static yyconst flex_int32_t yy_ec[256] =
1965 14, 1, 1, 1, 13, 13, 13, 13, 13, 13, 704 14, 1, 1, 1, 13, 13, 13, 13, 13, 13,
1966 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 705 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1967 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 706 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1968 1, 15, 1, 1, 16, 1, 17, 18, 19, 20, 707 1, 15, 1, 1, 13, 1, 13, 13, 13, 13,
1969 708
1970 21, 22, 23, 24, 25, 13, 13, 26, 27, 28, 709 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1971 29, 30, 31, 32, 33, 34, 35, 13, 13, 36, 710 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1972 13, 13, 1, 37, 1, 1, 1, 1, 1, 1, 711 13, 13, 1, 16, 1, 1, 1, 1, 1, 1,
1973 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 712 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1974 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 713 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1975 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 714 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -2014,8 +753,12 @@ char *zconftext;
2014 753
2015#define START_STRSIZE 16 754#define START_STRSIZE 16
2016 755
2017char *text; 756static struct {
2018static char *text_ptr; 757 struct file *file;
758 int lineno;
759} current_pos;
760
761static char *text;
2019static int text_size, text_asize; 762static int text_size, text_asize;
2020 763
2021struct buffer { 764struct buffer {
@@ -2028,29 +771,28 @@ struct buffer *current_buf;
2028static int last_ts, first_ts; 771static int last_ts, first_ts;
2029 772
2030static void zconf_endhelp(void); 773static void zconf_endhelp(void);
2031static struct buffer *zconf_endfile(void); 774static void zconf_endfile(void);
2032 775
2033void new_string(void) 776void new_string(void)
2034{ 777{
2035 text = malloc(START_STRSIZE); 778 text = malloc(START_STRSIZE);
2036 text_asize = START_STRSIZE; 779 text_asize = START_STRSIZE;
2037 text_ptr = text;
2038 text_size = 0; 780 text_size = 0;
2039 *text_ptr = 0; 781 *text = 0;
2040} 782}
2041 783
2042void append_string(const char *str, int size) 784void append_string(const char *str, int size)
2043{ 785{
2044 int new_size = text_size + size + 1; 786 int new_size = text_size + size + 1;
2045 if (new_size > text_asize) { 787 if (new_size > text_asize) {
788 new_size += START_STRSIZE - 1;
789 new_size &= -START_STRSIZE;
2046 text = realloc(text, new_size); 790 text = realloc(text, new_size);
2047 text_asize = new_size; 791 text_asize = new_size;
2048 text_ptr = text + text_size;
2049 } 792 }
2050 memcpy(text_ptr, str, size); 793 memcpy(text + text_size, str, size);
2051 text_ptr += size;
2052 text_size += size; 794 text_size += size;
2053 *text_ptr = 0; 795 text[text_size] = 0;
2054} 796}
2055 797
2056void alloc_string(const char *str, int size) 798void alloc_string(const char *str, int size)
@@ -2066,11 +808,13 @@ void alloc_string(const char *str, int size)
2066#define STRING 3 808#define STRING 3
2067#define PARAM 4 809#define PARAM 4
2068 810
811#ifndef YY_NO_UNISTD_H
2069/* Special case for "unistd.h", since it is non-ANSI. We include it way 812/* Special case for "unistd.h", since it is non-ANSI. We include it way
2070 * down here because we want the user's section 1 to have been scanned first. 813 * down here because we want the user's section 1 to have been scanned first.
2071 * The user has a chance to override it with an option. 814 * The user has a chance to override it with an option.
2072 */ 815 */
2073#include <unistd.h> 816#include <unistd.h>
817#endif
2074 818
2075#ifndef YY_EXTRA_TYPE 819#ifndef YY_EXTRA_TYPE
2076#define YY_EXTRA_TYPE void * 820#define YY_EXTRA_TYPE void *
@@ -2254,17 +998,17 @@ do_action: /* This label is used only to access EOF actions. */
2254 { /* beginning of action switch */ 998 { /* beginning of action switch */
2255case 1: 999case 1:
2256/* rule 1 can match eol */ 1000/* rule 1 can match eol */
2257YY_RULE_SETUP
2258current_file->lineno++;
2259 YY_BREAK
2260case 2: 1001case 2:
1002/* rule 2 can match eol */
2261YY_RULE_SETUP 1003YY_RULE_SETUP
2262 1004{
1005 current_file->lineno++;
1006 return T_EOL;
1007}
2263 YY_BREAK 1008 YY_BREAK
2264case 3: 1009case 3:
2265/* rule 3 can match eol */
2266YY_RULE_SETUP 1010YY_RULE_SETUP
2267current_file->lineno++; return T_EOL; 1011
2268 YY_BREAK 1012 YY_BREAK
2269case 4: 1013case 4:
2270YY_RULE_SETUP 1014YY_RULE_SETUP
@@ -2282,175 +1026,63 @@ YY_RULE_SETUP
2282 1026
2283case 6: 1027case 6:
2284YY_RULE_SETUP 1028YY_RULE_SETUP
2285BEGIN(PARAM); return T_MAINMENU;
2286 YY_BREAK
2287case 7:
2288YY_RULE_SETUP
2289BEGIN(PARAM); return T_MENU;
2290 YY_BREAK
2291case 8:
2292YY_RULE_SETUP
2293BEGIN(PARAM); return T_ENDMENU;
2294 YY_BREAK
2295case 9:
2296YY_RULE_SETUP
2297BEGIN(PARAM); return T_SOURCE;
2298 YY_BREAK
2299case 10:
2300YY_RULE_SETUP
2301BEGIN(PARAM); return T_CHOICE;
2302 YY_BREAK
2303case 11:
2304YY_RULE_SETUP
2305BEGIN(PARAM); return T_ENDCHOICE;
2306 YY_BREAK
2307case 12:
2308YY_RULE_SETUP
2309BEGIN(PARAM); return T_COMMENT;
2310 YY_BREAK
2311case 13:
2312YY_RULE_SETUP
2313BEGIN(PARAM); return T_CONFIG;
2314 YY_BREAK
2315case 14:
2316YY_RULE_SETUP
2317BEGIN(PARAM); return T_MENUCONFIG;
2318 YY_BREAK
2319case 15:
2320YY_RULE_SETUP
2321BEGIN(PARAM); return T_HELP;
2322 YY_BREAK
2323case 16:
2324YY_RULE_SETUP
2325BEGIN(PARAM); return T_IF;
2326 YY_BREAK
2327case 17:
2328YY_RULE_SETUP
2329BEGIN(PARAM); return T_ENDIF;
2330 YY_BREAK
2331case 18:
2332YY_RULE_SETUP
2333BEGIN(PARAM); return T_DEPENDS;
2334 YY_BREAK
2335case 19:
2336YY_RULE_SETUP
2337BEGIN(PARAM); return T_REQUIRES;
2338 YY_BREAK
2339case 20:
2340YY_RULE_SETUP
2341BEGIN(PARAM); return T_OPTIONAL;
2342 YY_BREAK
2343case 21:
2344YY_RULE_SETUP
2345BEGIN(PARAM); return T_DEFAULT;
2346 YY_BREAK
2347case 22:
2348YY_RULE_SETUP
2349BEGIN(PARAM); return T_PROMPT;
2350 YY_BREAK
2351case 23:
2352YY_RULE_SETUP
2353BEGIN(PARAM); return T_TRISTATE;
2354 YY_BREAK
2355case 24:
2356YY_RULE_SETUP
2357BEGIN(PARAM); return T_DEF_TRISTATE;
2358 YY_BREAK
2359case 25:
2360YY_RULE_SETUP
2361BEGIN(PARAM); return T_BOOLEAN;
2362 YY_BREAK
2363case 26:
2364YY_RULE_SETUP
2365BEGIN(PARAM); return T_BOOLEAN;
2366 YY_BREAK
2367case 27:
2368YY_RULE_SETUP
2369BEGIN(PARAM); return T_DEF_BOOLEAN;
2370 YY_BREAK
2371case 28:
2372YY_RULE_SETUP
2373BEGIN(PARAM); return T_DEF_BOOLEAN;
2374 YY_BREAK
2375case 29:
2376YY_RULE_SETUP
2377BEGIN(PARAM); return T_INT;
2378 YY_BREAK
2379case 30:
2380YY_RULE_SETUP
2381BEGIN(PARAM); return T_HEX;
2382 YY_BREAK
2383case 31:
2384YY_RULE_SETUP
2385BEGIN(PARAM); return T_STRING;
2386 YY_BREAK
2387case 32:
2388YY_RULE_SETUP
2389BEGIN(PARAM); return T_SELECT;
2390 YY_BREAK
2391case 33:
2392YY_RULE_SETUP
2393BEGIN(PARAM); return T_SELECT;
2394 YY_BREAK
2395case 34:
2396YY_RULE_SETUP
2397BEGIN(PARAM); return T_RANGE;
2398 YY_BREAK
2399case 35:
2400YY_RULE_SETUP
2401{ 1029{
1030 struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
1031 BEGIN(PARAM);
1032 current_pos.file = current_file;
1033 current_pos.lineno = current_file->lineno;
1034 if (id && id->flags & TF_COMMAND) {
1035 zconflval.id = id;
1036 return id->token;
1037 }
2402 alloc_string(zconftext, zconfleng); 1038 alloc_string(zconftext, zconfleng);
2403 zconflval.string = text; 1039 zconflval.string = text;
2404 return T_WORD; 1040 return T_WORD;
2405 } 1041 }
2406 YY_BREAK 1042 YY_BREAK
2407case 36: 1043case 7:
2408YY_RULE_SETUP 1044YY_RULE_SETUP
2409 1045
2410 YY_BREAK 1046 YY_BREAK
2411case 37: 1047case 8:
2412/* rule 37 can match eol */ 1048/* rule 8 can match eol */
2413YY_RULE_SETUP 1049YY_RULE_SETUP
2414current_file->lineno++; BEGIN(INITIAL); 1050{
1051 BEGIN(INITIAL);
1052 current_file->lineno++;
1053 return T_EOL;
1054 }
2415 YY_BREAK 1055 YY_BREAK
2416 1056
2417case 38: 1057case 9:
2418YY_RULE_SETUP 1058YY_RULE_SETUP
2419return T_AND; 1059return T_AND;
2420 YY_BREAK 1060 YY_BREAK
2421case 39: 1061case 10:
2422YY_RULE_SETUP 1062YY_RULE_SETUP
2423return T_OR; 1063return T_OR;
2424 YY_BREAK 1064 YY_BREAK
2425case 40: 1065case 11:
2426YY_RULE_SETUP 1066YY_RULE_SETUP
2427return T_OPEN_PAREN; 1067return T_OPEN_PAREN;
2428 YY_BREAK 1068 YY_BREAK
2429case 41: 1069case 12:
2430YY_RULE_SETUP 1070YY_RULE_SETUP
2431return T_CLOSE_PAREN; 1071return T_CLOSE_PAREN;
2432 YY_BREAK 1072 YY_BREAK
2433case 42: 1073case 13:
2434YY_RULE_SETUP 1074YY_RULE_SETUP
2435return T_NOT; 1075return T_NOT;
2436 YY_BREAK 1076 YY_BREAK
2437case 43: 1077case 14:
2438YY_RULE_SETUP 1078YY_RULE_SETUP
2439return T_EQUAL; 1079return T_EQUAL;
2440 YY_BREAK 1080 YY_BREAK
2441case 44: 1081case 15:
2442YY_RULE_SETUP 1082YY_RULE_SETUP
2443return T_UNEQUAL; 1083return T_UNEQUAL;
2444 YY_BREAK 1084 YY_BREAK
2445case 45: 1085case 16:
2446YY_RULE_SETUP
2447return T_IF;
2448 YY_BREAK
2449case 46:
2450YY_RULE_SETUP
2451return T_ON;
2452 YY_BREAK
2453case 47:
2454YY_RULE_SETUP 1086YY_RULE_SETUP
2455{ 1087{
2456 str = zconftext[0]; 1088 str = zconftext[0];
@@ -2458,33 +1090,38 @@ YY_RULE_SETUP
2458 BEGIN(STRING); 1090 BEGIN(STRING);
2459 } 1091 }
2460 YY_BREAK 1092 YY_BREAK
2461case 48: 1093case 17:
2462/* rule 48 can match eol */ 1094/* rule 17 can match eol */
2463YY_RULE_SETUP 1095YY_RULE_SETUP
2464BEGIN(INITIAL); current_file->lineno++; return T_EOL; 1096BEGIN(INITIAL); current_file->lineno++; return T_EOL;
2465 YY_BREAK 1097 YY_BREAK
2466case 49: 1098case 18:
2467YY_RULE_SETUP 1099YY_RULE_SETUP
2468/* ignore */ 1100/* ignore */
2469 YY_BREAK 1101 YY_BREAK
2470case 50: 1102case 19:
2471YY_RULE_SETUP 1103YY_RULE_SETUP
2472{ 1104{
1105 struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
1106 if (id && id->flags & TF_PARAM) {
1107 zconflval.id = id;
1108 return id->token;
1109 }
2473 alloc_string(zconftext, zconfleng); 1110 alloc_string(zconftext, zconfleng);
2474 zconflval.string = text; 1111 zconflval.string = text;
2475 return T_WORD; 1112 return T_WORD;
2476 } 1113 }
2477 YY_BREAK 1114 YY_BREAK
2478case 51: 1115case 20:
2479YY_RULE_SETUP 1116YY_RULE_SETUP
2480/* comment */ 1117/* comment */
2481 YY_BREAK 1118 YY_BREAK
2482case 52: 1119case 21:
2483/* rule 52 can match eol */ 1120/* rule 21 can match eol */
2484YY_RULE_SETUP 1121YY_RULE_SETUP
2485current_file->lineno++; 1122current_file->lineno++;
2486 YY_BREAK 1123 YY_BREAK
2487case 53: 1124case 22:
2488YY_RULE_SETUP 1125YY_RULE_SETUP
2489 1126
2490 YY_BREAK 1127 YY_BREAK
@@ -2494,8 +1131,8 @@ case YY_STATE_EOF(PARAM):
2494 } 1131 }
2495 YY_BREAK 1132 YY_BREAK
2496 1133
2497case 54: 1134case 23:
2498/* rule 54 can match eol */ 1135/* rule 23 can match eol */
2499*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ 1136*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
2500(yy_c_buf_p) = yy_cp -= 1; 1137(yy_c_buf_p) = yy_cp -= 1;
2501YY_DO_BEFORE_ACTION; /* set up zconftext again */ 1138YY_DO_BEFORE_ACTION; /* set up zconftext again */
@@ -2506,14 +1143,14 @@ YY_RULE_SETUP
2506 return T_WORD_QUOTE; 1143 return T_WORD_QUOTE;
2507 } 1144 }
2508 YY_BREAK 1145 YY_BREAK
2509case 55: 1146case 24:
2510YY_RULE_SETUP 1147YY_RULE_SETUP
2511{ 1148{
2512 append_string(zconftext, zconfleng); 1149 append_string(zconftext, zconfleng);
2513 } 1150 }
2514 YY_BREAK 1151 YY_BREAK
2515case 56: 1152case 25:
2516/* rule 56 can match eol */ 1153/* rule 25 can match eol */
2517*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ 1154*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
2518(yy_c_buf_p) = yy_cp -= 1; 1155(yy_c_buf_p) = yy_cp -= 1;
2519YY_DO_BEFORE_ACTION; /* set up zconftext again */ 1156YY_DO_BEFORE_ACTION; /* set up zconftext again */
@@ -2524,13 +1161,13 @@ YY_RULE_SETUP
2524 return T_WORD_QUOTE; 1161 return T_WORD_QUOTE;
2525 } 1162 }
2526 YY_BREAK 1163 YY_BREAK
2527case 57: 1164case 26:
2528YY_RULE_SETUP 1165YY_RULE_SETUP
2529{ 1166{
2530 append_string(zconftext + 1, zconfleng - 1); 1167 append_string(zconftext + 1, zconfleng - 1);
2531 } 1168 }
2532 YY_BREAK 1169 YY_BREAK
2533case 58: 1170case 27:
2534YY_RULE_SETUP 1171YY_RULE_SETUP
2535{ 1172{
2536 if (str == zconftext[0]) { 1173 if (str == zconftext[0]) {
@@ -2541,8 +1178,8 @@ YY_RULE_SETUP
2541 append_string(zconftext, 1); 1178 append_string(zconftext, 1);
2542 } 1179 }
2543 YY_BREAK 1180 YY_BREAK
2544case 59: 1181case 28:
2545/* rule 59 can match eol */ 1182/* rule 28 can match eol */
2546YY_RULE_SETUP 1183YY_RULE_SETUP
2547{ 1184{
2548 printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno()); 1185 printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
@@ -2557,7 +1194,7 @@ case YY_STATE_EOF(STRING):
2557 } 1194 }
2558 YY_BREAK 1195 YY_BREAK
2559 1196
2560case 60: 1197case 29:
2561YY_RULE_SETUP 1198YY_RULE_SETUP
2562{ 1199{
2563 ts = 0; 1200 ts = 0;
@@ -2582,8 +1219,8 @@ YY_RULE_SETUP
2582 } 1219 }
2583 } 1220 }
2584 YY_BREAK 1221 YY_BREAK
2585case 61: 1222case 30:
2586/* rule 61 can match eol */ 1223/* rule 30 can match eol */
2587*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ 1224*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
2588(yy_c_buf_p) = yy_cp -= 1; 1225(yy_c_buf_p) = yy_cp -= 1;
2589YY_DO_BEFORE_ACTION; /* set up zconftext again */ 1226YY_DO_BEFORE_ACTION; /* set up zconftext again */
@@ -2594,15 +1231,15 @@ YY_RULE_SETUP
2594 return T_HELPTEXT; 1231 return T_HELPTEXT;
2595 } 1232 }
2596 YY_BREAK 1233 YY_BREAK
2597case 62: 1234case 31:
2598/* rule 62 can match eol */ 1235/* rule 31 can match eol */
2599YY_RULE_SETUP 1236YY_RULE_SETUP
2600{ 1237{
2601 current_file->lineno++; 1238 current_file->lineno++;
2602 append_string("\n", 1); 1239 append_string("\n", 1);
2603 } 1240 }
2604 YY_BREAK 1241 YY_BREAK
2605case 63: 1242case 32:
2606YY_RULE_SETUP 1243YY_RULE_SETUP
2607{ 1244{
2608 append_string(zconftext, zconfleng); 1245 append_string(zconftext, zconfleng);
@@ -2620,15 +1257,15 @@ case YY_STATE_EOF(HELP):
2620case YY_STATE_EOF(INITIAL): 1257case YY_STATE_EOF(INITIAL):
2621case YY_STATE_EOF(COMMAND): 1258case YY_STATE_EOF(COMMAND):
2622{ 1259{
2623 if (current_buf) { 1260 if (current_file) {
2624 zconf_endfile(); 1261 zconf_endfile();
2625 return T_EOF; 1262 return T_EOL;
2626 } 1263 }
2627 fclose(zconfin); 1264 fclose(zconfin);
2628 yyterminate(); 1265 yyterminate();
2629} 1266}
2630 YY_BREAK 1267 YY_BREAK
2631case 64: 1268case 33:
2632YY_RULE_SETUP 1269YY_RULE_SETUP
2633YY_FATAL_ERROR( "flex scanner jammed" ); 1270YY_FATAL_ERROR( "flex scanner jammed" );
2634 YY_BREAK 1271 YY_BREAK
@@ -3332,16 +1969,16 @@ YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size )
3332 1969
3333/** Setup the input buffer state to scan a string. The next call to zconflex() will 1970/** Setup the input buffer state to scan a string. The next call to zconflex() will
3334 * scan from a @e copy of @a str. 1971 * scan from a @e copy of @a str.
3335 * @param str a NUL-terminated string to scan 1972 * @param yy_str a NUL-terminated string to scan
3336 * 1973 *
3337 * @return the newly allocated buffer state object. 1974 * @return the newly allocated buffer state object.
3338 * @note If you want to scan bytes that may contain NUL values, then use 1975 * @note If you want to scan bytes that may contain NUL values, then use
3339 * zconf_scan_bytes() instead. 1976 * zconf_scan_bytes() instead.
3340 */ 1977 */
3341YY_BUFFER_STATE zconf_scan_string (yyconst char * str ) 1978YY_BUFFER_STATE zconf_scan_string (yyconst char * yy_str )
3342{ 1979{
3343 1980
3344 return zconf_scan_bytes(str,strlen(str) ); 1981 return zconf_scan_bytes(yy_str,strlen(yy_str) );
3345} 1982}
3346 1983
3347/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will 1984/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will
@@ -3650,7 +2287,7 @@ void zconf_nextfile(const char *name)
3650 current_file = file; 2287 current_file = file;
3651} 2288}
3652 2289
3653static struct buffer *zconf_endfile(void) 2290static void zconf_endfile(void)
3654{ 2291{
3655 struct buffer *parent; 2292 struct buffer *parent;
3656 2293
@@ -3666,23 +2303,15 @@ static struct buffer *zconf_endfile(void)
3666 } 2303 }
3667 free(current_buf); 2304 free(current_buf);
3668 current_buf = parent; 2305 current_buf = parent;
3669
3670 return parent;
3671} 2306}
3672 2307
3673int zconf_lineno(void) 2308int zconf_lineno(void)
3674{ 2309{
3675 if (current_buf) 2310 return current_pos.lineno;
3676 return current_file->lineno - 1;
3677 else
3678 return 0;
3679} 2311}
3680 2312
3681char *zconf_curname(void) 2313char *zconf_curname(void)
3682{ 2314{
3683 if (current_buf) 2315 return current_pos.file ? current_pos.file->name : "<none>";
3684 return current_file->name;
3685 else
3686 return "<none>";
3687} 2316}
3688 2317
diff --git a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h
index c3d25786a64d..527f60c99c50 100644
--- a/scripts/kconfig/lkc.h
+++ b/scripts/kconfig/lkc.h
@@ -8,7 +8,13 @@
8 8
9#include "expr.h" 9#include "expr.h"
10 10
11#include <libintl.h> 11#ifndef KBUILD_NO_NLS
12# include <libintl.h>
13#else
14# define gettext(Msgid) ((const char *) (Msgid))
15# define textdomain(Domainname) ((const char *) (Domainname))
16# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
17#endif
12 18
13#ifdef __cplusplus 19#ifdef __cplusplus
14extern "C" { 20extern "C" {
@@ -31,6 +37,17 @@ extern "C" {
31#define _(text) gettext(text) 37#define _(text) gettext(text)
32#define N_(text) (text) 38#define N_(text) (text)
33 39
40
41#define TF_COMMAND 0x0001
42#define TF_PARAM 0x0002
43
44struct kconf_id {
45 int name;
46 int token;
47 unsigned int flags;
48 enum symbol_type stype;
49};
50
34int zconfparse(void); 51int zconfparse(void);
35void zconfdump(FILE *out); 52void zconfdump(FILE *out);
36 53
@@ -44,7 +61,6 @@ char *zconf_curname(void);
44 61
45/* confdata.c */ 62/* confdata.c */
46extern const char conf_def_filename[]; 63extern const char conf_def_filename[];
47extern char conf_filename[];
48 64
49char *conf_get_default_confname(void); 65char *conf_get_default_confname(void);
50 66
@@ -53,7 +69,7 @@ void kconfig_load(void);
53 69
54/* menu.c */ 70/* menu.c */
55void menu_init(void); 71void menu_init(void);
56void menu_add_menu(void); 72struct menu *menu_add_menu(void);
57void menu_end_menu(void); 73void menu_end_menu(void);
58void menu_add_entry(struct symbol *sym); 74void menu_add_entry(struct symbol *sym);
59void menu_end_entry(void); 75void menu_end_entry(void);
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
index 6dc6d0c48e7a..b6a389c5fcbd 100644
--- a/scripts/kconfig/lkc_proto.h
+++ b/scripts/kconfig/lkc_proto.h
@@ -2,6 +2,7 @@
2/* confdata.c */ 2/* confdata.c */
3P(conf_parse,void,(const char *name)); 3P(conf_parse,void,(const char *name));
4P(conf_read,int,(const char *name)); 4P(conf_read,int,(const char *name));
5P(conf_read_simple,int,(const char *name));
5P(conf_write,int,(const char *name)); 6P(conf_write,int,(const char *name));
6 7
7/* menu.c */ 8/* menu.c */
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
index 457bec29511d..d1ad40531ee5 100644
--- a/scripts/kconfig/mconf.c
+++ b/scripts/kconfig/mconf.c
@@ -219,6 +219,7 @@ save_config_help[] = N_(
219search_help[] = N_( 219search_help[] = N_(
220 "\n" 220 "\n"
221 "Search for CONFIG_ symbols and display their relations.\n" 221 "Search for CONFIG_ symbols and display their relations.\n"
222 "Regular expressions are allowed.\n"
222 "Example: search for \"^FOO\"\n" 223 "Example: search for \"^FOO\"\n"
223 "Result:\n" 224 "Result:\n"
224 "-----------------------------------------------------------------\n" 225 "-----------------------------------------------------------------\n"
@@ -531,7 +532,7 @@ again:
531 cprint("--title"); 532 cprint("--title");
532 cprint(_("Search Configuration Parameter")); 533 cprint(_("Search Configuration Parameter"));
533 cprint("--inputbox"); 534 cprint("--inputbox");
534 cprint(_("Enter Keyword")); 535 cprint(_("Enter CONFIG_ (sub)string to search for (omit CONFIG_)"));
535 cprint("10"); 536 cprint("10");
536 cprint("75"); 537 cprint("75");
537 cprint(""); 538 cprint("");
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
index 5cfa6c405cf0..0fce20cb7f3c 100644
--- a/scripts/kconfig/menu.c
+++ b/scripts/kconfig/menu.c
@@ -61,10 +61,11 @@ void menu_end_entry(void)
61{ 61{
62} 62}
63 63
64void menu_add_menu(void) 64struct menu *menu_add_menu(void)
65{ 65{
66 current_menu = current_entry; 66 menu_end_entry();
67 last_entry_ptr = &current_entry->list; 67 last_entry_ptr = &current_entry->list;
68 return current_menu = current_entry;
68} 69}
69 70
70void menu_end_menu(void) 71void menu_end_menu(void)
@@ -151,6 +152,12 @@ void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep)
151 menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep); 152 menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep);
152} 153}
153 154
155static int menu_range_valid_sym(struct symbol *sym, struct symbol *sym2)
156{
157 return sym2->type == S_INT || sym2->type == S_HEX ||
158 (sym2->type == S_UNKNOWN && sym_string_valid(sym, sym2->name));
159}
160
154void sym_check_prop(struct symbol *sym) 161void sym_check_prop(struct symbol *sym)
155{ 162{
156 struct property *prop; 163 struct property *prop;
@@ -185,8 +192,8 @@ void sym_check_prop(struct symbol *sym)
185 if (sym->type != S_INT && sym->type != S_HEX) 192 if (sym->type != S_INT && sym->type != S_HEX)
186 prop_warn(prop, "range is only allowed " 193 prop_warn(prop, "range is only allowed "
187 "for int or hex symbols"); 194 "for int or hex symbols");
188 if (!sym_string_valid(sym, prop->expr->left.sym->name) || 195 if (!menu_range_valid_sym(sym, prop->expr->left.sym) ||
189 !sym_string_valid(sym, prop->expr->right.sym->name)) 196 !menu_range_valid_sym(sym, prop->expr->right.sym))
190 prop_warn(prop, "range is invalid"); 197 prop_warn(prop, "range is invalid");
191 break; 198 break;
192 default: 199 default:
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
index affa52f5c651..69c2549c0baa 100644
--- a/scripts/kconfig/symbol.c
+++ b/scripts/kconfig/symbol.c
@@ -141,6 +141,55 @@ struct property *sym_get_range_prop(struct symbol *sym)
141 return NULL; 141 return NULL;
142} 142}
143 143
144static int sym_get_range_val(struct symbol *sym, int base)
145{
146 sym_calc_value(sym);
147 switch (sym->type) {
148 case S_INT:
149 base = 10;
150 break;
151 case S_HEX:
152 base = 16;
153 break;
154 default:
155 break;
156 }
157 return strtol(sym->curr.val, NULL, base);
158}
159
160static void sym_validate_range(struct symbol *sym)
161{
162 struct property *prop;
163 int base, val, val2;
164 char str[64];
165
166 switch (sym->type) {
167 case S_INT:
168 base = 10;
169 break;
170 case S_HEX:
171 base = 16;
172 break;
173 default:
174 return;
175 }
176 prop = sym_get_range_prop(sym);
177 if (!prop)
178 return;
179 val = strtol(sym->curr.val, NULL, base);
180 val2 = sym_get_range_val(prop->expr->left.sym, base);
181 if (val >= val2) {
182 val2 = sym_get_range_val(prop->expr->right.sym, base);
183 if (val <= val2)
184 return;
185 }
186 if (sym->type == S_INT)
187 sprintf(str, "%d", val2);
188 else
189 sprintf(str, "0x%x", val2);
190 sym->curr.val = strdup(str);
191}
192
144static void sym_calc_visibility(struct symbol *sym) 193static void sym_calc_visibility(struct symbol *sym)
145{ 194{
146 struct property *prop; 195 struct property *prop;
@@ -301,6 +350,7 @@ void sym_calc_value(struct symbol *sym)
301 sym->curr = newval; 350 sym->curr = newval;
302 if (sym_is_choice(sym) && newval.tri == yes) 351 if (sym_is_choice(sym) && newval.tri == yes)
303 sym->curr.val = sym_calc_choice(sym); 352 sym->curr.val = sym_calc_choice(sym);
353 sym_validate_range(sym);
304 354
305 if (memcmp(&oldval, &sym->curr, sizeof(oldval))) 355 if (memcmp(&oldval, &sym->curr, sizeof(oldval)))
306 sym_set_changed(sym); 356 sym_set_changed(sym);
@@ -380,11 +430,22 @@ bool sym_set_tristate_value(struct symbol *sym, tristate val)
380 sym->flags &= ~SYMBOL_NEW; 430 sym->flags &= ~SYMBOL_NEW;
381 sym_set_changed(sym); 431 sym_set_changed(sym);
382 } 432 }
433 /*
434 * setting a choice value also resets the new flag of the choice
435 * symbol and all other choice values.
436 */
383 if (sym_is_choice_value(sym) && val == yes) { 437 if (sym_is_choice_value(sym) && val == yes) {
384 struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); 438 struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
439 struct property *prop;
440 struct expr *e;
385 441
386 cs->user.val = sym; 442 cs->user.val = sym;
387 cs->flags &= ~SYMBOL_NEW; 443 cs->flags &= ~SYMBOL_NEW;
444 prop = sym_get_choice_prop(cs);
445 for (e = prop->expr; e; e = e->left.expr) {
446 if (e->right.sym->visible != no)
447 e->right.sym->flags &= ~SYMBOL_NEW;
448 }
388 } 449 }
389 450
390 sym->user.tri = val; 451 sym->user.tri = val;
@@ -478,8 +539,8 @@ bool sym_string_within_range(struct symbol *sym, const char *str)
478 if (!prop) 539 if (!prop)
479 return true; 540 return true;
480 val = strtol(str, NULL, 10); 541 val = strtol(str, NULL, 10);
481 return val >= strtol(prop->expr->left.sym->name, NULL, 10) && 542 return val >= sym_get_range_val(prop->expr->left.sym, 10) &&
482 val <= strtol(prop->expr->right.sym->name, NULL, 10); 543 val <= sym_get_range_val(prop->expr->right.sym, 10);
483 case S_HEX: 544 case S_HEX:
484 if (!sym_string_valid(sym, str)) 545 if (!sym_string_valid(sym, str))
485 return false; 546 return false;
@@ -487,8 +548,8 @@ bool sym_string_within_range(struct symbol *sym, const char *str)
487 if (!prop) 548 if (!prop)
488 return true; 549 return true;
489 val = strtol(str, NULL, 16); 550 val = strtol(str, NULL, 16);
490 return val >= strtol(prop->expr->left.sym->name, NULL, 16) && 551 return val >= sym_get_range_val(prop->expr->left.sym, 16) &&
491 val <= strtol(prop->expr->right.sym->name, NULL, 16); 552 val <= sym_get_range_val(prop->expr->right.sym, 16);
492 case S_BOOLEAN: 553 case S_BOOLEAN:
493 case S_TRISTATE: 554 case S_TRISTATE:
494 switch (str[0]) { 555 switch (str[0]) {
@@ -731,12 +792,12 @@ struct symbol *sym_check_deps(struct symbol *sym)
731 struct symbol *sym2; 792 struct symbol *sym2;
732 struct property *prop; 793 struct property *prop;
733 794
734 if (sym->flags & SYMBOL_CHECK_DONE)
735 return NULL;
736 if (sym->flags & SYMBOL_CHECK) { 795 if (sym->flags & SYMBOL_CHECK) {
737 printf("Warning! Found recursive dependency: %s", sym->name); 796 printf("Warning! Found recursive dependency: %s", sym->name);
738 return sym; 797 return sym;
739 } 798 }
799 if (sym->flags & SYMBOL_CHECKED)
800 return NULL;
740 801
741 sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); 802 sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
742 sym2 = sym_check_expr_deps(sym->rev_dep.expr); 803 sym2 = sym_check_expr_deps(sym->rev_dep.expr);
@@ -756,8 +817,13 @@ struct symbol *sym_check_deps(struct symbol *sym)
756 goto out; 817 goto out;
757 } 818 }
758out: 819out:
759 if (sym2) 820 if (sym2) {
760 printf(" %s", sym->name); 821 printf(" %s", sym->name);
822 if (sym2 == sym) {
823 printf("\n");
824 sym2 = NULL;
825 }
826 }
761 sym->flags &= ~SYMBOL_CHECK; 827 sym->flags &= ~SYMBOL_CHECK;
762 return sym2; 828 return sym2;
763} 829}
diff --git a/scripts/kconfig/zconf.gperf b/scripts/kconfig/zconf.gperf
new file mode 100644
index 000000000000..b03220600b3a
--- /dev/null
+++ b/scripts/kconfig/zconf.gperf
@@ -0,0 +1,43 @@
1%language=ANSI-C
2%define hash-function-name kconf_id_hash
3%define lookup-function-name kconf_id_lookup
4%define string-pool-name kconf_id_strings
5%compare-strncmp
6%enum
7%pic
8%struct-type
9
10struct kconf_id;
11
12%%
13mainmenu, T_MAINMENU, TF_COMMAND
14menu, T_MENU, TF_COMMAND
15endmenu, T_ENDMENU, TF_COMMAND
16source, T_SOURCE, TF_COMMAND
17choice, T_CHOICE, TF_COMMAND
18endchoice, T_ENDCHOICE, TF_COMMAND
19comment, T_COMMENT, TF_COMMAND
20config, T_CONFIG, TF_COMMAND
21menuconfig, T_MENUCONFIG, TF_COMMAND
22help, T_HELP, TF_COMMAND
23if, T_IF, TF_COMMAND|TF_PARAM
24endif, T_ENDIF, TF_COMMAND
25depends, T_DEPENDS, TF_COMMAND
26requires, T_REQUIRES, TF_COMMAND
27optional, T_OPTIONAL, TF_COMMAND
28default, T_DEFAULT, TF_COMMAND, S_UNKNOWN
29prompt, T_PROMPT, TF_COMMAND
30tristate, T_TYPE, TF_COMMAND, S_TRISTATE
31def_tristate, T_DEFAULT, TF_COMMAND, S_TRISTATE
32bool, T_TYPE, TF_COMMAND, S_BOOLEAN
33boolean, T_TYPE, TF_COMMAND, S_BOOLEAN
34def_bool, T_DEFAULT, TF_COMMAND, S_BOOLEAN
35def_boolean, T_DEFAULT, TF_COMMAND, S_BOOLEAN
36int, T_TYPE, TF_COMMAND, S_INT
37hex, T_TYPE, TF_COMMAND, S_HEX
38string, T_TYPE, TF_COMMAND, S_STRING
39select, T_SELECT, TF_COMMAND
40enable, T_SELECT, TF_COMMAND
41range, T_RANGE, TF_COMMAND
42on, T_ON, TF_PARAM
43%%
diff --git a/scripts/kconfig/zconf.hash.c_shipped b/scripts/kconfig/zconf.hash.c_shipped
new file mode 100644
index 000000000000..345f0fc07ca3
--- /dev/null
+++ b/scripts/kconfig/zconf.hash.c_shipped
@@ -0,0 +1,231 @@
1/* ANSI-C code produced by gperf version 3.0.1 */
2/* Command-line: gperf */
3/* Computed positions: -k'1,3' */
4
5#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
6 && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
7 && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
8 && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
9 && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
10 && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
11 && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
12 && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
13 && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
14 && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
15 && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
16 && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
17 && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
18 && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
19 && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
20 && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
21 && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
22 && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
23 && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
24 && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
25 && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
26 && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
27 && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
28/* The character set is not based on ISO-646. */
29#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
30#endif
31
32struct kconf_id;
33/* maximum key range = 45, duplicates = 0 */
34
35#ifdef __GNUC__
36__inline
37#else
38#ifdef __cplusplus
39inline
40#endif
41#endif
42static unsigned int
43kconf_id_hash (register const char *str, register unsigned int len)
44{
45 static unsigned char asso_values[] =
46 {
47 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
48 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
49 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
50 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
51 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
52 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
53 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
54 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
55 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
56 47, 47, 47, 47, 47, 47, 47, 25, 10, 15,
57 0, 0, 5, 47, 0, 0, 47, 47, 0, 10,
58 0, 20, 20, 20, 5, 0, 0, 20, 47, 47,
59 20, 47, 47, 47, 47, 47, 47, 47, 47, 47,
60 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
61 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
62 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
63 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
64 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
65 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
66 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
67 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
68 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
69 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
70 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
71 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
72 47, 47, 47, 47, 47, 47
73 };
74 register int hval = len;
75
76 switch (hval)
77 {
78 default:
79 hval += asso_values[(unsigned char)str[2]];
80 /*FALLTHROUGH*/
81 case 2:
82 case 1:
83 hval += asso_values[(unsigned char)str[0]];
84 break;
85 }
86 return hval;
87}
88
89struct kconf_id_strings_t
90 {
91 char kconf_id_strings_str2[sizeof("if")];
92 char kconf_id_strings_str3[sizeof("int")];
93 char kconf_id_strings_str4[sizeof("help")];
94 char kconf_id_strings_str5[sizeof("endif")];
95 char kconf_id_strings_str6[sizeof("select")];
96 char kconf_id_strings_str7[sizeof("endmenu")];
97 char kconf_id_strings_str8[sizeof("tristate")];
98 char kconf_id_strings_str9[sizeof("endchoice")];
99 char kconf_id_strings_str10[sizeof("range")];
100 char kconf_id_strings_str11[sizeof("string")];
101 char kconf_id_strings_str12[sizeof("default")];
102 char kconf_id_strings_str13[sizeof("def_bool")];
103 char kconf_id_strings_str14[sizeof("menu")];
104 char kconf_id_strings_str16[sizeof("def_boolean")];
105 char kconf_id_strings_str17[sizeof("def_tristate")];
106 char kconf_id_strings_str18[sizeof("mainmenu")];
107 char kconf_id_strings_str20[sizeof("menuconfig")];
108 char kconf_id_strings_str21[sizeof("config")];
109 char kconf_id_strings_str22[sizeof("on")];
110 char kconf_id_strings_str23[sizeof("hex")];
111 char kconf_id_strings_str26[sizeof("source")];
112 char kconf_id_strings_str27[sizeof("depends")];
113 char kconf_id_strings_str28[sizeof("optional")];
114 char kconf_id_strings_str31[sizeof("enable")];
115 char kconf_id_strings_str32[sizeof("comment")];
116 char kconf_id_strings_str33[sizeof("requires")];
117 char kconf_id_strings_str34[sizeof("bool")];
118 char kconf_id_strings_str37[sizeof("boolean")];
119 char kconf_id_strings_str41[sizeof("choice")];
120 char kconf_id_strings_str46[sizeof("prompt")];
121 };
122static struct kconf_id_strings_t kconf_id_strings_contents =
123 {
124 "if",
125 "int",
126 "help",
127 "endif",
128 "select",
129 "endmenu",
130 "tristate",
131 "endchoice",
132 "range",
133 "string",
134 "default",
135 "def_bool",
136 "menu",
137 "def_boolean",
138 "def_tristate",
139 "mainmenu",
140 "menuconfig",
141 "config",
142 "on",
143 "hex",
144 "source",
145 "depends",
146 "optional",
147 "enable",
148 "comment",
149 "requires",
150 "bool",
151 "boolean",
152 "choice",
153 "prompt"
154 };
155#define kconf_id_strings ((const char *) &kconf_id_strings_contents)
156#ifdef __GNUC__
157__inline
158#endif
159struct kconf_id *
160kconf_id_lookup (register const char *str, register unsigned int len)
161{
162 enum
163 {
164 TOTAL_KEYWORDS = 30,
165 MIN_WORD_LENGTH = 2,
166 MAX_WORD_LENGTH = 12,
167 MIN_HASH_VALUE = 2,
168 MAX_HASH_VALUE = 46
169 };
170
171 static struct kconf_id wordlist[] =
172 {
173 {-1}, {-1},
174 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_IF, TF_COMMAND|TF_PARAM},
175 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3, T_TYPE, TF_COMMAND, S_INT},
176 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str4, T_HELP, TF_COMMAND},
177 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5, T_ENDIF, TF_COMMAND},
178 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str6, T_SELECT, TF_COMMAND},
179 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_ENDMENU, TF_COMMAND},
180 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8, T_TYPE, TF_COMMAND, S_TRISTATE},
181 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9, T_ENDCHOICE, TF_COMMAND},
182 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str10, T_RANGE, TF_COMMAND},
183 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str11, T_TYPE, TF_COMMAND, S_STRING},
184 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_DEFAULT, TF_COMMAND, S_UNKNOWN},
185 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13, T_DEFAULT, TF_COMMAND, S_BOOLEAN},
186 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_MENU, TF_COMMAND},
187 {-1},
188 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str16, T_DEFAULT, TF_COMMAND, S_BOOLEAN},
189 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_DEFAULT, TF_COMMAND, S_TRISTATE},
190 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18, T_MAINMENU, TF_COMMAND},
191 {-1},
192 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str20, T_MENUCONFIG, TF_COMMAND},
193 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21, T_CONFIG, TF_COMMAND},
194 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22, T_ON, TF_PARAM},
195 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23, T_TYPE, TF_COMMAND, S_HEX},
196 {-1}, {-1},
197 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str26, T_SOURCE, TF_COMMAND},
198 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27, T_DEPENDS, TF_COMMAND},
199 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str28, T_OPTIONAL, TF_COMMAND},
200 {-1}, {-1},
201 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31, T_SELECT, TF_COMMAND},
202 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32, T_COMMENT, TF_COMMAND},
203 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33, T_REQUIRES, TF_COMMAND},
204 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str34, T_TYPE, TF_COMMAND, S_BOOLEAN},
205 {-1}, {-1},
206 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str37, T_TYPE, TF_COMMAND, S_BOOLEAN},
207 {-1}, {-1}, {-1},
208 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41, T_CHOICE, TF_COMMAND},
209 {-1}, {-1}, {-1}, {-1},
210 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str46, T_PROMPT, TF_COMMAND}
211 };
212
213 if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
214 {
215 register int key = kconf_id_hash (str, len);
216
217 if (key <= MAX_HASH_VALUE && key >= 0)
218 {
219 register int o = wordlist[key].name;
220 if (o >= 0)
221 {
222 register const char *s = o + kconf_id_strings;
223
224 if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
225 return &wordlist[key];
226 }
227 }
228 }
229 return 0;
230}
231
diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l
index 55517b2877cd..cfa46077c6b4 100644
--- a/scripts/kconfig/zconf.l
+++ b/scripts/kconfig/zconf.l
@@ -18,8 +18,12 @@
18 18
19#define START_STRSIZE 16 19#define START_STRSIZE 16
20 20
21char *text; 21static struct {
22static char *text_ptr; 22 struct file *file;
23 int lineno;
24} current_pos;
25
26static char *text;
23static int text_size, text_asize; 27static int text_size, text_asize;
24 28
25struct buffer { 29struct buffer {
@@ -32,29 +36,28 @@ struct buffer *current_buf;
32static int last_ts, first_ts; 36static int last_ts, first_ts;
33 37
34static void zconf_endhelp(void); 38static void zconf_endhelp(void);
35static struct buffer *zconf_endfile(void); 39static void zconf_endfile(void);
36 40
37void new_string(void) 41void new_string(void)
38{ 42{
39 text = malloc(START_STRSIZE); 43 text = malloc(START_STRSIZE);
40 text_asize = START_STRSIZE; 44 text_asize = START_STRSIZE;
41 text_ptr = text;
42 text_size = 0; 45 text_size = 0;
43 *text_ptr = 0; 46 *text = 0;
44} 47}
45 48
46void append_string(const char *str, int size) 49void append_string(const char *str, int size)
47{ 50{
48 int new_size = text_size + size + 1; 51 int new_size = text_size + size + 1;
49 if (new_size > text_asize) { 52 if (new_size > text_asize) {
53 new_size += START_STRSIZE - 1;
54 new_size &= -START_STRSIZE;
50 text = realloc(text, new_size); 55 text = realloc(text, new_size);
51 text_asize = new_size; 56 text_asize = new_size;
52 text_ptr = text + text_size;
53 } 57 }
54 memcpy(text_ptr, str, size); 58 memcpy(text + text_size, str, size);
55 text_ptr += size;
56 text_size += size; 59 text_size += size;
57 *text_ptr = 0; 60 text[text_size] = 0;
58} 61}
59 62
60void alloc_string(const char *str, int size) 63void alloc_string(const char *str, int size)
@@ -72,10 +75,13 @@ n [A-Za-z0-9_]
72 int str = 0; 75 int str = 0;
73 int ts, i; 76 int ts, i;
74 77
75[ \t]*#.*\n current_file->lineno++; 78[ \t]*#.*\n |
79[ \t]*\n {
80 current_file->lineno++;
81 return T_EOL;
82}
76[ \t]*#.* 83[ \t]*#.*
77 84
78[ \t]*\n current_file->lineno++; return T_EOL;
79 85
80[ \t]+ { 86[ \t]+ {
81 BEGIN(COMMAND); 87 BEGIN(COMMAND);
@@ -88,42 +94,25 @@ n [A-Za-z0-9_]
88 94
89 95
90<COMMAND>{ 96<COMMAND>{
91 "mainmenu" BEGIN(PARAM); return T_MAINMENU;
92 "menu" BEGIN(PARAM); return T_MENU;
93 "endmenu" BEGIN(PARAM); return T_ENDMENU;
94 "source" BEGIN(PARAM); return T_SOURCE;
95 "choice" BEGIN(PARAM); return T_CHOICE;
96 "endchoice" BEGIN(PARAM); return T_ENDCHOICE;
97 "comment" BEGIN(PARAM); return T_COMMENT;
98 "config" BEGIN(PARAM); return T_CONFIG;
99 "menuconfig" BEGIN(PARAM); return T_MENUCONFIG;
100 "help" BEGIN(PARAM); return T_HELP;
101 "if" BEGIN(PARAM); return T_IF;
102 "endif" BEGIN(PARAM); return T_ENDIF;
103 "depends" BEGIN(PARAM); return T_DEPENDS;
104 "requires" BEGIN(PARAM); return T_REQUIRES;
105 "optional" BEGIN(PARAM); return T_OPTIONAL;
106 "default" BEGIN(PARAM); return T_DEFAULT;
107 "prompt" BEGIN(PARAM); return T_PROMPT;
108 "tristate" BEGIN(PARAM); return T_TRISTATE;
109 "def_tristate" BEGIN(PARAM); return T_DEF_TRISTATE;
110 "bool" BEGIN(PARAM); return T_BOOLEAN;
111 "boolean" BEGIN(PARAM); return T_BOOLEAN;
112 "def_bool" BEGIN(PARAM); return T_DEF_BOOLEAN;
113 "def_boolean" BEGIN(PARAM); return T_DEF_BOOLEAN;
114 "int" BEGIN(PARAM); return T_INT;
115 "hex" BEGIN(PARAM); return T_HEX;
116 "string" BEGIN(PARAM); return T_STRING;
117 "select" BEGIN(PARAM); return T_SELECT;
118 "enable" BEGIN(PARAM); return T_SELECT;
119 "range" BEGIN(PARAM); return T_RANGE;
120 {n}+ { 97 {n}+ {
98 struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
99 BEGIN(PARAM);
100 current_pos.file = current_file;
101 current_pos.lineno = current_file->lineno;
102 if (id && id->flags & TF_COMMAND) {
103 zconflval.id = id;
104 return id->token;
105 }
121 alloc_string(yytext, yyleng); 106 alloc_string(yytext, yyleng);
122 zconflval.string = text; 107 zconflval.string = text;
123 return T_WORD; 108 return T_WORD;
124 } 109 }
125 . 110 .
126 \n current_file->lineno++; BEGIN(INITIAL); 111 \n {
112 BEGIN(INITIAL);
113 current_file->lineno++;
114 return T_EOL;
115 }
127} 116}
128 117
129<PARAM>{ 118<PARAM>{
@@ -134,8 +123,6 @@ n [A-Za-z0-9_]
134 "!" return T_NOT; 123 "!" return T_NOT;
135 "=" return T_EQUAL; 124 "=" return T_EQUAL;
136 "!=" return T_UNEQUAL; 125 "!=" return T_UNEQUAL;
137 "if" return T_IF;
138 "on" return T_ON;
139 \"|\' { 126 \"|\' {
140 str = yytext[0]; 127 str = yytext[0];
141 new_string(); 128 new_string();
@@ -144,6 +131,11 @@ n [A-Za-z0-9_]
144 \n BEGIN(INITIAL); current_file->lineno++; return T_EOL; 131 \n BEGIN(INITIAL); current_file->lineno++; return T_EOL;
145 --- /* ignore */ 132 --- /* ignore */
146 ({n}|[-/.])+ { 133 ({n}|[-/.])+ {
134 struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
135 if (id && id->flags & TF_PARAM) {
136 zconflval.id = id;
137 return id->token;
138 }
147 alloc_string(yytext, yyleng); 139 alloc_string(yytext, yyleng);
148 zconflval.string = text; 140 zconflval.string = text;
149 return T_WORD; 141 return T_WORD;
@@ -236,9 +228,9 @@ n [A-Za-z0-9_]
236} 228}
237 229
238<<EOF>> { 230<<EOF>> {
239 if (current_buf) { 231 if (current_file) {
240 zconf_endfile(); 232 zconf_endfile();
241 return T_EOF; 233 return T_EOL;
242 } 234 }
243 fclose(yyin); 235 fclose(yyin);
244 yyterminate(); 236 yyterminate();
@@ -329,7 +321,7 @@ void zconf_nextfile(const char *name)
329 current_file = file; 321 current_file = file;
330} 322}
331 323
332static struct buffer *zconf_endfile(void) 324static void zconf_endfile(void)
333{ 325{
334 struct buffer *parent; 326 struct buffer *parent;
335 327
@@ -345,22 +337,14 @@ static struct buffer *zconf_endfile(void)
345 } 337 }
346 free(current_buf); 338 free(current_buf);
347 current_buf = parent; 339 current_buf = parent;
348
349 return parent;
350} 340}
351 341
352int zconf_lineno(void) 342int zconf_lineno(void)
353{ 343{
354 if (current_buf) 344 return current_pos.lineno;
355 return current_file->lineno - 1;
356 else
357 return 0;
358} 345}
359 346
360char *zconf_curname(void) 347char *zconf_curname(void)
361{ 348{
362 if (current_buf) 349 return current_pos.file ? current_pos.file->name : "<none>";
363 return current_file->name;
364 else
365 return "<none>";
366} 350}
diff --git a/scripts/kconfig/zconf.tab.c_shipped b/scripts/kconfig/zconf.tab.c_shipped
index ff4fcc09720e..ea7755da82f5 100644
--- a/scripts/kconfig/zconf.tab.c_shipped
+++ b/scripts/kconfig/zconf.tab.c_shipped
@@ -1,7 +1,7 @@
1/* A Bison parser, made by GNU Bison 1.875a. */ 1/* A Bison parser, made by GNU Bison 2.0. */
2 2
3/* Skeleton parser for Yacc-like parsing with Bison, 3/* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. 4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
@@ -45,8 +45,7 @@
45/* Using locations. */ 45/* Using locations. */
46#define YYLSP_NEEDED 0 46#define YYLSP_NEEDED 0
47 47
48/* If NAME_PREFIX is specified substitute the variables and functions 48/* Substitute the variable and function names. */
49 names. */
50#define yyparse zconfparse 49#define yyparse zconfparse
51#define yylex zconflex 50#define yylex zconflex
52#define yyerror zconferror 51#define yyerror zconferror
@@ -79,28 +78,21 @@
79 T_REQUIRES = 272, 78 T_REQUIRES = 272,
80 T_OPTIONAL = 273, 79 T_OPTIONAL = 273,
81 T_PROMPT = 274, 80 T_PROMPT = 274,
82 T_DEFAULT = 275, 81 T_TYPE = 275,
83 T_TRISTATE = 276, 82 T_DEFAULT = 276,
84 T_DEF_TRISTATE = 277, 83 T_SELECT = 277,
85 T_BOOLEAN = 278, 84 T_RANGE = 278,
86 T_DEF_BOOLEAN = 279, 85 T_ON = 279,
87 T_STRING = 280, 86 T_WORD = 280,
88 T_INT = 281, 87 T_WORD_QUOTE = 281,
89 T_HEX = 282, 88 T_UNEQUAL = 282,
90 T_WORD = 283, 89 T_CLOSE_PAREN = 283,
91 T_WORD_QUOTE = 284, 90 T_OPEN_PAREN = 284,
92 T_UNEQUAL = 285, 91 T_EOL = 285,
93 T_EOF = 286, 92 T_OR = 286,
94 T_EOL = 287, 93 T_AND = 287,
95 T_CLOSE_PAREN = 288, 94 T_EQUAL = 288,
96 T_OPEN_PAREN = 289, 95 T_NOT = 289
97 T_ON = 290,
98 T_SELECT = 291,
99 T_RANGE = 292,
100 T_OR = 293,
101 T_AND = 294,
102 T_EQUAL = 295,
103 T_NOT = 296
104 }; 96 };
105#endif 97#endif
106#define T_MAINMENU 258 98#define T_MAINMENU 258
@@ -120,28 +112,21 @@
120#define T_REQUIRES 272 112#define T_REQUIRES 272
121#define T_OPTIONAL 273 113#define T_OPTIONAL 273
122#define T_PROMPT 274 114#define T_PROMPT 274
123#define T_DEFAULT 275 115#define T_TYPE 275
124#define T_TRISTATE 276 116#define T_DEFAULT 276
125#define T_DEF_TRISTATE 277 117#define T_SELECT 277
126#define T_BOOLEAN 278 118#define T_RANGE 278
127#define T_DEF_BOOLEAN 279 119#define T_ON 279
128#define T_STRING 280 120#define T_WORD 280
129#define T_INT 281 121#define T_WORD_QUOTE 281
130#define T_HEX 282 122#define T_UNEQUAL 282
131#define T_WORD 283 123#define T_CLOSE_PAREN 283
132#define T_WORD_QUOTE 284 124#define T_OPEN_PAREN 284
133#define T_UNEQUAL 285 125#define T_EOL 285
134#define T_EOF 286 126#define T_OR 286
135#define T_EOL 287 127#define T_AND 287
136#define T_CLOSE_PAREN 288 128#define T_EQUAL 288
137#define T_OPEN_PAREN 289 129#define T_NOT 289
138#define T_ON 290
139#define T_SELECT 291
140#define T_RANGE 292
141#define T_OR 293
142#define T_AND 294
143#define T_EQUAL 295
144#define T_NOT 296
145 130
146 131
147 132
@@ -161,6 +146,11 @@
161#include <string.h> 146#include <string.h>
162#include <stdbool.h> 147#include <stdbool.h>
163 148
149#define LKC_DIRECT_LINK
150#include "lkc.h"
151
152#include "zconf.hash.c"
153
164#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt) 154#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
165 155
166#define PRINTD 0x0001 156#define PRINTD 0x0001
@@ -170,14 +160,18 @@ int cdebug = PRINTD;
170 160
171extern int zconflex(void); 161extern int zconflex(void);
172static void zconfprint(const char *err, ...); 162static void zconfprint(const char *err, ...);
163static void zconf_error(const char *err, ...);
173static void zconferror(const char *err); 164static void zconferror(const char *err);
174static bool zconf_endtoken(int token, int starttoken, int endtoken); 165static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
175 166
176struct symbol *symbol_hash[257]; 167struct symbol *symbol_hash[257];
177 168
178static struct menu *current_menu, *current_entry; 169static struct menu *current_menu, *current_entry;
179 170
171#define YYDEBUG 0
172#if YYDEBUG
180#define YYERROR_VERBOSE 173#define YYERROR_VERBOSE
174#endif
181 175
182 176
183/* Enabling traces. */ 177/* Enabling traces. */
@@ -196,13 +190,14 @@ static struct menu *current_menu, *current_entry;
196#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) 190#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
197 191
198typedef union YYSTYPE { 192typedef union YYSTYPE {
199 int token;
200 char *string; 193 char *string;
194 struct file *file;
201 struct symbol *symbol; 195 struct symbol *symbol;
202 struct expr *expr; 196 struct expr *expr;
203 struct menu *menu; 197 struct menu *menu;
198 struct kconf_id *id;
204} YYSTYPE; 199} YYSTYPE;
205/* Line 191 of yacc.c. */ 200/* Line 190 of yacc.c. */
206 201
207# define yystype YYSTYPE /* obsolescent; will be withdrawn */ 202# define yystype YYSTYPE /* obsolescent; will be withdrawn */
208# define YYSTYPE_IS_DECLARED 1 203# define YYSTYPE_IS_DECLARED 1
@@ -214,27 +209,26 @@ typedef union YYSTYPE {
214/* Copy the second part of user declarations. */ 209/* Copy the second part of user declarations. */
215 210
216 211
217#define LKC_DIRECT_LINK 212/* Line 213 of yacc.c. */
218#include "lkc.h"
219
220
221/* Line 214 of yacc.c. */
222 213
223 214
224#if ! defined (yyoverflow) || YYERROR_VERBOSE 215#if ! defined (yyoverflow) || YYERROR_VERBOSE
225 216
217# ifndef YYFREE
218# define YYFREE free
219# endif
220# ifndef YYMALLOC
221# define YYMALLOC malloc
222# endif
223
226/* The parser invokes alloca or malloc; define the necessary symbols. */ 224/* The parser invokes alloca or malloc; define the necessary symbols. */
227 225
228# if YYSTACK_USE_ALLOCA 226# ifdef YYSTACK_USE_ALLOCA
229# define YYSTACK_ALLOC alloca 227# if YYSTACK_USE_ALLOCA
230# else 228# ifdef __GNUC__
231# ifndef YYSTACK_USE_ALLOCA 229# define YYSTACK_ALLOC __builtin_alloca
232# if defined (alloca) || defined (_ALLOCA_H)
233# define YYSTACK_ALLOC alloca
234# else 230# else
235# ifdef __GNUC__ 231# define YYSTACK_ALLOC alloca
236# define YYSTACK_ALLOC __builtin_alloca
237# endif
238# endif 232# endif
239# endif 233# endif
240# endif 234# endif
@@ -247,20 +241,20 @@ typedef union YYSTYPE {
247# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 241# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
248# define YYSIZE_T size_t 242# define YYSIZE_T size_t
249# endif 243# endif
250# define YYSTACK_ALLOC malloc 244# define YYSTACK_ALLOC YYMALLOC
251# define YYSTACK_FREE free 245# define YYSTACK_FREE YYFREE
252# endif 246# endif
253#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ 247#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
254 248
255 249
256#if (! defined (yyoverflow) \ 250#if (! defined (yyoverflow) \
257 && (! defined (__cplusplus) \ 251 && (! defined (__cplusplus) \
258 || (YYSTYPE_IS_TRIVIAL))) 252 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
259 253
260/* A type that is properly aligned for any stack member. */ 254/* A type that is properly aligned for any stack member. */
261union yyalloc 255union yyalloc
262{ 256{
263 short yyss; 257 short int yyss;
264 YYSTYPE yyvs; 258 YYSTYPE yyvs;
265 }; 259 };
266 260
@@ -270,13 +264,13 @@ union yyalloc
270/* The size of an array large to enough to hold all stacks, each with 264/* The size of an array large to enough to hold all stacks, each with
271 N elements. */ 265 N elements. */
272# define YYSTACK_BYTES(N) \ 266# define YYSTACK_BYTES(N) \
273 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ 267 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
274 + YYSTACK_GAP_MAXIMUM) 268 + YYSTACK_GAP_MAXIMUM)
275 269
276/* Copy COUNT objects from FROM to TO. The source and destination do 270/* Copy COUNT objects from FROM to TO. The source and destination do
277 not overlap. */ 271 not overlap. */
278# ifndef YYCOPY 272# ifndef YYCOPY
279# if 1 < __GNUC__ 273# if defined (__GNUC__) && 1 < __GNUC__
280# define YYCOPY(To, From, Count) \ 274# define YYCOPY(To, From, Count) \
281 __builtin_memcpy (To, From, (Count) * sizeof (*(From))) 275 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
282# else 276# else
@@ -312,26 +306,26 @@ union yyalloc
312#if defined (__STDC__) || defined (__cplusplus) 306#if defined (__STDC__) || defined (__cplusplus)
313 typedef signed char yysigned_char; 307 typedef signed char yysigned_char;
314#else 308#else
315 typedef short yysigned_char; 309 typedef short int yysigned_char;
316#endif 310#endif
317 311
318/* YYFINAL -- State number of the termination state. */ 312/* YYFINAL -- State number of the termination state. */
319#define YYFINAL 2 313#define YYFINAL 3
320/* YYLAST -- Last index in YYTABLE. */ 314/* YYLAST -- Last index in YYTABLE. */
321#define YYLAST 201 315#define YYLAST 264
322 316
323/* YYNTOKENS -- Number of terminals. */ 317/* YYNTOKENS -- Number of terminals. */
324#define YYNTOKENS 42 318#define YYNTOKENS 35
325/* YYNNTS -- Number of nonterminals. */ 319/* YYNNTS -- Number of nonterminals. */
326#define YYNNTS 41 320#define YYNNTS 42
327/* YYNRULES -- Number of rules. */ 321/* YYNRULES -- Number of rules. */
328#define YYNRULES 104 322#define YYNRULES 104
329/* YYNRULES -- Number of states. */ 323/* YYNRULES -- Number of states. */
330#define YYNSTATES 182 324#define YYNSTATES 175
331 325
332/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 326/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
333#define YYUNDEFTOK 2 327#define YYUNDEFTOK 2
334#define YYMAXUTOK 296 328#define YYMAXUTOK 289
335 329
336#define YYTRANSLATE(YYX) \ 330#define YYTRANSLATE(YYX) \
337 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 331 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -367,79 +361,78 @@ static const unsigned char yytranslate[] =
367 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 361 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
368 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 362 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
369 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 363 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
370 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 364 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
371 35, 36, 37, 38, 39, 40, 41
372}; 365};
373 366
374#if YYDEBUG 367#if YYDEBUG
375/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 368/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
376 YYRHS. */ 369 YYRHS. */
377static const unsigned short yyprhs[] = 370static const unsigned short int yyprhs[] =
378{ 371{
379 0, 0, 3, 4, 7, 9, 11, 13, 17, 19, 372 0, 0, 3, 5, 6, 9, 12, 15, 20, 23,
380 21, 23, 26, 28, 30, 32, 34, 36, 38, 42, 373 28, 33, 37, 39, 41, 43, 45, 47, 49, 51,
381 45, 49, 52, 53, 56, 59, 62, 65, 69, 74, 374 53, 55, 57, 59, 61, 63, 67, 70, 74, 77,
382 78, 83, 87, 91, 95, 100, 105, 110, 116, 119, 375 81, 84, 85, 88, 91, 94, 97, 100, 104, 109,
383 122, 124, 128, 131, 132, 135, 138, 141, 144, 149, 376 114, 119, 125, 128, 131, 133, 137, 138, 141, 144,
384 153, 157, 160, 165, 166, 169, 173, 175, 179, 182, 377 147, 150, 153, 158, 162, 165, 170, 171, 174, 178,
385 183, 186, 189, 192, 196, 199, 201, 205, 208, 209, 378 180, 184, 185, 188, 191, 194, 198, 201, 203, 207,
386 212, 215, 218, 222, 226, 228, 232, 235, 238, 241, 379 208, 211, 214, 217, 221, 225, 228, 231, 234, 235,
387 242, 245, 248, 253, 257, 261, 262, 265, 267, 269, 380 238, 241, 244, 249, 253, 257, 258, 261, 263, 265,
388 272, 275, 278, 280, 282, 283, 286, 288, 292, 296, 381 268, 271, 274, 276, 279, 280, 283, 285, 289, 293,
389 300, 303, 307, 311, 313 382 297, 300, 304, 308, 310
390}; 383};
391 384
392/* YYRHS -- A `-1'-separated list of the rules' RHS. */ 385/* YYRHS -- A `-1'-separated list of the rules' RHS. */
393static const yysigned_char yyrhs[] = 386static const yysigned_char yyrhs[] =
394{ 387{
395 43, 0, -1, -1, 43, 44, -1, 45, -1, 55, 388 36, 0, -1, 37, -1, -1, 37, 39, -1, 37,
396 -1, 66, -1, 3, 77, 79, -1, 5, -1, 15, 389 50, -1, 37, 61, -1, 37, 3, 71, 73, -1,
397 -1, 8, -1, 1, 79, -1, 61, -1, 71, -1, 390 37, 72, -1, 37, 25, 1, 30, -1, 37, 38,
398 47, -1, 49, -1, 69, -1, 79, -1, 10, 28, 391 1, 30, -1, 37, 1, 30, -1, 16, -1, 19,
399 32, -1, 46, 50, -1, 11, 28, 32, -1, 48, 392 -1, 20, -1, 22, -1, 18, -1, 23, -1, 21,
400 50, -1, -1, 50, 51, -1, 50, 75, -1, 50, 393 -1, 30, -1, 56, -1, 65, -1, 42, -1, 44,
401 73, -1, 50, 32, -1, 21, 76, 32, -1, 22, 394 -1, 63, -1, 25, 1, 30, -1, 1, 30, -1,
402 81, 80, 32, -1, 23, 76, 32, -1, 24, 81, 395 10, 25, 30, -1, 41, 45, -1, 11, 25, 30,
403 80, 32, -1, 26, 76, 32, -1, 27, 76, 32, 396 -1, 43, 45, -1, -1, 45, 46, -1, 45, 69,
404 -1, 25, 76, 32, -1, 19, 77, 80, 32, -1, 397 -1, 45, 67, -1, 45, 40, -1, 45, 30, -1,
405 20, 81, 80, 32, -1, 36, 28, 80, 32, -1, 398 20, 70, 30, -1, 19, 71, 74, 30, -1, 21,
406 37, 82, 82, 80, 32, -1, 7, 32, -1, 52, 399 75, 74, 30, -1, 22, 25, 74, 30, -1, 23,
407 56, -1, 78, -1, 53, 58, 54, -1, 53, 58, 400 76, 76, 74, 30, -1, 7, 30, -1, 47, 51,
408 -1, -1, 56, 57, -1, 56, 75, -1, 56, 73, 401 -1, 72, -1, 48, 53, 49, -1, -1, 51, 52,
409 -1, 56, 32, -1, 19, 77, 80, 32, -1, 21, 402 -1, 51, 69, -1, 51, 67, -1, 51, 30, -1,
410 76, 32, -1, 23, 76, 32, -1, 18, 32, -1, 403 51, 40, -1, 19, 71, 74, 30, -1, 20, 70,
411 20, 28, 80, 32, -1, -1, 58, 45, -1, 14, 404 30, -1, 18, 30, -1, 21, 25, 74, 30, -1,
412 81, 32, -1, 78, -1, 59, 62, 60, -1, 59, 405 -1, 53, 39, -1, 14, 75, 73, -1, 72, -1,
413 62, -1, -1, 62, 45, -1, 62, 66, -1, 62, 406 54, 57, 55, -1, -1, 57, 39, -1, 57, 61,
414 55, -1, 4, 77, 32, -1, 63, 74, -1, 78, 407 -1, 57, 50, -1, 4, 71, 30, -1, 58, 68,
415 -1, 64, 67, 65, -1, 64, 67, -1, -1, 67, 408 -1, 72, -1, 59, 62, 60, -1, -1, 62, 39,
416 45, -1, 67, 66, -1, 67, 55, -1, 67, 1, 409 -1, 62, 61, -1, 62, 50, -1, 6, 71, 30,
417 32, -1, 6, 77, 32, -1, 68, -1, 9, 77, 410 -1, 9, 71, 30, -1, 64, 68, -1, 12, 30,
418 32, -1, 70, 74, -1, 12, 32, -1, 72, 13, 411 -1, 66, 13, -1, -1, 68, 69, -1, 68, 30,
419 -1, -1, 74, 75, -1, 74, 32, -1, 16, 35, 412 -1, 68, 40, -1, 16, 24, 75, 30, -1, 16,
420 81, 32, -1, 16, 81, 32, -1, 17, 81, 32, 413 75, 30, -1, 17, 75, 30, -1, -1, 71, 74,
421 -1, -1, 77, 80, -1, 28, -1, 29, -1, 5, 414 -1, 25, -1, 26, -1, 5, 30, -1, 8, 30,
422 79, -1, 8, 79, -1, 15, 79, -1, 32, -1, 415 -1, 15, 30, -1, 30, -1, 73, 30, -1, -1,
423 31, -1, -1, 14, 81, -1, 82, -1, 82, 40, 416 14, 75, -1, 76, -1, 76, 33, 76, -1, 76,
424 82, -1, 82, 30, 82, -1, 34, 81, 33, -1, 417 27, 76, -1, 29, 75, 28, -1, 34, 75, -1,
425 41, 81, -1, 81, 38, 81, -1, 81, 39, 81, 418 75, 31, 75, -1, 75, 32, 75, -1, 25, -1,
426 -1, 28, -1, 29, -1 419 26, -1
427}; 420};
428 421
429/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 422/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
430static const unsigned short yyrline[] = 423static const unsigned short int yyrline[] =
431{ 424{
432 0, 94, 94, 95, 98, 99, 100, 101, 102, 103, 425 0, 103, 103, 105, 107, 108, 109, 110, 111, 112,
433 104, 105, 109, 110, 111, 112, 113, 114, 120, 128, 426 113, 117, 121, 121, 121, 121, 121, 121, 121, 125,
434 134, 142, 152, 154, 155, 156, 157, 160, 166, 173, 427 126, 127, 128, 129, 130, 134, 135, 141, 149, 155,
435 179, 186, 192, 198, 204, 210, 216, 222, 230, 239, 428 163, 173, 175, 176, 177, 178, 179, 182, 190, 196,
436 245, 254, 255, 261, 263, 264, 265, 266, 269, 275, 429 206, 212, 220, 229, 234, 242, 245, 247, 248, 249,
437 281, 287, 293, 299, 301, 306, 315, 324, 325, 331, 430 250, 251, 254, 260, 271, 277, 287, 289, 294, 302,
438 333, 334, 335, 340, 347, 353, 362, 363, 369, 371, 431 310, 313, 315, 316, 317, 322, 329, 334, 342, 345,
439 372, 373, 374, 377, 383, 390, 397, 404, 410, 417, 432 347, 348, 349, 352, 360, 367, 374, 380, 387, 389,
440 418, 419, 422, 427, 432, 440, 442, 447, 448, 451, 433 390, 391, 394, 399, 404, 412, 414, 419, 420, 423,
441 452, 453, 457, 457, 459, 460, 463, 464, 465, 466, 434 424, 425, 429, 430, 433, 434, 437, 438, 439, 440,
442 467, 468, 469, 472, 473 435 441, 442, 443, 446, 447
443}; 436};
444#endif 437#endif
445 438
@@ -448,67 +441,65 @@ static const unsigned short yyrline[] =
448 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 441 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
449static const char *const yytname[] = 442static const char *const yytname[] =
450{ 443{
451 "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU", 444 "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU",
452 "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG", 445 "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
453 "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS", 446 "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
454 "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_DEFAULT", "T_TRISTATE", 447 "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT",
455 "T_DEF_TRISTATE", "T_BOOLEAN", "T_DEF_BOOLEAN", "T_STRING", "T_INT", 448 "T_SELECT", "T_RANGE", "T_ON", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL",
456 "T_HEX", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL", "T_EOF", "T_EOL", 449 "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND", "T_EQUAL",
457 "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_ON", "T_SELECT", "T_RANGE", "T_OR", 450 "T_NOT", "$accept", "input", "stmt_list", "option_name", "common_stmt",
458 "T_AND", "T_EQUAL", "T_NOT", "$accept", "input", "block", 451 "option_error", "config_entry_start", "config_stmt",
459 "common_block", "config_entry_start", "config_stmt", 452 "menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
460 "menuconfig_entry_start", "menuconfig_stmt", "config_option_list", 453 "config_option", "choice", "choice_entry", "choice_end", "choice_stmt",
461 "config_option", "choice", "choice_entry", "choice_end", "choice_stmt", 454 "choice_option_list", "choice_option", "choice_block", "if_entry",
462 "choice_option_list", "choice_option", "choice_block", "if", "if_end", 455 "if_end", "if_stmt", "if_block", "menu", "menu_entry", "menu_end",
463 "if_stmt", "if_block", "menu", "menu_entry", "menu_end", "menu_stmt", 456 "menu_stmt", "menu_block", "source_stmt", "comment", "comment_stmt",
464 "menu_block", "source", "source_stmt", "comment", "comment_stmt", 457 "help_start", "help", "depends_list", "depends", "prompt_stmt_opt",
465 "help_start", "help", "depends_list", "depends", "prompt_stmt_opt", 458 "prompt", "end", "nl", "if_expr", "expr", "symbol", 0
466 "prompt", "end", "nl_or_eof", "if_expr", "expr", "symbol", 0
467}; 459};
468#endif 460#endif
469 461
470# ifdef YYPRINT 462# ifdef YYPRINT
471/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to 463/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
472 token YYLEX-NUM. */ 464 token YYLEX-NUM. */
473static const unsigned short yytoknum[] = 465static const unsigned short int yytoknum[] =
474{ 466{
475 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 467 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
476 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 468 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
477 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 469 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
478 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 470 285, 286, 287, 288, 289
479 295, 296
480}; 471};
481# endif 472# endif
482 473
483/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 474/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
484static const unsigned char yyr1[] = 475static const unsigned char yyr1[] =
485{ 476{
486 0, 42, 43, 43, 44, 44, 44, 44, 44, 44, 477 0, 35, 36, 37, 37, 37, 37, 37, 37, 37,
487 44, 44, 45, 45, 45, 45, 45, 45, 46, 47, 478 37, 37, 38, 38, 38, 38, 38, 38, 38, 39,
488 48, 49, 50, 50, 50, 50, 50, 51, 51, 51, 479 39, 39, 39, 39, 39, 40, 40, 41, 42, 43,
489 51, 51, 51, 51, 51, 51, 51, 51, 52, 53, 480 44, 45, 45, 45, 45, 45, 45, 46, 46, 46,
490 54, 55, 55, 56, 56, 56, 56, 56, 57, 57, 481 46, 46, 47, 48, 49, 50, 51, 51, 51, 51,
491 57, 57, 57, 58, 58, 59, 60, 61, 61, 62, 482 51, 51, 52, 52, 52, 52, 53, 53, 54, 55,
492 62, 62, 62, 63, 64, 65, 66, 66, 67, 67, 483 56, 57, 57, 57, 57, 58, 59, 60, 61, 62,
493 67, 67, 67, 68, 69, 70, 71, 72, 73, 74, 484 62, 62, 62, 63, 64, 65, 66, 67, 68, 68,
494 74, 74, 75, 75, 75, 76, 76, 77, 77, 78, 485 68, 68, 69, 69, 69, 70, 70, 71, 71, 72,
495 78, 78, 79, 79, 80, 80, 81, 81, 81, 81, 486 72, 72, 73, 73, 74, 74, 75, 75, 75, 75,
496 81, 81, 81, 82, 82 487 75, 75, 75, 76, 76
497}; 488};
498 489
499/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 490/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
500static const unsigned char yyr2[] = 491static const unsigned char yyr2[] =
501{ 492{
502 0, 2, 0, 2, 1, 1, 1, 3, 1, 1, 493 0, 2, 1, 0, 2, 2, 2, 4, 2, 4,
503 1, 2, 1, 1, 1, 1, 1, 1, 3, 2, 494 4, 3, 1, 1, 1, 1, 1, 1, 1, 1,
504 3, 2, 0, 2, 2, 2, 2, 3, 4, 3, 495 1, 1, 1, 1, 1, 3, 2, 3, 2, 3,
505 4, 3, 3, 3, 4, 4, 4, 5, 2, 2, 496 2, 0, 2, 2, 2, 2, 2, 3, 4, 4,
506 1, 3, 2, 0, 2, 2, 2, 2, 4, 3, 497 4, 5, 2, 2, 1, 3, 0, 2, 2, 2,
507 3, 2, 4, 0, 2, 3, 1, 3, 2, 0, 498 2, 2, 4, 3, 2, 4, 0, 2, 3, 1,
508 2, 2, 2, 3, 2, 1, 3, 2, 0, 2, 499 3, 0, 2, 2, 2, 3, 2, 1, 3, 0,
509 2, 2, 3, 3, 1, 3, 2, 2, 2, 0, 500 2, 2, 2, 3, 3, 2, 2, 2, 0, 2,
510 2, 2, 4, 3, 3, 0, 2, 1, 1, 2, 501 2, 2, 4, 3, 3, 0, 2, 1, 1, 2,
511 2, 2, 1, 1, 0, 2, 1, 3, 3, 3, 502 2, 2, 1, 2, 0, 2, 1, 3, 3, 3,
512 2, 3, 3, 1, 1 503 2, 3, 3, 1, 1
513}; 504};
514 505
@@ -517,151 +508,160 @@ static const unsigned char yyr2[] =
517 means the default is an error. */ 508 means the default is an error. */
518static const unsigned char yydefact[] = 509static const unsigned char yydefact[] =
519{ 510{
520 2, 0, 1, 0, 0, 0, 8, 0, 0, 10, 511 3, 0, 0, 1, 0, 0, 0, 0, 0, 0,
521 0, 0, 0, 0, 9, 93, 92, 3, 4, 22, 512 0, 0, 0, 0, 0, 0, 12, 16, 13, 14,
522 14, 22, 15, 43, 53, 5, 59, 12, 79, 68, 513 18, 15, 17, 0, 19, 0, 4, 31, 22, 31,
523 6, 74, 16, 79, 13, 17, 11, 87, 88, 0, 514 23, 46, 56, 5, 61, 20, 78, 69, 6, 24,
524 0, 0, 38, 0, 0, 0, 103, 104, 0, 0, 515 78, 21, 8, 11, 87, 88, 0, 0, 89, 0,
525 0, 96, 19, 21, 39, 42, 58, 64, 0, 76, 516 42, 90, 0, 0, 0, 103, 104, 0, 0, 0,
526 7, 63, 73, 75, 18, 20, 0, 100, 55, 0, 517 96, 91, 0, 0, 0, 0, 0, 0, 0, 0,
527 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 518 0, 0, 92, 7, 65, 73, 74, 27, 29, 0,
528 85, 0, 85, 85, 85, 26, 0, 0, 23, 0, 519 100, 0, 0, 58, 0, 0, 9, 10, 0, 0,
529 25, 24, 0, 0, 0, 85, 85, 47, 44, 46, 520 0, 0, 0, 85, 0, 0, 0, 0, 36, 35,
530 45, 0, 0, 0, 54, 41, 40, 60, 62, 57, 521 32, 0, 34, 33, 0, 0, 85, 0, 50, 51,
531 61, 56, 81, 80, 0, 69, 71, 66, 70, 65, 522 47, 49, 48, 57, 45, 44, 62, 64, 60, 63,
532 99, 101, 102, 98, 97, 77, 0, 0, 0, 94, 523 59, 80, 81, 79, 70, 72, 68, 71, 67, 93,
533 94, 0, 94, 94, 0, 94, 0, 0, 0, 94, 524 99, 101, 102, 98, 97, 26, 76, 0, 0, 0,
534 0, 78, 51, 94, 94, 0, 0, 89, 90, 91, 525 94, 0, 94, 94, 94, 0, 0, 77, 54, 94,
535 72, 0, 83, 84, 0, 0, 0, 27, 86, 0, 526 0, 94, 0, 83, 84, 0, 0, 37, 86, 0,
536 29, 0, 33, 31, 32, 0, 94, 0, 0, 49, 527 0, 94, 25, 0, 53, 0, 82, 95, 38, 39,
537 50, 82, 95, 34, 35, 28, 30, 36, 0, 48, 528 40, 0, 52, 55, 41
538 52, 37
539}; 529};
540 530
541/* YYDEFGOTO[NTERM-NUM]. */ 531/* YYDEFGOTO[NTERM-NUM]. */
542static const short yydefgoto[] = 532static const short int yydefgoto[] =
543{ 533{
544 -1, 1, 17, 18, 19, 20, 21, 22, 52, 88, 534 -1, 1, 2, 25, 26, 99, 27, 28, 29, 30,
545 23, 24, 105, 25, 54, 98, 55, 26, 109, 27, 535 64, 100, 31, 32, 114, 33, 66, 110, 67, 34,
546 56, 28, 29, 117, 30, 58, 31, 32, 33, 34, 536 118, 35, 68, 36, 37, 126, 38, 70, 39, 40,
547 89, 90, 57, 91, 131, 132, 106, 35, 155, 50, 537 41, 101, 102, 69, 103, 141, 142, 42, 73, 156,
548 51 538 59, 60
549}; 539};
550 540
551/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 541/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
552 STATE-NUM. */ 542 STATE-NUM. */
553#define YYPACT_NINF -99 543#define YYPACT_NINF -78
554static const short yypact[] = 544static const short int yypact[] =
555{ 545{
556 -99, 48, -99, 38, 46, 46, -99, 46, -29, -99, 546 -78, 2, 159, -78, -21, 0, 0, -12, 0, 1,
557 46, -17, -3, -11, -99, -99, -99, -99, -99, -99, 547 4, 0, 27, 38, 60, 58, -78, -78, -78, -78,
558 -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, 548 -78, -78, -78, 100, -78, 104, -78, -78, -78, -78,
559 -99, -99, -99, -99, -99, -99, -99, -99, -99, 38, 549 -78, -78, -78, -78, -78, -78, -78, -78, -78, -78,
560 12, 15, -99, 18, 51, 62, -99, -99, -11, -11, 550 -78, -78, -78, -78, -78, -78, 86, 113, -78, 114,
561 4, -24, 138, 138, 160, 121, 110, -4, 81, -4, 551 -78, -78, 125, 127, 128, -78, -78, 60, 60, 210,
562 -99, -99, -99, -99, -99, -99, -19, -99, -99, -11, 552 65, -78, 141, 142, 39, 103, 182, 200, 6, 66,
563 -11, 70, 70, 73, 32, -11, 46, -11, 46, -11, 553 6, 131, -78, 146, -78, -78, -78, -78, -78, 196,
564 46, -11, 46, 46, 46, -99, 36, 70, -99, 95, 554 -78, 60, 60, 146, 40, 40, -78, -78, 155, 156,
565 -99, -99, 96, 46, 106, 46, 46, -99, -99, -99, 555 -2, 60, 0, 0, 60, 105, 40, 194, -78, -78,
566 -99, 38, 38, 38, -99, -99, -99, -99, -99, -99, 556 -78, 206, -78, -78, 183, 0, 0, 195, -78, -78,
567 -99, -99, -99, -99, 112, -99, -99, -99, -99, -99, 557 -78, -78, -78, -78, -78, -78, -78, -78, -78, -78,
568 -99, 117, -99, -99, -99, -99, -11, 33, 65, 131, 558 -78, -78, -78, -78, -78, -78, -78, -78, -78, -78,
569 1, 119, 131, 1, 136, 1, 153, 154, 155, 131, 559 -78, 197, -78, -78, -78, -78, -78, 60, 213, 216,
570 70, -99, -99, 131, 131, 156, 157, -99, -99, -99, 560 212, 203, 212, 190, 212, 40, 208, -78, -78, 212,
571 -99, 101, -99, -99, -11, 158, 159, -99, -99, 161, 561 222, 212, 219, -78, -78, 60, 223, -78, -78, 224,
572 -99, 162, -99, -99, -99, 163, 131, 164, 165, -99, 562 225, 212, -78, 226, -78, 227, -78, 47, -78, -78,
573 -99, -99, 99, -99, -99, -99, -99, -99, 166, -99, 563 -78, 228, -78, -78, -78
574 -99, -99
575}; 564};
576 565
577/* YYPGOTO[NTERM-NUM]. */ 566/* YYPGOTO[NTERM-NUM]. */
578static const short yypgoto[] = 567static const short int yypgoto[] =
579{ 568{
580 -99, -99, -99, 111, -99, -99, -99, -99, 178, -99, 569 -78, -78, -78, -78, 164, -36, -78, -78, -78, -78,
581 -99, -99, -99, 91, -99, -99, -99, -99, -99, -99, 570 230, -78, -78, -78, -78, 29, -78, -78, -78, -78,
582 -99, -99, -99, -99, 115, -99, -99, -99, -99, -99, 571 -78, -78, -78, -78, -78, -78, 59, -78, -78, -78,
583 -99, 146, 168, 89, 27, 0, 126, -1, -98, -48, 572 -78, -78, 198, 220, 24, 157, -5, 169, 202, 74,
584 -63 573 -53, -77
585}; 574};
586 575
587/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 576/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
588 positive, shift that token. If negative, reduce the rule which 577 positive, shift that token. If negative, reduce the rule which
589 number is the opposite. If zero, do what YYDEFACT says. 578 number is the opposite. If zero, do what YYDEFACT says.
590 If YYTABLE_NINF, syntax error. */ 579 If YYTABLE_NINF, syntax error. */
591#define YYTABLE_NINF -68 580#define YYTABLE_NINF -76
592static const short yytable[] = 581static const short int yytable[] =
593{ 582{
594 66, 67, 36, 42, 39, 40, 71, 41, 123, 124, 583 46, 47, 3, 49, 79, 80, 52, 133, 134, 43,
595 43, 44, 74, 75, 120, 154, 72, 46, 47, 69, 584 6, 7, 8, 9, 10, 11, 12, 13, 48, 145,
596 70, 121, 122, 48, 140, 45, 127, 128, 112, 130, 585 14, 15, 137, 55, 56, 44, 45, 57, 131, 132,
597 49, 133, 156, 135, 158, 159, 68, 161, 60, 69, 586 109, 50, 58, 122, 51, 122, 24, 138, 139, -28,
598 70, 165, 69, 70, 61, 167, 168, 62, 2, 3, 587 88, 143, -28, -28, -28, -28, -28, -28, -28, -28,
599 63, 4, 5, 6, 7, 8, 9, 10, 11, 12, 588 -28, 89, 53, -28, -28, 90, 91, -28, 92, 93,
600 46, 47, 13, 14, 139, 152, 48, 126, 178, 15, 589 94, 95, 96, 54, 97, 55, 56, 88, 161, 98,
601 16, 69, 70, 49, 37, 38, 129, 166, 151, 15, 590 -66, -66, -66, -66, -66, -66, -66, -66, 81, 82,
602 16, -67, 114, 64, -67, 5, 101, 7, 8, 102, 591 -66, -66, 90, 91, 152, 55, 56, 140, 61, 57,
603 10, 11, 12, 143, 65, 13, 103, 153, 46, 47, 592 112, 97, 84, 123, 58, 123, 121, 117, 85, 125,
604 147, 148, 149, 69, 70, 125, 172, 134, 141, 136, 593 149, 62, 167, -30, 88, 63, -30, -30, -30, -30,
605 137, 138, 15, 16, 5, 101, 7, 8, 102, 10, 594 -30, -30, -30, -30, -30, 89, 72, -30, -30, 90,
606 11, 12, 145, 146, 13, 103, 101, 7, 142, 102, 595 91, -30, 92, 93, 94, 95, 96, 119, 97, 127,
607 10, 11, 12, 171, 144, 13, 103, 69, 70, 69, 596 144, -75, 88, 98, -75, -75, -75, -75, -75, -75,
608 70, 15, 16, 100, 150, 154, 113, 108, 113, 116, 597 -75, -75, -75, 74, 75, -75, -75, 90, 91, -75,
609 73, 157, 15, 16, 74, 75, 70, 76, 77, 78, 598 -75, -75, -75, -75, -75, 76, 97, 77, 78, -2,
610 79, 80, 81, 82, 83, 84, 104, 107, 160, 115, 599 4, 121, 5, 6, 7, 8, 9, 10, 11, 12,
611 85, 110, 73, 118, 86, 87, 74, 75, 92, 93, 600 13, 86, 87, 14, 15, 16, 129, 17, 18, 19,
612 94, 95, 111, 96, 119, 162, 163, 164, 169, 170, 601 20, 21, 22, 88, 23, 135, 136, -43, -43, 24,
613 173, 174, 97, 175, 176, 177, 179, 180, 181, 53, 602 -43, -43, -43, -43, 89, 146, -43, -43, 90, 91,
614 99, 59 603 104, 105, 106, 107, 155, 7, 8, 97, 10, 11,
604 12, 13, 108, 148, 14, 15, 158, 159, 160, 147,
605 151, 81, 82, 163, 130, 165, 155, 81, 82, 82,
606 24, 113, 116, 157, 124, 171, 115, 120, 162, 128,
607 72, 81, 82, 153, 81, 82, 154, 81, 82, 166,
608 81, 82, 164, 168, 169, 170, 172, 173, 174, 65,
609 71, 83, 0, 150, 111
615}; 610};
616 611
617static const unsigned char yycheck[] = 612static const short int yycheck[] =
618{ 613{
619 48, 49, 3, 32, 4, 5, 30, 7, 71, 72, 614 5, 6, 0, 8, 57, 58, 11, 84, 85, 30,
620 10, 28, 16, 17, 33, 14, 40, 28, 29, 38, 615 4, 5, 6, 7, 8, 9, 10, 11, 30, 96,
621 39, 69, 70, 34, 87, 28, 74, 75, 32, 77, 616 14, 15, 24, 25, 26, 25, 26, 29, 81, 82,
622 41, 79, 130, 81, 132, 133, 32, 135, 39, 38, 617 66, 30, 34, 69, 30, 71, 30, 90, 91, 0,
623 39, 139, 38, 39, 32, 143, 144, 32, 0, 1, 618 1, 94, 3, 4, 5, 6, 7, 8, 9, 10,
624 32, 3, 4, 5, 6, 7, 8, 9, 10, 11, 619 11, 12, 25, 14, 15, 16, 17, 18, 19, 20,
625 28, 29, 14, 15, 28, 32, 34, 35, 166, 31, 620 21, 22, 23, 25, 25, 25, 26, 1, 145, 30,
626 32, 38, 39, 41, 28, 29, 76, 140, 126, 31, 621 4, 5, 6, 7, 8, 9, 10, 11, 31, 32,
627 32, 0, 1, 32, 3, 4, 5, 6, 7, 8, 622 14, 15, 16, 17, 137, 25, 26, 92, 30, 29,
628 9, 10, 11, 93, 32, 14, 15, 32, 28, 29, 623 66, 25, 27, 69, 34, 71, 30, 68, 33, 70,
629 101, 102, 103, 38, 39, 32, 154, 80, 13, 82, 624 105, 1, 155, 0, 1, 1, 3, 4, 5, 6,
630 83, 84, 31, 32, 4, 5, 6, 7, 8, 9, 625 7, 8, 9, 10, 11, 12, 30, 14, 15, 16,
631 10, 11, 95, 96, 14, 15, 5, 6, 32, 8, 626 17, 18, 19, 20, 21, 22, 23, 68, 25, 70,
632 9, 10, 11, 32, 28, 14, 15, 38, 39, 38, 627 25, 0, 1, 30, 3, 4, 5, 6, 7, 8,
633 39, 31, 32, 54, 32, 14, 57, 56, 59, 58, 628 9, 10, 11, 30, 30, 14, 15, 16, 17, 18,
634 12, 32, 31, 32, 16, 17, 39, 19, 20, 21, 629 19, 20, 21, 22, 23, 30, 25, 30, 30, 0,
635 22, 23, 24, 25, 26, 27, 55, 56, 32, 58, 630 1, 30, 3, 4, 5, 6, 7, 8, 9, 10,
636 32, 56, 12, 58, 36, 37, 16, 17, 18, 19, 631 11, 30, 30, 14, 15, 16, 30, 18, 19, 20,
637 20, 21, 56, 23, 58, 32, 32, 32, 32, 32, 632 21, 22, 23, 1, 25, 30, 30, 5, 6, 30,
638 32, 32, 32, 32, 32, 32, 32, 32, 32, 21, 633 8, 9, 10, 11, 12, 1, 14, 15, 16, 17,
639 54, 33 634 18, 19, 20, 21, 14, 5, 6, 25, 8, 9,
635 10, 11, 30, 30, 14, 15, 142, 143, 144, 13,
636 25, 31, 32, 149, 28, 151, 14, 31, 32, 32,
637 30, 67, 68, 30, 70, 161, 67, 68, 30, 70,
638 30, 31, 32, 30, 31, 32, 30, 31, 32, 30,
639 31, 32, 30, 30, 30, 30, 30, 30, 30, 29,
640 40, 59, -1, 106, 66
640}; 641};
641 642
642/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 643/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
643 symbol of state STATE-NUM. */ 644 symbol of state STATE-NUM. */
644static const unsigned char yystos[] = 645static const unsigned char yystos[] =
645{ 646{
646 0, 43, 0, 1, 3, 4, 5, 6, 7, 8, 647 0, 36, 37, 0, 1, 3, 4, 5, 6, 7,
647 9, 10, 11, 14, 15, 31, 32, 44, 45, 46, 648 8, 9, 10, 11, 14, 15, 16, 18, 19, 20,
648 47, 48, 49, 52, 53, 55, 59, 61, 63, 64, 649 21, 22, 23, 25, 30, 38, 39, 41, 42, 43,
649 66, 68, 69, 70, 71, 79, 79, 28, 29, 77, 650 44, 47, 48, 50, 54, 56, 58, 59, 61, 63,
650 77, 77, 32, 77, 28, 28, 28, 29, 34, 41, 651 64, 65, 72, 30, 25, 26, 71, 71, 30, 71,
651 81, 82, 50, 50, 56, 58, 62, 74, 67, 74, 652 30, 30, 71, 25, 25, 25, 26, 29, 34, 75,
652 79, 32, 32, 32, 32, 32, 81, 81, 32, 38, 653 76, 30, 1, 1, 45, 45, 51, 53, 57, 68,
653 39, 30, 40, 12, 16, 17, 19, 20, 21, 22, 654 62, 68, 30, 73, 30, 30, 30, 30, 30, 75,
654 23, 24, 25, 26, 27, 32, 36, 37, 51, 72, 655 75, 31, 32, 73, 27, 33, 30, 30, 1, 12,
655 73, 75, 18, 19, 20, 21, 23, 32, 57, 73, 656 16, 17, 19, 20, 21, 22, 23, 25, 30, 40,
656 75, 5, 8, 15, 45, 54, 78, 45, 55, 60, 657 46, 66, 67, 69, 18, 19, 20, 21, 30, 40,
657 66, 78, 32, 75, 1, 45, 55, 65, 66, 78, 658 52, 67, 69, 39, 49, 72, 39, 50, 55, 61,
658 33, 81, 81, 82, 82, 32, 35, 81, 81, 77, 659 72, 30, 40, 69, 39, 50, 60, 61, 72, 30,
659 81, 76, 77, 81, 76, 81, 76, 76, 76, 28, 660 28, 75, 75, 76, 76, 30, 30, 24, 75, 75,
660 82, 13, 32, 77, 28, 76, 76, 79, 79, 79, 661 71, 70, 71, 75, 25, 76, 1, 13, 30, 71,
661 32, 81, 32, 32, 14, 80, 80, 32, 80, 80, 662 70, 25, 75, 30, 30, 14, 74, 30, 74, 74,
662 32, 80, 32, 32, 32, 80, 82, 80, 80, 32, 663 74, 76, 30, 74, 30, 74, 30, 75, 30, 30,
663 32, 32, 81, 32, 32, 32, 32, 32, 80, 32, 664 30, 74, 30, 30, 30
664 32, 32
665}; 665};
666 666
667#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) 667#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -687,7 +687,7 @@ static const unsigned char yystos[] =
687 687
688#define YYACCEPT goto yyacceptlab 688#define YYACCEPT goto yyacceptlab
689#define YYABORT goto yyabortlab 689#define YYABORT goto yyabortlab
690#define YYERROR goto yyerrlab1 690#define YYERROR goto yyerrorlab
691 691
692 692
693/* Like YYERROR except do call yyerror. This remains here temporarily 693/* Like YYERROR except do call yyerror. This remains here temporarily
@@ -715,20 +715,53 @@ do \
715 } \ 715 } \
716while (0) 716while (0)
717 717
718
718#define YYTERROR 1 719#define YYTERROR 1
719#define YYERRCODE 256 720#define YYERRCODE 256
720 721
721/* YYLLOC_DEFAULT -- Compute the default location (before the actions
722 are run). */
723 722
723/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
724 If N is 0, then set CURRENT to the empty location which ends
725 the previous symbol: RHS[0] (always defined). */
726
727#define YYRHSLOC(Rhs, K) ((Rhs)[K])
724#ifndef YYLLOC_DEFAULT 728#ifndef YYLLOC_DEFAULT
725# define YYLLOC_DEFAULT(Current, Rhs, N) \ 729# define YYLLOC_DEFAULT(Current, Rhs, N) \
726 Current.first_line = Rhs[1].first_line; \ 730 do \
727 Current.first_column = Rhs[1].first_column; \ 731 if (N) \
728 Current.last_line = Rhs[N].last_line; \ 732 { \
729 Current.last_column = Rhs[N].last_column; 733 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
734 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
735 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
736 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
737 } \
738 else \
739 { \
740 (Current).first_line = (Current).last_line = \
741 YYRHSLOC (Rhs, 0).last_line; \
742 (Current).first_column = (Current).last_column = \
743 YYRHSLOC (Rhs, 0).last_column; \
744 } \
745 while (0)
746#endif
747
748
749/* YY_LOCATION_PRINT -- Print the location on the stream.
750 This macro was not mandated originally: define only if we know
751 we won't break user code: when these are the locations we know. */
752
753#ifndef YY_LOCATION_PRINT
754# if YYLTYPE_IS_TRIVIAL
755# define YY_LOCATION_PRINT(File, Loc) \
756 fprintf (File, "%d.%d-%d.%d", \
757 (Loc).first_line, (Loc).first_column, \
758 (Loc).last_line, (Loc).last_column)
759# else
760# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
761# endif
730#endif 762#endif
731 763
764
732/* YYLEX -- calling `yylex' with the right arguments. */ 765/* YYLEX -- calling `yylex' with the right arguments. */
733 766
734#ifdef YYLEX_PARAM 767#ifdef YYLEX_PARAM
@@ -751,36 +784,30 @@ do { \
751 YYFPRINTF Args; \ 784 YYFPRINTF Args; \
752} while (0) 785} while (0)
753 786
754# define YYDSYMPRINT(Args) \ 787# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
755do { \
756 if (yydebug) \
757 yysymprint Args; \
758} while (0)
759
760# define YYDSYMPRINTF(Title, Token, Value, Location) \
761do { \ 788do { \
762 if (yydebug) \ 789 if (yydebug) \
763 { \ 790 { \
764 YYFPRINTF (stderr, "%s ", Title); \ 791 YYFPRINTF (stderr, "%s ", Title); \
765 yysymprint (stderr, \ 792 yysymprint (stderr, \
766 Token, Value); \ 793 Type, Value); \
767 YYFPRINTF (stderr, "\n"); \ 794 YYFPRINTF (stderr, "\n"); \
768 } \ 795 } \
769} while (0) 796} while (0)
770 797
771/*------------------------------------------------------------------. 798/*------------------------------------------------------------------.
772| yy_stack_print -- Print the state stack from its BOTTOM up to its | 799| yy_stack_print -- Print the state stack from its BOTTOM up to its |
773| TOP (cinluded). | 800| TOP (included). |
774`------------------------------------------------------------------*/ 801`------------------------------------------------------------------*/
775 802
776#if defined (__STDC__) || defined (__cplusplus) 803#if defined (__STDC__) || defined (__cplusplus)
777static void 804static void
778yy_stack_print (short *bottom, short *top) 805yy_stack_print (short int *bottom, short int *top)
779#else 806#else
780static void 807static void
781yy_stack_print (bottom, top) 808yy_stack_print (bottom, top)
782 short *bottom; 809 short int *bottom;
783 short *top; 810 short int *top;
784#endif 811#endif
785{ 812{
786 YYFPRINTF (stderr, "Stack now"); 813 YYFPRINTF (stderr, "Stack now");
@@ -810,9 +837,9 @@ yy_reduce_print (yyrule)
810#endif 837#endif
811{ 838{
812 int yyi; 839 int yyi;
813 unsigned int yylineno = yyrline[yyrule]; 840 unsigned int yylno = yyrline[yyrule];
814 YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", 841 YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
815 yyrule - 1, yylineno); 842 yyrule - 1, yylno);
816 /* Print the symbols being reduced, and their result. */ 843 /* Print the symbols being reduced, and their result. */
817 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) 844 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
818 YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); 845 YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
@@ -830,8 +857,7 @@ do { \
830int yydebug; 857int yydebug;
831#else /* !YYDEBUG */ 858#else /* !YYDEBUG */
832# define YYDPRINTF(Args) 859# define YYDPRINTF(Args)
833# define YYDSYMPRINT(Args) 860# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
834# define YYDSYMPRINTF(Title, Token, Value, Location)
835# define YY_STACK_PRINT(Bottom, Top) 861# define YY_STACK_PRINT(Bottom, Top)
836# define YY_REDUCE_PRINT(Rule) 862# define YY_REDUCE_PRINT(Rule)
837#endif /* !YYDEBUG */ 863#endif /* !YYDEBUG */
@@ -849,10 +875,6 @@ int yydebug;
849 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) 875 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
850 evaluated with infinite-precision integer arithmetic. */ 876 evaluated with infinite-precision integer arithmetic. */
851 877
852#if YYMAXDEPTH == 0
853# undef YYMAXDEPTH
854#endif
855
856#ifndef YYMAXDEPTH 878#ifndef YYMAXDEPTH
857# define YYMAXDEPTH 10000 879# define YYMAXDEPTH 10000
858#endif 880#endif
@@ -934,15 +956,15 @@ yysymprint (yyoutput, yytype, yyvaluep)
934 (void) yyvaluep; 956 (void) yyvaluep;
935 957
936 if (yytype < YYNTOKENS) 958 if (yytype < YYNTOKENS)
937 { 959 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
938 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
939# ifdef YYPRINT
940 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
941# endif
942 }
943 else 960 else
944 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); 961 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
945 962
963
964# ifdef YYPRINT
965 if (yytype < YYNTOKENS)
966 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
967# endif
946 switch (yytype) 968 switch (yytype)
947 { 969 {
948 default: 970 default:
@@ -958,10 +980,11 @@ yysymprint (yyoutput, yytype, yyvaluep)
958 980
959#if defined (__STDC__) || defined (__cplusplus) 981#if defined (__STDC__) || defined (__cplusplus)
960static void 982static void
961yydestruct (int yytype, YYSTYPE *yyvaluep) 983yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
962#else 984#else
963static void 985static void
964yydestruct (yytype, yyvaluep) 986yydestruct (yymsg, yytype, yyvaluep)
987 const char *yymsg;
965 int yytype; 988 int yytype;
966 YYSTYPE *yyvaluep; 989 YYSTYPE *yyvaluep;
967#endif 990#endif
@@ -969,8 +992,42 @@ yydestruct (yytype, yyvaluep)
969 /* Pacify ``unused variable'' warnings. */ 992 /* Pacify ``unused variable'' warnings. */
970 (void) yyvaluep; 993 (void) yyvaluep;
971 994
995 if (!yymsg)
996 yymsg = "Deleting";
997 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
998
972 switch (yytype) 999 switch (yytype)
973 { 1000 {
1001 case 48: /* choice_entry */
1002
1003 {
1004 fprintf(stderr, "%s:%d: missing end statement for this entry\n",
1005 (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
1006 if (current_menu == (yyvaluep->menu))
1007 menu_end_menu();
1008};
1009
1010 break;
1011 case 54: /* if_entry */
1012
1013 {
1014 fprintf(stderr, "%s:%d: missing end statement for this entry\n",
1015 (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
1016 if (current_menu == (yyvaluep->menu))
1017 menu_end_menu();
1018};
1019
1020 break;
1021 case 59: /* menu_entry */
1022
1023 {
1024 fprintf(stderr, "%s:%d: missing end statement for this entry\n",
1025 (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
1026 if (current_menu == (yyvaluep->menu))
1027 menu_end_menu();
1028};
1029
1030 break;
974 1031
975 default: 1032 default:
976 break; 1033 break;
@@ -996,10 +1053,10 @@ int yyparse ();
996 1053
997 1054
998 1055
999/* The lookahead symbol. */ 1056/* The look-ahead symbol. */
1000int yychar; 1057int yychar;
1001 1058
1002/* The semantic value of the lookahead symbol. */ 1059/* The semantic value of the look-ahead symbol. */
1003YYSTYPE yylval; 1060YYSTYPE yylval;
1004 1061
1005/* Number of syntax errors so far. */ 1062/* Number of syntax errors so far. */
@@ -1035,7 +1092,7 @@ yyparse ()
1035 int yyresult; 1092 int yyresult;
1036 /* Number of tokens to shift before error messages enabled. */ 1093 /* Number of tokens to shift before error messages enabled. */
1037 int yyerrstatus; 1094 int yyerrstatus;
1038 /* Lookahead token as an internal (translated) token number. */ 1095 /* Look-ahead token as an internal (translated) token number. */
1039 int yytoken = 0; 1096 int yytoken = 0;
1040 1097
1041 /* Three stacks and their tools: 1098 /* Three stacks and their tools:
@@ -1047,9 +1104,9 @@ yyparse ()
1047 to reallocate them elsewhere. */ 1104 to reallocate them elsewhere. */
1048 1105
1049 /* The state stack. */ 1106 /* The state stack. */
1050 short yyssa[YYINITDEPTH]; 1107 short int yyssa[YYINITDEPTH];
1051 short *yyss = yyssa; 1108 short int *yyss = yyssa;
1052 register short *yyssp; 1109 register short int *yyssp;
1053 1110
1054 /* The semantic value stack. */ 1111 /* The semantic value stack. */
1055 YYSTYPE yyvsa[YYINITDEPTH]; 1112 YYSTYPE yyvsa[YYINITDEPTH];
@@ -1086,6 +1143,9 @@ yyparse ()
1086 yyssp = yyss; 1143 yyssp = yyss;
1087 yyvsp = yyvs; 1144 yyvsp = yyvs;
1088 1145
1146
1147 yyvsp[0] = yylval;
1148
1089 goto yysetstate; 1149 goto yysetstate;
1090 1150
1091/*------------------------------------------------------------. 1151/*------------------------------------------------------------.
@@ -1111,7 +1171,7 @@ yyparse ()
1111 these so that the &'s don't force the real ones into 1171 these so that the &'s don't force the real ones into
1112 memory. */ 1172 memory. */
1113 YYSTYPE *yyvs1 = yyvs; 1173 YYSTYPE *yyvs1 = yyvs;
1114 short *yyss1 = yyss; 1174 short int *yyss1 = yyss;
1115 1175
1116 1176
1117 /* Each stack pointer address is followed by the size of the 1177 /* Each stack pointer address is followed by the size of the
@@ -1139,7 +1199,7 @@ yyparse ()
1139 yystacksize = YYMAXDEPTH; 1199 yystacksize = YYMAXDEPTH;
1140 1200
1141 { 1201 {
1142 short *yyss1 = yyss; 1202 short int *yyss1 = yyss;
1143 union yyalloc *yyptr = 1203 union yyalloc *yyptr =
1144 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 1204 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1145 if (! yyptr) 1205 if (! yyptr)
@@ -1175,18 +1235,18 @@ yyparse ()
1175yybackup: 1235yybackup:
1176 1236
1177/* Do appropriate processing given the current state. */ 1237/* Do appropriate processing given the current state. */
1178/* Read a lookahead token if we need one and don't already have one. */ 1238/* Read a look-ahead token if we need one and don't already have one. */
1179/* yyresume: */ 1239/* yyresume: */
1180 1240
1181 /* First try to decide what to do without reference to lookahead token. */ 1241 /* First try to decide what to do without reference to look-ahead token. */
1182 1242
1183 yyn = yypact[yystate]; 1243 yyn = yypact[yystate];
1184 if (yyn == YYPACT_NINF) 1244 if (yyn == YYPACT_NINF)
1185 goto yydefault; 1245 goto yydefault;
1186 1246
1187 /* Not known => get a lookahead token if don't already have one. */ 1247 /* Not known => get a look-ahead token if don't already have one. */
1188 1248
1189 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ 1249 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
1190 if (yychar == YYEMPTY) 1250 if (yychar == YYEMPTY)
1191 { 1251 {
1192 YYDPRINTF ((stderr, "Reading a token: ")); 1252 YYDPRINTF ((stderr, "Reading a token: "));
@@ -1201,7 +1261,7 @@ yybackup:
1201 else 1261 else
1202 { 1262 {
1203 yytoken = YYTRANSLATE (yychar); 1263 yytoken = YYTRANSLATE (yychar);
1204 YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); 1264 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1205 } 1265 }
1206 1266
1207 /* If the proper action on seeing token YYTOKEN is to reduce or to 1267 /* If the proper action on seeing token YYTOKEN is to reduce or to
@@ -1221,8 +1281,8 @@ yybackup:
1221 if (yyn == YYFINAL) 1281 if (yyn == YYFINAL)
1222 YYACCEPT; 1282 YYACCEPT;
1223 1283
1224 /* Shift the lookahead token. */ 1284 /* Shift the look-ahead token. */
1225 YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); 1285 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1226 1286
1227 /* Discard the token being shifted unless it is eof. */ 1287 /* Discard the token being shifted unless it is eof. */
1228 if (yychar != YYEOF) 1288 if (yychar != YYEOF)
@@ -1273,155 +1333,123 @@ yyreduce:
1273 { 1333 {
1274 case 8: 1334 case 8:
1275 1335
1276 { zconfprint("unexpected 'endmenu' statement"); ;} 1336 { zconf_error("unexpected end statement"); ;}
1277 break; 1337 break;
1278 1338
1279 case 9: 1339 case 9:
1280 1340
1281 { zconfprint("unexpected 'endif' statement"); ;} 1341 { zconf_error("unknown statement \"%s\"", (yyvsp[-2].string)); ;}
1282 break; 1342 break;
1283 1343
1284 case 10: 1344 case 10:
1285 1345
1286 { zconfprint("unexpected 'endchoice' statement"); ;} 1346 {
1347 zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[-2].id)->name);
1348;}
1287 break; 1349 break;
1288 1350
1289 case 11: 1351 case 11:
1290 1352
1291 { zconfprint("syntax error"); yyerrok; ;} 1353 { zconf_error("invalid statement"); ;}
1292 break; 1354 break;
1293 1355
1294 case 18: 1356 case 25:
1295 1357
1296 { 1358 { zconf_error("unknown option \"%s\"", (yyvsp[-2].string)); ;}
1297 struct symbol *sym = sym_lookup(yyvsp[-1].string, 0);
1298 sym->flags |= SYMBOL_OPTIONAL;
1299 menu_add_entry(sym);
1300 printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
1301;}
1302 break; 1359 break;
1303 1360
1304 case 19: 1361 case 26:
1305 1362
1306 { 1363 { zconf_error("invalid option"); ;}
1307 menu_end_entry();
1308 printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1309;}
1310 break; 1364 break;
1311 1365
1312 case 20: 1366 case 27:
1313 1367
1314 { 1368 {
1315 struct symbol *sym = sym_lookup(yyvsp[-1].string, 0); 1369 struct symbol *sym = sym_lookup((yyvsp[-1].string), 0);
1316 sym->flags |= SYMBOL_OPTIONAL; 1370 sym->flags |= SYMBOL_OPTIONAL;
1317 menu_add_entry(sym); 1371 menu_add_entry(sym);
1318 printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string); 1372 printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string));
1319;} 1373;}
1320 break; 1374 break;
1321 1375
1322 case 21: 1376 case 28:
1323 1377
1324 { 1378 {
1325 if (current_entry->prompt)
1326 current_entry->prompt->type = P_MENU;
1327 else
1328 zconfprint("warning: menuconfig statement without prompt");
1329 menu_end_entry(); 1379 menu_end_entry();
1330 printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); 1380 printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1331;} 1381;}
1332 break; 1382 break;
1333 1383
1334 case 27:
1335
1336 {
1337 menu_set_type(S_TRISTATE);
1338 printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
1339;}
1340 break;
1341
1342 case 28:
1343
1344 {
1345 menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
1346 menu_set_type(S_TRISTATE);
1347 printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
1348;}
1349 break;
1350
1351 case 29: 1384 case 29:
1352 1385
1353 { 1386 {
1354 menu_set_type(S_BOOLEAN); 1387 struct symbol *sym = sym_lookup((yyvsp[-1].string), 0);
1355 printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno()); 1388 sym->flags |= SYMBOL_OPTIONAL;
1389 menu_add_entry(sym);
1390 printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string));
1356;} 1391;}
1357 break; 1392 break;
1358 1393
1359 case 30: 1394 case 30:
1360 1395
1361 { 1396 {
1362 menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr); 1397 if (current_entry->prompt)
1363 menu_set_type(S_BOOLEAN); 1398 current_entry->prompt->type = P_MENU;
1364 printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno()); 1399 else
1365;} 1400 zconfprint("warning: menuconfig statement without prompt");
1366 break; 1401 menu_end_entry();
1367 1402 printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1368 case 31:
1369
1370 {
1371 menu_set_type(S_INT);
1372 printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno());
1373;}
1374 break;
1375
1376 case 32:
1377
1378 {
1379 menu_set_type(S_HEX);
1380 printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno());
1381;} 1403;}
1382 break; 1404 break;
1383 1405
1384 case 33: 1406 case 37:
1385 1407
1386 { 1408 {
1387 menu_set_type(S_STRING); 1409 menu_set_type((yyvsp[-2].id)->stype);
1388 printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno()); 1410 printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
1411 zconf_curname(), zconf_lineno(),
1412 (yyvsp[-2].id)->stype);
1389;} 1413;}
1390 break; 1414 break;
1391 1415
1392 case 34: 1416 case 38:
1393 1417
1394 { 1418 {
1395 menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr); 1419 menu_add_prompt(P_PROMPT, (yyvsp[-2].string), (yyvsp[-1].expr));
1396 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); 1420 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1397;} 1421;}
1398 break; 1422 break;
1399 1423
1400 case 35: 1424 case 39:
1401 1425
1402 { 1426 {
1403 menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr); 1427 menu_add_expr(P_DEFAULT, (yyvsp[-2].expr), (yyvsp[-1].expr));
1404 printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno()); 1428 if ((yyvsp[-3].id)->stype != S_UNKNOWN)
1429 menu_set_type((yyvsp[-3].id)->stype);
1430 printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
1431 zconf_curname(), zconf_lineno(),
1432 (yyvsp[-3].id)->stype);
1405;} 1433;}
1406 break; 1434 break;
1407 1435
1408 case 36: 1436 case 40:
1409 1437
1410 { 1438 {
1411 menu_add_symbol(P_SELECT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr); 1439 menu_add_symbol(P_SELECT, sym_lookup((yyvsp[-2].string), 0), (yyvsp[-1].expr));
1412 printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno()); 1440 printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
1413;} 1441;}
1414 break; 1442 break;
1415 1443
1416 case 37: 1444 case 41:
1417 1445
1418 { 1446 {
1419 menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,yyvsp[-3].symbol, yyvsp[-2].symbol), yyvsp[-1].expr); 1447 menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,(yyvsp[-3].symbol), (yyvsp[-2].symbol)), (yyvsp[-1].expr));
1420 printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno()); 1448 printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
1421;} 1449;}
1422 break; 1450 break;
1423 1451
1424 case 38: 1452 case 42:
1425 1453
1426 { 1454 {
1427 struct symbol *sym = sym_lookup(NULL, 0); 1455 struct symbol *sym = sym_lookup(NULL, 0);
@@ -1432,57 +1460,45 @@ yyreduce:
1432;} 1460;}
1433 break; 1461 break;
1434 1462
1435 case 39: 1463 case 43:
1436 1464
1437 { 1465 {
1438 menu_end_entry(); 1466 (yyval.menu) = menu_add_menu();
1439 menu_add_menu();
1440;} 1467;}
1441 break; 1468 break;
1442 1469
1443 case 40: 1470 case 44:
1444 1471
1445 { 1472 {
1446 if (zconf_endtoken(yyvsp[0].token, T_CHOICE, T_ENDCHOICE)) { 1473 if (zconf_endtoken((yyvsp[0].id), T_CHOICE, T_ENDCHOICE)) {
1447 menu_end_menu(); 1474 menu_end_menu();
1448 printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno()); 1475 printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
1449 } 1476 }
1450;} 1477;}
1451 break; 1478 break;
1452 1479
1453 case 42: 1480 case 52:
1454
1455 {
1456 printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno);
1457 zconfnerrs++;
1458;}
1459 break;
1460
1461 case 48:
1462 1481
1463 { 1482 {
1464 menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr); 1483 menu_add_prompt(P_PROMPT, (yyvsp[-2].string), (yyvsp[-1].expr));
1465 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); 1484 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1466;} 1485;}
1467 break; 1486 break;
1468 1487
1469 case 49: 1488 case 53:
1470 1489
1471 { 1490 {
1472 menu_set_type(S_TRISTATE); 1491 if ((yyvsp[-2].id)->stype == S_BOOLEAN || (yyvsp[-2].id)->stype == S_TRISTATE) {
1473 printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno()); 1492 menu_set_type((yyvsp[-2].id)->stype);
1493 printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
1494 zconf_curname(), zconf_lineno(),
1495 (yyvsp[-2].id)->stype);
1496 } else
1497 YYERROR;
1474;} 1498;}
1475 break; 1499 break;
1476 1500
1477 case 50: 1501 case 54:
1478
1479 {
1480 menu_set_type(S_BOOLEAN);
1481 printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
1482;}
1483 break;
1484
1485 case 51:
1486 1502
1487 { 1503 {
1488 current_entry->sym->flags |= SYMBOL_OPTIONAL; 1504 current_entry->sym->flags |= SYMBOL_OPTIONAL;
@@ -1490,115 +1506,89 @@ yyreduce:
1490;} 1506;}
1491 break; 1507 break;
1492 1508
1493 case 52: 1509 case 55:
1494 1510
1495 { 1511 {
1496 menu_add_symbol(P_DEFAULT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr); 1512 if ((yyvsp[-3].id)->stype == S_UNKNOWN) {
1497 printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno()); 1513 menu_add_symbol(P_DEFAULT, sym_lookup((yyvsp[-2].string), 0), (yyvsp[-1].expr));
1514 printd(DEBUG_PARSE, "%s:%d:default\n",
1515 zconf_curname(), zconf_lineno());
1516 } else
1517 YYERROR;
1498;} 1518;}
1499 break; 1519 break;
1500 1520
1501 case 55: 1521 case 58:
1502 1522
1503 { 1523 {
1504 printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno()); 1524 printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
1505 menu_add_entry(NULL); 1525 menu_add_entry(NULL);
1506 menu_add_dep(yyvsp[-1].expr); 1526 menu_add_dep((yyvsp[-1].expr));
1507 menu_end_entry(); 1527 (yyval.menu) = menu_add_menu();
1508 menu_add_menu();
1509;} 1528;}
1510 break; 1529 break;
1511 1530
1512 case 56: 1531 case 59:
1513 1532
1514 { 1533 {
1515 if (zconf_endtoken(yyvsp[0].token, T_IF, T_ENDIF)) { 1534 if (zconf_endtoken((yyvsp[0].id), T_IF, T_ENDIF)) {
1516 menu_end_menu(); 1535 menu_end_menu();
1517 printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno()); 1536 printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
1518 } 1537 }
1519;} 1538;}
1520 break; 1539 break;
1521 1540
1522 case 58: 1541 case 65:
1523
1524 {
1525 printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno);
1526 zconfnerrs++;
1527;}
1528 break;
1529
1530 case 63:
1531 1542
1532 { 1543 {
1533 menu_add_entry(NULL); 1544 menu_add_entry(NULL);
1534 menu_add_prompt(P_MENU, yyvsp[-1].string, NULL); 1545 menu_add_prompt(P_MENU, (yyvsp[-1].string), NULL);
1535 printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno()); 1546 printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
1536;} 1547;}
1537 break; 1548 break;
1538 1549
1539 case 64: 1550 case 66:
1540 1551
1541 { 1552 {
1542 menu_end_entry(); 1553 (yyval.menu) = menu_add_menu();
1543 menu_add_menu();
1544;} 1554;}
1545 break; 1555 break;
1546 1556
1547 case 65: 1557 case 67:
1548 1558
1549 { 1559 {
1550 if (zconf_endtoken(yyvsp[0].token, T_MENU, T_ENDMENU)) { 1560 if (zconf_endtoken((yyvsp[0].id), T_MENU, T_ENDMENU)) {
1551 menu_end_menu(); 1561 menu_end_menu();
1552 printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno()); 1562 printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
1553 } 1563 }
1554;} 1564;}
1555 break; 1565 break;
1556 1566
1557 case 67:
1558
1559 {
1560 printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno);
1561 zconfnerrs++;
1562;}
1563 break;
1564
1565 case 72:
1566
1567 { zconfprint("invalid menu option"); yyerrok; ;}
1568 break;
1569
1570 case 73: 1567 case 73:
1571 1568
1572 { 1569 {
1573 yyval.string = yyvsp[-1].string; 1570 printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string));
1574 printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string); 1571 zconf_nextfile((yyvsp[-1].string));
1575;} 1572;}
1576 break; 1573 break;
1577 1574
1578 case 74: 1575 case 74:
1579 1576
1580 { 1577 {
1581 zconf_nextfile(yyvsp[0].string);
1582;}
1583 break;
1584
1585 case 75:
1586
1587 {
1588 menu_add_entry(NULL); 1578 menu_add_entry(NULL);
1589 menu_add_prompt(P_COMMENT, yyvsp[-1].string, NULL); 1579 menu_add_prompt(P_COMMENT, (yyvsp[-1].string), NULL);
1590 printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno()); 1580 printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
1591;} 1581;}
1592 break; 1582 break;
1593 1583
1594 case 76: 1584 case 75:
1595 1585
1596 { 1586 {
1597 menu_end_entry(); 1587 menu_end_entry();
1598;} 1588;}
1599 break; 1589 break;
1600 1590
1601 case 77: 1591 case 76:
1602 1592
1603 { 1593 {
1604 printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno()); 1594 printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
@@ -1606,17 +1596,17 @@ yyreduce:
1606;} 1596;}
1607 break; 1597 break;
1608 1598
1609 case 78: 1599 case 77:
1610 1600
1611 { 1601 {
1612 current_entry->sym->help = yyvsp[0].string; 1602 current_entry->sym->help = (yyvsp[0].string);
1613;} 1603;}
1614 break; 1604 break;
1615 1605
1616 case 82: 1606 case 82:
1617 1607
1618 { 1608 {
1619 menu_add_dep(yyvsp[-1].expr); 1609 menu_add_dep((yyvsp[-1].expr));
1620 printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno()); 1610 printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
1621;} 1611;}
1622 break; 1612 break;
@@ -1624,7 +1614,7 @@ yyreduce:
1624 case 83: 1614 case 83:
1625 1615
1626 { 1616 {
1627 menu_add_dep(yyvsp[-1].expr); 1617 menu_add_dep((yyvsp[-1].expr));
1628 printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno()); 1618 printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno());
1629;} 1619;}
1630 break; 1620 break;
@@ -1632,7 +1622,7 @@ yyreduce:
1632 case 84: 1622 case 84:
1633 1623
1634 { 1624 {
1635 menu_add_dep(yyvsp[-1].expr); 1625 menu_add_dep((yyvsp[-1].expr));
1636 printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno()); 1626 printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno());
1637;} 1627;}
1638 break; 1628 break;
@@ -1640,84 +1630,84 @@ yyreduce:
1640 case 86: 1630 case 86:
1641 1631
1642 { 1632 {
1643 menu_add_prompt(P_PROMPT, yyvsp[-1].string, yyvsp[0].expr); 1633 menu_add_prompt(P_PROMPT, (yyvsp[-1].string), (yyvsp[0].expr));
1644;} 1634;}
1645 break; 1635 break;
1646 1636
1647 case 89: 1637 case 89:
1648 1638
1649 { yyval.token = T_ENDMENU; ;} 1639 { (yyval.id) = (yyvsp[-1].id); ;}
1650 break; 1640 break;
1651 1641
1652 case 90: 1642 case 90:
1653 1643
1654 { yyval.token = T_ENDCHOICE; ;} 1644 { (yyval.id) = (yyvsp[-1].id); ;}
1655 break; 1645 break;
1656 1646
1657 case 91: 1647 case 91:
1658 1648
1659 { yyval.token = T_ENDIF; ;} 1649 { (yyval.id) = (yyvsp[-1].id); ;}
1660 break; 1650 break;
1661 1651
1662 case 94: 1652 case 94:
1663 1653
1664 { yyval.expr = NULL; ;} 1654 { (yyval.expr) = NULL; ;}
1665 break; 1655 break;
1666 1656
1667 case 95: 1657 case 95:
1668 1658
1669 { yyval.expr = yyvsp[0].expr; ;} 1659 { (yyval.expr) = (yyvsp[0].expr); ;}
1670 break; 1660 break;
1671 1661
1672 case 96: 1662 case 96:
1673 1663
1674 { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); ;} 1664 { (yyval.expr) = expr_alloc_symbol((yyvsp[0].symbol)); ;}
1675 break; 1665 break;
1676 1666
1677 case 97: 1667 case 97:
1678 1668
1679 { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;} 1669 { (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[-2].symbol), (yyvsp[0].symbol)); ;}
1680 break; 1670 break;
1681 1671
1682 case 98: 1672 case 98:
1683 1673
1684 { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;} 1674 { (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[-2].symbol), (yyvsp[0].symbol)); ;}
1685 break; 1675 break;
1686 1676
1687 case 99: 1677 case 99:
1688 1678
1689 { yyval.expr = yyvsp[-1].expr; ;} 1679 { (yyval.expr) = (yyvsp[-1].expr); ;}
1690 break; 1680 break;
1691 1681
1692 case 100: 1682 case 100:
1693 1683
1694 { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); ;} 1684 { (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[0].expr)); ;}
1695 break; 1685 break;
1696 1686
1697 case 101: 1687 case 101:
1698 1688
1699 { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); ;} 1689 { (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
1700 break; 1690 break;
1701 1691
1702 case 102: 1692 case 102:
1703 1693
1704 { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); ;} 1694 { (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
1705 break; 1695 break;
1706 1696
1707 case 103: 1697 case 103:
1708 1698
1709 { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;} 1699 { (yyval.symbol) = sym_lookup((yyvsp[0].string), 0); free((yyvsp[0].string)); ;}
1710 break; 1700 break;
1711 1701
1712 case 104: 1702 case 104:
1713 1703
1714 { yyval.symbol = sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); ;} 1704 { (yyval.symbol) = sym_lookup((yyvsp[0].string), 1); free((yyvsp[0].string)); ;}
1715 break; 1705 break;
1716 1706
1717 1707
1718 } 1708 }
1719 1709
1720/* Line 999 of yacc.c. */ 1710/* Line 1037 of yacc.c. */
1721 1711
1722 1712
1723 yyvsp -= yylen; 1713 yyvsp -= yylen;
@@ -1759,18 +1749,33 @@ yyerrlab:
1759 { 1749 {
1760 YYSIZE_T yysize = 0; 1750 YYSIZE_T yysize = 0;
1761 int yytype = YYTRANSLATE (yychar); 1751 int yytype = YYTRANSLATE (yychar);
1752 const char* yyprefix;
1762 char *yymsg; 1753 char *yymsg;
1763 int yyx, yycount; 1754 int yyx;
1764 1755
1765 yycount = 0;
1766 /* Start YYX at -YYN if negative to avoid negative indexes in 1756 /* Start YYX at -YYN if negative to avoid negative indexes in
1767 YYCHECK. */ 1757 YYCHECK. */
1768 for (yyx = yyn < 0 ? -yyn : 0; 1758 int yyxbegin = yyn < 0 ? -yyn : 0;
1769 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) 1759
1760 /* Stay within bounds of both yycheck and yytname. */
1761 int yychecklim = YYLAST - yyn;
1762 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1763 int yycount = 0;
1764
1765 yyprefix = ", expecting ";
1766 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1770 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) 1767 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1771 yysize += yystrlen (yytname[yyx]) + 15, yycount++; 1768 {
1772 yysize += yystrlen ("syntax error, unexpected ") + 1; 1769 yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
1773 yysize += yystrlen (yytname[yytype]); 1770 yycount += 1;
1771 if (yycount == 5)
1772 {
1773 yysize = 0;
1774 break;
1775 }
1776 }
1777 yysize += (sizeof ("syntax error, unexpected ")
1778 + yystrlen (yytname[yytype]));
1774 yymsg = (char *) YYSTACK_ALLOC (yysize); 1779 yymsg = (char *) YYSTACK_ALLOC (yysize);
1775 if (yymsg != 0) 1780 if (yymsg != 0)
1776 { 1781 {
@@ -1779,16 +1784,13 @@ yyerrlab:
1779 1784
1780 if (yycount < 5) 1785 if (yycount < 5)
1781 { 1786 {
1782 yycount = 0; 1787 yyprefix = ", expecting ";
1783 for (yyx = yyn < 0 ? -yyn : 0; 1788 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1784 yyx < (int) (sizeof (yytname) / sizeof (char *));
1785 yyx++)
1786 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) 1789 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1787 { 1790 {
1788 const char *yyq = ! yycount ? ", expecting " : " or "; 1791 yyp = yystpcpy (yyp, yyprefix);
1789 yyp = yystpcpy (yyp, yyq);
1790 yyp = yystpcpy (yyp, yytname[yyx]); 1792 yyp = yystpcpy (yyp, yytname[yyx]);
1791 yycount++; 1793 yyprefix = " or ";
1792 } 1794 }
1793 } 1795 }
1794 yyerror (yymsg); 1796 yyerror (yymsg);
@@ -1806,38 +1808,57 @@ yyerrlab:
1806 1808
1807 if (yyerrstatus == 3) 1809 if (yyerrstatus == 3)
1808 { 1810 {
1809 /* If just tried and failed to reuse lookahead token after an 1811 /* If just tried and failed to reuse look-ahead token after an
1810 error, discard it. */ 1812 error, discard it. */
1811 1813
1812 /* Return failure if at end of input. */ 1814 if (yychar <= YYEOF)
1813 if (yychar == YYEOF)
1814 { 1815 {
1815 /* Pop the error token. */ 1816 /* If at end of input, pop the error token,
1816 YYPOPSTACK; 1817 then the rest of the stack, then return failure. */
1817 /* Pop the rest of the stack. */ 1818 if (yychar == YYEOF)
1818 while (yyss < yyssp) 1819 for (;;)
1819 { 1820 {
1820 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); 1821
1821 yydestruct (yystos[*yyssp], yyvsp); 1822 YYPOPSTACK;
1822 YYPOPSTACK; 1823 if (yyssp == yyss)
1823 } 1824 YYABORT;
1824 YYABORT; 1825 yydestruct ("Error: popping",
1826 yystos[*yyssp], yyvsp);
1827 }
1825 } 1828 }
1826 1829 else
1827 YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); 1830 {
1828 yydestruct (yytoken, &yylval); 1831 yydestruct ("Error: discarding", yytoken, &yylval);
1829 yychar = YYEMPTY; 1832 yychar = YYEMPTY;
1830 1833 }
1831 } 1834 }
1832 1835
1833 /* Else will try to reuse lookahead token after shifting the error 1836 /* Else will try to reuse look-ahead token after shifting the error
1834 token. */ 1837 token. */
1835 goto yyerrlab1; 1838 goto yyerrlab1;
1836 1839
1837 1840
1838/*----------------------------------------------------. 1841/*---------------------------------------------------.
1839| yyerrlab1 -- error raised explicitly by an action. | 1842| yyerrorlab -- error raised explicitly by YYERROR. |
1840`----------------------------------------------------*/ 1843`---------------------------------------------------*/
1844yyerrorlab:
1845
1846#ifdef __GNUC__
1847 /* Pacify GCC when the user code never invokes YYERROR and the label
1848 yyerrorlab therefore never appears in user code. */
1849 if (0)
1850 goto yyerrorlab;
1851#endif
1852
1853yyvsp -= yylen;
1854 yyssp -= yylen;
1855 yystate = *yyssp;
1856 goto yyerrlab1;
1857
1858
1859/*-------------------------------------------------------------.
1860| yyerrlab1 -- common code for both syntax error and YYERROR. |
1861`-------------------------------------------------------------*/
1841yyerrlab1: 1862yyerrlab1:
1842 yyerrstatus = 3; /* Each real token shifted decrements this. */ 1863 yyerrstatus = 3; /* Each real token shifted decrements this. */
1843 1864
@@ -1859,22 +1880,22 @@ yyerrlab1:
1859 if (yyssp == yyss) 1880 if (yyssp == yyss)
1860 YYABORT; 1881 YYABORT;
1861 1882
1862 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1863 yydestruct (yystos[yystate], yyvsp);
1864 yyvsp--;
1865 yystate = *--yyssp;
1866 1883
1884 yydestruct ("Error: popping", yystos[yystate], yyvsp);
1885 YYPOPSTACK;
1886 yystate = *yyssp;
1867 YY_STACK_PRINT (yyss, yyssp); 1887 YY_STACK_PRINT (yyss, yyssp);
1868 } 1888 }
1869 1889
1870 if (yyn == YYFINAL) 1890 if (yyn == YYFINAL)
1871 YYACCEPT; 1891 YYACCEPT;
1872 1892
1873 YYDPRINTF ((stderr, "Shifting error token, "));
1874
1875 *++yyvsp = yylval; 1893 *++yyvsp = yylval;
1876 1894
1877 1895
1896 /* Shift the error token. */
1897 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
1898
1878 yystate = yyn; 1899 yystate = yyn;
1879 goto yynewstate; 1900 goto yynewstate;
1880 1901
@@ -1890,6 +1911,9 @@ yyacceptlab:
1890| yyabortlab -- YYABORT comes here. | 1911| yyabortlab -- YYABORT comes here. |
1891`-----------------------------------*/ 1912`-----------------------------------*/
1892yyabortlab: 1913yyabortlab:
1914 yydestruct ("Error: discarding lookahead",
1915 yytoken, &yylval);
1916 yychar = YYEMPTY;
1893 yyresult = 1; 1917 yyresult = 1;
1894 goto yyreturn; 1918 goto yyreturn;
1895 1919
@@ -1927,16 +1951,16 @@ void conf_parse(const char *name)
1927 modules_sym = sym_lookup("MODULES", 0); 1951 modules_sym = sym_lookup("MODULES", 0);
1928 rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL); 1952 rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
1929 1953
1930 //zconfdebug = 1; 1954#if YYDEBUG
1955 if (getenv("ZCONF_DEBUG"))
1956 zconfdebug = 1;
1957#endif
1931 zconfparse(); 1958 zconfparse();
1932 if (zconfnerrs) 1959 if (zconfnerrs)
1933 exit(1); 1960 exit(1);
1934 menu_finalize(&rootmenu); 1961 menu_finalize(&rootmenu);
1935 for_all_symbols(i, sym) { 1962 for_all_symbols(i, sym) {
1936 if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym)) 1963 sym_check_deps(sym);
1937 printf("\n");
1938 else
1939 sym->flags |= SYMBOL_CHECK_DONE;
1940 } 1964 }
1941 1965
1942 sym_change_count = 1; 1966 sym_change_count = 1;
@@ -1951,20 +1975,25 @@ const char *zconf_tokenname(int token)
1951 case T_ENDCHOICE: return "endchoice"; 1975 case T_ENDCHOICE: return "endchoice";
1952 case T_IF: return "if"; 1976 case T_IF: return "if";
1953 case T_ENDIF: return "endif"; 1977 case T_ENDIF: return "endif";
1978 case T_DEPENDS: return "depends";
1954 } 1979 }
1955 return "<token>"; 1980 return "<token>";
1956} 1981}
1957 1982
1958static bool zconf_endtoken(int token, int starttoken, int endtoken) 1983static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
1959{ 1984{
1960 if (token != endtoken) { 1985 if (id->token != endtoken) {
1961 zconfprint("unexpected '%s' within %s block", zconf_tokenname(token), zconf_tokenname(starttoken)); 1986 zconf_error("unexpected '%s' within %s block",
1987 kconf_id_strings + id->name, zconf_tokenname(starttoken));
1962 zconfnerrs++; 1988 zconfnerrs++;
1963 return false; 1989 return false;
1964 } 1990 }
1965 if (current_menu->file != current_file) { 1991 if (current_menu->file != current_file) {
1966 zconfprint("'%s' in different file than '%s'", zconf_tokenname(token), zconf_tokenname(starttoken)); 1992 zconf_error("'%s' in different file than '%s'",
1967 zconfprint("location of the '%s'", zconf_tokenname(starttoken)); 1993 kconf_id_strings + id->name, zconf_tokenname(starttoken));
1994 fprintf(stderr, "%s:%d: location of the '%s'\n",
1995 current_menu->file->name, current_menu->lineno,
1996 zconf_tokenname(starttoken));
1968 zconfnerrs++; 1997 zconfnerrs++;
1969 return false; 1998 return false;
1970 } 1999 }
@@ -1975,7 +2004,19 @@ static void zconfprint(const char *err, ...)
1975{ 2004{
1976 va_list ap; 2005 va_list ap;
1977 2006
1978 fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1); 2007 fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
2008 va_start(ap, err);
2009 vfprintf(stderr, err, ap);
2010 va_end(ap);
2011 fprintf(stderr, "\n");
2012}
2013
2014static void zconf_error(const char *err, ...)
2015{
2016 va_list ap;
2017
2018 zconfnerrs++;
2019 fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
1979 va_start(ap, err); 2020 va_start(ap, err);
1980 vfprintf(stderr, err, ap); 2021 vfprintf(stderr, err, ap);
1981 va_end(ap); 2022 va_end(ap);
@@ -1984,7 +2025,9 @@ static void zconfprint(const char *err, ...)
1984 2025
1985static void zconferror(const char *err) 2026static void zconferror(const char *err)
1986{ 2027{
2028#if YYDEBUG
1987 fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err); 2029 fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
2030#endif
1988} 2031}
1989 2032
1990void print_quoted_string(FILE *out, const char *str) 2033void print_quoted_string(FILE *out, const char *str)
diff --git a/scripts/kconfig/zconf.tab.h_shipped b/scripts/kconfig/zconf.tab.h_shipped
deleted file mode 100644
index 3b191ef59985..000000000000
--- a/scripts/kconfig/zconf.tab.h_shipped
+++ /dev/null
@@ -1,125 +0,0 @@
1/* A Bison parser, made from zconf.y, by GNU bison 1.75. */
2
3/* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
25
26#ifndef BISON_ZCONF_TAB_H
27# define BISON_ZCONF_TAB_H
28
29/* Tokens. */
30#ifndef YYTOKENTYPE
31# define YYTOKENTYPE
32 /* Put the tokens into the symbol table, so that GDB and other debuggers
33 know about them. */
34 enum yytokentype {
35 T_MAINMENU = 258,
36 T_MENU = 259,
37 T_ENDMENU = 260,
38 T_SOURCE = 261,
39 T_CHOICE = 262,
40 T_ENDCHOICE = 263,
41 T_COMMENT = 264,
42 T_CONFIG = 265,
43 T_HELP = 266,
44 T_HELPTEXT = 267,
45 T_IF = 268,
46 T_ENDIF = 269,
47 T_DEPENDS = 270,
48 T_REQUIRES = 271,
49 T_OPTIONAL = 272,
50 T_PROMPT = 273,
51 T_DEFAULT = 274,
52 T_TRISTATE = 275,
53 T_BOOLEAN = 276,
54 T_INT = 277,
55 T_HEX = 278,
56 T_WORD = 279,
57 T_STRING = 280,
58 T_UNEQUAL = 281,
59 T_EOF = 282,
60 T_EOL = 283,
61 T_CLOSE_PAREN = 284,
62 T_OPEN_PAREN = 285,
63 T_ON = 286,
64 T_OR = 287,
65 T_AND = 288,
66 T_EQUAL = 289,
67 T_NOT = 290
68 };
69#endif
70#define T_MAINMENU 258
71#define T_MENU 259
72#define T_ENDMENU 260
73#define T_SOURCE 261
74#define T_CHOICE 262
75#define T_ENDCHOICE 263
76#define T_COMMENT 264
77#define T_CONFIG 265
78#define T_HELP 266
79#define T_HELPTEXT 267
80#define T_IF 268
81#define T_ENDIF 269
82#define T_DEPENDS 270
83#define T_REQUIRES 271
84#define T_OPTIONAL 272
85#define T_PROMPT 273
86#define T_DEFAULT 274
87#define T_TRISTATE 275
88#define T_BOOLEAN 276
89#define T_INT 277
90#define T_HEX 278
91#define T_WORD 279
92#define T_STRING 280
93#define T_UNEQUAL 281
94#define T_EOF 282
95#define T_EOL 283
96#define T_CLOSE_PAREN 284
97#define T_OPEN_PAREN 285
98#define T_ON 286
99#define T_OR 287
100#define T_AND 288
101#define T_EQUAL 289
102#define T_NOT 290
103
104
105
106
107#ifndef YYSTYPE
108#line 33 "zconf.y"
109typedef union {
110 int token;
111 char *string;
112 struct symbol *symbol;
113 struct expr *expr;
114 struct menu *menu;
115} yystype;
116/* Line 1281 of /usr/share/bison/yacc.c. */
117#line 118 "zconf.tab.h"
118# define YYSTYPE yystype
119#endif
120
121extern YYSTYPE zconflval;
122
123
124#endif /* not BISON_ZCONF_TAB_H */
125
diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y
index e1a0f455d4a8..1f61fba6aa28 100644
--- a/scripts/kconfig/zconf.y
+++ b/scripts/kconfig/zconf.y
@@ -11,6 +11,11 @@
11#include <string.h> 11#include <string.h>
12#include <stdbool.h> 12#include <stdbool.h>
13 13
14#define LKC_DIRECT_LINK
15#include "lkc.h"
16
17#include "zconf.hash.c"
18
14#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt) 19#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
15 20
16#define PRINTD 0x0001 21#define PRINTD 0x0001
@@ -20,61 +25,59 @@ int cdebug = PRINTD;
20 25
21extern int zconflex(void); 26extern int zconflex(void);
22static void zconfprint(const char *err, ...); 27static void zconfprint(const char *err, ...);
28static void zconf_error(const char *err, ...);
23static void zconferror(const char *err); 29static void zconferror(const char *err);
24static bool zconf_endtoken(int token, int starttoken, int endtoken); 30static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
25 31
26struct symbol *symbol_hash[257]; 32struct symbol *symbol_hash[257];
27 33
28static struct menu *current_menu, *current_entry; 34static struct menu *current_menu, *current_entry;
29 35
36#define YYDEBUG 0
37#if YYDEBUG
30#define YYERROR_VERBOSE 38#define YYERROR_VERBOSE
39#endif
31%} 40%}
32%expect 40 41%expect 26
33 42
34%union 43%union
35{ 44{
36 int token;
37 char *string; 45 char *string;
46 struct file *file;
38 struct symbol *symbol; 47 struct symbol *symbol;
39 struct expr *expr; 48 struct expr *expr;
40 struct menu *menu; 49 struct menu *menu;
50 struct kconf_id *id;
41} 51}
42 52
43%token T_MAINMENU 53%token <id>T_MAINMENU
44%token T_MENU 54%token <id>T_MENU
45%token T_ENDMENU 55%token <id>T_ENDMENU
46%token T_SOURCE 56%token <id>T_SOURCE
47%token T_CHOICE 57%token <id>T_CHOICE
48%token T_ENDCHOICE 58%token <id>T_ENDCHOICE
49%token T_COMMENT 59%token <id>T_COMMENT
50%token T_CONFIG 60%token <id>T_CONFIG
51%token T_MENUCONFIG 61%token <id>T_MENUCONFIG
52%token T_HELP 62%token <id>T_HELP
53%token <string> T_HELPTEXT 63%token <string> T_HELPTEXT
54%token T_IF 64%token <id>T_IF
55%token T_ENDIF 65%token <id>T_ENDIF
56%token T_DEPENDS 66%token <id>T_DEPENDS
57%token T_REQUIRES 67%token <id>T_REQUIRES
58%token T_OPTIONAL 68%token <id>T_OPTIONAL
59%token T_PROMPT 69%token <id>T_PROMPT
60%token T_DEFAULT 70%token <id>T_TYPE
61%token T_TRISTATE 71%token <id>T_DEFAULT
62%token T_DEF_TRISTATE 72%token <id>T_SELECT
63%token T_BOOLEAN 73%token <id>T_RANGE
64%token T_DEF_BOOLEAN 74%token <id>T_ON
65%token T_STRING
66%token T_INT
67%token T_HEX
68%token <string> T_WORD 75%token <string> T_WORD
69%token <string> T_WORD_QUOTE 76%token <string> T_WORD_QUOTE
70%token T_UNEQUAL 77%token T_UNEQUAL
71%token T_EOF
72%token T_EOL
73%token T_CLOSE_PAREN 78%token T_CLOSE_PAREN
74%token T_OPEN_PAREN 79%token T_OPEN_PAREN
75%token T_ON 80%token T_EOL
76%token T_SELECT
77%token T_RANGE
78 81
79%left T_OR 82%left T_OR
80%left T_AND 83%left T_AND
@@ -82,38 +85,54 @@ static struct menu *current_menu, *current_entry;
82%nonassoc T_NOT 85%nonassoc T_NOT
83 86
84%type <string> prompt 87%type <string> prompt
85%type <string> source
86%type <symbol> symbol 88%type <symbol> symbol
87%type <expr> expr 89%type <expr> expr
88%type <expr> if_expr 90%type <expr> if_expr
89%type <token> end 91%type <id> end
92%type <id> option_name
93%type <menu> if_entry menu_entry choice_entry
94
95%destructor {
96 fprintf(stderr, "%s:%d: missing end statement for this entry\n",
97 $$->file->name, $$->lineno);
98 if (current_menu == $$)
99 menu_end_menu();
100} if_entry menu_entry choice_entry
90 101
91%{
92#define LKC_DIRECT_LINK
93#include "lkc.h"
94%}
95%% 102%%
96input: /* empty */ 103input: stmt_list;
97 | input block 104
105stmt_list:
106 /* empty */
107 | stmt_list common_stmt
108 | stmt_list choice_stmt
109 | stmt_list menu_stmt
110 | stmt_list T_MAINMENU prompt nl
111 | stmt_list end { zconf_error("unexpected end statement"); }
112 | stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); }
113 | stmt_list option_name error T_EOL
114{
115 zconf_error("unexpected option \"%s\"", kconf_id_strings + $2->name);
116}
117 | stmt_list error T_EOL { zconf_error("invalid statement"); }
98; 118;
99 119
100block: common_block 120option_name:
101 | choice_stmt 121 T_DEPENDS | T_PROMPT | T_TYPE | T_SELECT | T_OPTIONAL | T_RANGE | T_DEFAULT
102 | menu_stmt
103 | T_MAINMENU prompt nl_or_eof
104 | T_ENDMENU { zconfprint("unexpected 'endmenu' statement"); }
105 | T_ENDIF { zconfprint("unexpected 'endif' statement"); }
106 | T_ENDCHOICE { zconfprint("unexpected 'endchoice' statement"); }
107 | error nl_or_eof { zconfprint("syntax error"); yyerrok; }
108; 122;
109 123
110common_block: 124common_stmt:
111 if_stmt 125 T_EOL
126 | if_stmt
112 | comment_stmt 127 | comment_stmt
113 | config_stmt 128 | config_stmt
114 | menuconfig_stmt 129 | menuconfig_stmt
115 | source_stmt 130 | source_stmt
116 | nl_or_eof 131;
132
133option_error:
134 T_WORD error T_EOL { zconf_error("unknown option \"%s\"", $1); }
135 | error T_EOL { zconf_error("invalid option"); }
117; 136;
118 137
119 138
@@ -156,51 +175,16 @@ config_option_list:
156 | config_option_list config_option 175 | config_option_list config_option
157 | config_option_list depends 176 | config_option_list depends
158 | config_option_list help 177 | config_option_list help
178 | config_option_list option_error
159 | config_option_list T_EOL 179 | config_option_list T_EOL
160; 180;
161 181
162config_option: T_TRISTATE prompt_stmt_opt T_EOL 182config_option: T_TYPE prompt_stmt_opt T_EOL
163{ 183{
164 menu_set_type(S_TRISTATE); 184 menu_set_type($1->stype);
165 printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno()); 185 printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
166}; 186 zconf_curname(), zconf_lineno(),
167 187 $1->stype);
168config_option: T_DEF_TRISTATE expr if_expr T_EOL
169{
170 menu_add_expr(P_DEFAULT, $2, $3);
171 menu_set_type(S_TRISTATE);
172 printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
173};
174
175config_option: T_BOOLEAN prompt_stmt_opt T_EOL
176{
177 menu_set_type(S_BOOLEAN);
178 printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
179};
180
181config_option: T_DEF_BOOLEAN expr if_expr T_EOL
182{
183 menu_add_expr(P_DEFAULT, $2, $3);
184 menu_set_type(S_BOOLEAN);
185 printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
186};
187
188config_option: T_INT prompt_stmt_opt T_EOL
189{
190 menu_set_type(S_INT);
191 printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno());
192};
193
194config_option: T_HEX prompt_stmt_opt T_EOL
195{
196 menu_set_type(S_HEX);
197 printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno());
198};
199
200config_option: T_STRING prompt_stmt_opt T_EOL
201{
202 menu_set_type(S_STRING);
203 printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno());
204}; 188};
205 189
206config_option: T_PROMPT prompt if_expr T_EOL 190config_option: T_PROMPT prompt if_expr T_EOL
@@ -212,7 +196,11 @@ config_option: T_PROMPT prompt if_expr T_EOL
212config_option: T_DEFAULT expr if_expr T_EOL 196config_option: T_DEFAULT expr if_expr T_EOL
213{ 197{
214 menu_add_expr(P_DEFAULT, $2, $3); 198 menu_add_expr(P_DEFAULT, $2, $3);
215 printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno()); 199 if ($1->stype != S_UNKNOWN)
200 menu_set_type($1->stype);
201 printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
202 zconf_curname(), zconf_lineno(),
203 $1->stype);
216}; 204};
217 205
218config_option: T_SELECT T_WORD if_expr T_EOL 206config_option: T_SELECT T_WORD if_expr T_EOL
@@ -240,8 +228,7 @@ choice: T_CHOICE T_EOL
240 228
241choice_entry: choice choice_option_list 229choice_entry: choice choice_option_list
242{ 230{
243 menu_end_entry(); 231 $$ = menu_add_menu();
244 menu_add_menu();
245}; 232};
246 233
247choice_end: end 234choice_end: end
@@ -252,13 +239,8 @@ choice_end: end
252 } 239 }
253}; 240};
254 241
255choice_stmt: 242choice_stmt: choice_entry choice_block choice_end
256 choice_entry choice_block choice_end 243;
257 | choice_entry choice_block
258{
259 printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno);
260 zconfnerrs++;
261};
262 244
263choice_option_list: 245choice_option_list:
264 /* empty */ 246 /* empty */
@@ -266,6 +248,7 @@ choice_option_list:
266 | choice_option_list depends 248 | choice_option_list depends
267 | choice_option_list help 249 | choice_option_list help
268 | choice_option_list T_EOL 250 | choice_option_list T_EOL
251 | choice_option_list option_error
269; 252;
270 253
271choice_option: T_PROMPT prompt if_expr T_EOL 254choice_option: T_PROMPT prompt if_expr T_EOL
@@ -274,16 +257,15 @@ choice_option: T_PROMPT prompt if_expr T_EOL
274 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); 257 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
275}; 258};
276 259
277choice_option: T_TRISTATE prompt_stmt_opt T_EOL 260choice_option: T_TYPE prompt_stmt_opt T_EOL
278{
279 menu_set_type(S_TRISTATE);
280 printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
281};
282
283choice_option: T_BOOLEAN prompt_stmt_opt T_EOL
284{ 261{
285 menu_set_type(S_BOOLEAN); 262 if ($1->stype == S_BOOLEAN || $1->stype == S_TRISTATE) {
286 printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno()); 263 menu_set_type($1->stype);
264 printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
265 zconf_curname(), zconf_lineno(),
266 $1->stype);
267 } else
268 YYERROR;
287}; 269};
288 270
289choice_option: T_OPTIONAL T_EOL 271choice_option: T_OPTIONAL T_EOL
@@ -294,24 +276,27 @@ choice_option: T_OPTIONAL T_EOL
294 276
295choice_option: T_DEFAULT T_WORD if_expr T_EOL 277choice_option: T_DEFAULT T_WORD if_expr T_EOL
296{ 278{
297 menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3); 279 if ($1->stype == S_UNKNOWN) {
298 printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno()); 280 menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3);
281 printd(DEBUG_PARSE, "%s:%d:default\n",
282 zconf_curname(), zconf_lineno());
283 } else
284 YYERROR;
299}; 285};
300 286
301choice_block: 287choice_block:
302 /* empty */ 288 /* empty */
303 | choice_block common_block 289 | choice_block common_stmt
304; 290;
305 291
306/* if entry */ 292/* if entry */
307 293
308if: T_IF expr T_EOL 294if_entry: T_IF expr nl
309{ 295{
310 printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno()); 296 printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
311 menu_add_entry(NULL); 297 menu_add_entry(NULL);
312 menu_add_dep($2); 298 menu_add_dep($2);
313 menu_end_entry(); 299 $$ = menu_add_menu();
314 menu_add_menu();
315}; 300};
316 301
317if_end: end 302if_end: end
@@ -322,17 +307,12 @@ if_end: end
322 } 307 }
323}; 308};
324 309
325if_stmt: 310if_stmt: if_entry if_block if_end
326 if if_block if_end 311;
327 | if if_block
328{
329 printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno);
330 zconfnerrs++;
331};
332 312
333if_block: 313if_block:
334 /* empty */ 314 /* empty */
335 | if_block common_block 315 | if_block common_stmt
336 | if_block menu_stmt 316 | if_block menu_stmt
337 | if_block choice_stmt 317 | if_block choice_stmt
338; 318;
@@ -348,8 +328,7 @@ menu: T_MENU prompt T_EOL
348 328
349menu_entry: menu depends_list 329menu_entry: menu depends_list
350{ 330{
351 menu_end_entry(); 331 $$ = menu_add_menu();
352 menu_add_menu();
353}; 332};
354 333
355menu_end: end 334menu_end: end
@@ -360,31 +339,20 @@ menu_end: end
360 } 339 }
361}; 340};
362 341
363menu_stmt: 342menu_stmt: menu_entry menu_block menu_end
364 menu_entry menu_block menu_end 343;
365 | menu_entry menu_block
366{
367 printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno);
368 zconfnerrs++;
369};
370 344
371menu_block: 345menu_block:
372 /* empty */ 346 /* empty */
373 | menu_block common_block 347 | menu_block common_stmt
374 | menu_block menu_stmt 348 | menu_block menu_stmt
375 | menu_block choice_stmt 349 | menu_block choice_stmt
376 | menu_block error T_EOL { zconfprint("invalid menu option"); yyerrok; }
377; 350;
378 351
379source: T_SOURCE prompt T_EOL 352source_stmt: T_SOURCE prompt T_EOL
380{ 353{
381 $$ = $2;
382 printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2); 354 printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2);
383}; 355 zconf_nextfile($2);
384
385source_stmt: source
386{
387 zconf_nextfile($1);
388}; 356};
389 357
390/* comment entry */ 358/* comment entry */
@@ -416,9 +384,11 @@ help: help_start T_HELPTEXT
416 384
417/* depends option */ 385/* depends option */
418 386
419depends_list: /* empty */ 387depends_list:
420 | depends_list depends 388 /* empty */
421 | depends_list T_EOL 389 | depends_list depends
390 | depends_list T_EOL
391 | depends_list option_error
422; 392;
423 393
424depends: T_DEPENDS T_ON expr T_EOL 394depends: T_DEPENDS T_ON expr T_EOL
@@ -450,13 +420,15 @@ prompt: T_WORD
450 | T_WORD_QUOTE 420 | T_WORD_QUOTE
451; 421;
452 422
453end: T_ENDMENU nl_or_eof { $$ = T_ENDMENU; } 423end: T_ENDMENU T_EOL { $$ = $1; }
454 | T_ENDCHOICE nl_or_eof { $$ = T_ENDCHOICE; } 424 | T_ENDCHOICE T_EOL { $$ = $1; }
455 | T_ENDIF nl_or_eof { $$ = T_ENDIF; } 425 | T_ENDIF T_EOL { $$ = $1; }
456; 426;
457 427
458nl_or_eof: 428nl:
459 T_EOL | T_EOF; 429 T_EOL
430 | nl T_EOL
431;
460 432
461if_expr: /* empty */ { $$ = NULL; } 433if_expr: /* empty */ { $$ = NULL; }
462 | T_IF expr { $$ = $2; } 434 | T_IF expr { $$ = $2; }
@@ -489,16 +461,16 @@ void conf_parse(const char *name)
489 modules_sym = sym_lookup("MODULES", 0); 461 modules_sym = sym_lookup("MODULES", 0);
490 rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL); 462 rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
491 463
492 //zconfdebug = 1; 464#if YYDEBUG
465 if (getenv("ZCONF_DEBUG"))
466 zconfdebug = 1;
467#endif
493 zconfparse(); 468 zconfparse();
494 if (zconfnerrs) 469 if (zconfnerrs)
495 exit(1); 470 exit(1);
496 menu_finalize(&rootmenu); 471 menu_finalize(&rootmenu);
497 for_all_symbols(i, sym) { 472 for_all_symbols(i, sym) {
498 if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym)) 473 sym_check_deps(sym);
499 printf("\n");
500 else
501 sym->flags |= SYMBOL_CHECK_DONE;
502 } 474 }
503 475
504 sym_change_count = 1; 476 sym_change_count = 1;
@@ -513,20 +485,25 @@ const char *zconf_tokenname(int token)
513 case T_ENDCHOICE: return "endchoice"; 485 case T_ENDCHOICE: return "endchoice";
514 case T_IF: return "if"; 486 case T_IF: return "if";
515 case T_ENDIF: return "endif"; 487 case T_ENDIF: return "endif";
488 case T_DEPENDS: return "depends";
516 } 489 }
517 return "<token>"; 490 return "<token>";
518} 491}
519 492
520static bool zconf_endtoken(int token, int starttoken, int endtoken) 493static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
521{ 494{
522 if (token != endtoken) { 495 if (id->token != endtoken) {
523 zconfprint("unexpected '%s' within %s block", zconf_tokenname(token), zconf_tokenname(starttoken)); 496 zconf_error("unexpected '%s' within %s block",
497 kconf_id_strings + id->name, zconf_tokenname(starttoken));
524 zconfnerrs++; 498 zconfnerrs++;
525 return false; 499 return false;
526 } 500 }
527 if (current_menu->file != current_file) { 501 if (current_menu->file != current_file) {
528 zconfprint("'%s' in different file than '%s'", zconf_tokenname(token), zconf_tokenname(starttoken)); 502 zconf_error("'%s' in different file than '%s'",
529 zconfprint("location of the '%s'", zconf_tokenname(starttoken)); 503 kconf_id_strings + id->name, zconf_tokenname(starttoken));
504 fprintf(stderr, "%s:%d: location of the '%s'\n",
505 current_menu->file->name, current_menu->lineno,
506 zconf_tokenname(starttoken));
530 zconfnerrs++; 507 zconfnerrs++;
531 return false; 508 return false;
532 } 509 }
@@ -537,7 +514,19 @@ static void zconfprint(const char *err, ...)
537{ 514{
538 va_list ap; 515 va_list ap;
539 516
540 fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1); 517 fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
518 va_start(ap, err);
519 vfprintf(stderr, err, ap);
520 va_end(ap);
521 fprintf(stderr, "\n");
522}
523
524static void zconf_error(const char *err, ...)
525{
526 va_list ap;
527
528 zconfnerrs++;
529 fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
541 va_start(ap, err); 530 va_start(ap, err);
542 vfprintf(stderr, err, ap); 531 vfprintf(stderr, err, ap);
543 va_end(ap); 532 va_end(ap);
@@ -546,7 +535,9 @@ static void zconfprint(const char *err, ...)
546 535
547static void zconferror(const char *err) 536static void zconferror(const char *err)
548{ 537{
538#if YYDEBUG
549 fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err); 539 fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
540#endif
550} 541}
551 542
552void print_quoted_string(FILE *out, const char *str) 543void print_quoted_string(FILE *out, const char *str)
diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 8aaf74e64183..2f45fd2969d0 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -117,6 +117,8 @@ use strict;
117# struct my_struct { 117# struct my_struct {
118# int a; 118# int a;
119# int b; 119# int b;
120# /* private: */
121# int c;
120# }; 122# };
121# 123#
122# All descriptions can be multiline, except the short function description. 124# All descriptions can be multiline, except the short function description.
@@ -1304,6 +1306,12 @@ sub dump_struct($$) {
1304 # ignore embedded structs or unions 1306 # ignore embedded structs or unions
1305 $members =~ s/{.*?}//g; 1307 $members =~ s/{.*?}//g;
1306 1308
1309 # ignore members marked private:
1310 $members =~ s/\/\*.*?private:.*?public:.*?\*\///gos;
1311 $members =~ s/\/\*.*?private:.*//gos;
1312 # strip comments:
1313 $members =~ s/\/\*.*?\*\///gos;
1314
1307 create_parameterlist($members, ';', $file); 1315 create_parameterlist($members, ';', $file);
1308 1316
1309 output_declaration($declaration_name, 1317 output_declaration($declaration_name,
@@ -1329,6 +1337,7 @@ sub dump_enum($$) {
1329 my $x = shift; 1337 my $x = shift;
1330 my $file = shift; 1338 my $file = shift;
1331 1339
1340 $x =~ s@/\*.*?\*/@@gos; # strip comments.
1332 if ($x =~ /enum\s+(\w+)\s*{(.*)}/) { 1341 if ($x =~ /enum\s+(\w+)\s*{(.*)}/) {
1333 $declaration_name = $1; 1342 $declaration_name = $1;
1334 my $members = $2; 1343 my $members = $2;
@@ -1365,6 +1374,7 @@ sub dump_typedef($$) {
1365 my $x = shift; 1374 my $x = shift;
1366 my $file = shift; 1375 my $file = shift;
1367 1376
1377 $x =~ s@/\*.*?\*/@@gos; # strip comments.
1368 while (($x =~ /\(*.\)\s*;$/) || ($x =~ /\[*.\]\s*;$/)) { 1378 while (($x =~ /\(*.\)\s*;$/) || ($x =~ /\[*.\]\s*;$/)) {
1369 $x =~ s/\(*.\)\s*;$/;/; 1379 $x =~ s/\(*.\)\s*;$/;/;
1370 $x =~ s/\[*.\]\s*;$/;/; 1380 $x =~ s/\[*.\]\s*;$/;/;
@@ -1420,7 +1430,7 @@ sub create_parameterlist($$$) {
1420 $type = $arg; 1430 $type = $arg;
1421 $type =~ s/([^\(]+\(\*)$param/$1/; 1431 $type =~ s/([^\(]+\(\*)$param/$1/;
1422 push_parameter($param, $type, $file); 1432 push_parameter($param, $type, $file);
1423 } else { 1433 } elsif ($arg) {
1424 $arg =~ s/\s*:\s*/:/g; 1434 $arg =~ s/\s*:\s*/:/g;
1425 $arg =~ s/\s*\[/\[/g; 1435 $arg =~ s/\s*\[/\[/g;
1426 1436
@@ -1628,7 +1638,6 @@ sub process_state3_type($$) {
1628 my $x = shift; 1638 my $x = shift;
1629 my $file = shift; 1639 my $file = shift;
1630 1640
1631 $x =~ s@/\*.*?\*/@@gos; # strip comments.
1632 $x =~ s@[\r\n]+@ @gos; # strip newlines/cr's. 1641 $x =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
1633 $x =~ s@^\s+@@gos; # strip leading spaces 1642 $x =~ s@^\s+@@gos; # strip leading spaces
1634 $x =~ s@\s+$@@gos; # strip trailing spaces 1643 $x =~ s@\s+$@@gos; # strip trailing spaces
diff --git a/scripts/mod/.gitignore b/scripts/mod/.gitignore
new file mode 100644
index 000000000000..e9b7abe7b95b
--- /dev/null
+++ b/scripts/mod/.gitignore
@@ -0,0 +1,4 @@
1elfconfig.h
2mk_elfconfig
3modpost
4
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index d8ee38aede26..e3d144a3f10b 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -295,11 +295,13 @@ static int do_pcmcia_entry(const char *filename,
295{ 295{
296 unsigned int i; 296 unsigned int i;
297 297
298 id->match_flags = TO_NATIVE(id->match_flags);
298 id->manf_id = TO_NATIVE(id->manf_id); 299 id->manf_id = TO_NATIVE(id->manf_id);
299 id->card_id = TO_NATIVE(id->card_id); 300 id->card_id = TO_NATIVE(id->card_id);
300 id->func_id = TO_NATIVE(id->func_id); 301 id->func_id = TO_NATIVE(id->func_id);
301 id->function = TO_NATIVE(id->function); 302 id->function = TO_NATIVE(id->function);
302 id->device_no = TO_NATIVE(id->device_no); 303 id->device_no = TO_NATIVE(id->device_no);
304
303 for (i=0; i<4; i++) { 305 for (i=0; i<4; i++) {
304 id->prod_id_hash[i] = TO_NATIVE(id->prod_id_hash[i]); 306 id->prod_id_hash[i] = TO_NATIVE(id->prod_id_hash[i]);
305 } 307 }
@@ -357,6 +359,13 @@ static int do_vio_entry(const char *filename, struct vio_device_id *vio,
357 return 1; 359 return 1;
358} 360}
359 361
362static int do_i2c_entry(const char *filename, struct i2c_device_id *i2c, char *alias)
363{
364 strcpy(alias, "i2c:");
365 ADD(alias, "id", 1, i2c->id);
366 return 1;
367}
368
360/* Ignore any prefix, eg. v850 prepends _ */ 369/* Ignore any prefix, eg. v850 prepends _ */
361static inline int sym_is(const char *symbol, const char *name) 370static inline int sym_is(const char *symbol, const char *name)
362{ 371{
@@ -441,6 +450,9 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
441 else if (sym_is(symname, "__mod_vio_device_table")) 450 else if (sym_is(symname, "__mod_vio_device_table"))
442 do_table(symval, sym->st_size, sizeof(struct vio_device_id), 451 do_table(symval, sym->st_size, sizeof(struct vio_device_id),
443 do_vio_entry, mod); 452 do_vio_entry, mod);
453 else if (sym_is(symname, "__mod_i2c_device_table"))
454 do_table(symval, sym->st_size, sizeof(struct i2c_device_id),
455 do_i2c_entry, mod);
444 456
445} 457}
446 458