diff --git a/scripts/config/expr.h b/scripts/config/expr.h index c1c56065b0..ae79d8fad1 100644 --- a/scripts/config/expr.h +++ b/scripts/config/expr.h @@ -74,6 +74,7 @@ struct symbol { struct property *prop; struct expr *dep, *dep2; struct expr_value rev_dep; + struct expr_value rev_dep_inv; }; #define for_all_symbols(i, sym) for (i = 0; i < 257; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER) @@ -100,7 +101,7 @@ struct symbol { #define SYMBOL_HASHMASK 0xff enum prop_type { - P_UNKNOWN, P_PROMPT, P_COMMENT, P_MENU, P_DEFAULT, P_CHOICE, P_SELECT, P_RANGE, P_RESET + P_UNKNOWN, P_PROMPT, P_COMMENT, P_MENU, P_DEFAULT, P_CHOICE, P_DESELECT, P_SELECT, P_RANGE, P_RESET }; struct property { diff --git a/scripts/config/lex.zconf.c_shipped b/scripts/config/lex.zconf.c_shipped index 5e01ee5318..42bcdd4562 100644 --- a/scripts/config/lex.zconf.c_shipped +++ b/scripts/config/lex.zconf.c_shipped @@ -20,7 +20,6 @@ #include #include #include -#include /* end standard C headers. */ @@ -748,6 +747,7 @@ char *zconftext; #include #include #include +#include #define LKC_DIRECT_LINK #include "lkc.h" @@ -2280,7 +2280,7 @@ void zconf_nextfile(const char *name) filename = files.gl_pathv[i]; file = file_lookup(filename); - buf = malloc(sizeof(*buf)); + buf = malloc(sizeof(*buf)); memset(buf, 0, sizeof(*buf)); current_buf->state = YY_CURRENT_BUFFER; zconfin = zconf_fopen(filename); diff --git a/scripts/config/mconf.c b/scripts/config/mconf.c index 74036174fc..8c58b62386 100644 --- a/scripts/config/mconf.c +++ b/scripts/config/mconf.c @@ -405,6 +405,7 @@ static void get_symbol_str(struct gstr *r, struct symbol *sym) sym_get_string_value(sym)); for_all_prompts(sym, prop) get_prompt_str(r, prop); + hit = false; for_all_properties(sym, prop, P_SELECT) { if (!hit) { @@ -416,11 +417,29 @@ static void get_symbol_str(struct gstr *r, struct symbol *sym) } if (hit) str_append(r, "\n"); + + hit = false; + for_all_properties(sym, prop, P_DESELECT) { + if (!hit) { + str_append(r, " Deselects: "); + hit = true; + } else + str_printf(r, " && "); + expr_gstr_print(prop->expr, r); + } + if (hit) + str_append(r, "\n"); + if (sym->rev_dep.expr) { str_append(r, " Selected by: "); expr_gstr_print(sym->rev_dep.expr, r); str_append(r, "\n"); } + if (sym->rev_dep_inv.expr) { + str_append(r, " Deselected by: "); + expr_gstr_print(sym->rev_dep_inv.expr, r); + str_append(r, "\n"); + } str_append(r, "\n\n"); } diff --git a/scripts/config/menu.c b/scripts/config/menu.c index 20fda9b2fc..286e25569d 100644 --- a/scripts/config/menu.c +++ b/scripts/config/menu.c @@ -74,37 +74,9 @@ void menu_end_menu(void) current_menu = current_menu->parent; } -struct expr *menu_check_dep(struct expr *e) -{ - if (!e) - return e; - - switch (e->type) { - case E_NOT: - e->left.expr = menu_check_dep(e->left.expr); - break; - case E_OR: - case E_AND: - e->left.expr = menu_check_dep(e->left.expr); - e->right.expr = menu_check_dep(e->right.expr); - break; -/* tristate always enabled */ -#if 0 - case E_SYMBOL: - /* change 'm' into 'm' && MODULES */ - if (e->left.sym == &symbol_mod) - return expr_alloc_and(e, expr_alloc_symbol(modules_sym)); - break; -#endif - default: - break; - } - return e; -} - void menu_add_dep(struct expr *dep) { - current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep)); + current_entry->dep = expr_alloc_and(current_entry->dep, dep); } void menu_set_type(int type) @@ -129,7 +101,7 @@ struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *e prop->menu = current_entry; prop->text = prompt; prop->expr = expr; - prop->visible.expr = menu_check_dep(dep); + prop->visible.expr = dep; if (prompt) { if (current_entry->prompt) @@ -191,6 +163,23 @@ void sym_check_prop(struct symbol *sym) "accept arguments of boolean and " "tristate type", sym2->name); break; + case P_DESELECT: + sym2 = prop_get_symbol(prop); + if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE) + prop_warn(prop, + "config symbol '%s' uses deselect, but is " + "not boolean or tristate", sym->name); + else if (sym2->type == S_UNKNOWN) + prop_warn(prop, + "'deselect' used by config symbol '%s' " + "refer to undefined symbol '%s'", + sym->name, sym2->name); + else if (sym2->type != S_BOOLEAN && sym2->type != S_TRISTATE) + prop_warn(prop, + "'%s' has wrong type. 'deselect' only " + "accept arguments of boolean and " + "tristate type", sym2->name); + break; case P_RANGE: if (sym->type != S_INT && sym->type != S_HEX) prop_warn(prop, "range is only allowed " @@ -240,11 +229,12 @@ void menu_finalize(struct menu *parent) prop = menu->sym->prop; else prop = menu->prompt; + for (; prop; prop = prop->next) { if (prop->menu != menu) continue; dep = expr_transform(prop->visible.expr); - dep = expr_alloc_and(expr_copy(basedep), dep); + dep = expr_alloc_and(expr_copy(menu->dep), dep); dep = expr_eliminate_dups(dep); if (menu->sym && menu->sym->type != S_TRISTATE) dep = expr_trans_bool(dep); @@ -254,6 +244,11 @@ void menu_finalize(struct menu *parent) es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr, expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep))); } + if (prop->type == P_DESELECT) { + struct symbol *es = prop_get_symbol(prop); + es->rev_dep_inv.expr = expr_alloc_or(es->rev_dep_inv.expr, + expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep))); + } } } for (menu = parent->list; menu; menu = menu->next) diff --git a/scripts/config/symbol.c b/scripts/config/symbol.c index b79d81ac13..23246ca3d4 100644 --- a/scripts/config/symbol.c +++ b/scripts/config/symbol.c @@ -204,13 +204,12 @@ static void sym_calc_visibility(struct symbol *sym) prop->visible.tri = expr_calc_value(prop->visible.expr); tri = E_OR(tri, prop->visible.tri); } -/* tristate always enabled */ -#if 0 - if (tri == mod && (sym->type != S_TRISTATE || modules_val == no)) -#else if (tri == mod && (sym->type != S_TRISTATE)) -#endif tri = yes; + if (sym->rev_dep_inv.expr) { + if (expr_calc_value(sym->rev_dep_inv.expr) == yes) + tri = no; + } if (sym->visible != tri) { sym->visible = tri; sym_set_changed(sym); @@ -814,7 +813,7 @@ struct symbol *sym_check_deps(struct symbol *sym) goto out; for (prop = sym->prop; prop; prop = prop->next) { - if (prop->type == P_CHOICE || prop->type == P_SELECT) + if (prop->type == P_CHOICE || prop->type == P_SELECT || prop->type == P_DESELECT) continue; sym2 = sym_check_expr_deps(prop->visible.expr); if (sym2) @@ -882,6 +881,8 @@ const char *prop_get_type_name(enum prop_type type) return "choice"; case P_SELECT: return "select"; + case P_DESELECT: + return "deselect"; case P_RANGE: return "range"; case P_UNKNOWN: diff --git a/scripts/config/zconf.gperf b/scripts/config/zconf.gperf index 3ed8b96fff..faa6530e0f 100644 --- a/scripts/config/zconf.gperf +++ b/scripts/config/zconf.gperf @@ -37,6 +37,7 @@ def_boolean, T_DEFAULT, TF_COMMAND, S_BOOLEAN int, T_TYPE, TF_COMMAND, S_INT hex, T_TYPE, TF_COMMAND, S_HEX string, T_TYPE, TF_COMMAND, S_STRING +deselect, T_DESELECT, TF_COMMAND select, T_SELECT, TF_COMMAND enable, T_SELECT, TF_COMMAND range, T_RANGE, TF_COMMAND diff --git a/scripts/config/zconf.hash.c_shipped b/scripts/config/zconf.hash.c_shipped index 4f6fa50554..7b8f074eef 100644 --- a/scripts/config/zconf.hash.c_shipped +++ b/scripts/config/zconf.hash.c_shipped @@ -30,7 +30,7 @@ #endif struct kconf_id; -/* maximum key range = 45, duplicates = 0 */ +/* maximum key range = 40, duplicates = 0 */ #ifdef __GNUC__ __inline @@ -44,32 +44,32 @@ kconf_id_hash (register const char *str, register unsigned int len) { static unsigned char asso_values[] = { - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 0, 10, 15, - 0, 0, 5, 47, 5, 0, 47, 47, 10, 10, - 0, 20, 20, 20, 5, 15, 0, 15, 47, 47, - 15, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47 + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 35, 0, 20, + 5, 0, 5, 42, 0, 25, 42, 42, 5, 5, + 10, 0, 25, 15, 0, 0, 0, 10, 42, 42, + 0, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42 }; register int hval = len; @@ -88,71 +88,73 @@ kconf_id_hash (register const char *str, register unsigned int len) struct kconf_id_strings_t { - char kconf_id_strings_str2[sizeof("if")]; - char kconf_id_strings_str3[sizeof("int")]; - char kconf_id_strings_str5[sizeof("endif")]; - char kconf_id_strings_str6[sizeof("enable")]; - char kconf_id_strings_str7[sizeof("endmenu")]; - char kconf_id_strings_str8[sizeof("tristate")]; - char kconf_id_strings_str9[sizeof("endchoice")]; - char kconf_id_strings_str10[sizeof("range")]; - char kconf_id_strings_str12[sizeof("default")]; - char kconf_id_strings_str13[sizeof("def_bool")]; - char kconf_id_strings_str14[sizeof("menu")]; - char kconf_id_strings_str16[sizeof("def_boolean")]; - char kconf_id_strings_str17[sizeof("def_tristate")]; - char kconf_id_strings_str18[sizeof("mainmenu")]; - char kconf_id_strings_str19[sizeof("help")]; - char kconf_id_strings_str20[sizeof("menuconfig")]; - char kconf_id_strings_str21[sizeof("config")]; - char kconf_id_strings_str22[sizeof("on")]; - char kconf_id_strings_str23[sizeof("hex")]; - char kconf_id_strings_str25[sizeof("reset")]; - char kconf_id_strings_str26[sizeof("string")]; - char kconf_id_strings_str27[sizeof("depends")]; - char kconf_id_strings_str28[sizeof("optional")]; - char kconf_id_strings_str31[sizeof("select")]; + char kconf_id_strings_str2[sizeof("on")]; + char kconf_id_strings_str3[sizeof("hex")]; + char kconf_id_strings_str4[sizeof("bool")]; + char kconf_id_strings_str5[sizeof("reset")]; + char kconf_id_strings_str6[sizeof("string")]; + char kconf_id_strings_str7[sizeof("boolean")]; + char kconf_id_strings_str8[sizeof("optional")]; + char kconf_id_strings_str9[sizeof("help")]; + char kconf_id_strings_str10[sizeof("endif")]; + char kconf_id_strings_str11[sizeof("select")]; + char kconf_id_strings_str12[sizeof("endmenu")]; + char kconf_id_strings_str13[sizeof("deselect")]; + char kconf_id_strings_str14[sizeof("endchoice")]; + char kconf_id_strings_str15[sizeof("range")]; + char kconf_id_strings_str16[sizeof("source")]; + char kconf_id_strings_str17[sizeof("default")]; + char kconf_id_strings_str18[sizeof("def_bool")]; + char kconf_id_strings_str19[sizeof("menu")]; + char kconf_id_strings_str21[sizeof("def_boolean")]; + char kconf_id_strings_str22[sizeof("def_tristate")]; + char kconf_id_strings_str23[sizeof("requires")]; + char kconf_id_strings_str25[sizeof("menuconfig")]; + char kconf_id_strings_str26[sizeof("choice")]; + char kconf_id_strings_str27[sizeof("if")]; + char kconf_id_strings_str28[sizeof("int")]; + char kconf_id_strings_str31[sizeof("prompt")]; char kconf_id_strings_str32[sizeof("comment")]; - char kconf_id_strings_str33[sizeof("requires")]; - char kconf_id_strings_str34[sizeof("bool")]; - char kconf_id_strings_str36[sizeof("source")]; - char kconf_id_strings_str37[sizeof("boolean")]; - char kconf_id_strings_str41[sizeof("choice")]; - char kconf_id_strings_str46[sizeof("prompt")]; + char kconf_id_strings_str33[sizeof("tristate")]; + char kconf_id_strings_str36[sizeof("config")]; + char kconf_id_strings_str37[sizeof("depends")]; + char kconf_id_strings_str38[sizeof("mainmenu")]; + char kconf_id_strings_str41[sizeof("enable")]; }; static struct kconf_id_strings_t kconf_id_strings_contents = { - "if", - "int", + "on", + "hex", + "bool", + "reset", + "string", + "boolean", + "optional", + "help", "endif", - "enable", + "select", "endmenu", - "tristate", + "deselect", "endchoice", "range", + "source", "default", "def_bool", "menu", "def_boolean", "def_tristate", - "mainmenu", - "help", - "menuconfig", - "config", - "on", - "hex", - "reset", - "string", - "depends", - "optional", - "select", - "comment", "requires", - "bool", - "source", - "boolean", + "menuconfig", "choice", - "prompt" + "if", + "int", + "prompt", + "comment", + "tristate", + "config", + "depends", + "mainmenu", + "enable" }; #define kconf_id_strings ((const char *) &kconf_id_strings_contents) #ifdef __GNUC__ @@ -163,55 +165,53 @@ kconf_id_lookup (register const char *str, register unsigned int len) { enum { - TOTAL_KEYWORDS = 31, + TOTAL_KEYWORDS = 32, MIN_WORD_LENGTH = 2, MAX_WORD_LENGTH = 12, MIN_HASH_VALUE = 2, - MAX_HASH_VALUE = 46 + MAX_HASH_VALUE = 41 }; static struct kconf_id wordlist[] = { {-1}, {-1}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_IF, TF_COMMAND|TF_PARAM}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3, T_TYPE, TF_COMMAND, S_INT}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_ON, TF_PARAM}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3, T_TYPE, TF_COMMAND, S_HEX}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str4, T_TYPE, TF_COMMAND, S_BOOLEAN}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5, T_RESET, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str6, T_TYPE, TF_COMMAND, S_STRING}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_TYPE, TF_COMMAND, S_BOOLEAN}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8, T_OPTIONAL, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9, T_HELP, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str10, T_ENDIF, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str11, T_SELECT, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_ENDMENU, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13, T_DESELECT, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_ENDCHOICE, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str15, T_RANGE, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str16, T_SOURCE, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_DEFAULT, TF_COMMAND, S_UNKNOWN}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18, T_DEFAULT, TF_COMMAND, S_BOOLEAN}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str19, T_MENU, TF_COMMAND}, {-1}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5, T_ENDIF, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str6, T_SELECT, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_ENDMENU, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8, T_TYPE, TF_COMMAND, S_TRISTATE}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9, T_ENDCHOICE, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str10, T_RANGE, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21, T_DEFAULT, TF_COMMAND, S_BOOLEAN}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22, T_DEFAULT, TF_COMMAND, S_TRISTATE}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23, T_REQUIRES, TF_COMMAND}, {-1}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_DEFAULT, TF_COMMAND, S_UNKNOWN}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13, T_DEFAULT, TF_COMMAND, S_BOOLEAN}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_MENU, TF_COMMAND}, - {-1}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str16, T_DEFAULT, TF_COMMAND, S_BOOLEAN}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_DEFAULT, TF_COMMAND, S_TRISTATE}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18, T_MAINMENU, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str19, T_HELP, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str20, T_MENUCONFIG, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21, T_CONFIG, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22, T_ON, TF_PARAM}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23, T_TYPE, TF_COMMAND, S_HEX}, - {-1}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str25, T_RESET, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str26, T_TYPE, TF_COMMAND, S_STRING}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27, T_DEPENDS, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str28, T_OPTIONAL, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str25, T_MENUCONFIG, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str26, T_CHOICE, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27, T_IF, TF_COMMAND|TF_PARAM}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str28, T_TYPE, TF_COMMAND, S_INT}, {-1}, {-1}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31, T_SELECT, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31, T_PROMPT, TF_COMMAND}, {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32, T_COMMENT, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33, T_REQUIRES, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str34, T_TYPE, TF_COMMAND, S_BOOLEAN}, - {-1}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36, T_SOURCE, TF_COMMAND}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str37, T_TYPE, TF_COMMAND, S_BOOLEAN}, - {-1}, {-1}, {-1}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41, T_CHOICE, TF_COMMAND}, - {-1}, {-1}, {-1}, {-1}, - {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str46, T_PROMPT, TF_COMMAND} + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33, T_TYPE, TF_COMMAND, S_TRISTATE}, + {-1}, {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36, T_CONFIG, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str37, T_DEPENDS, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str38, T_MAINMENU, TF_COMMAND}, + {-1}, {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41, T_SELECT, TF_COMMAND} }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) diff --git a/scripts/config/zconf.tab.c_shipped b/scripts/config/zconf.tab.c_shipped index c7c0f0c42c..77f392a961 100644 --- a/scripts/config/zconf.tab.c_shipped +++ b/scripts/config/zconf.tab.c_shipped @@ -81,20 +81,21 @@ T_PROMPT = 274, T_TYPE = 275, T_DEFAULT = 276, - T_SELECT = 277, - T_RANGE = 278, - T_ON = 279, - T_RESET = 280, - T_WORD = 281, - T_WORD_QUOTE = 282, - T_UNEQUAL = 283, - T_CLOSE_PAREN = 284, - T_OPEN_PAREN = 285, - T_EOL = 286, - T_OR = 287, - T_AND = 288, - T_EQUAL = 289, - T_NOT = 290 + T_DESELECT = 277, + T_SELECT = 278, + T_RANGE = 279, + T_ON = 280, + T_RESET = 281, + T_WORD = 282, + T_WORD_QUOTE = 283, + T_UNEQUAL = 284, + T_CLOSE_PAREN = 285, + T_OPEN_PAREN = 286, + T_EOL = 287, + T_OR = 288, + T_AND = 289, + T_EQUAL = 290, + T_NOT = 291 }; #endif #define T_MAINMENU 258 @@ -116,20 +117,21 @@ #define T_PROMPT 274 #define T_TYPE 275 #define T_DEFAULT 276 -#define T_SELECT 277 -#define T_RANGE 278 -#define T_ON 279 -#define T_RESET 280 -#define T_WORD 281 -#define T_WORD_QUOTE 282 -#define T_UNEQUAL 283 -#define T_CLOSE_PAREN 284 -#define T_OPEN_PAREN 285 -#define T_EOL 286 -#define T_OR 287 -#define T_AND 288 -#define T_EQUAL 289 -#define T_NOT 290 +#define T_DESELECT 277 +#define T_SELECT 278 +#define T_RANGE 279 +#define T_ON 280 +#define T_RESET 281 +#define T_WORD 282 +#define T_WORD_QUOTE 283 +#define T_UNEQUAL 284 +#define T_CLOSE_PAREN 285 +#define T_OPEN_PAREN 286 +#define T_EOL 287 +#define T_OR 288 +#define T_AND 289 +#define T_EQUAL 290 +#define T_NOT 291 @@ -319,20 +321,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 271 +#define YYLAST 285 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 36 +#define YYNTOKENS 37 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 42 /* YYNRULES -- Number of rules. */ -#define YYNRULES 106 +#define YYNRULES 108 /* YYNRULES -- Number of states. */ -#define YYNSTATES 179 +#define YYNSTATES 184 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 290 +#define YYMAXUTOK 291 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -369,7 +371,7 @@ static const unsigned char yytranslate[] = 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35 + 35, 36 }; #if YYDEBUG @@ -379,68 +381,69 @@ static const unsigned short int yyprhs[] = { 0, 0, 3, 5, 6, 9, 12, 15, 20, 23, 28, 33, 37, 39, 41, 43, 45, 47, 49, 51, - 53, 55, 57, 59, 61, 63, 65, 69, 72, 76, - 79, 83, 86, 87, 90, 93, 96, 99, 102, 106, - 111, 116, 121, 127, 130, 133, 135, 139, 140, 143, - 146, 149, 152, 155, 160, 164, 167, 171, 176, 177, - 180, 184, 186, 190, 191, 194, 197, 200, 204, 207, - 209, 213, 214, 217, 220, 223, 227, 231, 234, 237, - 240, 241, 244, 247, 250, 255, 259, 263, 264, 267, - 269, 271, 274, 277, 280, 282, 285, 286, 289, 291, - 295, 299, 303, 306, 310, 314, 316 + 53, 55, 57, 59, 61, 63, 65, 67, 71, 74, + 78, 81, 85, 88, 89, 92, 95, 98, 101, 104, + 108, 113, 118, 123, 128, 134, 137, 140, 142, 146, + 147, 150, 153, 156, 159, 162, 167, 171, 174, 178, + 183, 184, 187, 191, 193, 197, 198, 201, 204, 207, + 211, 214, 216, 220, 221, 224, 227, 230, 234, 238, + 241, 244, 247, 248, 251, 254, 257, 262, 266, 270, + 271, 274, 276, 278, 281, 284, 287, 289, 292, 293, + 296, 298, 302, 306, 310, 313, 317, 321, 323 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yysigned_char yyrhs[] = { - 37, 0, -1, 38, -1, -1, 38, 40, -1, 38, - 51, -1, 38, 62, -1, 38, 3, 72, 74, -1, - 38, 73, -1, 38, 26, 1, 31, -1, 38, 39, - 1, 31, -1, 38, 1, 31, -1, 16, -1, 19, - -1, 20, -1, 22, -1, 18, -1, 23, -1, 21, - -1, 25, -1, 31, -1, 57, -1, 66, -1, 43, - -1, 45, -1, 64, -1, 26, 1, 31, -1, 1, - 31, -1, 10, 26, 31, -1, 42, 46, -1, 11, - 26, 31, -1, 44, 46, -1, -1, 46, 47, -1, - 46, 70, -1, 46, 68, -1, 46, 41, -1, 46, - 31, -1, 20, 71, 31, -1, 19, 72, 75, 31, - -1, 21, 76, 75, 31, -1, 22, 26, 75, 31, - -1, 23, 77, 77, 75, 31, -1, 7, 31, -1, - 48, 52, -1, 73, -1, 49, 54, 50, -1, -1, - 52, 53, -1, 52, 70, -1, 52, 68, -1, 52, - 31, -1, 52, 41, -1, 19, 72, 75, 31, -1, - 20, 71, 31, -1, 18, 31, -1, 25, 75, 31, - -1, 21, 26, 75, 31, -1, -1, 54, 40, -1, - 14, 76, 74, -1, 73, -1, 55, 58, 56, -1, - -1, 58, 40, -1, 58, 62, -1, 58, 51, -1, - 4, 72, 31, -1, 59, 69, -1, 73, -1, 60, - 63, 61, -1, -1, 63, 40, -1, 63, 62, -1, - 63, 51, -1, 6, 72, 31, -1, 9, 72, 31, - -1, 65, 69, -1, 12, 31, -1, 67, 13, -1, - -1, 69, 70, -1, 69, 31, -1, 69, 41, -1, - 16, 24, 76, 31, -1, 16, 76, 31, -1, 17, - 76, 31, -1, -1, 72, 75, -1, 26, -1, 27, - -1, 5, 31, -1, 8, 31, -1, 15, 31, -1, - 31, -1, 74, 31, -1, -1, 14, 76, -1, 77, - -1, 77, 34, 77, -1, 77, 28, 77, -1, 30, - 76, 29, -1, 35, 76, -1, 76, 32, 76, -1, - 76, 33, 76, -1, 26, -1, 27, -1 + 38, 0, -1, 39, -1, -1, 39, 41, -1, 39, + 52, -1, 39, 63, -1, 39, 3, 73, 75, -1, + 39, 74, -1, 39, 27, 1, 32, -1, 39, 40, + 1, 32, -1, 39, 1, 32, -1, 16, -1, 19, + -1, 20, -1, 22, -1, 23, -1, 18, -1, 24, + -1, 21, -1, 26, -1, 32, -1, 58, -1, 67, + -1, 44, -1, 46, -1, 65, -1, 27, 1, 32, + -1, 1, 32, -1, 10, 27, 32, -1, 43, 47, + -1, 11, 27, 32, -1, 45, 47, -1, -1, 47, + 48, -1, 47, 71, -1, 47, 69, -1, 47, 42, + -1, 47, 32, -1, 20, 72, 32, -1, 19, 73, + 76, 32, -1, 21, 77, 76, 32, -1, 22, 27, + 76, 32, -1, 23, 27, 76, 32, -1, 24, 78, + 78, 76, 32, -1, 7, 32, -1, 49, 53, -1, + 74, -1, 50, 55, 51, -1, -1, 53, 54, -1, + 53, 71, -1, 53, 69, -1, 53, 32, -1, 53, + 42, -1, 19, 73, 76, 32, -1, 20, 72, 32, + -1, 18, 32, -1, 26, 76, 32, -1, 21, 27, + 76, 32, -1, -1, 55, 41, -1, 14, 77, 75, + -1, 74, -1, 56, 59, 57, -1, -1, 59, 41, + -1, 59, 63, -1, 59, 52, -1, 4, 73, 32, + -1, 60, 70, -1, 74, -1, 61, 64, 62, -1, + -1, 64, 41, -1, 64, 63, -1, 64, 52, -1, + 6, 73, 32, -1, 9, 73, 32, -1, 66, 70, + -1, 12, 32, -1, 68, 13, -1, -1, 70, 71, + -1, 70, 32, -1, 70, 42, -1, 16, 25, 77, + 32, -1, 16, 77, 32, -1, 17, 77, 32, -1, + -1, 73, 76, -1, 27, -1, 28, -1, 5, 32, + -1, 8, 32, -1, 15, 32, -1, 32, -1, 75, + 32, -1, -1, 14, 77, -1, 78, -1, 78, 35, + 78, -1, 78, 29, 78, -1, 31, 77, 30, -1, + 36, 77, -1, 77, 33, 77, -1, 77, 34, 77, + -1, 27, -1, 28, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { - 0, 104, 104, 106, 108, 109, 110, 111, 112, 113, - 114, 118, 122, 122, 122, 122, 122, 122, 122, 122, - 126, 127, 128, 129, 130, 131, 135, 136, 142, 150, - 156, 164, 174, 176, 177, 178, 179, 180, 183, 191, - 197, 207, 213, 221, 230, 235, 243, 246, 248, 249, - 250, 251, 252, 255, 261, 272, 278, 283, 293, 295, - 300, 308, 316, 319, 321, 322, 323, 328, 335, 340, - 348, 351, 353, 354, 355, 358, 366, 373, 380, 386, - 393, 395, 396, 397, 400, 405, 410, 418, 420, 425, - 426, 429, 430, 431, 435, 436, 439, 440, 443, 444, - 445, 446, 447, 448, 449, 452, 453 + 0, 105, 105, 107, 109, 110, 111, 112, 113, 114, + 115, 119, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 127, 128, 129, 130, 131, 132, 136, 137, 143, + 151, 157, 165, 175, 177, 178, 179, 180, 181, 184, + 192, 198, 208, 214, 220, 228, 237, 242, 250, 253, + 255, 256, 257, 258, 259, 262, 268, 279, 285, 290, + 300, 302, 307, 315, 323, 326, 328, 329, 330, 335, + 342, 347, 355, 358, 360, 361, 362, 365, 373, 380, + 387, 393, 400, 402, 403, 404, 407, 412, 417, 425, + 427, 432, 433, 436, 437, 438, 442, 443, 446, 447, + 450, 451, 452, 453, 454, 455, 456, 459, 460 }; #endif @@ -453,17 +456,18 @@ static const char *const yytname[] = "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG", "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS", "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT", - "T_SELECT", "T_RANGE", "T_ON", "T_RESET", "T_WORD", "T_WORD_QUOTE", - "T_UNEQUAL", "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND", - "T_EQUAL", "T_NOT", "$accept", "input", "stmt_list", "option_name", - "common_stmt", "option_error", "config_entry_start", "config_stmt", - "menuconfig_entry_start", "menuconfig_stmt", "config_option_list", - "config_option", "choice", "choice_entry", "choice_end", "choice_stmt", - "choice_option_list", "choice_option", "choice_block", "if_entry", - "if_end", "if_stmt", "if_block", "menu", "menu_entry", "menu_end", - "menu_stmt", "menu_block", "source_stmt", "comment", "comment_stmt", - "help_start", "help", "depends_list", "depends", "prompt_stmt_opt", - "prompt", "end", "nl", "if_expr", "expr", "symbol", 0 + "T_DESELECT", "T_SELECT", "T_RANGE", "T_ON", "T_RESET", "T_WORD", + "T_WORD_QUOTE", "T_UNEQUAL", "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", + "T_OR", "T_AND", "T_EQUAL", "T_NOT", "$accept", "input", "stmt_list", + "option_name", "common_stmt", "option_error", "config_entry_start", + "config_stmt", "menuconfig_entry_start", "menuconfig_stmt", + "config_option_list", "config_option", "choice", "choice_entry", + "choice_end", "choice_stmt", "choice_option_list", "choice_option", + "choice_block", "if_entry", "if_end", "if_stmt", "if_block", "menu", + "menu_entry", "menu_end", "menu_stmt", "menu_block", "source_stmt", + "comment", "comment_stmt", "help_start", "help", "depends_list", + "depends", "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", + "symbol", 0 }; #endif @@ -475,24 +479,24 @@ static const unsigned short int yytoknum[] = 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290 + 285, 286, 287, 288, 289, 290, 291 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const unsigned char yyr1[] = { - 0, 36, 37, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, - 40, 40, 40, 40, 40, 40, 41, 41, 42, 43, - 44, 45, 46, 46, 46, 46, 46, 46, 47, 47, - 47, 47, 47, 48, 49, 50, 51, 52, 52, 52, - 52, 52, 52, 53, 53, 53, 53, 53, 54, 54, - 55, 56, 57, 58, 58, 58, 58, 59, 60, 61, - 62, 63, 63, 63, 63, 64, 65, 66, 67, 68, - 69, 69, 69, 69, 70, 70, 70, 71, 71, 72, - 72, 73, 73, 73, 74, 74, 75, 75, 76, 76, - 76, 76, 76, 76, 76, 77, 77 + 0, 37, 38, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 41, 41, 41, 41, 41, 41, 42, 42, 43, + 44, 45, 46, 47, 47, 47, 47, 47, 47, 48, + 48, 48, 48, 48, 48, 49, 50, 51, 52, 53, + 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, + 55, 55, 56, 57, 58, 59, 59, 59, 59, 60, + 61, 62, 63, 64, 64, 64, 64, 65, 66, 67, + 68, 69, 70, 70, 70, 70, 71, 71, 71, 72, + 72, 73, 73, 74, 74, 74, 75, 75, 76, 76, + 77, 77, 77, 77, 77, 77, 77, 78, 78 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -500,15 +504,15 @@ static const unsigned char yyr2[] = { 0, 2, 1, 0, 2, 2, 2, 4, 2, 4, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 2, 3, 2, - 3, 2, 0, 2, 2, 2, 2, 2, 3, 4, - 4, 4, 5, 2, 2, 1, 3, 0, 2, 2, - 2, 2, 2, 4, 3, 2, 3, 4, 0, 2, - 3, 1, 3, 0, 2, 2, 2, 3, 2, 1, - 3, 0, 2, 2, 2, 3, 3, 2, 2, 2, - 0, 2, 2, 2, 4, 3, 3, 0, 2, 1, - 1, 2, 2, 2, 1, 2, 0, 2, 1, 3, - 3, 3, 2, 3, 3, 1, 1 + 1, 1, 1, 1, 1, 1, 1, 3, 2, 3, + 2, 3, 2, 0, 2, 2, 2, 2, 2, 3, + 4, 4, 4, 4, 5, 2, 2, 1, 3, 0, + 2, 2, 2, 2, 2, 4, 3, 2, 3, 4, + 0, 2, 3, 1, 3, 0, 2, 2, 2, 3, + 2, 1, 3, 0, 2, 2, 2, 3, 3, 2, + 2, 2, 0, 2, 2, 2, 4, 3, 3, 0, + 2, 1, 1, 2, 2, 2, 1, 2, 0, 2, + 1, 3, 3, 3, 2, 3, 3, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -517,161 +521,166 @@ static const unsigned char yyr2[] = static const unsigned char yydefact[] = { 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 12, 16, 13, 14, - 18, 15, 17, 19, 0, 20, 0, 4, 32, 23, - 32, 24, 47, 58, 5, 63, 21, 80, 71, 6, - 25, 80, 22, 8, 11, 89, 90, 0, 0, 91, - 0, 43, 92, 0, 0, 0, 105, 106, 0, 0, - 0, 98, 93, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94, 7, 67, 75, 76, 28, 30, - 0, 102, 0, 0, 60, 0, 0, 9, 10, 0, - 0, 0, 0, 0, 87, 0, 0, 0, 0, 37, - 36, 33, 0, 35, 34, 0, 0, 87, 0, 96, - 51, 52, 48, 50, 49, 59, 46, 45, 64, 66, - 62, 65, 61, 82, 83, 81, 72, 74, 70, 73, - 69, 95, 101, 103, 104, 100, 99, 27, 78, 0, - 0, 0, 96, 0, 96, 96, 96, 0, 0, 79, - 55, 96, 0, 96, 0, 0, 0, 85, 86, 0, - 38, 88, 0, 0, 96, 26, 0, 54, 0, 97, - 56, 84, 39, 40, 41, 0, 53, 57, 42 + 0, 0, 0, 0, 0, 0, 12, 17, 13, 14, + 19, 15, 16, 18, 20, 0, 21, 0, 4, 33, + 24, 33, 25, 49, 60, 5, 65, 22, 82, 73, + 6, 26, 82, 23, 8, 11, 91, 92, 0, 0, + 93, 0, 45, 94, 0, 0, 0, 107, 108, 0, + 0, 0, 100, 95, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 7, 69, 77, 78, 29, + 31, 0, 104, 0, 0, 62, 0, 0, 9, 10, + 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, + 0, 38, 37, 34, 0, 36, 35, 0, 0, 89, + 0, 98, 53, 54, 50, 52, 51, 61, 48, 47, + 66, 68, 64, 67, 63, 84, 85, 83, 74, 76, + 72, 75, 71, 97, 103, 105, 106, 102, 101, 28, + 80, 0, 0, 0, 98, 0, 98, 98, 98, 98, + 0, 0, 81, 57, 98, 0, 98, 0, 0, 0, + 87, 88, 0, 39, 90, 0, 0, 0, 98, 27, + 0, 56, 0, 99, 58, 86, 40, 41, 42, 43, + 0, 55, 59, 44 }; /* YYDEFGOTO[NTERM-NUM]. */ static const short int yydefgoto[] = { - -1, 1, 2, 26, 27, 100, 28, 29, 30, 31, - 65, 101, 32, 33, 116, 34, 67, 112, 68, 35, - 120, 36, 69, 37, 38, 128, 39, 71, 40, 41, - 42, 102, 103, 70, 104, 143, 144, 43, 74, 155, - 60, 61 + -1, 1, 2, 27, 28, 102, 29, 30, 31, 32, + 66, 103, 33, 34, 118, 35, 68, 114, 69, 36, + 122, 37, 70, 38, 39, 130, 40, 72, 41, 42, + 43, 104, 105, 71, 106, 145, 146, 44, 75, 158, + 61, 62 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -134 +#define YYPACT_NINF -80 static const short int yypact[] = { - -134, 2, 160, -134, -16, 53, 53, -14, 53, -8, - -1, 53, 26, 63, 60, 73, -134, -134, -134, -134, - -134, -134, -134, -134, 114, -134, 125, -134, -134, -134, - -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, - -134, -134, -134, -134, -134, -134, -134, 124, 127, -134, - 128, -134, -134, 141, 142, 146, -134, -134, 60, 60, - 3, -18, -134, 153, 159, 39, 102, 187, 226, 215, - 67, 215, 131, -134, 163, -134, -134, -134, -134, -134, - 34, -134, 60, 60, 163, 103, 103, -134, -134, 169, - 186, 218, 60, 53, 53, 60, 201, 103, 227, -134, - -134, -134, 220, -134, -134, 207, 53, 53, 213, 229, - -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, - -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, - -134, -134, -134, 214, -134, -134, -134, -134, -134, 60, - 178, 183, 229, 224, 229, 0, 229, 103, 228, -134, - -134, 229, 230, 229, 60, 231, 219, -134, -134, 232, - -134, -134, 233, 234, 229, -134, 235, -134, 236, 111, - -134, -134, -134, -134, -134, 237, -134, -134, -134 + -80, 2, 164, -80, -22, 105, 105, -6, 105, 0, + 7, 105, 17, 28, 70, 35, -80, -80, -80, -80, + -80, -80, -80, -80, -80, 69, -80, 78, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, 62, 68, + -80, 85, -80, -80, 97, 127, 144, -80, -80, 70, + 70, 188, -8, -80, 149, 163, 42, 104, 192, 67, + 221, 8, 221, 134, -80, 167, -80, -80, -80, -80, + -80, 50, -80, 70, 70, 167, 119, 119, -80, -80, + 173, 184, 60, 70, 105, 105, 70, 65, 150, 119, + 232, -80, -80, -80, 210, -80, -80, 202, 105, 105, + 231, 224, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, 226, -80, -80, -80, -80, + -80, 70, 211, 218, 224, 230, 224, -3, 224, 224, + 119, 233, -80, -80, 224, 234, 224, 70, 235, 222, + -80, -80, 236, -80, -80, 237, 238, 239, 224, -80, + 240, -80, 241, 129, -80, -80, -80, -80, -80, -80, + 242, -80, -80, -80 }; /* YYPGOTO[NTERM-NUM]. */ static const short int yypgoto[] = { - -134, -134, -134, -134, 23, -46, -134, -134, -134, -134, - 239, -134, -134, -134, -134, 118, -134, -134, -134, -134, - -134, -134, -134, -134, -134, -134, 185, -134, -134, -134, - -134, -134, 182, 217, -45, 164, -5, 28, 200, -133, - -54, -78 + -80, -80, -80, -80, -36, 22, -80, -80, -80, -80, + 244, -80, -80, -80, -80, 176, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, 187, -80, -80, -80, + -80, -80, 195, 243, 121, 155, -5, 145, 215, 93, + -55, -79 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -78 +#define YYTABLE_NINF -80 static const short int yytable[] = { - 47, 48, 3, 50, 80, 81, 53, 135, 136, 159, - 85, 161, 162, 163, 154, 44, 86, 49, 166, 147, - 168, 111, 114, 51, 124, 125, 124, 125, 133, 134, - 52, 175, 82, 83, 73, 82, 83, 140, 141, -29, - 89, 145, -29, -29, -29, -29, -29, -29, -29, -29, - -29, 90, 54, -29, -29, 91, 92, -29, 93, 94, - 95, 96, 97, 132, -29, 98, 82, 83, 89, 164, - 99, -68, -68, -68, -68, -68, -68, -68, -68, 45, - 46, -68, -68, 91, 92, 156, 56, 57, 142, 55, - 58, 115, 118, 98, 126, 59, 117, 122, 123, 130, - 169, 151, -31, 89, 62, -31, -31, -31, -31, -31, - -31, -31, -31, -31, 90, 63, -31, -31, 91, 92, - -31, 93, 94, 95, 96, 97, 64, -31, 98, 56, - 57, -77, 89, 99, -77, -77, -77, -77, -77, -77, - -77, -77, -77, 82, 83, -77, -77, 91, 92, -77, - -77, -77, -77, -77, -77, 73, -77, 98, 75, 76, - -2, 4, 123, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 77, 78, 14, 15, 16, 79, 17, 18, - 19, 20, 21, 22, 87, 23, 24, 119, 89, 127, - 88, 25, -44, -44, 131, -44, -44, -44, -44, 90, - 137, -44, -44, 91, 92, 105, 106, 107, 108, 157, - 82, 83, 109, 98, 158, 82, 83, 138, 110, 6, - 7, 8, 9, 10, 11, 12, 13, 146, 148, 14, - 15, 7, 8, 149, 10, 11, 12, 13, 150, 153, - 14, 15, 139, 154, 56, 57, 25, 83, 58, 113, - 171, 82, 83, 59, 121, 160, 129, 25, 72, 165, - 84, 167, 170, 172, 173, 174, 176, 177, 178, 66, - 0, 152 + 48, 49, 3, 51, 81, 82, 54, 137, 138, 90, + 45, 157, -70, -70, -70, -70, -70, -70, -70, -70, + 150, 86, -70, -70, 92, 93, 50, 87, 135, 136, + 83, 84, 52, 117, 120, 100, 128, 142, 143, 53, + 125, 147, -30, 90, 55, -30, -30, -30, -30, -30, + -30, -30, -30, -30, 91, 56, -30, -30, 92, 93, + -30, 94, 95, 96, 97, 98, 99, 63, -30, 100, + 64, 168, 7, 8, 101, 10, 11, 12, 13, 65, + 134, 14, 15, 83, 84, 141, 159, 57, 58, 144, + 113, 59, 148, 126, 74, 126, 60, 57, 58, 26, + 76, 59, 173, 154, -32, 90, 60, -32, -32, -32, + -32, -32, -32, -32, -32, -32, 91, 77, -32, -32, + 92, 93, -32, 94, 95, 96, 97, 98, 99, 78, + -32, 100, 46, 47, -79, 90, 101, -79, -79, -79, + -79, -79, -79, -79, -79, -79, 57, 58, -79, -79, + 92, 93, -79, -79, -79, -79, -79, -79, -79, 79, + -79, 100, 83, 84, -2, 4, 125, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 80, 149, 14, 15, + 16, 88, 17, 18, 19, 20, 21, 22, 23, 116, + 24, 25, 127, 90, 127, 89, 26, -46, -46, 133, + -46, -46, -46, -46, 91, 139, -46, -46, 92, 93, + 107, 108, 109, 110, 119, 124, 140, 132, 111, 100, + 74, 83, 84, 152, 112, 6, 7, 8, 9, 10, + 11, 12, 13, 151, 153, 14, 15, 162, 157, 164, + 165, 166, 167, 160, 83, 84, 121, 170, 129, 172, + 161, 83, 84, 26, 175, 83, 84, 123, 156, 131, + 84, 180, 163, 115, 155, 169, 171, 174, 176, 177, + 178, 179, 181, 182, 183, 67, 85, 0, 0, 0, + 0, 0, 0, 0, 0, 73 }; static const short int yycheck[] = { - 5, 6, 0, 8, 58, 59, 11, 85, 86, 142, - 28, 144, 145, 146, 14, 31, 34, 31, 151, 97, - 153, 67, 67, 31, 70, 70, 72, 72, 82, 83, - 31, 164, 32, 33, 31, 32, 33, 91, 92, 0, - 1, 95, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 26, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 29, 25, 26, 32, 33, 1, 147, - 31, 4, 5, 6, 7, 8, 9, 10, 11, 26, - 27, 14, 15, 16, 17, 139, 26, 27, 93, 26, - 30, 68, 69, 26, 71, 35, 68, 69, 31, 71, - 154, 106, 0, 1, 31, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 1, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 1, 25, 26, 26, - 27, 0, 1, 31, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 32, 33, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 31, 25, 26, 31, 31, - 0, 1, 31, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 31, 31, 14, 15, 16, 31, 18, 19, - 20, 21, 22, 23, 31, 25, 26, 69, 1, 71, - 31, 31, 5, 6, 31, 8, 9, 10, 11, 12, - 31, 14, 15, 16, 17, 18, 19, 20, 21, 31, - 32, 33, 25, 26, 31, 32, 33, 31, 31, 4, - 5, 6, 7, 8, 9, 10, 11, 26, 1, 14, - 15, 5, 6, 13, 8, 9, 10, 11, 31, 26, - 14, 15, 24, 14, 26, 27, 31, 33, 30, 67, - 31, 32, 33, 35, 69, 31, 71, 31, 41, 31, - 60, 31, 31, 31, 31, 31, 31, 31, 31, 30, - -1, 107 + 5, 6, 0, 8, 59, 60, 11, 86, 87, 1, + 32, 14, 4, 5, 6, 7, 8, 9, 10, 11, + 99, 29, 14, 15, 16, 17, 32, 35, 83, 84, + 33, 34, 32, 69, 70, 27, 72, 92, 93, 32, + 32, 96, 0, 1, 27, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 27, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 32, 26, 27, + 1, 150, 5, 6, 32, 8, 9, 10, 11, 1, + 30, 14, 15, 33, 34, 25, 141, 27, 28, 94, + 68, 31, 27, 71, 32, 73, 36, 27, 28, 32, + 32, 31, 157, 108, 0, 1, 36, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 32, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 32, + 26, 27, 27, 28, 0, 1, 32, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 27, 28, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 32, + 26, 27, 33, 34, 0, 1, 32, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 32, 27, 14, 15, + 16, 32, 18, 19, 20, 21, 22, 23, 24, 68, + 26, 27, 71, 1, 73, 32, 32, 5, 6, 32, + 8, 9, 10, 11, 12, 32, 14, 15, 16, 17, + 18, 19, 20, 21, 69, 70, 32, 72, 26, 27, + 32, 33, 34, 13, 32, 4, 5, 6, 7, 8, + 9, 10, 11, 1, 32, 14, 15, 144, 14, 146, + 147, 148, 149, 32, 33, 34, 70, 154, 72, 156, + 32, 33, 34, 32, 32, 33, 34, 70, 27, 72, + 34, 168, 32, 68, 109, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 31, 61, -1, -1, -1, + -1, -1, -1, -1, -1, 42 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const unsigned char yystos[] = { - 0, 37, 38, 0, 1, 3, 4, 5, 6, 7, + 0, 38, 39, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 16, 18, 19, 20, - 21, 22, 23, 25, 26, 31, 39, 40, 42, 43, - 44, 45, 48, 49, 51, 55, 57, 59, 60, 62, - 64, 65, 66, 73, 31, 26, 27, 72, 72, 31, - 72, 31, 31, 72, 26, 26, 26, 27, 30, 35, - 76, 77, 31, 1, 1, 46, 46, 52, 54, 58, - 69, 63, 69, 31, 74, 31, 31, 31, 31, 31, - 76, 76, 32, 33, 74, 28, 34, 31, 31, 1, - 12, 16, 17, 19, 20, 21, 22, 23, 26, 31, - 41, 47, 67, 68, 70, 18, 19, 20, 21, 25, - 31, 41, 53, 68, 70, 40, 50, 73, 40, 51, - 56, 62, 73, 31, 41, 70, 40, 51, 61, 62, - 73, 31, 29, 76, 76, 77, 77, 31, 31, 24, - 76, 76, 72, 71, 72, 76, 26, 77, 1, 13, - 31, 72, 71, 26, 14, 75, 76, 31, 31, 75, - 31, 75, 75, 75, 77, 31, 75, 31, 75, 76, - 31, 31, 31, 31, 31, 75, 31, 31, 31 + 21, 22, 23, 24, 26, 27, 32, 40, 41, 43, + 44, 45, 46, 49, 50, 52, 56, 58, 60, 61, + 63, 65, 66, 67, 74, 32, 27, 28, 73, 73, + 32, 73, 32, 32, 73, 27, 27, 27, 28, 31, + 36, 77, 78, 32, 1, 1, 47, 47, 53, 55, + 59, 70, 64, 70, 32, 75, 32, 32, 32, 32, + 32, 77, 77, 33, 34, 75, 29, 35, 32, 32, + 1, 12, 16, 17, 19, 20, 21, 22, 23, 24, + 27, 32, 42, 48, 68, 69, 71, 18, 19, 20, + 21, 26, 32, 42, 54, 69, 71, 41, 51, 74, + 41, 52, 57, 63, 74, 32, 42, 71, 41, 52, + 62, 63, 74, 32, 30, 77, 77, 78, 78, 32, + 32, 25, 77, 77, 73, 72, 73, 77, 27, 27, + 78, 1, 13, 32, 73, 72, 27, 14, 76, 77, + 32, 32, 76, 32, 76, 76, 76, 76, 78, 32, + 76, 32, 76, 77, 32, 32, 32, 32, 32, 32, + 76, 32, 32, 32 }; #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) @@ -981,7 +990,7 @@ yydestruct (yytype, yyvaluep) switch (yytype) { - case 49: /* choice_entry */ + case 50: /* choice_entry */ { fprintf(stderr, "%s:%d: missing end statement for this entry\n", @@ -991,7 +1000,7 @@ yydestruct (yytype, yyvaluep) }; break; - case 55: /* if_entry */ + case 56: /* if_entry */ { fprintf(stderr, "%s:%d: missing end statement for this entry\n", @@ -1001,7 +1010,7 @@ yydestruct (yytype, yyvaluep) }; break; - case 60: /* menu_entry */ + case 61: /* menu_entry */ { fprintf(stderr, "%s:%d: missing end statement for this entry\n", @@ -1334,17 +1343,17 @@ yyreduce: { zconf_error("invalid statement"); ;} break; - case 26: + case 27: { zconf_error("unknown option \"%s\"", yyvsp[-2].string); ;} break; - case 27: + case 28: { zconf_error("invalid option"); ;} break; - case 28: + case 29: { struct symbol *sym = sym_lookup(yyvsp[-1].string, 0); @@ -1354,7 +1363,7 @@ yyreduce: ;} break; - case 29: + case 30: { menu_end_entry(); @@ -1362,7 +1371,7 @@ yyreduce: ;} break; - case 30: + case 31: { struct symbol *sym = sym_lookup(yyvsp[-1].string, 0); @@ -1372,7 +1381,7 @@ yyreduce: ;} break; - case 31: + case 32: { if (current_entry->prompt) @@ -1384,7 +1393,7 @@ yyreduce: ;} break; - case 38: + case 39: { menu_set_type(yyvsp[-2].id->stype); @@ -1394,7 +1403,7 @@ yyreduce: ;} break; - case 39: + case 40: { menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr); @@ -1402,7 +1411,7 @@ yyreduce: ;} break; - case 40: + case 41: { menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr); @@ -1414,7 +1423,15 @@ yyreduce: ;} break; - case 41: + case 42: + + { + menu_add_symbol(P_DESELECT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:deselect\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 43: { menu_add_symbol(P_SELECT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr); @@ -1422,7 +1439,7 @@ yyreduce: ;} break; - case 42: + case 44: { menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,yyvsp[-3].symbol, yyvsp[-2].symbol), yyvsp[-1].expr); @@ -1430,7 +1447,7 @@ yyreduce: ;} break; - case 43: + case 45: { struct symbol *sym = sym_lookup(NULL, 0); @@ -1441,14 +1458,14 @@ yyreduce: ;} break; - case 44: + case 46: { yyval.menu = menu_add_menu(); ;} break; - case 45: + case 47: { if (zconf_endtoken(yyvsp[0].id, T_CHOICE, T_ENDCHOICE)) { @@ -1458,7 +1475,7 @@ yyreduce: ;} break; - case 53: + case 55: { menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr); @@ -1466,7 +1483,7 @@ yyreduce: ;} break; - case 54: + case 56: { if (yyvsp[-2].id->stype == S_BOOLEAN || yyvsp[-2].id->stype == S_TRISTATE) { @@ -1479,7 +1496,7 @@ yyreduce: ;} break; - case 55: + case 57: { current_entry->sym->flags |= SYMBOL_OPTIONAL; @@ -1487,14 +1504,14 @@ yyreduce: ;} break; - case 56: + case 58: { menu_add_prop(P_RESET, NULL, NULL, yyvsp[-1].expr); ;} break; - case 57: + case 59: { if (yyvsp[-3].id->stype == S_UNKNOWN) { @@ -1506,7 +1523,7 @@ yyreduce: ;} break; - case 60: + case 62: { printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno()); @@ -1516,7 +1533,7 @@ yyreduce: ;} break; - case 61: + case 63: { if (zconf_endtoken(yyvsp[0].id, T_IF, T_ENDIF)) { @@ -1526,7 +1543,7 @@ yyreduce: ;} break; - case 67: + case 69: { menu_add_entry(NULL); @@ -1535,14 +1552,14 @@ yyreduce: ;} break; - case 68: + case 70: { yyval.menu = menu_add_menu(); ;} break; - case 69: + case 71: { if (zconf_endtoken(yyvsp[0].id, T_MENU, T_ENDMENU)) { @@ -1552,7 +1569,7 @@ yyreduce: ;} break; - case 75: + case 77: { printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string); @@ -1560,7 +1577,7 @@ yyreduce: ;} break; - case 76: + case 78: { menu_add_entry(NULL); @@ -1569,14 +1586,14 @@ yyreduce: ;} break; - case 77: + case 79: { menu_end_entry(); ;} break; - case 78: + case 80: { printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno()); @@ -1584,52 +1601,42 @@ yyreduce: ;} break; - case 79: + case 81: { current_entry->sym->help = yyvsp[0].string; ;} break; - case 84: - - { - menu_add_dep(yyvsp[-1].expr); - printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno()); -;} - break; - - case 85: - - { - menu_add_dep(yyvsp[-1].expr); - printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno()); -;} - break; - case 86: { menu_add_dep(yyvsp[-1].expr); - printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno()); + printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 87: + + { + menu_add_dep(yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno()); ;} break; case 88: { - menu_add_prompt(P_PROMPT, yyvsp[-1].string, yyvsp[0].expr); + menu_add_dep(yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno()); ;} break; - case 91: + case 90: - { yyval.id = yyvsp[-1].id; ;} - break; - - case 92: - - { yyval.id = yyvsp[-1].id; ;} + { + menu_add_prompt(P_PROMPT, yyvsp[-1].string, yyvsp[0].expr); +;} break; case 93: @@ -1637,58 +1644,68 @@ yyreduce: { yyval.id = yyvsp[-1].id; ;} break; - case 96: + case 94: - { yyval.expr = NULL; ;} + { yyval.id = yyvsp[-1].id; ;} break; - case 97: + case 95: - { yyval.expr = yyvsp[0].expr; ;} + { yyval.id = yyvsp[-1].id; ;} break; case 98: - { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); ;} + { yyval.expr = NULL; ;} break; case 99: - { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;} + { yyval.expr = yyvsp[0].expr; ;} break; case 100: - { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;} + { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); ;} break; case 101: - { yyval.expr = yyvsp[-1].expr; ;} + { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;} break; case 102: - { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); ;} + { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;} break; case 103: - { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); ;} + { yyval.expr = yyvsp[-1].expr; ;} break; case 104: - { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); ;} + { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); ;} break; case 105: - { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;} + { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); ;} break; case 106: + { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); ;} + break; + + case 107: + + { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;} + break; + + case 108: + { yyval.symbol = sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); ;} break; diff --git a/scripts/config/zconf.y b/scripts/config/zconf.y index 4b8ba45061..9689a3ed80 100644 --- a/scripts/config/zconf.y +++ b/scripts/config/zconf.y @@ -69,6 +69,7 @@ static struct menu *current_menu, *current_entry; %token T_PROMPT %token T_TYPE %token T_DEFAULT +%token T_DESELECT %token T_SELECT %token T_RANGE %token T_ON @@ -119,7 +120,7 @@ stmt_list: ; option_name: - T_DEPENDS | T_PROMPT | T_TYPE | T_SELECT | T_OPTIONAL | T_RANGE | T_DEFAULT | T_RESET + T_DEPENDS | T_PROMPT | T_TYPE | T_DESELECT | T_SELECT | T_OPTIONAL | T_RANGE | T_DEFAULT | T_RESET ; common_stmt: @@ -204,6 +205,12 @@ config_option: T_DEFAULT expr if_expr T_EOL $1->stype); }; +config_option: T_DESELECT T_WORD if_expr T_EOL +{ + menu_add_symbol(P_DESELECT, sym_lookup($2, 0), $3); + printd(DEBUG_PARSE, "%s:%d:deselect\n", zconf_curname(), zconf_lineno()); +}; + config_option: T_SELECT T_WORD if_expr T_EOL { menu_add_symbol(P_SELECT, sym_lookup($2, 0), $3);