diff options
author | James Simmons <jsimmons@kozmo.(none)> | 2003-03-15 22:57:13 -0800 |
---|---|---|
committer | James Simmons <jsimmons@kozmo.(none)> | 2003-03-15 22:57:13 -0800 |
commit | 588c3ec20c24f1f24bb81ea59c4ede273b093de7 (patch) | |
tree | e64a07e46789732e911200381cbe188a1d5c8041 /scripts | |
parent | a1c449fc62f4dc56f43986650186e426cf129d90 (diff) | |
parent | bda2dabecfce94ecbcf155e7a4563b1004933100 (diff) | |
download | history-588c3ec20c24f1f24bb81ea59c4ede273b093de7.tar.gz |
Merge kozmo.(none):/usr/src/linus-2.5
into kozmo.(none):/usr/src/fbdev-2.5
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/kconfig/Makefile | 50 | ||||
-rw-r--r-- | scripts/kconfig/expr.h | 4 | ||||
-rw-r--r-- | scripts/kconfig/gconf.c | 1580 | ||||
-rw-r--r-- | scripts/kconfig/gconf.glade | 543 | ||||
-rw-r--r-- | scripts/kconfig/images.c | 34 | ||||
-rw-r--r-- | scripts/kconfig/lex.zconf.c_shipped | 1104 | ||||
-rw-r--r-- | scripts/kconfig/mconf.c | 23 | ||||
-rw-r--r-- | scripts/kconfig/menu.c | 33 | ||||
-rw-r--r-- | scripts/kconfig/qconf.cc | 312 | ||||
-rw-r--r-- | scripts/kconfig/qconf.h | 20 | ||||
-rw-r--r-- | scripts/kconfig/symbol.c | 3 | ||||
-rw-r--r-- | scripts/kconfig/zconf.l | 4 | ||||
-rw-r--r-- | scripts/kconfig/zconf.tab.c_shipped | 1123 | ||||
-rw-r--r-- | scripts/kconfig/zconf.y | 27 |
14 files changed, 3688 insertions, 1172 deletions
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile index 927d00fe78140d..bae5e29352da0b 100644 --- a/scripts/kconfig/Makefile +++ b/scripts/kconfig/Makefile @@ -6,20 +6,29 @@ # Utilizes the lxdialog package # qconf: Used for the xconfig target # Based on QT which needs to be installed to compile it +# gconf: Used for the gconfig target +# Based on GTK which needs to be installed to compile it # +################# # object files used by all lkc flavours libkconfig-objs := zconf.tab.o -host-progs := conf mconf qconf +host-progs := conf mconf qconf gconf conf-objs := conf.o libkconfig.so mconf-objs := mconf.o libkconfig.so -qconf-objs := kconfig_load.o +ifeq ($(MAKECMDGOALS),$(obj)/qconf) qconf-cxxobjs := qconf.o +qconf-objs := kconfig_load.o +endif + +ifeq ($(MAKECMDGOALS),$(obj)/gconf) +gconf-objs := gconf.o kconfig_load.o +endif clean-files := libkconfig.so lkc_defs.h qconf.moc .tmp_qtcheck \ - zconf.tab.c zconf.tab.h lex.zconf.c + .tmp_gtkcheck zconf.tab.c zconf.tab.h lex.zconf.c # generated files seem to need this to find local include files HOSTCFLAGS_lex.zconf.o := -I$(src) @@ -28,7 +37,10 @@ HOSTCFLAGS_zconf.tab.o := -I$(src) HOSTLOADLIBES_qconf = -L$(QTDIR)/lib -Wl,-rpath,$(QTDIR)/lib -l$(QTLIB) -ldl HOSTCXXFLAGS_qconf.o = -I$(QTDIR)/include -$(obj)/conf.o $(obj)/mconf.o $(obj)/qconf.o: $(obj)/zconf.tab.h +HOSTLOADLIBES_gconf = `pkg-config gtk+-2.0 gmodule-2.0 libglade-2.0 --libs` +HOSTCFLAGS_gconf.o = `pkg-config gtk+-2.0 gmodule-2.0 libglade-2.0 --cflags` + +$(obj)/conf.o $(obj)/mconf.o $(obj)/qconf.o $(obj)/gconf.o: $(obj)/zconf.tab.h $(obj)/qconf.o: $(obj)/.tmp_qtcheck @@ -38,7 +50,7 @@ MOC = $(QTDIR)/bin/moc # QT needs some extra effort... $(obj)/.tmp_qtcheck: - @set -e; for d in $$QTDIR /usr/share/qt /usr/lib/qt*3*; do \ + @set -e; for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \ if [ -f $$d/include/qconfig.h ]; then DIR=$$d; break; fi; \ done; \ if [ -z "$$DIR" ]; then \ @@ -60,12 +72,40 @@ $(obj)/.tmp_qtcheck: fi endif +$(obj)/gconf.o: $(obj)/.tmp_gtkcheck + +ifeq ($(MAKECMDGOALS),$(obj)/gconf) +-include $(obj)/.tmp_gtkcheck + +# GTK needs some extra effort, too... +$(obj)/.tmp_gtkcheck: + @if `pkg-config gtk+-2.0 gmodule-2.0 libglade-2.0 --exists`; then \ + if `pkg-config gtk+-2.0 --atleast-version=2.0.0`; then \ + touch $@; \ + else \ + echo "*"; \ + echo "* GTK+ is present but version >= 2.0.0 is required."; \ + echo "*"; \ + false; \ + fi \ + else \ + echo "*"; \ + echo "* Unable to find the GTK+ installation. Please make sure that"; \ + echo "* the GTK+ 2.0 development package is correctly installed..."; \ + echo "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; \ + echo "*"; \ + false; \ + fi +endif + $(obj)/zconf.tab.o: $(obj)/lex.zconf.c $(obj)/kconfig_load.o: $(obj)/lkc_defs.h $(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h +$(obj)/gconf.o: $(obj)/lkc_defs.h + $(obj)/%.moc: $(src)/%.h $(MOC) -i $< -o $@ diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h index 896a296d17c523..373e8346d5b315 100644 --- a/scripts/kconfig/expr.h +++ b/scripts/kconfig/expr.h @@ -155,9 +155,11 @@ struct property { #define for_all_properties(sym, st, tok) \ for (st = sym->prop; st; st = st->next) \ if (st->type == (tok)) -#define for_all_prompts(sym, st) for_all_properties(sym, st, P_PROMPT) #define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT) #define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE) +#define for_all_prompts(sym, st) \ + for (st = sym->prop; st; st = st->next) \ + if (st->text) struct menu { struct menu *next; diff --git a/scripts/kconfig/gconf.c b/scripts/kconfig/gconf.c new file mode 100644 index 00000000000000..8baeb63dfaf7aa --- /dev/null +++ b/scripts/kconfig/gconf.c @@ -0,0 +1,1580 @@ +/* Hey EMACS -*- linux-c -*- */ +/* + * + * Copyright (C) 2002-2003 Romain Lievin <roms@lpg.ticalc.org> + * Released under the terms of the GNU GPL v2.0. + * + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "lkc.h" +#include "images.c" + +#include <glade/glade.h> +#include <gtk/gtk.h> +#include <glib.h> +#include <gdk/gdkkeysyms.h> + +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <time.h> +#include <stdlib.h> + +//#define DEBUG + +enum { + SINGLE_VIEW, SPLIT_VIEW, FULL_VIEW +}; + +static gint view_mode = SPLIT_VIEW; +static gboolean show_name = TRUE; +static gboolean show_range = TRUE; +static gboolean show_value = TRUE; +static gboolean show_all = FALSE; +static gboolean show_debug = FALSE; +static gboolean resizeable = FALSE; + +static gboolean config_changed = FALSE; + +static char nohelp_text[] = + "Sorry, no help available for this option yet.\n"; + +GtkWidget *main_wnd = NULL; +GtkWidget *tree1_w = NULL; // left frame +GtkWidget *tree2_w = NULL; // right frame +GtkWidget *text_w = NULL; +GtkWidget *hpaned = NULL; +GtkWidget *vpaned = NULL; +GtkWidget *back_btn = NULL; + +GtkTextTag *tag1, *tag2; +GdkColor color; + +GtkTreeStore *tree1, *tree2, *tree; +GtkTreeModel *model1, *model2; +static GtkTreeIter *parents[256] = { 0 }; +static gint indent; + +static struct menu *current; + +enum { + COL_OPTION, COL_NAME, COL_NO, COL_MOD, COL_YES, COL_VALUE, + COL_MENU, COL_COLOR, COL_EDIT, COL_PIXBUF, + COL_PIXVIS, COL_BTNVIS, COL_BTNACT, COL_BTNINC, + COL_NUMBER +}; + +static void display_list(void); +static void display_tree(struct menu *menu); +static void display_tree_part(void); +static void update_tree(struct menu *src, GtkTreeIter * dst); +static void set_node2(GtkTreeIter * node, struct menu *menu, gchar ** row); +static gchar **fill_row(struct menu *menu); + + +/* Helping/Debugging Functions */ + + +const char *dbg_print_stype(int val) +{ + static char buf[256]; + + bzero(buf, 256); + + if (val == S_UNKNOWN) + strcpy(buf, "unknown"); + if (val == S_BOOLEAN) + strcpy(buf, "boolean"); + if (val == S_TRISTATE) + strcpy(buf, "tristate"); + if (val == S_INT) + strcpy(buf, "int"); + if (val == S_HEX) + strcpy(buf, "hex"); + if (val == S_STRING) + strcpy(buf, "string"); + if (val == S_OTHER) + strcpy(buf, "other"); + +#ifdef DEBUG + printf("%s", buf); +#endif + + return buf; +} + +const char *dbg_print_flags(int val) +{ + static char buf[256] = { 0 }; + + bzero(buf, 256); + + if (val & SYMBOL_YES) + strcat(buf, "yes/"); + if (val & SYMBOL_MOD) + strcat(buf, "mod/"); + if (val & SYMBOL_NO) + strcat(buf, "no/"); + if (val & SYMBOL_CONST) + strcat(buf, "const/"); + if (val & SYMBOL_CHECK) + strcat(buf, "check/"); + if (val & SYMBOL_CHOICE) + strcat(buf, "choice/"); + if (val & SYMBOL_CHOICEVAL) + strcat(buf, "choiceval/"); + if (val & SYMBOL_PRINTED) + strcat(buf, "printed/"); + if (val & SYMBOL_VALID) + strcat(buf, "valid/"); + if (val & SYMBOL_OPTIONAL) + strcat(buf, "optional/"); + if (val & SYMBOL_WRITE) + strcat(buf, "write/"); + if (val & SYMBOL_CHANGED) + strcat(buf, "changed/"); + if (val & SYMBOL_NEW) + strcat(buf, "new/"); + if (val & SYMBOL_AUTO) + strcat(buf, "auto/"); + + buf[strlen(buf) - 1] = '\0'; +#ifdef DEBUG + printf("%s", buf); +#endif + + return buf; +} + +const char *dbg_print_ptype(int val) +{ + static char buf[256]; + + bzero(buf, 256); + + if (val == P_UNKNOWN) + strcpy(buf, "unknown"); + if (val == P_PROMPT) + strcpy(buf, "prompt"); + if (val == P_COMMENT) + strcpy(buf, "comment"); + if (val == P_MENU) + strcpy(buf, "menu"); + if (val == P_ROOTMENU) + strcpy(buf, "rootmenu"); + if (val == P_DEFAULT) + strcpy(buf, "default"); + if (val == P_CHOICE) + strcpy(buf, "choice"); + +#ifdef DEBUG + printf("%s", buf); +#endif + + return buf; +} + + +/* Main Window Initialization */ + + +void init_main_window(const gchar * glade_file) +{ + GladeXML *xml; + GtkWidget *widget; + GtkTextBuffer *txtbuf; + char title[256]; + GdkPixmap *pixmap; + GdkBitmap *mask; + GtkStyle *style; + + xml = glade_xml_new(glade_file, "window1", NULL); + if (!xml) + g_error("GUI loading failed !\n"); + glade_xml_signal_autoconnect(xml); + + main_wnd = glade_xml_get_widget(xml, "window1"); + hpaned = glade_xml_get_widget(xml, "hpaned1"); + vpaned = glade_xml_get_widget(xml, "vpaned1"); + tree1_w = glade_xml_get_widget(xml, "treeview1"); + tree2_w = glade_xml_get_widget(xml, "treeview2"); + text_w = glade_xml_get_widget(xml, "textview3"); + + back_btn = glade_xml_get_widget(xml, "button1"); + gtk_widget_set_sensitive(back_btn, FALSE); + + widget = glade_xml_get_widget(xml, "show_name1"); + gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget, + show_name); + + widget = glade_xml_get_widget(xml, "show_range1"); + gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget, + show_range); + + widget = glade_xml_get_widget(xml, "show_data1"); + gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget, + show_value); + + style = gtk_widget_get_style(main_wnd); + widget = glade_xml_get_widget(xml, "toolbar1"); + + pixmap = gdk_pixmap_create_from_xpm_d(main_wnd->window, &mask, + &style->bg[GTK_STATE_NORMAL], + (gchar **) xpm_single_view); + gtk_image_set_from_pixmap(GTK_IMAGE + (((GtkToolbarChild + *) (g_list_nth(GTK_TOOLBAR(widget)-> + children, + 5)->data))->icon), + pixmap, mask); + pixmap = + gdk_pixmap_create_from_xpm_d(main_wnd->window, &mask, + &style->bg[GTK_STATE_NORMAL], + (gchar **) xpm_split_view); + gtk_image_set_from_pixmap(GTK_IMAGE + (((GtkToolbarChild + *) (g_list_nth(GTK_TOOLBAR(widget)-> + children, + 6)->data))->icon), + pixmap, mask); + pixmap = + gdk_pixmap_create_from_xpm_d(main_wnd->window, &mask, + &style->bg[GTK_STATE_NORMAL], + (gchar **) xpm_tree_view); + gtk_image_set_from_pixmap(GTK_IMAGE + (((GtkToolbarChild + *) (g_list_nth(GTK_TOOLBAR(widget)-> + children, + 7)->data))->icon), + pixmap, mask); + + switch (view_mode) { + case SINGLE_VIEW: + widget = glade_xml_get_widget(xml, "button4"); + gtk_button_clicked(GTK_BUTTON(widget)); + break; + case SPLIT_VIEW: + widget = glade_xml_get_widget(xml, "button5"); + gtk_button_clicked(GTK_BUTTON(widget)); + break; + case FULL_VIEW: + widget = glade_xml_get_widget(xml, "button6"); + gtk_button_clicked(GTK_BUTTON(widget)); + break; + } + + txtbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w)); + tag1 = gtk_text_buffer_create_tag(txtbuf, "mytag1", + "foreground", "red", + "weight", PANGO_WEIGHT_BOLD, + NULL); + tag2 = gtk_text_buffer_create_tag(txtbuf, "mytag2", + /*"style", PANGO_STYLE_OBLIQUE, */ + NULL); + + sprintf(title, "Linux Kernel v%s.%s.%s%s Configuration", + getenv("VERSION"), getenv("PATCHLEVEL"), + getenv("SUBLEVEL"), getenv("EXTRAVERSION")); + gtk_window_set_title(GTK_WINDOW(main_wnd), title); + + gtk_widget_show(main_wnd); +} + +void init_tree_model(void) +{ + gint i; + + tree = tree2 = gtk_tree_store_new(COL_NUMBER, + G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_POINTER, GDK_TYPE_COLOR, + G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF, + G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, + G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); + model2 = GTK_TREE_MODEL(tree2); + + for (parents[0] = NULL, i = 1; i < 256; i++) + parents[i] = (GtkTreeIter *) g_malloc(sizeof(GtkTreeIter)); + + tree1 = gtk_tree_store_new(COL_NUMBER, + G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_POINTER, GDK_TYPE_COLOR, + G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF, + G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, + G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); + model1 = GTK_TREE_MODEL(tree1); +} + +void init_left_tree(void) +{ + GtkTreeView *view = GTK_TREE_VIEW(tree1_w); + GtkCellRenderer *renderer; + GtkTreeSelection *sel; + + gtk_tree_view_set_model(view, model1); + gtk_tree_view_set_headers_visible(view, TRUE); + gtk_tree_view_set_rules_hint(view, FALSE); + + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(view, -1, + "Options", renderer, + "text", COL_OPTION, + "foreground-gdk", + COL_COLOR, NULL); + + sel = gtk_tree_view_get_selection(view); + gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE); + gtk_widget_realize(tree1_w); +} + +static void renderer_edited(GtkCellRendererText * cell, + const gchar * path_string, + const gchar * new_text, gpointer user_data); +static void renderer_toggled(GtkCellRendererToggle * cellrenderertoggle, + gchar * arg1, gpointer user_data); + +void init_right_tree(void) +{ + GtkTreeView *view = GTK_TREE_VIEW(tree2_w); + GtkCellRenderer *renderer; + GtkTreeSelection *sel; + GtkTreeViewColumn *column; + gint i; + + gtk_tree_view_set_model(view, model2); + gtk_tree_view_set_headers_visible(view, TRUE); + gtk_tree_view_set_rules_hint(view, FALSE); + + column = gtk_tree_view_column_new(); + gtk_tree_view_append_column(view, column); + gtk_tree_view_column_set_title(column, "Options"); + + renderer = gtk_cell_renderer_pixbuf_new(); + gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column), + renderer, FALSE); + gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column), + renderer, + "pixbuf", COL_PIXBUF, + "visible", COL_PIXVIS, NULL); + renderer = gtk_cell_renderer_toggle_new(); + gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column), + renderer, FALSE); + gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column), + renderer, + "active", COL_BTNACT, + "inconsistent", COL_BTNINC, + "visible", COL_BTNVIS, NULL); + g_signal_connect(G_OBJECT(renderer), "toggled", + G_CALLBACK(renderer_toggled), NULL); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column), + renderer, FALSE); + gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column), + renderer, + "text", COL_OPTION, + "foreground-gdk", + COL_COLOR, NULL); + + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(view, -1, + "Name", renderer, + "text", COL_NAME, + "foreground-gdk", + COL_COLOR, NULL); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(view, -1, + "N", renderer, + "text", COL_NO, + "foreground-gdk", + COL_COLOR, NULL); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(view, -1, + "M", renderer, + "text", COL_MOD, + "foreground-gdk", + COL_COLOR, NULL); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(view, -1, + "Y", renderer, + "text", COL_YES, + "foreground-gdk", + COL_COLOR, NULL); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(view, -1, + "Value", renderer, + "text", COL_VALUE, + "editable", + COL_EDIT, + "foreground-gdk", + COL_COLOR, NULL); + g_signal_connect(G_OBJECT(renderer), "edited", + G_CALLBACK(renderer_edited), NULL); + + column = gtk_tree_view_get_column(view, COL_NAME); + gtk_tree_view_column_set_visible(column, show_name); + column = gtk_tree_view_get_column(view, COL_NO); + gtk_tree_view_column_set_visible(column, show_range); + column = gtk_tree_view_get_column(view, COL_MOD); + gtk_tree_view_column_set_visible(column, show_range); + column = gtk_tree_view_get_column(view, COL_YES); + gtk_tree_view_column_set_visible(column, show_range); + column = gtk_tree_view_get_column(view, COL_VALUE); + gtk_tree_view_column_set_visible(column, show_value); + + if (resizeable) { + for (i = 0; i < COL_VALUE; i++) { + column = gtk_tree_view_get_column(view, i); + gtk_tree_view_column_set_resizable(column, TRUE); + } + } + + sel = gtk_tree_view_get_selection(view); + gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE); +} + + +/* Utility Functions */ + + +static void text_insert_help(struct menu *menu) +{ + GtkTextBuffer *buffer; + GtkTextIter start, end; + const char *prompt = menu_get_prompt(menu); + gchar *name; + const char *help = nohelp_text; + + if (!menu->sym) + help = ""; + else if (menu->sym->help) + help = menu->sym->help; + + if (menu->sym && menu->sym->name) + name = g_strdup_printf(menu->sym->name); + else + name = g_strdup(""); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w)); + gtk_text_buffer_get_bounds(buffer, &start, &end); + gtk_text_buffer_delete(buffer, &start, &end); + gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_w), 15); + + gtk_text_buffer_get_end_iter(buffer, &end); + gtk_text_buffer_insert_with_tags(buffer, &end, prompt, -1, tag1, + NULL); + gtk_text_buffer_insert_at_cursor(buffer, " ", 1); + gtk_text_buffer_get_end_iter(buffer, &end); + gtk_text_buffer_insert_with_tags(buffer, &end, name, -1, tag1, + NULL); + gtk_text_buffer_insert_at_cursor(buffer, "\n\n", 2); + gtk_text_buffer_get_end_iter(buffer, &end); + gtk_text_buffer_insert_with_tags(buffer, &end, help, -1, tag2, + NULL); +} + + +static void text_insert_msg(const char *title, const char *message) +{ + GtkTextBuffer *buffer; + GtkTextIter start, end; + const char *msg = message; + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w)); + gtk_text_buffer_get_bounds(buffer, &start, &end); + gtk_text_buffer_delete(buffer, &start, &end); + gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_w), 15); + + gtk_text_buffer_get_end_iter(buffer, &end); + gtk_text_buffer_insert_with_tags(buffer, &end, title, -1, tag1, + NULL); + gtk_text_buffer_insert_at_cursor(buffer, "\n\n", 2); + gtk_text_buffer_get_end_iter(buffer, &end); + gtk_text_buffer_insert_with_tags(buffer, &end, msg, -1, tag2, + NULL); +} + + +/* Main Windows Callbacks */ + +void on_save1_activate(GtkMenuItem * menuitem, gpointer user_data); +gboolean on_window1_delete_event(GtkWidget * widget, GdkEvent * event, + gpointer user_data) +{ + GtkWidget *dialog, *label; + gint result; + + if (config_changed == FALSE) + return FALSE; + + dialog = gtk_dialog_new_with_buttons("Warning !", + GTK_WINDOW(main_wnd), + (GtkDialogFlags) + (GTK_DIALOG_MODAL | + GTK_DIALOG_DESTROY_WITH_PARENT), + GTK_STOCK_OK, + GTK_RESPONSE_YES, + GTK_STOCK_NO, + GTK_RESPONSE_NO, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, NULL); + gtk_dialog_set_default_response(GTK_DIALOG(dialog), + GTK_RESPONSE_CANCEL); + + label = gtk_label_new("\nSave configuration ?\n"); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label); + gtk_widget_show(label); + + result = gtk_dialog_run(GTK_DIALOG(dialog)); + switch (result) { + case GTK_RESPONSE_YES: + on_save1_activate(NULL, NULL); + return FALSE; + case GTK_RESPONSE_NO: + return FALSE; + case GTK_RESPONSE_CANCEL: + case GTK_RESPONSE_DELETE_EVENT: + default: + gtk_widget_destroy(dialog); + return TRUE; + } + + return FALSE; +} + + +void on_window1_destroy(GtkObject * object, gpointer user_data) +{ + gtk_main_quit(); +} + + +void +on_window1_size_request(GtkWidget * widget, + GtkRequisition * requisition, gpointer user_data) +{ + static gint old_h = 0; + gint w, h; + + if (widget->window == NULL) + gtk_window_get_default_size(GTK_WINDOW(main_wnd), &w, &h); + else + gdk_window_get_size(widget->window, &w, &h); + + if (h == old_h) + return; + old_h = h; + + gtk_paned_set_position(GTK_PANED(vpaned), 2 * h / 3); +} + + +/* Menu & Toolbar Callbacks */ + + +static void +load_filename(GtkFileSelection * file_selector, gpointer user_data) +{ + const gchar *fn; + + fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION + (user_data)); + + if (conf_read(fn)) + text_insert_msg("Error", "Unable to load configuration !"); + else + display_tree(&rootmenu); +} + +void on_load1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + GtkWidget *fs; + + fs = gtk_file_selection_new("Load file..."); + g_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button), + "clicked", + G_CALLBACK(load_filename), (gpointer) fs); + g_signal_connect_swapped(GTK_OBJECT + (GTK_FILE_SELECTION(fs)->ok_button), + "clicked", G_CALLBACK(gtk_widget_destroy), + (gpointer) fs); + g_signal_connect_swapped(GTK_OBJECT + (GTK_FILE_SELECTION(fs)->cancel_button), + "clicked", G_CALLBACK(gtk_widget_destroy), + (gpointer) fs); + gtk_widget_show(fs); +} + + +void on_save1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + if (conf_write(NULL)) + text_insert_msg("Error", "Unable to save configuration !"); + + config_changed = FALSE; +} + + +static void +store_filename(GtkFileSelection * file_selector, gpointer user_data) +{ + const gchar *fn; + + fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION + (user_data)); + + if (conf_write(fn)) + text_insert_msg("Error", "Unable to save configuration !"); + + gtk_widget_destroy(GTK_WIDGET(user_data)); +} + +void on_save_as1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + GtkWidget *fs; + + fs = gtk_file_selection_new("Save file as..."); + g_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button), + "clicked", + G_CALLBACK(store_filename), (gpointer) fs); + g_signal_connect_swapped(GTK_OBJECT + (GTK_FILE_SELECTION(fs)->ok_button), + "clicked", G_CALLBACK(gtk_widget_destroy), + (gpointer) fs); + g_signal_connect_swapped(GTK_OBJECT + (GTK_FILE_SELECTION(fs)->cancel_button), + "clicked", G_CALLBACK(gtk_widget_destroy), + (gpointer) fs); + gtk_widget_show(fs); +} + + +void on_quit1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + if (!on_window1_delete_event(NULL, NULL, NULL)) + gtk_widget_destroy(GTK_WIDGET(main_wnd)); +} + + +void on_show_name1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + GtkTreeViewColumn *col; + + show_name = GTK_CHECK_MENU_ITEM(menuitem)->active; + col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_NAME); + if (col) + gtk_tree_view_column_set_visible(col, show_name); +} + + +void on_show_range1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + GtkTreeViewColumn *col; + + show_range = GTK_CHECK_MENU_ITEM(menuitem)->active; + col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_NO); + if (col) + gtk_tree_view_column_set_visible(col, show_range); + col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_MOD); + if (col) + gtk_tree_view_column_set_visible(col, show_range); + col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_YES); + if (col) + gtk_tree_view_column_set_visible(col, show_range); + +} + + +void on_show_data1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + GtkTreeViewColumn *col; + + show_value = GTK_CHECK_MENU_ITEM(menuitem)->active; + col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_VALUE); + if (col) + gtk_tree_view_column_set_visible(col, show_value); +} + + +void +on_show_all_options1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + show_all = GTK_CHECK_MENU_ITEM(menuitem)->active; + + gtk_tree_store_clear(tree2); + display_tree(&rootmenu); // instead of update_tree for speed reasons +} + + +void +on_show_debug_info1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + show_debug = GTK_CHECK_MENU_ITEM(menuitem)->active; + update_tree(&rootmenu, NULL); +} + + +void on_introduction1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + GtkWidget *dialog; + const gchar *intro_text = + "Welcome to gkc, the GTK+ graphical kernel configuration tool\n" + "for Linux.\n" + "For each option, a blank box indicates the feature is disabled, a\n" + "check indicates it is enabled, and a dot indicates that it is to\n" + "be compiled as a module. Clicking on the box will cycle through the three states.\n" + "\n" + "If you do not see an option (e.g., a device driver) that you\n" + "believe should be present, try turning on Show All Options\n" + "under the Options menu.\n" + "Although there is no cross reference yet to help you figure out\n" + "what other options must be enabled to support the option you\n" + "are interested in, you can still view the help of a grayed-out\n" + "option.\n" + "\n" + "Toggling Show Debug Info under the Options menu will show \n" + "the dependencies, which you can then match by examining other options."; + + dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, intro_text); + g_signal_connect_swapped(GTK_OBJECT(dialog), "response", + G_CALLBACK(gtk_widget_destroy), + GTK_OBJECT(dialog)); + gtk_widget_show_all(dialog); +} + + +void on_about1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + GtkWidget *dialog; + const gchar *about_text = + "gkc is copyright (c) 2002 Romain Lievin <roms@lpg.ticalc.org>.\n" + "Based on the source code from Roman Zippel.\n"; + + dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, about_text); + g_signal_connect_swapped(GTK_OBJECT(dialog), "response", + G_CALLBACK(gtk_widget_destroy), + GTK_OBJECT(dialog)); + gtk_widget_show_all(dialog); +} + + +void on_license1_activate(GtkMenuItem * menuitem, gpointer user_data) +{ + GtkWidget *dialog; + const gchar *license_text = + "gkc is released under the terms of the GNU GPL v2.\n" + "For more information, please see the source code or\n" + "visit http://www.fsf.org/licenses/licenses.html\n"; + + dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, license_text); + g_signal_connect_swapped(GTK_OBJECT(dialog), "response", + G_CALLBACK(gtk_widget_destroy), + GTK_OBJECT(dialog)); + gtk_widget_show_all(dialog); +} + + +void on_back_pressed(GtkButton * button, gpointer user_data) +{ + enum prop_type type; + + current = current->parent; + type = current->prompt ? current->prompt->type : P_UNKNOWN; + if ((type != P_ROOTMENU) && (type != P_MENU)) + current = current->parent; + display_tree_part(); + + if (current == &rootmenu) + gtk_widget_set_sensitive(back_btn, FALSE); +} + + +void on_load_pressed(GtkButton * button, gpointer user_data) +{ + on_load1_activate(NULL, user_data); +} + + +void on_save_pressed(GtkButton * button, gpointer user_data) +{ + on_save1_activate(NULL, user_data); +} + + +void on_single_clicked(GtkButton * button, gpointer user_data) +{ + view_mode = SINGLE_VIEW; + gtk_paned_set_position(GTK_PANED(hpaned), 0); + gtk_widget_hide(tree1_w); + if (tree2) + gtk_tree_store_clear(tree2); + current = &rootmenu; + display_tree_part(); +} + + +void on_split_clicked(GtkButton * button, gpointer user_data) +{ + gint w, h; + view_mode = SPLIT_VIEW; + gtk_widget_show(tree1_w); + gtk_window_get_default_size(GTK_WINDOW(main_wnd), &w, &h); + gtk_paned_set_position(GTK_PANED(hpaned), w / 2); + if (tree2) + gtk_tree_store_clear(tree2); + display_list(); +} + + +void on_full_clicked(GtkButton * button, gpointer user_data) +{ + view_mode = FULL_VIEW; + gtk_paned_set_position(GTK_PANED(hpaned), 0); + gtk_widget_hide(tree1_w); + if (tree2) + gtk_tree_store_clear(tree2); + display_tree(&rootmenu); + gtk_widget_set_sensitive(back_btn, FALSE); +} + + +void on_collapse_pressed(GtkButton * button, gpointer user_data) +{ + gtk_tree_view_collapse_all(GTK_TREE_VIEW(tree2_w)); +} + + +void on_expand_pressed(GtkButton * button, gpointer user_data) +{ + gtk_tree_view_expand_all(GTK_TREE_VIEW(tree2_w)); +} + + +/* CTree Callbacks */ + +/* Change hex/int/string value in the cell */ +static void renderer_edited(GtkCellRendererText * cell, + const gchar * path_string, + const gchar * new_text, gpointer user_data) +{ + GtkTreePath *path = gtk_tree_path_new_from_string(path_string); + GtkTreeIter iter; + const char *old_def, *new_def; + struct menu *menu; + struct symbol *sym; + + if (!gtk_tree_model_get_iter(model2, &iter, path)) + return; + + gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1); + sym = menu->sym; + + gtk_tree_model_get(model2, &iter, COL_VALUE, &old_def, -1); + new_def = new_text; + + sym_set_string_value(sym, new_def); + + config_changed = TRUE; + update_tree(&rootmenu, NULL); + + gtk_tree_path_free(path); +} + +/* Change the value of a symbol and update the tree */ +static void change_sym_value(struct menu *menu, gint col) +{ + struct symbol *sym = menu->sym; + int stype; + tristate oldval, newval; + + newval = no; + switch (col) { + case COL_OPTION: + return; + case COL_NAME: + return; + case COL_NO: + newval = no; + break; + case COL_MOD: + newval = mod; + break; + case COL_YES: + newval = yes; + break; + default: + break; + } + + if (!sym) + return; + + stype = sym_get_type(sym); + switch (stype) { + case S_BOOLEAN: + case S_TRISTATE: + if (col == COL_VALUE) + return; + else { + oldval = sym_get_tristate_value(sym); + if (!sym_tristate_within_range(sym, newval)) + newval = yes; + sym_set_tristate_value(sym, newval); + config_changed = TRUE; + if (view_mode == FULL_VIEW) + update_tree(&rootmenu, NULL); + else + //display_tree_part(); //fixme: keep exp/coll + update_tree(current, NULL); + } + break; + case S_INT: + case S_HEX: + case S_STRING: + break; + } +} + +static void renderer_toggled(GtkCellRendererToggle * cellrenderertoggle, + gchar * path_string, gpointer user_data) +{ + GtkTreePath *path = gtk_tree_path_new_from_string(path_string); + GtkTreeIter iter; + gint col; + struct menu *menu; + const int next_col[3] = { COL_NO, COL_MOD, COL_YES }; + + if (!gtk_tree_model_get_iter(model2, &iter, path)) + return; + + gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1); + gtk_tree_model_get(model2, &iter, COL_BTNINC, &col, -1); + if (col) + col = COL_MOD; + else { + gtk_tree_model_get(model2, &iter, COL_BTNACT, &col, -1); + col = col ? COL_YES : COL_NO; + } + + change_sym_value(menu, next_col[((col - COL_NO) + 1) % 3]); + + gtk_tree_path_free(path); +} + +static gint column2index(GtkTreeViewColumn * column) +{ + gint i; + + for (i = 0; i < COL_NUMBER; i++) { + GtkTreeViewColumn *col; + + col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), i); + if (col == column) + return i; + } + + return -1; +} + + +//#define GTK_BUG_FIXED // GTK+ 2.1.4 mini + +/* User click: update choice (full) or goes down (single) */ +gboolean +on_treeview2_button_press_event(GtkWidget * widget, + GdkEventButton * event, gpointer user_data) +{ + GtkTreeView *view = GTK_TREE_VIEW(widget); + GtkTreePath *path; + GtkTreeViewColumn *column; + GtkTreeIter iter; + struct menu *menu; + gint col; + +#ifdef GTK_BUG_FIXED + gint tx = (gint) event->x; + gint ty = (gint) event->y; + gint cx, cy; + + gtk_tree_view_get_path_at_pos(view, tx, ty, &path, &column, &cx, + &cy); +#else + gtk_tree_view_get_cursor(view, &path, &column); +#endif + if (path == NULL) + return FALSE; + + gtk_tree_model_get_iter(model2, &iter, path); + gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1); + + col = column2index(column); + if ((col == COL_OPTION) && (event->type == GDK_2BUTTON_PRESS) && + (view_mode != FULL_VIEW) && menu->list) { + enum prop_type type; + type = menu->prompt ? menu->prompt->type : P_UNKNOWN; + if ((type != P_MENU) && (type != P_ROOTMENU)) + return FALSE; + current = menu; + display_tree_part(); + gtk_widget_set_sensitive(back_btn, TRUE); + } else + change_sym_value(menu, col); + + return FALSE; +} + +/* Key pressed: update choice */ +gboolean +on_treeview2_key_press_event(GtkWidget * widget, + GdkEventKey * event, gpointer user_data) +{ + GtkTreeView *view = GTK_TREE_VIEW(widget); + GtkTreePath *path; + GtkTreeViewColumn *column; + GtkTreeIter iter; + struct menu *menu; + gint col; + + gtk_tree_view_get_cursor(view, &path, &column); + if (path == NULL) { + //g_warning("key_press_event: path is NULL !\n"); + return FALSE; + } + + if (event->keyval == GDK_space) { + if (gtk_tree_view_row_expanded(view, path)) + gtk_tree_view_collapse_row(view, path); + else + gtk_tree_view_expand_row(view, path, FALSE); + return FALSE; + } + if (widget == tree1_w) + return FALSE; + + gtk_tree_model_get_iter(model2, &iter, path); + gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1); + + if (!strcasecmp(event->string, "n")) + col = COL_NO; + else if (!strcasecmp(event->string, "m")) + col = COL_MOD; + else if (!strcasecmp(event->string, "y")) + col = COL_YES; + else if (!strcasecmp(event->string, "e")) + col = COL_VALUE; + else + col = 0; + + change_sym_value(menu, col); + + return FALSE; +} + + +/* Row selection changed: update help */ +void +on_treeview2_cursor_changed(GtkTreeView * treeview, gpointer user_data) +{ + GtkTreeSelection *selection; + GtkTreeIter iter; + struct menu *menu; + + selection = gtk_tree_view_get_selection(treeview); + if (gtk_tree_selection_get_selected(selection, &model2, &iter)) { + gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1); + text_insert_help(menu); + } +} + + +/* User click: display sub-tree in the right frame. */ +gboolean +on_treeview1_button_press_event(GtkWidget * widget, + GdkEventButton * event, gpointer user_data) +{ + GtkTreeView *view = GTK_TREE_VIEW(widget); + GtkTreePath *path; + GtkTreeViewColumn *column; + GtkTreeIter iter; + struct menu *menu; + + gint tx = (gint) event->x; + gint ty = (gint) event->y; + gint cx, cy; + + gtk_tree_view_get_path_at_pos(view, tx, ty, &path, &column, &cx, + &cy); + if (path == NULL) + return FALSE; + + gtk_tree_model_get_iter(model1, &iter, path); + gtk_tree_model_get(model1, &iter, COL_MENU, &menu, -1); + + current = menu; + display_tree_part(); + + return FALSE; +} + + +/* Conf management */ + + +/* Fill a row of strings */ +static gchar **fill_row(struct menu *menu) +{ + static gchar **row; + struct symbol *sym = menu->sym; + const char *def; + int stype; + tristate val; + enum prop_type type; + + //g_strfreev(row); //to fix... + row = (gchar **) g_malloc0(COL_NUMBER * sizeof(gchar *)); + row[COL_OPTION] = + g_strdup_printf("%s %s", menu_get_prompt(menu), + sym ? (sym-> + flags & SYMBOL_NEW ? "(NEW)" : "") : + ""); + + if (show_all && !menu_is_visible(menu)) + row[COL_COLOR] = g_strdup("DarkGray"); + else + row[COL_COLOR] = g_strdup("Black"); + + type = menu->prompt ? menu->prompt->type : P_UNKNOWN; + switch (type) { + case P_MENU: + case P_ROOTMENU: + row[COL_PIXBUF] = + (gchar *) (view_mode != + FULL_VIEW ? xpm_menu : xpm_void); + row[COL_PIXVIS] = GINT_TO_POINTER(TRUE); + row[COL_BTNVIS] = GINT_TO_POINTER(FALSE); + break; + case P_COMMENT: + row[COL_PIXBUF] = (gchar *) xpm_void; + row[COL_PIXVIS] = GINT_TO_POINTER(FALSE); + row[COL_BTNVIS] = GINT_TO_POINTER(FALSE); + break; + default: + row[COL_PIXBUF] = (gchar *) xpm_void; + row[COL_PIXVIS] = GINT_TO_POINTER(FALSE); + row[COL_BTNVIS] = GINT_TO_POINTER(TRUE); + break; + } + + if (!sym) + return row; + row[COL_NAME] = g_strdup(sym->name); + + sym_calc_value(sym); + sym->flags &= ~SYMBOL_CHANGED; + + if (sym_is_choice(sym)) { // parse childs for getting final value + struct menu *child; + struct symbol *def_sym = sym_get_choice_value(sym); + struct menu *def_menu = NULL; + + for (child = menu->list; child; child = child->next) { + if (menu_is_visible(child) + && child->sym == def_sym) + def_menu = child; + } + + if (def_menu) + row[COL_VALUE] = + g_strdup(menu_get_prompt(def_menu)); + } + + stype = sym_get_type(sym); + switch (stype) { + case S_BOOLEAN: + if (sym_is_choice(sym)) + break; + case S_TRISTATE: + val = sym_get_tristate_value(sym); + switch (val) { + case no: + row[COL_NO] = g_strdup("N"); + row[COL_VALUE] = g_strdup("N"); + row[COL_BTNACT] = GINT_TO_POINTER(FALSE); + row[COL_BTNINC] = GINT_TO_POINTER(FALSE); + break; + case mod: + row[COL_MOD] = g_strdup("M"); + row[COL_VALUE] = g_strdup("M"); + row[COL_BTNINC] = GINT_TO_POINTER(TRUE); + break; + case yes: + row[COL_YES] = g_strdup("Y"); + row[COL_VALUE] = g_strdup("Y"); + row[COL_BTNACT] = GINT_TO_POINTER(TRUE); + row[COL_BTNINC] = GINT_TO_POINTER(FALSE); + break; + } + + if (val != no && sym_tristate_within_range(sym, no)) + row[COL_NO] = g_strdup("_"); + if (val != mod && sym_tristate_within_range(sym, mod)) + row[COL_MOD] = g_strdup("_"); + if (val != yes && sym_tristate_within_range(sym, yes)) + row[COL_YES] = g_strdup("_"); + break; + case S_INT: + case S_HEX: + case S_STRING: + def = sym_get_string_value(sym); + row[COL_VALUE] = g_strdup(def); + row[COL_EDIT] = GINT_TO_POINTER(TRUE); + row[COL_BTNVIS] = GINT_TO_POINTER(FALSE); + break; + } + + return row; +} + + +/* Set the node content with a row of strings */ +static void set_node2(GtkTreeIter * node, struct menu *menu, gchar ** row) +{ + GdkColor color; + gboolean success; + GdkPixbuf *pix; + + pix = gdk_pixbuf_new_from_xpm_data((const char **) + row[COL_PIXBUF]); + + gdk_color_parse(row[COL_COLOR], &color); + gdk_colormap_alloc_colors(gdk_colormap_get_system(), &color, 1, + FALSE, FALSE, &success); + + gtk_tree_store_set(tree, node, + COL_OPTION, row[COL_OPTION], + COL_NAME, row[COL_NAME], + COL_NO, row[COL_NO], + COL_MOD, row[COL_MOD], + COL_YES, row[COL_YES], + COL_VALUE, row[COL_VALUE], + COL_MENU, (gpointer) menu, + COL_COLOR, &color, + COL_EDIT, GPOINTER_TO_INT(row[COL_EDIT]), + COL_PIXBUF, pix, + COL_PIXVIS, GPOINTER_TO_INT(row[COL_PIXVIS]), + COL_BTNVIS, GPOINTER_TO_INT(row[COL_BTNVIS]), + COL_BTNACT, GPOINTER_TO_INT(row[COL_BTNACT]), + COL_BTNINC, GPOINTER_TO_INT(row[COL_BTNINC]), + -1); + + g_object_unref(pix); + g_strfreev(row); +} + + +/* Add a node to the tree */ +static void place_node2(struct menu *menu, char **row) +{ + GtkTreeIter *parent = parents[indent - 1]; + GtkTreeIter *node = parents[indent]; + + gtk_tree_store_append(tree, node, parent); + set_node2(node, menu, row); +} + + +/* Find a node in the GTK+ tree */ +static GtkTreeIter found; + +/* + * Find a menu in the GtkTree starting at parent. + */ +GtkTreeIter *gtktree_iter_find_node(GtkTreeIter * parent, + struct menu *tofind) +{ + GtkTreeIter iter; + GtkTreeIter *child = &iter; + gboolean valid; + GtkTreeIter *ret; + + valid = gtk_tree_model_iter_children(model2, child, parent); + while (valid) { + struct menu *menu; + + gtk_tree_model_get(model2, child, 6, &menu, -1); + + if (menu == tofind) { + memcpy(&found, child, sizeof(GtkTreeIter)); + return &found; + } + + ret = gtktree_iter_find_node(child, tofind); + if (ret) + return ret; + + valid = gtk_tree_model_iter_next(model2, child); + } + + return NULL; +} + + +/* + * Update the tree by adding/removing entries + * Does not change other nodes + */ +static void update_tree(struct menu *src, GtkTreeIter * dst) +{ + struct menu *child1; + GtkTreeIter iter, tmp; + GtkTreeIter *child2 = &iter; + gboolean valid; + GtkTreeIter *sibling; + struct symbol *sym; + struct property *prop; + struct menu *menu1, *menu2; + + if (src == &rootmenu) + indent = 1; + + valid = gtk_tree_model_iter_children(model2, child2, dst); + for (child1 = src->list; child1; child1 = child1->next) { + + prop = child1->prompt; + sym = child1->sym; + + reparse: + menu1 = child1; + if (valid) + gtk_tree_model_get(model2, child2, COL_MENU, + &menu2, -1); + else + menu2 = NULL; // force adding of a first child + +#ifdef DEBUG + printf("%*c%s | %s\n", indent, ' ', + menu1 ? menu_get_prompt(menu1) : "nil", + menu2 ? menu_get_prompt(menu2) : "nil"); +#endif + + if (!menu_is_visible(child1) && !show_all) { // remove node + if (gtktree_iter_find_node(dst, menu1) != NULL) { + memcpy(&tmp, child2, sizeof(GtkTreeIter)); + valid = gtk_tree_model_iter_next(model2, + child2); + gtk_tree_store_remove(tree2, &tmp); + if (!valid) + return; // next parent + else + goto reparse; // next child + } else + continue; + } + + if (menu1 != menu2) { + if (gtktree_iter_find_node(dst, menu1) == NULL) { // add node + if (!valid && !menu2) + sibling = NULL; + else + sibling = child2; + gtk_tree_store_insert_before(tree2, + child2, + dst, sibling); + set_node2(child2, menu1, fill_row(menu1)); + if (menu2 == NULL) + valid = TRUE; + } else { // remove node + memcpy(&tmp, child2, sizeof(GtkTreeIter)); + valid = gtk_tree_model_iter_next(model2, + child2); + gtk_tree_store_remove(tree2, &tmp); + if (!valid) + return; // next parent + else + goto reparse; // next child + } + } else if (sym && (sym->flags & SYMBOL_CHANGED)) { + set_node2(child2, menu1, fill_row(menu1)); + } + + indent++; + update_tree(child1, child2); + indent--; + + valid = gtk_tree_model_iter_next(model2, child2); + } +} + + +/* Display the whole tree (single/split/full view) */ +static void display_tree(struct menu *menu) +{ + struct symbol *sym; + struct property *prop; + struct menu *child; + enum prop_type ptype; + + if (menu == &rootmenu) { + indent = 1; + current = &rootmenu; + } + + for (child = menu->list; child; child = child->next) { + prop = child->prompt; + sym = child->sym; + ptype = prop ? prop->type : P_UNKNOWN; + + if (sym) + sym->flags &= ~SYMBOL_CHANGED; + + if ((view_mode == SPLIT_VIEW) && (ptype != P_ROOTMENU) && + (tree == tree1)) + continue; + + if ((view_mode == SPLIT_VIEW) && (ptype == P_ROOTMENU) && + (tree == tree2)) + continue; + + if (menu_is_visible(child) || show_all) + place_node2(child, fill_row(child)); +#ifdef DEBUG + printf("%*c%s: ", indent, ' ', menu_get_prompt(child)); + dbg_print_ptype(ptype); + printf(" | "); + if (sym) { + dbg_print_stype(sym->type); + printf(" | "); + dbg_print_flags(sym->flags); + printf("\n"); + } else + printf("\n"); +#endif + if ((view_mode != FULL_VIEW) && (ptype == P_MENU) + && (tree == tree2)) + continue; + + if (((menu != &rootmenu) && (ptype != P_ROOTMENU)) || + (view_mode == FULL_VIEW) + || (view_mode == SPLIT_VIEW)) { + indent++; + display_tree(child); + indent--; + } + } +} + +/* Display a part of the tree starting at current node (single/split view) */ +static void display_tree_part(void) +{ + if (tree2) + gtk_tree_store_clear(tree2); + display_tree(current); + gtk_tree_view_expand_all(GTK_TREE_VIEW(tree2_w)); +} + +/* Display the list in the left frame (split view) */ +static void display_list(void) +{ + tree = tree1; + display_tree(&rootmenu); + gtk_tree_view_expand_all(GTK_TREE_VIEW(tree1_w)); + tree = tree2; +} + +static void fixup_rootmenu(struct menu *menu) +{ + struct menu *child; + + if (!menu->prompt || menu->prompt->type != P_MENU) + return; + menu->prompt->type = P_ROOTMENU; + for (child = menu->list; child; child = child->next) + fixup_rootmenu(child); +} + + +/* Main */ + + +int main(int ac, char *av[]) +{ + const char *name; + gchar *cur_dir, *exe_path; + gchar *glade_file; + +#ifndef LKC_DIRECT_LINK + kconfig_load(); +#endif + + /* GTK stuffs */ + gtk_set_locale(); + gtk_init(&ac, &av); + glade_init(); + + //add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); + //add_pixmap_directory (PACKAGE_SOURCE_DIR "/pixmaps"); + + /* Determine GUI path */ + cur_dir = g_get_current_dir(); + exe_path = g_strdup(av[0]); + exe_path[0] = '/'; + glade_file = g_strconcat(cur_dir, exe_path, ".glade", NULL); + g_free(cur_dir); + g_free(exe_path); + + /* Load the interface and connect signals */ + init_main_window(glade_file); + init_tree_model(); + init_left_tree(); + init_right_tree(); + + /* Conf stuffs */ + if (ac > 1 && av[1][0] == '-') { + switch (av[1][1]) { + case 'a': + //showAll = 1; + break; + case 'h': + case '?': + printf("%s <config>\n", av[0]); + exit(0); + } + name = av[2]; + } else + name = av[1]; + + conf_parse(name); + fixup_rootmenu(&rootmenu); + conf_read(NULL); + + switch (view_mode) { + case SINGLE_VIEW: + display_tree_part(); + break; + case SPLIT_VIEW: + display_list(); + break; + case FULL_VIEW: + display_tree(&rootmenu); + break; + } + + gtk_main(); + + return 0; +} diff --git a/scripts/kconfig/gconf.glade b/scripts/kconfig/gconf.glade new file mode 100644 index 00000000000000..1e1736d81ee950 --- /dev/null +++ b/scripts/kconfig/gconf.glade @@ -0,0 +1,543 @@ +<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> +<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> + +<glade-interface> + +<widget class="GtkWindow" id="window1"> + <property name="visible">True</property> + <property name="title" translatable="yes">Gtk Kernel Configurator</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_NONE</property> + <property name="modal">False</property> + <property name="default_width">640</property> + <property name="default_height">480</property> + <property name="resizable">True</property> + <property name="destroy_with_parent">False</property> + <signal name="destroy" handler="on_window1_destroy" object="window1"/> + <signal name="size_request" handler="on_window1_size_request" object="vpaned1" last_modification_time="Fri, 11 Jan 2002 16:17:11 GMT"/> + <signal name="delete_event" handler="on_window1_delete_event" object="window1" last_modification_time="Sun, 09 Mar 2003 19:42:46 GMT"/> + + <child> + <widget class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkMenuBar" id="menubar1"> + <property name="visible">True</property> + + <child> + <widget class="GtkMenuItem" id="file1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_File</property> + <property name="use_underline">True</property> + + <child> + <widget class="GtkMenu" id="file1_menu"> + + <child> + <widget class="GtkImageMenuItem" id="load1"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Load a config file</property> + <property name="label" translatable="yes">_Load</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_load1_activate"/> + <accelerator key="L" modifiers="GDK_CONTROL_MASK" signal="activate"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image27"> + <property name="visible">True</property> + <property name="stock">gtk-open</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkImageMenuItem" id="save1"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Save the config in .config</property> + <property name="label" translatable="yes">_Save</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_save1_activate"/> + <accelerator key="S" modifiers="GDK_CONTROL_MASK" signal="activate"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image28"> + <property name="visible">True</property> + <property name="stock">gtk-save</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkImageMenuItem" id="save_as1"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Save the config in a file</property> + <property name="label" translatable="yes">Save _as</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_save_as1_activate"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image29"> + <property name="visible">True</property> + <property name="stock">gtk-save-as</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="separator1"> + <property name="visible">True</property> + </widget> + </child> + + <child> + <widget class="GtkImageMenuItem" id="quit1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Quit</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_quit1_activate"/> + <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image30"> + <property name="visible">True</property> + <property name="stock">gtk-quit</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="options1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Options</property> + <property name="use_underline">True</property> + + <child> + <widget class="GtkMenu" id="options1_menu"> + + <child> + <widget class="GtkCheckMenuItem" id="show_name1"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Show name</property> + <property name="label" translatable="yes">Show _name</property> + <property name="use_underline">True</property> + <property name="active">False</property> + <signal name="activate" handler="on_show_name1_activate"/> + </widget> + </child> + + <child> + <widget class="GtkCheckMenuItem" id="show_range1"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Show range (Y/M/N)</property> + <property name="label" translatable="yes">Show _range</property> + <property name="use_underline">True</property> + <property name="active">False</property> + <signal name="activate" handler="on_show_range1_activate"/> + </widget> + </child> + + <child> + <widget class="GtkCheckMenuItem" id="show_data1"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Show value of the option</property> + <property name="label" translatable="yes">Show _data</property> + <property name="use_underline">True</property> + <property name="active">False</property> + <signal name="activate" handler="on_show_data1_activate"/> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="separator2"> + <property name="visible">True</property> + </widget> + </child> + + <child> + <widget class="GtkCheckMenuItem" id="show_all_options1"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Show all options</property> + <property name="label" translatable="yes">Show all _options</property> + <property name="use_underline">True</property> + <property name="active">False</property> + <signal name="activate" handler="on_show_all_options1_activate"/> + </widget> + </child> + + <child> + <widget class="GtkCheckMenuItem" id="show_debug_info1"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Show masked options</property> + <property name="label" translatable="yes">Show _debug info</property> + <property name="use_underline">True</property> + <property name="active">False</property> + <signal name="activate" handler="on_show_debug_info1_activate"/> + </widget> + </child> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="help1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Help</property> + <property name="use_underline">True</property> + + <child> + <widget class="GtkMenu" id="help1_menu"> + + <child> + <widget class="GtkImageMenuItem" id="introduction1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Introduction</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_introduction1_activate" last_modification_time="Fri, 15 Nov 2002 20:26:30 GMT"/> + <accelerator key="I" modifiers="GDK_CONTROL_MASK" signal="activate"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image31"> + <property name="visible">True</property> + <property name="stock">gtk-dialog-question</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkImageMenuItem" id="about1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_About</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_about1_activate" last_modification_time="Fri, 15 Nov 2002 20:26:30 GMT"/> + <accelerator key="A" modifiers="GDK_CONTROL_MASK" signal="activate"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image32"> + <property name="visible">True</property> + <property name="stock">gtk-properties</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkImageMenuItem" id="license1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_License</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_license1_activate" last_modification_time="Fri, 15 Nov 2002 20:26:30 GMT"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image33"> + <property name="visible">True</property> + <property name="stock">gtk-justify-fill</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkHandleBox" id="handlebox1"> + <property name="visible">True</property> + <property name="shadow_type">GTK_SHADOW_OUT</property> + <property name="handle_position">GTK_POS_LEFT</property> + <property name="snap_edge">GTK_POS_TOP</property> + + <child> + <widget class="GtkToolbar" id="toolbar1"> + <property name="visible">True</property> + <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property> + <property name="toolbar_style">GTK_TOOLBAR_BOTH</property> + <property name="tooltips">True</property> + + <child> + <widget class="button" id="button1"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Goes up of one level (single view)</property> + <property name="label" translatable="yes">Back</property> + <property name="use_underline">True</property> + <property name="stock_pixmap">gtk-undo</property> + <signal name="pressed" handler="on_back_pressed"/> + </widget> + </child> + + <child> + <widget class="GtkVSeparator" id="vseparator1"> + <property name="visible">True</property> + </widget> + </child> + + <child> + <widget class="button" id="button2"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Load a config file</property> + <property name="label" translatable="yes">Load</property> + <property name="use_underline">True</property> + <property name="stock_pixmap">gtk-open</property> + <signal name="pressed" handler="on_load_pressed"/> + </widget> + </child> + + <child> + <widget class="button" id="button3"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Save a config file</property> + <property name="label" translatable="yes">Save</property> + <property name="use_underline">True</property> + <property name="stock_pixmap">gtk-save</property> + <signal name="pressed" handler="on_save_pressed"/> + </widget> + </child> + + <child> + <widget class="GtkVSeparator" id="vseparator2"> + <property name="visible">True</property> + </widget> + </child> + + <child> + <widget class="button" id="button4"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Single view</property> + <property name="label" translatable="yes">Single</property> + <property name="use_underline">True</property> + <property name="stock_pixmap">gtk-missing-image</property> + <signal name="clicked" handler="on_single_clicked" last_modification_time="Sun, 12 Jan 2003 14:28:39 GMT"/> + </widget> + </child> + + <child> + <widget class="button" id="button5"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Split view</property> + <property name="label" translatable="yes">Split</property> + <property name="use_underline">True</property> + <property name="stock_pixmap">gtk-missing-image</property> + <signal name="clicked" handler="on_split_clicked" last_modification_time="Sun, 12 Jan 2003 14:28:45 GMT"/> + </widget> + </child> + + <child> + <widget class="button" id="button6"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Full view</property> + <property name="label" translatable="yes">Full</property> + <property name="use_underline">True</property> + <property name="stock_pixmap">gtk-missing-image</property> + <signal name="clicked" handler="on_full_clicked" last_modification_time="Sun, 12 Jan 2003 14:28:50 GMT"/> + </widget> + </child> + + <child> + <widget class="GtkVSeparator" id="vseparator3"> + <property name="visible">True</property> + </widget> + </child> + + <child> + <widget class="button" id="button7"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Collapse the whole tree in the right frame</property> + <property name="label" translatable="yes">Collapse</property> + <property name="use_underline">True</property> + <signal name="pressed" handler="on_collapse_pressed"/> + </widget> + </child> + + <child> + <widget class="button" id="button8"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Expand the whole tree in the right frame</property> + <property name="label" translatable="yes">Expand</property> + <property name="use_underline">True</property> + <signal name="pressed" handler="on_expand_pressed"/> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkHPaned" id="hpaned1"> + <property name="width_request">1</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="position">0</property> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property> + <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <widget class="GtkTreeView" id="treeview1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_visible">True</property> + <property name="rules_hint">False</property> + <property name="reorderable">False</property> + <property name="enable_search">True</property> + <signal name="cursor_changed" handler="on_treeview2_cursor_changed" last_modification_time="Sun, 12 Jan 2003 15:58:22 GMT"/> + <signal name="button_press_event" handler="on_treeview1_button_press_event" last_modification_time="Sun, 12 Jan 2003 16:03:52 GMT"/> + <signal name="key_press_event" handler="on_treeview2_key_press_event" last_modification_time="Sun, 12 Jan 2003 16:11:44 GMT"/> + </widget> + </child> + </widget> + <packing> + <property name="shrink">True</property> + <property name="resize">False</property> + </packing> + </child> + + <child> + <widget class="GtkVPaned" id="vpaned1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="position">0</property> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow2"> + <property name="visible">True</property> + <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property> + <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <widget class="GtkTreeView" id="treeview2"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_focus">True</property> + <property name="headers_visible">True</property> + <property name="rules_hint">False</property> + <property name="reorderable">False</property> + <property name="enable_search">True</property> + <signal name="cursor_changed" handler="on_treeview2_cursor_changed" last_modification_time="Sun, 12 Jan 2003 15:57:55 GMT"/> + <signal name="button_press_event" handler="on_treeview2_button_press_event" last_modification_time="Sun, 12 Jan 2003 15:57:58 GMT"/> + <signal name="key_press_event" handler="on_treeview2_key_press_event" last_modification_time="Sun, 12 Jan 2003 15:58:01 GMT"/> + </widget> + </child> + </widget> + <packing> + <property name="shrink">True</property> + <property name="resize">False</property> + </packing> + </child> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow3"> + <property name="visible">True</property> + <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> + <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <widget class="GtkTextView" id="textview3"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="justification">GTK_JUSTIFY_LEFT</property> + <property name="wrap_mode">GTK_WRAP_WORD</property> + <property name="cursor_visible">True</property> + <property name="pixels_above_lines">0</property> + <property name="pixels_below_lines">0</property> + <property name="pixels_inside_wrap">0</property> + <property name="left_margin">0</property> + <property name="right_margin">0</property> + <property name="indent">0</property> + <property name="text" translatable="yes">Sorry, no help available for this option yet.</property> + </widget> + </child> + </widget> + <packing> + <property name="shrink">True</property> + <property name="resize">True</property> + </packing> + </child> + </widget> + <packing> + <property name="shrink">True</property> + <property name="resize">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> +</widget> + +</glade-interface> diff --git a/scripts/kconfig/images.c b/scripts/kconfig/images.c index 65a5d67f848888..d4f84bd4a96b6f 100644 --- a/scripts/kconfig/images.c +++ b/scripts/kconfig/images.c @@ -290,3 +290,37 @@ static const char *xpm_menu_inv[] = { " .......... ", " .......... ", " "}; + +static const char *xpm_menuback[] = { +"12 12 2 1", +" c white", +". c black", +" ", +" .......... ", +" . . ", +" . .. . ", +" . .... . ", +" . ...... . ", +" . ...... . ", +" . .... . ", +" . .. . ", +" . . ", +" .......... ", +" "}; + +static const char *xpm_void[] = { +"12 12 2 1", +" c white", +". c black", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/scripts/kconfig/lex.zconf.c_shipped b/scripts/kconfig/lex.zconf.c_shipped index 290d48114aab4d..b0300b6ca490f9 100644 --- a/scripts/kconfig/lex.zconf.c_shipped +++ b/scripts/kconfig/lex.zconf.c_shipped @@ -357,18 +357,18 @@ static yyconst short yy_nxt[][37] = }, { - 11, 38, 38, 39, 40, 41, 38, 42, 41, 43, - 44, 45, 46, 46, 47, 48, 46, 46, 46, 46, - 46, 46, 46, 46, 49, 46, 46, 46, 50, 46, - 46, 46, 46, 46, 46, 46, 51 + 11, 38, 38, 39, 40, 41, 42, 43, 41, 44, + 45, 46, 47, 47, 48, 49, 47, 47, 47, 47, + 47, 47, 47, 47, 50, 47, 47, 47, 51, 47, + 47, 47, 47, 47, 47, 47, 52 }, { - 11, 38, 38, 39, 40, 41, 38, 42, 41, 43, - 44, 45, 46, 46, 47, 48, 46, 46, 46, 46, - 46, 46, 46, 46, 49, 46, 46, 46, 50, 46, - 46, 46, 46, 46, 46, 46, 51 + 11, 38, 38, 39, 40, 41, 42, 43, 41, 44, + 45, 46, 47, 47, 48, 49, 47, 47, 47, 47, + 47, 47, 47, 47, 50, 47, 47, 47, 51, 47, + 47, 47, 47, 47, 47, 47, 52 }, { @@ -387,7 +387,7 @@ static yyconst short yy_nxt[][37] = }, { - 11, -13, 52, 53, -13, -13, 54, -13, -13, -13, + 11, -13, 53, 54, -13, -13, 55, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13 @@ -402,10 +402,10 @@ static yyconst short yy_nxt[][37] = }, { - 11, 55, 55, 56, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55 + 11, 56, 56, 57, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56 }, { @@ -425,109 +425,109 @@ static yyconst short yy_nxt[][37] = { 11, -18, -18, -18, -18, -18, -18, -18, -18, -18, - -18, -18, -18, 57, -18, -18, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -18 + -18, -18, -18, 58, -18, -18, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -18 }, { 11, -19, -19, -19, -19, -19, -19, -19, -19, -19, - -19, -19, -19, 57, -19, -19, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 58, 57, - 57, 57, 57, 57, 57, 57, -19 + -19, -19, -19, 58, -19, -19, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 59, 58, + 58, 58, 58, 58, 58, 58, -19 }, { 11, -20, -20, -20, -20, -20, -20, -20, -20, -20, - -20, -20, -20, 57, -20, -20, 57, 57, 57, 57, - 57, 57, 57, 59, 57, 57, 57, 57, 60, 57, - 57, 57, 57, 57, 57, 57, -20 + -20, -20, -20, 58, -20, -20, 58, 58, 58, 58, + 58, 58, 58, 60, 58, 58, 58, 58, 61, 58, + 58, 58, 58, 58, 58, 58, -20 }, { 11, -21, -21, -21, -21, -21, -21, -21, -21, -21, - -21, -21, -21, 57, -21, -21, 57, 57, 57, 57, - 61, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -21 + -21, -21, -21, 58, -21, -21, 58, 58, 58, 58, + 62, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -21 }, { 11, -22, -22, -22, -22, -22, -22, -22, -22, -22, - -22, -22, -22, 57, -22, -22, 57, 57, 57, 57, + -22, -22, -22, 58, -22, -22, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 62, 57, 57, - 57, 57, 57, 57, 57, 57, -22 + 58, 58, 58, 58, 58, 58, 58, 63, 58, 58, + 58, 58, 58, 58, 58, 58, -22 }, { 11, -23, -23, -23, -23, -23, -23, -23, -23, -23, - -23, -23, -23, 57, -23, -23, 57, 57, 57, 57, - 63, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -23 + -23, -23, -23, 58, -23, -23, 58, 58, 58, 58, + 64, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -23 }, { 11, -24, -24, -24, -24, -24, -24, -24, -24, -24, - -24, -24, -24, 57, -24, -24, 57, 57, 57, 57, - 57, 64, 57, 57, 57, 57, 57, 65, 57, 57, - 57, 57, 57, 57, 57, 57, -24 + -24, -24, -24, 58, -24, -24, 58, 58, 58, 58, + 58, 65, 58, 58, 58, 58, 58, 66, 58, 58, + 58, 58, 58, 58, 58, 58, -24 }, { 11, -25, -25, -25, -25, -25, -25, -25, -25, -25, - -25, -25, -25, 57, -25, -25, 66, 57, 57, 57, - 67, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -25 + -25, -25, -25, 58, -25, -25, 67, 58, 58, 58, + 68, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -25 }, { 11, -26, -26, -26, -26, -26, -26, -26, -26, -26, - -26, -26, -26, 57, -26, -26, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 68, - 57, 57, 57, 57, 57, 57, -26 + -26, -26, -26, 58, -26, -26, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 69, + 58, 58, 58, 58, 58, 58, -26 }, { 11, -27, -27, -27, -27, -27, -27, -27, -27, -27, - -27, -27, -27, 57, -27, -27, 57, 57, 57, 57, + -27, -27, -27, 58, -27, -27, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 69, 57, 57, 57, 57, -27 + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 70, 58, 58, 58, 58, -27 }, { 11, -28, -28, -28, -28, -28, -28, -28, -28, -28, - -28, -28, -28, 57, -28, -28, 57, 57, 57, 57, - 70, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -28 + -28, -28, -28, 58, -28, -28, 58, 58, 58, 58, + 71, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -28 }, { 11, -29, -29, -29, -29, -29, -29, -29, -29, -29, - -29, -29, -29, 57, -29, -29, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 71, 57, - 57, 57, 57, 72, 57, 57, -29 + -29, -29, -29, 58, -29, -29, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 72, 58, + 58, 58, 58, 73, 58, 58, -29 }, { 11, -30, -30, -30, -30, -30, -30, -30, -30, -30, - -30, -30, -30, 57, -30, -30, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 73, 57, 57, 57, 57, -30 + -30, -30, -30, 58, -30, -30, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 74, 58, 58, 58, 58, -30 }, { - 11, 74, 74, -31, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74 + 11, 75, 75, -31, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75 }, { - 11, -32, 75, 76, -32, -32, -32, -32, -32, -32, + 11, -32, 76, 77, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, @@ -535,17 +535,17 @@ static yyconst short yy_nxt[][37] = }, { - 11, 77, -33, -33, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77 + 11, 78, -33, -33, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78 }, { - 11, 78, 78, 79, 78, -34, 78, 78, -34, 78, - 78, 78, 78, 78, 78, -34, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78 + 11, 79, 79, 80, 79, -34, 79, 79, -34, 79, + 79, 79, 79, 79, 79, -34, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79 }, @@ -564,11 +564,11 @@ static yyconst short yy_nxt[][37] = }, { - 11, 80, 80, 81, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 11, 81, 81, 82, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80 + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81 }, { @@ -588,7 +588,7 @@ static yyconst short yy_nxt[][37] = { 11, -40, -40, -40, -40, -40, -40, -40, -40, -40, - -40, -40, -40, -40, 82, -40, -40, -40, -40, -40, + -40, -40, -40, -40, 83, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40 }, @@ -601,15 +601,15 @@ static yyconst short yy_nxt[][37] = }, { - 11, -42, -42, -42, -42, -42, -42, 83, -42, -42, - -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + 11, 84, 84, -42, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, - -42, -42, -42, -42, -42, -42, -42 + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84 }, { - 11, -43, -43, -43, -43, -43, -43, -43, -43, -43, + 11, -43, -43, -43, -43, -43, -43, 85, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43 @@ -625,272 +625,272 @@ static yyconst short yy_nxt[][37] = { 11, -45, -45, -45, -45, -45, -45, -45, -45, -45, - -45, 84, 85, 85, -45, -45, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, -45 + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45 }, { 11, -46, -46, -46, -46, -46, -46, -46, -46, -46, - -46, 85, 85, 85, -46, -46, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, -46 + -46, 86, 87, 87, -46, -46, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, -46 }, { 11, -47, -47, -47, -47, -47, -47, -47, -47, -47, - -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, 87, 87, 87, -47, -47, 87, 87, 87, 87, - -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, - -47, -47, -47, -47, -47, -47, -47 + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, -47 }, { - 11, -48, -48, 86, -48, -48, -48, -48, -48, -48, + 11, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48 }, { - 11, -49, -49, -49, -49, -49, -49, -49, -49, -49, - -49, 85, 85, 85, -49, -49, 85, 85, 85, 85, - 85, 87, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, -49 + 11, -49, -49, 88, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49 }, { 11, -50, -50, -50, -50, -50, -50, -50, -50, -50, - -50, 85, 85, 85, -50, -50, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 88, 85, 85, - 85, 85, 85, 85, 85, 85, -50 + -50, 87, 87, 87, -50, -50, 87, 87, 87, 87, + 87, 89, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, -50 }, { 11, -51, -51, -51, -51, -51, -51, -51, -51, -51, - -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, - -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, - -51, -51, -51, -51, -51, -51, 89 + -51, 87, 87, 87, -51, -51, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 90, 87, 87, + 87, 87, 87, 87, 87, 87, -51 }, { - 11, -52, 52, 53, -52, -52, 54, -52, -52, -52, + 11, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, - -52, -52, -52, -52, -52, -52, -52 + -52, -52, -52, -52, -52, -52, 91 }, { - 11, -53, -53, -53, -53, -53, -53, -53, -53, -53, + 11, -53, 53, 54, -53, -53, 55, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53 }, { - 11, 55, 55, 56, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55 + 11, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54 }, { - 11, 55, 55, 56, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55 + 11, 56, 56, 57, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56 }, { - 11, -56, -56, -56, -56, -56, -56, -56, -56, -56, - -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, - -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, - -56, -56, -56, -56, -56, -56, -56 + 11, 56, 56, 57, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56 }, { 11, -57, -57, -57, -57, -57, -57, -57, -57, -57, - -57, -57, -57, 57, -57, -57, 57, 57, 57, 57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -57 + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57 }, { 11, -58, -58, -58, -58, -58, -58, -58, -58, -58, - -58, -58, -58, 57, -58, -58, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 90, 57, - 57, 57, 57, 57, 57, 57, -58 + -58, -58, -58, 58, -58, -58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -58 }, { 11, -59, -59, -59, -59, -59, -59, -59, -59, -59, - -59, -59, -59, 57, -59, -59, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 91, 57, - 57, 57, 57, 57, 57, 57, -59 + -59, -59, -59, 58, -59, -59, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 92, 58, + 58, 58, 58, 58, 58, 58, -59 }, { 11, -60, -60, -60, -60, -60, -60, -60, -60, -60, - -60, -60, -60, 57, -60, -60, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 92, 93, 57, 57, - 57, 57, 57, 57, 57, 57, -60 + -60, -60, -60, 58, -60, -60, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 93, 58, + 58, 58, 58, 58, 58, 58, -60 }, { 11, -61, -61, -61, -61, -61, -61, -61, -61, -61, - -61, -61, -61, 57, -61, -61, 57, 57, 57, 57, - 57, 94, 57, 57, 57, 57, 57, 57, 57, 95, - 57, 57, 57, 57, 57, 57, -61 + -61, -61, -61, 58, -61, -61, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 94, 95, 58, 58, + 58, 58, 58, 58, 58, 58, -61 }, { 11, -62, -62, -62, -62, -62, -62, -62, -62, -62, - -62, -62, -62, 57, -62, -62, 57, 57, 57, 96, + -62, -62, -62, 58, -62, -62, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -62 + 58, 96, 58, 58, 58, 58, 58, 58, 58, 97, + 58, 58, 58, 58, 58, 58, -62 }, { 11, -63, -63, -63, -63, -63, -63, -63, -63, -63, - -63, -63, -63, 57, -63, -63, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 97, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 98, -63 + -63, -63, -63, 58, -63, -63, 58, 58, 58, 98, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -63 }, { 11, -64, -64, -64, -64, -64, -64, -64, -64, -64, - -64, -64, -64, 57, -64, -64, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -64 + -64, -64, -64, 58, -64, -64, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 99, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 100, -64 }, { 11, -65, -65, -65, -65, -65, -65, -65, -65, -65, - -65, -65, -65, 57, -65, -65, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 99, 57, 57, -65 + -65, -65, -65, 58, -65, -65, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -65 }, { 11, -66, -66, -66, -66, -66, -66, -66, -66, -66, - -66, -66, -66, 57, -66, -66, 57, 57, 57, 57, - 57, 57, 57, 57, 100, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -66 + -66, -66, -66, 58, -66, -66, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 101, 58, 58, -66 }, { 11, -67, -67, -67, -67, -67, -67, -67, -67, -67, - -67, -67, -67, 57, -67, -67, 57, 57, 57, 57, + -67, -67, -67, 58, -67, -67, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 101, 57, 57, - 57, 57, 57, 57, 57, 57, -67 + 58, 58, 58, 58, 102, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -67 }, { 11, -68, -68, -68, -68, -68, -68, -68, -68, -68, - -68, -68, -68, 57, -68, -68, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 102, 57, 57, -68 + -68, -68, -68, 58, -68, -68, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 103, 58, 58, + 58, 58, 58, 58, 58, 58, -68 }, { 11, -69, -69, -69, -69, -69, -69, -69, -69, -69, - -69, -69, -69, 57, -69, -69, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 103, 57, - 57, 57, 57, 57, 57, 57, -69 + -69, -69, -69, 58, -69, -69, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 104, 58, 58, -69 }, { 11, -70, -70, -70, -70, -70, -70, -70, -70, -70, - -70, -70, -70, 57, -70, -70, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 104, 57, 57, 57, 57, 57, -70 + -70, -70, -70, 58, -70, -70, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 105, 58, + 58, 58, 58, 58, 58, 58, -70 }, { 11, -71, -71, -71, -71, -71, -71, -71, -71, -71, - -71, -71, -71, 57, -71, -71, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 105, 57, -71 + -71, -71, -71, 58, -71, -71, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 106, 58, 58, 58, 58, 58, -71 }, { 11, -72, -72, -72, -72, -72, -72, -72, -72, -72, - -72, -72, -72, 57, -72, -72, 57, 57, 57, 57, + -72, -72, -72, 58, -72, -72, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 106, 57, 57, 57, 57, -72 + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 107, 58, -72 }, { 11, -73, -73, -73, -73, -73, -73, -73, -73, -73, - -73, -73, -73, 57, -73, -73, 57, 57, 57, 57, - 57, 57, 57, 57, 107, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -73 + -73, -73, -73, 58, -73, -73, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 108, 58, 58, 58, 58, -73 }, { - 11, 74, 74, -74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74 + 11, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, 58, -74, -74, 58, 58, 58, 58, + 58, 58, 58, 58, 109, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -74 }, { - 11, -75, 75, 76, -75, -75, -75, -75, -75, -75, - -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, - -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, - -75, -75, -75, -75, -75, -75, -75 + 11, 75, 75, -75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75 }, { - 11, -76, -76, -76, -76, -76, -76, -76, -76, -76, + 11, -76, 76, 77, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76 }, { - 11, -77, -77, -77, -77, -77, -77, -77, -77, -77, - -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + 11, 78, -77, -77, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, - -77, -77, -77, -77, -77, -77, -77 + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78 }, { - 11, 78, 78, 79, 78, -78, 78, 78, -78, 78, - 78, 78, 78, 78, 78, -78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78 + 11, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78 }, { - 11, -79, -79, -79, -79, -79, -79, -79, -79, -79, - -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, - -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, - -79, -79, -79, -79, -79, -79, -79 + 11, 79, 79, 80, 79, -79, 79, 79, -79, 79, + 79, 79, 79, 79, 79, -79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79 }, { - 11, -80, -80, 81, -80, -80, -80, -80, -80, -80, + 11, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80 }, { - 11, -81, -81, -81, -81, -81, -81, -81, -81, -81, + 11, -81, -81, 82, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81 @@ -912,669 +912,728 @@ static yyconst short yy_nxt[][37] = }, { - 11, -84, -84, -84, -84, -84, -84, -84, -84, -84, - -84, 108, 85, 85, -84, -84, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, -84 + 11, 84, 84, -84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84 }, { 11, -85, -85, -85, -85, -85, -85, -85, -85, -85, - -85, 85, 85, 85, -85, -85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, -85 + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85 }, { 11, -86, -86, -86, -86, -86, -86, -86, -86, -86, - -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, - -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, - -86, -86, -86, -86, -86, -86, -86 + -86, 110, 87, 87, -86, -86, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, -86 }, { 11, -87, -87, -87, -87, -87, -87, -87, -87, -87, - -87, 85, 85, 85, -87, -87, 85, 85, 85, 85, + -87, 87, 87, 87, -87, -87, 87, 87, 87, 87, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, -87 + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, -87 }, { 11, -88, -88, -88, -88, -88, -88, -88, -88, -88, - -88, 85, 85, 85, -88, -88, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, -88 + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88 }, { 11, -89, -89, -89, -89, -89, -89, -89, -89, -89, - -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, - -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, - -89, -89, -89, -89, -89, -89, -89 + -89, 87, 87, 87, -89, -89, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, -89 }, { 11, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, 57, -90, -90, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 109, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -90 + -90, 87, 87, 87, -90, -90, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, -90 }, { 11, -91, -91, -91, -91, -91, -91, -91, -91, -91, - -91, -91, -91, 57, -91, -91, 57, 57, 57, 57, - 57, 57, 57, 57, 110, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -91 + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91 }, { 11, -92, -92, -92, -92, -92, -92, -92, -92, -92, - -92, -92, -92, 57, -92, -92, 57, 57, 57, 57, + -92, -92, -92, 58, -92, -92, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 111, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -92 + 58, 58, 58, 58, 58, 111, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -92 }, { 11, -93, -93, -93, -93, -93, -93, -93, -93, -93, - -93, -93, -93, 57, -93, -93, 57, 57, 57, 57, - 57, 112, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -93 + -93, -93, -93, 58, -93, -93, 58, 58, 58, 58, + 58, 58, 58, 58, 112, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -93 }, { 11, -94, -94, -94, -94, -94, -94, -94, -94, -94, - -94, -94, -94, 57, -94, -94, 113, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -94 + -94, -94, -94, 58, -94, -94, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 113, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -94 }, { 11, -95, -95, -95, -95, -95, -95, -95, -95, -95, - -95, -95, -95, 57, -95, -95, 57, 57, 57, 57, - 114, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -95 + -95, -95, -95, 58, -95, -95, 58, 58, 58, 58, + 58, 114, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -95 }, { 11, -96, -96, -96, -96, -96, -96, -96, -96, -96, - -96, -96, -96, 57, -96, -96, 57, 57, 115, 57, - 57, 57, 57, 57, 116, 57, 117, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -96 + -96, -96, -96, 58, -96, -96, 115, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -96 }, { 11, -97, -97, -97, -97, -97, -97, -97, -97, -97, - -97, -97, -97, 57, -97, -97, 57, 57, 57, 57, + -97, -97, -97, 58, -97, -97, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 118, - 57, 57, 57, 57, 57, 57, -97 + 116, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -97 }, { 11, -98, -98, -98, -98, -98, -98, -98, -98, -98, - -98, -98, -98, 57, -98, -98, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -98 + -98, -98, -98, 58, -98, -98, 58, 58, 117, 58, + 58, 58, 58, 58, 118, 58, 119, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -98 }, { 11, -99, -99, -99, -99, -99, -99, -99, -99, -99, - -99, -99, -99, 57, -99, -99, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -99 + -99, -99, -99, 58, -99, -99, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 120, + 58, 58, 58, 58, 58, 58, -99 }, { 11, -100, -100, -100, -100, -100, -100, -100, -100, -100, - -100, -100, -100, 57, -100, -100, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 119, 57, 57, - 57, 57, 57, 57, 57, 57, -100 + -100, -100, -100, 58, -100, -100, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -100 }, { 11, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, 57, -101, -101, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 120, 57, -101 + -101, -101, -101, 58, -101, -101, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -101 }, { 11, -102, -102, -102, -102, -102, -102, -102, -102, -102, - -102, -102, -102, 57, -102, -102, 57, 57, 57, 57, + -102, -102, -102, 58, -102, -102, 58, 58, 58, 58, - 57, 57, 57, 57, 121, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -102 + 58, 58, 58, 58, 58, 58, 58, 121, 58, 58, + 58, 58, 58, 58, 58, 58, -102 }, { 11, -103, -103, -103, -103, -103, -103, -103, -103, -103, - -103, -103, -103, 57, -103, -103, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 122, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -103 + -103, -103, -103, 58, -103, -103, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 122, 58, -103 }, { 11, -104, -104, -104, -104, -104, -104, -104, -104, -104, - -104, -104, -104, 57, -104, -104, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 123, 57, -104 + -104, -104, -104, 58, -104, -104, 58, 58, 58, 58, + 58, 58, 58, 58, 123, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -104 }, { 11, -105, -105, -105, -105, -105, -105, -105, -105, -105, - -105, -105, -105, 57, -105, -105, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 124, 57, 57, 57, 57, -105 + -105, -105, -105, 58, -105, -105, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 124, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -105 }, { 11, -106, -106, -106, -106, -106, -106, -106, -106, -106, - -106, -106, -106, 57, -106, -106, 57, 57, 57, 57, - 57, 57, 57, 57, 125, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -106 + -106, -106, -106, 58, -106, -106, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 125, 58, -106 }, { 11, -107, -107, -107, -107, -107, -107, -107, -107, -107, - -107, -107, -107, 57, -107, -107, 57, 57, 57, 57, + -107, -107, -107, 58, -107, -107, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 126, 57, 57, 57, -107 + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 126, 58, 58, 58, 58, -107 }, { 11, -108, -108, -108, -108, -108, -108, -108, -108, -108, - -108, 85, 85, 85, -108, -108, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, -108 + -108, -108, -108, 58, -108, -108, 58, 58, 58, 58, + 58, 58, 58, 58, 127, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -108 }, { 11, -109, -109, -109, -109, -109, -109, -109, -109, -109, - -109, -109, -109, 57, -109, -109, 57, 57, 57, 57, - 127, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -109 + -109, -109, -109, 58, -109, -109, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 128, 58, 58, 58, -109 }, { 11, -110, -110, -110, -110, -110, -110, -110, -110, -110, - -110, -110, -110, 57, -110, -110, 57, 57, 128, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -110 + -110, 87, 87, 87, -110, -110, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, -110 }, { 11, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, -111, -111, 57, -111, -111, 57, 57, 57, 57, - 129, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -111 + -111, -111, -111, 58, -111, -111, 58, 58, 58, 58, + 129, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -111 }, { 11, -112, -112, -112, -112, -112, -112, -112, -112, -112, - -112, -112, -112, 57, -112, -112, 57, 57, 57, 57, + -112, -112, -112, 58, -112, -112, 58, 58, 130, 58, - 57, 57, 57, 57, 130, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -112 + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -112 }, { 11, -113, -113, -113, -113, -113, -113, -113, -113, -113, - -113, -113, -113, 57, -113, -113, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 131, 57, -113 + -113, -113, -113, 58, -113, -113, 58, 58, 58, 58, + 131, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -113 }, { 11, -114, -114, -114, -114, -114, -114, -114, -114, -114, - -114, -114, -114, 57, -114, -114, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 132, 57, 57, - 57, 57, 57, 57, 57, 57, -114 + -114, -114, -114, 58, -114, -114, 58, 58, 58, 58, + 58, 58, 58, 58, 132, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -114 }, { 11, -115, -115, -115, -115, -115, -115, -115, -115, -115, - -115, -115, -115, 57, -115, -115, 57, 57, 57, 57, - 57, 57, 57, 133, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -115 + -115, -115, -115, 58, -115, -115, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 133, 58, -115 }, { 11, -116, -116, -116, -116, -116, -116, -116, -116, -116, - -116, -116, -116, 57, -116, -116, 57, 57, 57, 57, - 57, 134, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -116 + -116, -116, -116, 58, -116, -116, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 134, 58, 58, + 58, 58, 58, 58, 58, 58, -116 }, { 11, -117, -117, -117, -117, -117, -117, -117, -117, -117, - -117, -117, -117, 57, -117, -117, 57, 57, 57, 57, + -117, -117, -117, 58, -117, -117, 58, 58, 58, 58, - 135, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -117 + 58, 58, 58, 135, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -117 }, { 11, -118, -118, -118, -118, -118, -118, -118, -118, -118, - -118, -118, -118, 57, -118, -118, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -118 + -118, -118, -118, 58, -118, -118, 58, 58, 58, 58, + 58, 136, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -118 }, { 11, -119, -119, -119, -119, -119, -119, -119, -119, -119, - -119, -119, -119, 57, -119, -119, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 136, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -119 + -119, -119, -119, 58, -119, -119, 58, 58, 58, 58, + 137, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -119 }, { 11, -120, -120, -120, -120, -120, -120, -120, -120, -120, - -120, -120, -120, 57, -120, -120, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -120 + -120, -120, -120, 58, -120, -120, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -120 }, { 11, -121, -121, -121, -121, -121, -121, -121, -121, -121, - -121, -121, -121, 57, -121, -121, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 137, 57, - 57, 57, 57, 57, 57, 57, -121 + -121, -121, -121, 58, -121, -121, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 138, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -121 }, { 11, -122, -122, -122, -122, -122, -122, -122, -122, -122, - -122, -122, -122, 57, -122, -122, 57, 57, 57, 57, + -122, -122, -122, 58, -122, -122, 58, 58, 139, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 138, - 57, 57, 57, 57, 57, 57, -122 + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -122 }, { 11, -123, -123, -123, -123, -123, -123, -123, -123, -123, - -123, -123, -123, 57, -123, -123, 57, 57, 57, 57, - 57, 57, 57, 57, 139, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -123 + -123, -123, -123, 58, -123, -123, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 140, 58, + 58, 58, 58, 58, 58, 58, -123 }, { 11, -124, -124, -124, -124, -124, -124, -124, -124, -124, - -124, -124, -124, 57, -124, -124, 57, 57, 140, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -124 + -124, -124, -124, 58, -124, -124, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 141, + 58, 58, 58, 58, 58, 58, -124 }, { 11, -125, -125, -125, -125, -125, -125, -125, -125, -125, - -125, -125, -125, 57, -125, -125, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 141, 57, 57, - 57, 57, 57, 57, 57, 57, -125 + -125, -125, -125, 58, -125, -125, 58, 58, 58, 58, + 58, 58, 58, 58, 142, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -125 }, { 11, -126, -126, -126, -126, -126, -126, -126, -126, -126, - -126, -126, -126, 57, -126, -126, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 142, 57, 57, -126 + -126, -126, -126, 58, -126, -126, 58, 58, 143, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -126 }, { 11, -127, -127, -127, -127, -127, -127, -127, -127, -127, - -127, -127, -127, 57, -127, -127, 143, 57, 57, 57, + -127, -127, -127, 58, -127, -127, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -127 + 58, 58, 58, 58, 58, 58, 58, 144, 58, 58, + 58, 58, 58, 58, 58, 58, -127 }, { 11, -128, -128, -128, -128, -128, -128, -128, -128, -128, - -128, -128, -128, 57, -128, -128, 57, 57, 57, 57, - 144, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -128 + -128, -128, -128, 58, -128, -128, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 145, 58, 58, -128 }, { 11, -129, -129, -129, -129, -129, -129, -129, -129, -129, - -129, -129, -129, 57, -129, -129, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 145, 57, 57, - 57, 57, 57, 57, 57, 57, -129 + -129, -129, -129, 58, -129, -129, 146, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -129 }, { 11, -130, -130, -130, -130, -130, -130, -130, -130, -130, - -130, -130, -130, 57, -130, -130, 57, 57, 57, 57, - 57, 57, 146, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -130 + -130, -130, -130, 58, -130, -130, 58, 58, 58, 58, + 147, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -130 }, { 11, -131, -131, -131, -131, -131, -131, -131, -131, -131, - -131, -131, -131, 57, -131, -131, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 147, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -131 + -131, -131, -131, 58, -131, -131, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 148, 58, 58, + 58, 58, 58, 58, 58, 58, -131 }, { 11, -132, -132, -132, -132, -132, -132, -132, -132, -132, - -132, -132, -132, 57, -132, -132, 57, 57, 57, 148, + -132, -132, -132, 58, -132, -132, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -132 + 58, 58, 149, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -132 }, { 11, -133, -133, -133, -133, -133, -133, -133, -133, -133, - -133, -133, -133, 57, -133, -133, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 149, 57, - 57, 57, 57, 57, 57, 57, -133 + -133, -133, -133, 58, -133, -133, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 150, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -133 }, { 11, -134, -134, -134, -134, -134, -134, -134, -134, -134, - -134, -134, -134, 57, -134, -134, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -134 + -134, -134, -134, 58, -134, -134, 58, 58, 58, 151, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -134 }, { 11, -135, -135, -135, -135, -135, -135, -135, -135, -135, - -135, -135, -135, 57, -135, -135, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 150, 57, 57, - 57, 57, 57, 57, 57, 57, -135 + -135, -135, -135, 58, -135, -135, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 152, 58, + 58, 58, 58, 58, 58, 58, -135 }, { 11, -136, -136, -136, -136, -136, -136, -136, -136, -136, - -136, -136, -136, 57, -136, -136, 57, 57, 57, 57, - 151, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -136 + -136, -136, -136, 58, -136, -136, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -136 }, { 11, -137, -137, -137, -137, -137, -137, -137, -137, -137, - -137, -137, -137, 57, -137, -137, 57, 57, 57, 57, + -137, -137, -137, 58, -137, -137, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 152, 57, 57, - 57, 57, 57, 57, 57, 57, -137 + 58, 58, 58, 58, 58, 58, 58, 153, 58, 58, + 58, 58, 58, 58, 58, 58, -137 }, { 11, -138, -138, -138, -138, -138, -138, -138, -138, -138, - -138, -138, -138, 57, -138, -138, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 153, 57, 57, -138 + -138, -138, -138, 58, -138, -138, 58, 58, 58, 58, + 154, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -138 }, { 11, -139, -139, -139, -139, -139, -139, -139, -139, -139, - -139, -139, -139, 57, -139, -139, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 154, 57, 57, 57, 57, -139 + -139, -139, -139, 58, -139, -139, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 155, 58, + 58, 58, 58, 58, 58, 58, -139 }, { 11, -140, -140, -140, -140, -140, -140, -140, -140, -140, - -140, -140, -140, 57, -140, -140, 57, 57, 57, 57, - 155, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -140 + -140, -140, -140, 58, -140, -140, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 156, 58, 58, + 58, 58, 58, 58, 58, 58, -140 }, { 11, -141, -141, -141, -141, -141, -141, -141, -141, -141, - -141, -141, -141, 57, -141, -141, 57, 57, 57, 57, - 57, 57, 156, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -141 + -141, -141, -141, 58, -141, -141, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 157, 58, 58, -141 }, { 11, -142, -142, -142, -142, -142, -142, -142, -142, -142, - -142, -142, -142, 57, -142, -142, 157, 57, 57, 57, + -142, -142, -142, 58, -142, -142, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -142 + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 158, 58, 58, 58, 58, -142 }, { 11, -143, -143, -143, -143, -143, -143, -143, -143, -143, - -143, -143, -143, 57, -143, -143, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 158, 57, 57, - 57, 57, 57, 57, 57, 57, -143 + -143, -143, -143, 58, -143, -143, 58, 58, 58, 58, + 159, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -143 }, { 11, -144, -144, -144, -144, -144, -144, -144, -144, -144, - -144, -144, -144, 57, -144, -144, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -144 + -144, -144, -144, 58, -144, -144, 58, 58, 58, 58, + 58, 58, 160, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -144 }, { 11, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, 57, -145, -145, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 159, 57, 57, -145 + -145, -145, -145, 58, -145, -145, 161, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -145 }, { 11, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -146, -146, -146, 57, -146, -146, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -146 + -146, -146, -146, 58, -146, -146, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 162, 58, 58, + 58, 58, 58, 58, 58, 58, -146 }, { 11, -147, -147, -147, -147, -147, -147, -147, -147, -147, - -147, -147, -147, 57, -147, -147, 57, 57, 57, 57, + -147, -147, -147, 58, -147, -147, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 160, 57, 57, -147 + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -147 }, { 11, -148, -148, -148, -148, -148, -148, -148, -148, -148, - -148, -148, -148, 57, -148, -148, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 161, 57, 57, 57, -148 + -148, -148, -148, 58, -148, -148, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 163, 58, 58, -148 }, { 11, -149, -149, -149, -149, -149, -149, -149, -149, -149, - -149, -149, -149, 57, -149, -149, 57, 57, 57, 57, - 57, 57, 57, 57, 162, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -149 + -149, -149, -149, 58, -149, -149, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -149 }, { 11, -150, -150, -150, -150, -150, -150, -150, -150, -150, - -150, -150, -150, 57, -150, -150, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 163, 57, -150 + -150, -150, -150, 58, -150, -150, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 164, 58, 58, -150 }, { 11, -151, -151, -151, -151, -151, -151, -151, -151, -151, - -151, -151, -151, 57, -151, -151, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 164, 57, 57, - 57, 57, 57, 57, 57, 57, -151 + -151, -151, -151, 58, -151, -151, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 165, 58, 58, 58, -151 }, { 11, -152, -152, -152, -152, -152, -152, -152, -152, -152, - -152, -152, -152, 57, -152, -152, 165, 57, 57, 57, + -152, -152, -152, 58, -152, -152, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -152 + 58, 58, 58, 58, 166, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -152 }, { 11, -153, -153, -153, -153, -153, -153, -153, -153, -153, - -153, -153, -153, 57, -153, -153, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -153 + -153, -153, -153, 58, -153, -153, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 167, 58, -153 }, { 11, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, 57, -154, -154, 57, 57, 57, 57, - 166, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -154 + -154, -154, -154, 58, -154, -154, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 168, 58, 58, + 58, 58, 58, 58, 58, 58, -154 }, { 11, -155, -155, -155, -155, -155, -155, -155, -155, -155, - -155, -155, -155, 57, -155, -155, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -155 + -155, -155, -155, 58, -155, -155, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 169, 58, 58, + 58, 58, 58, 58, 58, 58, -155 }, { 11, -156, -156, -156, -156, -156, -156, -156, -156, -156, - -156, -156, -156, 57, -156, -156, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -156 + -156, -156, -156, 58, -156, -156, 170, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -156 }, { 11, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, 57, -157, -157, 57, 57, 57, 57, + -157, -157, -157, 58, -157, -157, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 167, 57, 57, -157 + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -157 }, { 11, -158, -158, -158, -158, -158, -158, -158, -158, -158, - -158, -158, -158, 57, -158, -158, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -158 + -158, -158, -158, 58, -158, -158, 58, 58, 58, 58, + 171, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -158 }, { 11, -159, -159, -159, -159, -159, -159, -159, -159, -159, - -159, -159, -159, 57, -159, -159, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -159 + -159, -159, -159, 58, -159, -159, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -159 }, { 11, -160, -160, -160, -160, -160, -160, -160, -160, -160, - -160, -160, -160, 57, -160, -160, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -160 + -160, -160, -160, 58, -160, -160, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -160 }, { 11, -161, -161, -161, -161, -161, -161, -161, -161, -161, - -161, -161, -161, 57, -161, -161, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -161 + -161, -161, -161, 58, -161, -161, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 172, 58, 58, -161 }, { 11, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, 57, -162, -162, 57, 57, 168, 57, + -162, -162, -162, 58, -162, -162, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -162 + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -162 }, { 11, -163, -163, -163, -163, -163, -163, -163, -163, -163, - -163, -163, -163, 57, -163, -163, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -163 + -163, -163, -163, 58, -163, -163, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -163 }, { 11, -164, -164, -164, -164, -164, -164, -164, -164, -164, - -164, -164, -164, 57, -164, -164, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 169, 57, -164 + -164, -164, -164, 58, -164, -164, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -164 }, { 11, -165, -165, -165, -165, -165, -165, -165, -165, -165, - -165, -165, -165, 57, -165, -165, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 170, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -165 + -165, -165, -165, 58, -165, -165, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -165 }, { 11, -166, -166, -166, -166, -166, -166, -166, -166, -166, - -166, -166, -166, 57, -166, -166, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 171, 57, 57, 57, -166 + -166, -166, -166, 58, -166, -166, 58, 58, 173, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -166 }, { 11, -167, -167, -167, -167, -167, -167, -167, -167, -167, - -167, -167, -167, 57, -167, -167, 57, 57, 57, 57, + -167, -167, -167, 58, -167, -167, 58, 58, 58, 58, - 172, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -167 + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -167 }, { 11, -168, -168, -168, -168, -168, -168, -168, -168, -168, - -168, -168, -168, 57, -168, -168, 57, 57, 57, 57, - 173, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -168 + -168, -168, -168, 58, -168, -168, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 174, 58, -168 }, { 11, -169, -169, -169, -169, -169, -169, -169, -169, -169, - -169, -169, -169, 57, -169, -169, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -169 + -169, -169, -169, 58, -169, -169, 58, 58, 58, 58, + 58, 175, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -169 }, { 11, -170, -170, -170, -170, -170, -170, -170, -170, -170, - -170, -170, -170, 57, -170, -170, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -170 + -170, -170, -170, 58, -170, -170, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 176, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -170 }, { 11, -171, -171, -171, -171, -171, -171, -171, -171, -171, - -171, -171, -171, 57, -171, -171, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -171 + -171, -171, -171, 58, -171, -171, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 177, 58, 58, 58, -171 }, { 11, -172, -172, -172, -172, -172, -172, -172, -172, -172, - -172, -172, -172, 57, -172, -172, 57, 57, 57, 57, + -172, -172, -172, 58, -172, -172, 58, 58, 58, 58, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -172 + 178, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -172 }, { 11, -173, -173, -173, -173, -173, -173, -173, -173, -173, - -173, -173, -173, 57, -173, -173, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, -173 + -173, -173, -173, 58, -173, -173, 58, 58, 58, 58, + 179, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -173 + }, + + { + 11, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, 58, -174, -174, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -174 + + }, + + { + 11, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, 58, -175, -175, 58, 58, 58, 58, + 58, 58, 58, 58, 180, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -175 + }, + + { + 11, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, 58, -176, -176, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -176 + }, + + { + 11, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, 58, -177, -177, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -177 + }, + + { + 11, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, 58, -178, -178, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -178 + }, + + { + 11, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, 58, -179, -179, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -179 + + }, + + { + 11, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, 58, -180, -180, 58, 58, 58, 58, + 58, 58, 181, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -180 + }, + + { + 11, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, 58, -181, -181, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, -181 }, } ; @@ -1595,29 +1654,30 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 56 -#define YY_END_OF_BUFFER 57 -static yyconst short int yy_accept[174] = +#define YY_NUM_RULES 58 +#define YY_END_OF_BUFFER 59 +static yyconst short int yy_accept[182] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 5, 4, 3, 2, 29, 30, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 55, 52, 54, 47, 51, 50, 49, 45, 41, 35, - 40, 45, 33, 34, 43, 43, 36, 45, 43, 43, - 45, 4, 3, 2, 2, 1, 28, 28, 28, 28, - 28, 28, 28, 15, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 55, 52, 54, 53, 47, 46, 49, - 48, 37, 31, 43, 43, 44, 38, 39, 32, 28, - 28, 28, 28, 28, 28, 28, 28, 26, 25, 28, - - 28, 28, 28, 28, 28, 28, 28, 42, 23, 28, - 28, 28, 28, 28, 28, 28, 28, 14, 28, 7, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 16, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 10, 28, 13, 28, 28, 28, 28, - 28, 28, 21, 28, 9, 27, 28, 24, 12, 20, - 17, 28, 8, 28, 28, 28, 28, 28, 6, 19, - 18, 22, 11 + 59, 5, 4, 3, 2, 30, 31, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 57, 54, 56, 49, 53, 52, 51, 47, 42, 36, + 41, 45, 47, 34, 35, 44, 44, 37, 47, 44, + 44, 47, 4, 3, 2, 2, 1, 29, 29, 29, + 29, 29, 29, 29, 16, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 57, 54, 56, 55, 49, 48, + 51, 50, 38, 45, 32, 44, 44, 46, 39, 40, + 33, 29, 29, 29, 29, 29, 29, 29, 29, 27, + + 26, 29, 29, 29, 29, 29, 29, 29, 29, 43, + 24, 29, 29, 29, 29, 29, 29, 29, 29, 15, + 29, 7, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 17, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 10, 29, 13, 29, + 29, 29, 29, 29, 29, 29, 22, 29, 9, 28, + 29, 25, 12, 21, 18, 29, 8, 29, 29, 29, + 29, 29, 29, 6, 29, 20, 19, 23, 11, 29, + 14 } ; static yyconst int yy_ec[256] = @@ -1993,43 +2053,43 @@ BEGIN(PARAM); return T_CONFIG; YY_BREAK case 14: YY_RULE_SETUP -BEGIN(PARAM); return T_HELP; +BEGIN(PARAM); return T_MENUCONFIG; YY_BREAK case 15: YY_RULE_SETUP -BEGIN(PARAM); return T_IF; +BEGIN(PARAM); return T_HELP; YY_BREAK case 16: YY_RULE_SETUP -BEGIN(PARAM); return T_ENDIF; +BEGIN(PARAM); return T_IF; YY_BREAK case 17: YY_RULE_SETUP -BEGIN(PARAM); return T_DEPENDS; +BEGIN(PARAM); return T_ENDIF; YY_BREAK case 18: YY_RULE_SETUP -BEGIN(PARAM); return T_REQUIRES; +BEGIN(PARAM); return T_DEPENDS; YY_BREAK case 19: YY_RULE_SETUP -BEGIN(PARAM); return T_OPTIONAL; +BEGIN(PARAM); return T_REQUIRES; YY_BREAK case 20: YY_RULE_SETUP -BEGIN(PARAM); return T_DEFAULT; +BEGIN(PARAM); return T_OPTIONAL; YY_BREAK case 21: YY_RULE_SETUP -BEGIN(PARAM); return T_PROMPT; +BEGIN(PARAM); return T_DEFAULT; YY_BREAK case 22: YY_RULE_SETUP -BEGIN(PARAM); return T_TRISTATE; +BEGIN(PARAM); return T_PROMPT; YY_BREAK case 23: YY_RULE_SETUP -BEGIN(PARAM); return T_BOOLEAN; +BEGIN(PARAM); return T_TRISTATE; YY_BREAK case 24: YY_RULE_SETUP @@ -2037,71 +2097,75 @@ BEGIN(PARAM); return T_BOOLEAN; YY_BREAK case 25: YY_RULE_SETUP -BEGIN(PARAM); return T_INT; +BEGIN(PARAM); return T_BOOLEAN; YY_BREAK case 26: YY_RULE_SETUP -BEGIN(PARAM); return T_HEX; +BEGIN(PARAM); return T_INT; YY_BREAK case 27: YY_RULE_SETUP -BEGIN(PARAM); return T_STRING; +BEGIN(PARAM); return T_HEX; YY_BREAK case 28: YY_RULE_SETUP +BEGIN(PARAM); return T_STRING; + YY_BREAK +case 29: +YY_RULE_SETUP { alloc_string(yytext, yyleng); zconflval.string = text; return T_WORD; } YY_BREAK -case 29: +case 30: YY_RULE_SETUP YY_BREAK -case 30: +case 31: YY_RULE_SETUP current_file->lineno++; BEGIN(INITIAL); YY_BREAK -case 31: +case 32: YY_RULE_SETUP return T_AND; YY_BREAK -case 32: +case 33: YY_RULE_SETUP return T_OR; YY_BREAK -case 33: +case 34: YY_RULE_SETUP return T_OPEN_PAREN; YY_BREAK -case 34: +case 35: YY_RULE_SETUP return T_CLOSE_PAREN; YY_BREAK -case 35: +case 36: YY_RULE_SETUP return T_NOT; YY_BREAK -case 36: +case 37: YY_RULE_SETUP return T_EQUAL; YY_BREAK -case 37: +case 38: YY_RULE_SETUP return T_UNEQUAL; YY_BREAK -case 38: +case 39: YY_RULE_SETUP return T_IF; YY_BREAK -case 39: +case 40: YY_RULE_SETUP return T_ON; YY_BREAK -case 40: +case 41: YY_RULE_SETUP { str = yytext[0]; @@ -2109,15 +2173,15 @@ YY_RULE_SETUP BEGIN(STRING); } YY_BREAK -case 41: +case 42: YY_RULE_SETUP BEGIN(INITIAL); current_file->lineno++; return T_EOL; YY_BREAK -case 42: +case 43: YY_RULE_SETUP /* ignore */ YY_BREAK -case 43: +case 44: YY_RULE_SETUP { alloc_string(yytext, yyleng); @@ -2125,11 +2189,15 @@ YY_RULE_SETUP return T_WORD; } YY_BREAK -case 44: +case 45: +YY_RULE_SETUP +/* comment */ + YY_BREAK +case 46: YY_RULE_SETUP current_file->lineno++; YY_BREAK -case 45: +case 47: YY_RULE_SETUP YY_BREAK @@ -2140,7 +2208,7 @@ case YY_STATE_EOF(PARAM): YY_BREAK -case 46: +case 48: *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ @@ -2151,13 +2219,13 @@ YY_RULE_SETUP return T_WORD_QUOTE; } YY_BREAK -case 47: +case 49: YY_RULE_SETUP { append_string(yytext, yyleng); } YY_BREAK -case 48: +case 50: *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ @@ -2168,13 +2236,13 @@ YY_RULE_SETUP return T_WORD_QUOTE; } YY_BREAK -case 49: +case 51: YY_RULE_SETUP { append_string(yytext + 1, yyleng - 1); } YY_BREAK -case 50: +case 52: YY_RULE_SETUP { if (str == yytext[0]) { @@ -2185,7 +2253,7 @@ YY_RULE_SETUP append_string(yytext, 1); } YY_BREAK -case 51: +case 53: YY_RULE_SETUP { printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno()); @@ -2201,7 +2269,7 @@ case YY_STATE_EOF(STRING): YY_BREAK -case 52: +case 54: YY_RULE_SETUP { ts = 0; @@ -2227,9 +2295,9 @@ YY_RULE_SETUP } YY_BREAK -case 53: +case 55: *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ -yy_c_buf_p = yy_cp = yy_bp + 1; +yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP { @@ -2238,14 +2306,14 @@ YY_RULE_SETUP return T_HELPTEXT; } YY_BREAK -case 54: +case 56: YY_RULE_SETUP { current_file->lineno++; append_string("\n", 1); } YY_BREAK -case 55: +case 57: YY_RULE_SETUP { append_string(yytext, yyleng); @@ -2271,7 +2339,7 @@ case YY_STATE_EOF(COMMAND): yyterminate(); } YY_BREAK -case 56: +case 58: YY_RULE_SETUP YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c index 48a2c02334b021..4cca5835fb1301 100644 --- a/scripts/kconfig/mconf.c +++ b/scripts/kconfig/mconf.c @@ -302,11 +302,8 @@ static void build_conf(struct menu *menu) cprint1("%s%*c%s", menu->data ? "-->" : "++>", indent + 1, ' ', prompt); - } else { - if (menu->parent != &rootmenu) - cprint1(" %*c", indent + 1, ' '); - cprint1("%s --->", prompt); - } + } else + cprint1(" %*c%s --->", indent + 1, ' ', prompt); cprint_done(); if (single_menu_mode && menu->data) @@ -373,6 +370,11 @@ static void build_conf(struct menu *menu) } cprint_done(); } else { + if (menu == current_menu) { + cprint(":%p", menu); + cprint("---%*c%s", indent + 1, ' ', menu_get_prompt(menu)); + goto conf_childs; + } child_count++; val = sym_get_tristate_value(sym); if (sym_is_choice_value(sym) && val == yes) { @@ -407,6 +409,11 @@ static void build_conf(struct menu *menu) } cprint1("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu), sym_has_value(sym) ? "" : " (NEW)"); + if (menu->prompt->type == P_MENU) { + cprint1(" --->"); + cprint_done(); + return; + } cprint_done(); } @@ -445,9 +452,9 @@ static void conf(struct menu *menu) cprint(":"); cprint("--- "); cprint("L"); - cprint("Load an Alternate Configuration File"); + cprint(" Load an Alternate Configuration File"); cprint("S"); - cprint("Save Configuration to an Alternate File"); + cprint(" Save Configuration to an Alternate File"); } stat = exec_conf(); if (stat < 0) @@ -484,6 +491,8 @@ static void conf(struct menu *menu) case 't': if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes) conf_choice(submenu); + else if (submenu->prompt->type == P_MENU) + conf(submenu); break; case 's': conf_string(submenu); diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c index 24be0ec65f3b4a..81d764e7230d1e 100644 --- a/scripts/kconfig/menu.c +++ b/scripts/kconfig/menu.c @@ -54,9 +54,34 @@ 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; + 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; + default: + break; + } + return e; +} + void menu_add_dep(struct expr *dep) { - current_entry->dep = expr_alloc_and(current_entry->dep, dep); + current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep)); } void menu_set_type(int type) @@ -96,7 +121,7 @@ struct property *menu_add_prop(int token, char *prompt, struct symbol *def, stru prop->menu = current_entry; prop->text = prompt; prop->def = def; - E_EXPR(prop->visible) = dep; + E_EXPR(prop->visible) = menu_check_dep(dep); if (prompt) current_entry->prompt = prop; @@ -169,8 +194,8 @@ void menu_finalize(struct menu *parent) } for (menu = parent->list; menu; menu = menu->next) menu_finalize(menu); - } else if (sym && parent->prompt) { - basedep = E_EXPR(parent->prompt->visible); + } else if (sym) { + basedep = parent->prompt ? E_EXPR(parent->prompt->visible) : NULL; basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no); basedep = expr_eliminate_dups(expr_transform(basedep)); last_menu = NULL; diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc index bed541dc6b1f41..df1577f4b6d729 100644 --- a/scripts/kconfig/qconf.cc +++ b/scripts/kconfig/qconf.cc @@ -42,15 +42,12 @@ static QSettings *configSettings; * menu: entry to be updated */ template <class P> -static void updateMenuList(P* parent, struct menu* menu) +void ConfigList::updateMenuList(P* parent, struct menu* menu) { struct menu* child; - ConfigList* list = parent->listView(); ConfigItem* item; ConfigItem* last; bool visible; - bool showAll = list->showAll; - enum listMode mode = list->mode; enum prop_type type; if (!menu) { @@ -59,7 +56,9 @@ static void updateMenuList(P* parent, struct menu* menu) return; } - last = 0; + last = parent->firstChild(); + if (last && !last->goParent) + last = 0; for (child = menu->list; child; child = child->next) { item = last ? last->nextSibling() : parent->firstChild(); type = child->prompt ? child->prompt->type : P_UNKNOWN; @@ -81,16 +80,8 @@ static void updateMenuList(P* parent, struct menu* menu) if (showAll || visible) { if (!item || item->menu != child) item = new ConfigItem(parent, last, child, visible); - else { - item->visible = visible; - if (item->updateNeeded()) { - ConfigItem* i = (ConfigItem*)child->data; - for (; i; i = i->nextItem) { - i->updateMenu(); - } - } else if (list->updateAll) - item->updateMenu(); - } + else + item->testUpdateMenu(visible); if (mode == fullMode || mode == menuMode || (type != P_MENU && type != P_ROOTMENU)) @@ -100,7 +91,7 @@ static void updateMenuList(P* parent, struct menu* menu) last = item; continue; } - hide: + hide: if (item && item->menu == child) { last = parent->firstChild(); if (last == item) @@ -131,24 +122,46 @@ void ConfigItem::updateMenu(void) { ConfigList* list; struct symbol* sym; + struct property *prop; QString prompt; int type; - enum prop_type ptype; tristate expr; list = listView(); + if (goParent) { + setPixmap(promptColIdx, list->menuBackPix); + prompt = ".."; + goto set_prompt; + } sym = menu->sym; - if (!sym) { - setText(promptColIdx, menu_get_prompt(menu)); - ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN; - if ((ptype == P_ROOTMENU || ptype == P_MENU) && - (list->mode == singleMode || list->mode == symbolMode)) + prop = menu->prompt; + prompt = menu_get_prompt(menu); + + if (prop) switch (prop->type) { + case P_MENU: + case P_ROOTMENU: + if (list->mode == singleMode || list->mode == symbolMode) { + /* a menuconfig entry is displayed differently + * depending whether it's at the view root or a child. + */ + if (sym && list->rootEntry == menu) + break; setPixmap(promptColIdx, list->menuPix); - else + } else { + if (sym) + break; setPixmap(promptColIdx, 0); - return; + } + goto set_prompt; + case P_COMMENT: + setPixmap(promptColIdx, 0); + goto set_prompt; + default: + ; } + if (!sym) + goto set_prompt; setText(nameColIdx, sym->name); @@ -158,7 +171,6 @@ void ConfigItem::updateMenu(void) case S_TRISTATE: char ch; - prompt = menu_get_prompt(menu); if (!sym_is_changable(sym) && !list->showAll) { setText(noColIdx, 0); setText(modColIdx, 0); @@ -211,26 +223,33 @@ void ConfigItem::updateMenu(void) #endif setText(dataColIdx, data); if (type == S_STRING) - prompt.sprintf("%s: %s", menu_get_prompt(menu), data); + prompt.sprintf("%s: %s", prompt.latin1(), data); else - prompt.sprintf("(%s) %s", data, menu_get_prompt(menu)); + prompt.sprintf("(%s) %s", data, prompt.latin1()); break; } if (!sym_has_value(sym) && visible) prompt += " (NEW)"; +set_prompt: setText(promptColIdx, prompt); } -bool ConfigItem::updateNeeded(void) +void ConfigItem::testUpdateMenu(bool v) { - struct symbol* sym = menu->sym; - if (sym) - sym_calc_value(sym); + ConfigItem* i; + + visible = v; + if (!menu) + return; + + sym_calc_value(menu->sym); if (menu->flags & MENU_CHANGED) { + /* the menu entry changed, so update all list items */ menu->flags &= ~MENU_CHANGED; - return true; - } - return false; + for (i = (ConfigItem*)menu->data; i; i = i->nextItem) + i->updateMenu(); + } else if (listView()->updateAll) + updateMenu(); } void ConfigItem::paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align) @@ -251,14 +270,15 @@ void ConfigItem::paintCell(QPainter* p, const QColorGroup& cg, int column, int w */ void ConfigItem::init(void) { - ConfigList* list = listView(); - nextItem = (ConfigItem*)menu->data; - menu->data = this; + if (menu) { + ConfigList* list = listView(); + nextItem = (ConfigItem*)menu->data; + menu->data = this; - if (list->mode != fullMode) - setOpen(TRUE); - if (menu->sym) + if (list->mode != fullMode) + setOpen(TRUE); sym_calc_value(menu->sym); + } updateMenu(); } @@ -267,11 +287,13 @@ void ConfigItem::init(void) */ ConfigItem::~ConfigItem(void) { - ConfigItem** ip = &(ConfigItem*)menu->data; - for (; *ip; ip = &(*ip)->nextItem) { - if (*ip == this) { - *ip = nextItem; - break; + if (menu) { + ConfigItem** ip = &(ConfigItem*)menu->data; + for (; *ip; ip = &(*ip)->nextItem) { + if (*ip == this) { + *ip = nextItem; + break; + } } } } @@ -310,7 +332,8 @@ ConfigList::ConfigList(ConfigView* p, ConfigMainWindow* cv) : Parent(p), cview(cv), updateAll(false), symbolYesPix(xpm_symbol_yes), symbolModPix(xpm_symbol_mod), symbolNoPix(xpm_symbol_no), - choiceYesPix(xpm_choice_yes), choiceNoPix(xpm_choice_no), menuPix(xpm_menu), menuInvPix(xpm_menu_inv), + choiceYesPix(xpm_choice_yes), choiceNoPix(xpm_choice_no), + menuPix(xpm_menu), menuInvPix(xpm_menu_inv), menuBackPix(xpm_menuback), showAll(false), showName(false), showRange(false), showData(false), rootEntry(0) { @@ -366,6 +389,8 @@ void ConfigList::updateSelection(void) cview->setHelp(item); menu = item->menu; + if (!menu) + return; type = menu->prompt ? menu->prompt->type : P_UNKNOWN; if (mode == menuMode && (type == P_MENU || type == P_ROOTMENU)) emit menuSelected(menu); @@ -373,7 +398,27 @@ void ConfigList::updateSelection(void) void ConfigList::updateList(ConfigItem* item) { - (void)item; // unused so far + ConfigItem* last = 0; + + if (!rootEntry) + goto update; + + if ((mode == singleMode || mode == symbolMode) && rootEntry != &rootmenu) { + item = firstChild(); + if (!item) + item = new ConfigItem(this, 0, true); + last = item; + } + if (mode == singleMode && rootEntry->sym && rootEntry->prompt) { + item = last ? last->nextSibling() : firstChild(); + if (!item) + item = new ConfigItem(this, last, rootEntry, true); + + updateMenuList(item, rootEntry); + triggerUpdate(); + return; + } +update: updateMenuList(this, rootEntry); triggerUpdate(); } @@ -392,7 +437,7 @@ void ConfigList::setValue(ConfigItem* item, tristate val) int type; tristate oldval; - sym = item->menu->sym; + sym = item->menu ? item->menu->sym : 0; if (!sym) return; @@ -418,6 +463,8 @@ void ConfigList::changeValue(ConfigItem* item) int type, oldexpr, newexpr; menu = item->menu; + if (!menu) + return; sym = menu->sym; if (!sym) { if (item->menu->list) @@ -511,7 +558,13 @@ void ConfigList::keyPressEvent(QKeyEvent* ev) switch (ev->key()) { case Key_Return: case Key_Enter: + if (item->goParent) { + emit parentSelected(); + break; + } menu = item->menu; + if (!menu) + break; type = menu->prompt ? menu->prompt->type : P_UNKNOWN; if ((type == P_MENU || type == P_ROOTMENU) && mode != fullMode) { emit menuSelected(menu); @@ -564,7 +617,11 @@ void ConfigList::contentsMouseReleaseEvent(QMouseEvent* e) int off = header()->sectionPos(0) + itemMargin() + treeStepSize() * (item->depth() + (rootIsDecorated() ? 1 : 0)); if (x >= off && x < off + pm->width()) { - if (menu->sym) + if (item->goParent) + emit parentSelected(); + else if (!menu) + break; + else if (menu->sym) changeValue(item); else emit menuSelected(menu); @@ -606,7 +663,13 @@ void ConfigList::contentsMouseDoubleClickEvent(QMouseEvent* e) if (!item) goto skip; + if (item->goParent) { + emit parentSelected(); + goto skip; + } menu = item->menu; + if (!menu) + goto skip; ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN; if ((ptype == P_ROOTMENU || ptype == P_MENU) && (mode == singleMode || mode == symbolMode)) @@ -677,7 +740,6 @@ void ConfigView::updateListAll(void) */ ConfigMainWindow::ConfigMainWindow(void) { - ConfigView* view; QMenuBar* menu; QSplitter* split1; QSplitter* split2; @@ -707,15 +769,15 @@ ConfigMainWindow::ConfigMainWindow(void) split1->setOrientation(QSplitter::Horizontal); setCentralWidget(split1); - view = new ConfigView(split1, this); - menuList = view->list; + menuView = new ConfigView(split1, this); + menuList = menuView->list; split2 = new QSplitter(split1); split2->setOrientation(QSplitter::Vertical); // create config tree - view = new ConfigView(split2, this); - configList = view->list; + configView = new ConfigView(split2, this); + configList = configView->list; helpText = new QTextView(split2); helpText->setTextFormat(Qt::RichText); @@ -864,89 +926,87 @@ static void expr_print_help(void *data, const char *str) void ConfigMainWindow::setHelp(QListViewItem* item) { struct symbol* sym; - struct menu* menu; + struct menu* menu = 0; configList->parent()->lineEdit->hide(); - if (item) { - QString head, debug, help; + if (item) menu = ((ConfigItem*)item)->menu; - sym = menu->sym; - if (sym) { - if (menu->prompt) { - head += "<big><b>"; - head += print_filter(menu->prompt->text); - head += "</b></big>"; - if (sym->name) { - head += " ("; - head += print_filter(sym->name); - head += ")"; - } - } else if (sym->name) { - head += "<big><b>"; + if (!menu) { + helpText->setText(NULL); + return; + } + + QString head, debug, help; + menu = ((ConfigItem*)item)->menu; + sym = menu->sym; + if (sym) { + if (menu->prompt) { + head += "<big><b>"; + head += print_filter(menu->prompt->text); + head += "</b></big>"; + if (sym->name) { + head += " ("; head += print_filter(sym->name); - head += "</b></big>"; + head += ")"; } - head += "<br><br>"; - - if (showDebug) { - debug += "type: "; - debug += print_filter(sym_type_name(sym->type)); - debug += "<br>"; - for (struct property *prop = sym->prop; prop; prop = prop->next) { - switch (prop->type) { - case P_PROMPT: - debug += "prompt: "; - debug += print_filter(prop->text); - debug += "<br>"; - if (prop->visible.expr) { - debug += " dep: "; - expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE); - debug += "<br>"; - } - break; - case P_DEFAULT: - debug += "default: "; - if (sym_is_choice(sym)) - debug += print_filter(prop->def->name); - else { - sym_calc_value(prop->def); - debug += print_filter(sym_get_string_value(prop->def)); - } + } else if (sym->name) { + head += "<big><b>"; + head += print_filter(sym->name); + head += "</b></big>"; + } + head += "<br><br>"; + + if (showDebug) { + debug += "type: "; + debug += print_filter(sym_type_name(sym->type)); + debug += "<br>"; + for (struct property *prop = sym->prop; prop; prop = prop->next) { + switch (prop->type) { + case P_PROMPT: + debug += "prompt: "; + debug += print_filter(prop->text); + debug += "<br>"; + if (prop->visible.expr) { + debug += " dep: "; + expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE); debug += "<br>"; - if (prop->visible.expr) { - debug += " dep: "; - expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE); - debug += "<br>"; - } - break; - case P_CHOICE: - break; - default: - debug += "unknown property: "; - debug += prop_get_type_name(prop->type); + } + break; + case P_DEFAULT: + debug += "default: "; + debug += print_filter(prop->def->name); + debug += "<br>"; + if (prop->visible.expr) { + debug += " dep: "; + expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE); debug += "<br>"; } + break; + case P_CHOICE: + break; + default: + debug += "unknown property: "; + debug += prop_get_type_name(prop->type); + debug += "<br>"; } - debug += "<br>"; } + debug += "<br>"; + } - help = print_filter(sym->help); - } else if (menu->prompt) { - head += "<big><b>"; - head += print_filter(menu->prompt->text); - head += "</b></big><br><br>"; - if (showDebug) { - if (menu->prompt->visible.expr) { - debug += " dep: "; - expr_print(menu->prompt->visible.expr, expr_print_help, &debug, E_NONE); - debug += "<br>"; - } + help = print_filter(sym->help); + } else if (menu->prompt) { + head += "<big><b>"; + head += print_filter(menu->prompt->text); + head += "</b></big><br><br>"; + if (showDebug) { + if (menu->prompt->visible.expr) { + debug += " dep: "; + expr_print(menu->prompt->visible.expr, expr_print_help, &debug, E_NONE); + debug += "<br>"; } } - helpText->setText(head + debug + help); - return; } - helpText->setText(NULL); + helpText->setText(head + debug + help); } void ConfigMainWindow::loadConfig(void) @@ -1010,7 +1070,7 @@ void ConfigMainWindow::goBack(void) void ConfigMainWindow::showSingleView(void) { - menuList->hide(); + menuView->hide(); menuList->setRootMenu(0); configList->mode = singleMode; if (configList->rootEntry == &rootmenu) @@ -1032,14 +1092,14 @@ void ConfigMainWindow::showSplitView(void) configApp->processEvents(); menuList->mode = menuMode; menuList->setRootMenu(&rootmenu); - menuList->show(); menuList->setAllOpen(TRUE); + menuView->show(); menuList->setFocus(); } void ConfigMainWindow::showFullView(void) { - menuList->hide(); + menuView->hide(); menuList->setRootMenu(0); configList->mode = fullMode; if (configList->rootEntry == &rootmenu) diff --git a/scripts/kconfig/qconf.h b/scripts/kconfig/qconf.h index 6f096b4e8d40cb..6ed5a0ceb90f48 100644 --- a/scripts/kconfig/qconf.h +++ b/scripts/kconfig/qconf.h @@ -101,10 +101,14 @@ public: void setAllOpen(bool open); void setParentMenu(void); + template <class P> + void ConfigList::updateMenuList(P*, struct menu*); + bool updateAll; QPixmap symbolYesPix, symbolModPix, symbolNoPix; - QPixmap choiceYesPix, choiceNoPix, menuPix, menuInvPix; + QPixmap choiceYesPix, choiceNoPix; + QPixmap menuPix, menuInvPix, menuBackPix; bool showAll, showName, showRange, showData; enum listMode mode; @@ -121,12 +125,17 @@ class ConfigItem : public QListViewItem { typedef class QListViewItem Parent; public: ConfigItem(QListView *parent, ConfigItem *after, struct menu *m, bool v) - : Parent(parent, after), menu(m), visible(v) + : Parent(parent, after), menu(m), visible(v), goParent(false) { init(); } ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m, bool v) - : Parent(parent, after), menu(m), visible(v) + : Parent(parent, after), menu(m), visible(v), goParent(false) + { + init(); + } + ConfigItem(QListView *parent, ConfigItem *after, bool v) + : Parent(parent, after), menu(0), visible(v), goParent(true) { init(); } @@ -136,7 +145,7 @@ public: void okRename(int col); #endif void updateMenu(void); - bool updateNeeded(void); + void testUpdateMenu(bool v); ConfigList* listView() const { return (ConfigList*)Parent::listView(); @@ -170,6 +179,7 @@ public: ConfigItem* nextItem; struct menu *menu; bool visible; + bool goParent; }; class ConfigLineEdit : public QLineEdit { @@ -216,7 +226,9 @@ public slots: protected: void closeEvent(QCloseEvent *e); + ConfigView *menuView; ConfigList *menuList; + ConfigView *configView; ConfigList *configList; QTextView *helpText; QToolBar *toolBar; diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index 845d8a37827bb8..7fa7825f3759cf 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c @@ -160,6 +160,9 @@ void sym_calc_value(struct symbol *sym) struct symbol *def_sym; struct expr *e; + if (!sym) + return; + if (sym->flags & SYMBOL_VALID) return; diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l index fbacd970f2a292..2e6b7c95ecfc20 100644 --- a/scripts/kconfig/zconf.l +++ b/scripts/kconfig/zconf.l @@ -96,6 +96,7 @@ n [A-Za-z0-9_] "endchoice" BEGIN(PARAM); return T_ENDCHOICE; "comment" BEGIN(PARAM); return T_COMMENT; "config" BEGIN(PARAM); return T_CONFIG; + "menuconfig" BEGIN(PARAM); return T_MENUCONFIG; "help" BEGIN(PARAM); return T_HELP; "if" BEGIN(PARAM); return T_IF; "endif" BEGIN(PARAM); return T_ENDIF; @@ -141,6 +142,7 @@ n [A-Za-z0-9_] zconflval.string = text; return T_WORD; } + #.* /* comment */ \\\n current_file->lineno++; . <<EOF>> { @@ -208,7 +210,7 @@ n [A-Za-z0-9_] } } - \n/[^ \t\n] { + [ \t]*\n/[^ \t\n] { current_file->lineno++; zconf_endhelp(); return T_HELPTEXT; diff --git a/scripts/kconfig/zconf.tab.c_shipped b/scripts/kconfig/zconf.tab.c_shipped index d312cc10dc8894..e8904d9bf81330 100644 --- a/scripts/kconfig/zconf.tab.c_shipped +++ b/scripts/kconfig/zconf.tab.c_shipped @@ -1,7 +1,7 @@ -/* A Bison parser, made from zconf.y, by GNU bison 1.75. */ +/* A Bison parser, made by GNU Bison 1.875a. */ /* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -34,10 +34,13 @@ USER NAME SPACE" below. */ /* Identify Bison output. */ -#define YYBISON 1 +#define YYBISON 1 + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ -#define YYPURE 0 +#define YYPURE 0 /* Using locations. */ #define YYLSP_NEEDED 0 @@ -67,32 +70,33 @@ T_ENDCHOICE = 263, T_COMMENT = 264, T_CONFIG = 265, - T_HELP = 266, - T_HELPTEXT = 267, - T_IF = 268, - T_ENDIF = 269, - T_DEPENDS = 270, - T_REQUIRES = 271, - T_OPTIONAL = 272, - T_PROMPT = 273, - T_DEFAULT = 274, - T_TRISTATE = 275, - T_BOOLEAN = 276, - T_STRING = 277, - T_INT = 278, - T_HEX = 279, - T_WORD = 280, - T_WORD_QUOTE = 281, - T_UNEQUAL = 282, - T_EOF = 283, - T_EOL = 284, - T_CLOSE_PAREN = 285, - T_OPEN_PAREN = 286, - T_ON = 287, - T_OR = 288, - T_AND = 289, - T_EQUAL = 290, - T_NOT = 291 + T_MENUCONFIG = 266, + T_HELP = 267, + T_HELPTEXT = 268, + T_IF = 269, + T_ENDIF = 270, + T_DEPENDS = 271, + T_REQUIRES = 272, + T_OPTIONAL = 273, + T_PROMPT = 274, + T_DEFAULT = 275, + T_TRISTATE = 276, + T_BOOLEAN = 277, + T_STRING = 278, + T_INT = 279, + T_HEX = 280, + T_WORD = 281, + T_WORD_QUOTE = 282, + T_UNEQUAL = 283, + T_EOF = 284, + T_EOL = 285, + T_CLOSE_PAREN = 286, + T_OPEN_PAREN = 287, + T_ON = 288, + T_OR = 289, + T_AND = 290, + T_EQUAL = 291, + T_NOT = 292 }; #endif #define T_MAINMENU 258 @@ -103,38 +107,40 @@ #define T_ENDCHOICE 263 #define T_COMMENT 264 #define T_CONFIG 265 -#define T_HELP 266 -#define T_HELPTEXT 267 -#define T_IF 268 -#define T_ENDIF 269 -#define T_DEPENDS 270 -#define T_REQUIRES 271 -#define T_OPTIONAL 272 -#define T_PROMPT 273 -#define T_DEFAULT 274 -#define T_TRISTATE 275 -#define T_BOOLEAN 276 -#define T_STRING 277 -#define T_INT 278 -#define T_HEX 279 -#define T_WORD 280 -#define T_WORD_QUOTE 281 -#define T_UNEQUAL 282 -#define T_EOF 283 -#define T_EOL 284 -#define T_CLOSE_PAREN 285 -#define T_OPEN_PAREN 286 -#define T_ON 287 -#define T_OR 288 -#define T_AND 289 -#define T_EQUAL 290 -#define T_NOT 291 +#define T_MENUCONFIG 266 +#define T_HELP 267 +#define T_HELPTEXT 268 +#define T_IF 269 +#define T_ENDIF 270 +#define T_DEPENDS 271 +#define T_REQUIRES 272 +#define T_OPTIONAL 273 +#define T_PROMPT 274 +#define T_DEFAULT 275 +#define T_TRISTATE 276 +#define T_BOOLEAN 277 +#define T_STRING 278 +#define T_INT 279 +#define T_HEX 280 +#define T_WORD 281 +#define T_WORD_QUOTE 282 +#define T_UNEQUAL 283 +#define T_EOF 284 +#define T_EOL 285 +#define T_CLOSE_PAREN 286 +#define T_OPEN_PAREN 287 +#define T_ON 288 +#define T_OR 289 +#define T_AND 290 +#define T_EQUAL 291 +#define T_NOT 292 /* Copy the first part of user declarations. */ + /* * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> * Released under the terms of the GNU GPL v2.0. @@ -166,7 +172,7 @@ struct symbol *symbol_hash[257]; /* Enabling traces. */ #ifndef YYDEBUG -# define YYDEBUG 0 +# define YYDEBUG 1 #endif /* Enabling verbose error messages. */ @@ -177,41 +183,33 @@ struct symbol *symbol_hash[257]; # define YYERROR_VERBOSE 0 #endif -#ifndef YYSTYPE -#line 33 "zconf.y" -typedef union { +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) + +typedef union YYSTYPE { int token; char *string; struct symbol *symbol; struct expr *expr; struct menu *menu; -} yystype; -/* Line 193 of /usr/share/bison/yacc.c. */ -#line 191 "zconf.tab.c" -# define YYSTYPE yystype +} YYSTYPE; +/* Line 191 of yacc.c. */ + +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif -#ifndef YYLTYPE -typedef struct yyltype -{ - int first_line; - int first_column; - int last_line; - int last_column; -} yyltype; -# define YYLTYPE yyltype -# define YYLTYPE_IS_TRIVIAL 1 -#endif + /* Copy the second part of user declarations. */ + #define LKC_DIRECT_LINK #include "lkc.h" -/* Line 213 of /usr/share/bison/yacc.c. */ -#line 215 "zconf.tab.c" +/* Line 214 of yacc.c. */ + #if ! defined (yyoverflow) || YYERROR_VERBOSE @@ -247,7 +245,7 @@ typedef struct yyltype #if (! defined (yyoverflow) \ && (! defined (__cplusplus) \ - || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + || (YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc @@ -257,13 +255,13 @@ union yyalloc }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAX) + + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ @@ -277,7 +275,7 @@ union yyalloc { \ register YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ + (To)[yyi] = (From)[yyi]; \ } \ while (0) # endif @@ -294,7 +292,7 @@ union yyalloc YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) @@ -309,23 +307,24 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 -#define YYLAST 154 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 160 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 37 +#define YYNTOKENS 38 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 39 +#define YYNNTS 41 /* YYNRULES -- Number of rules. */ -#define YYNRULES 96 +#define YYNRULES 99 /* YYNRULES -- Number of states. */ -#define YYNSTATES 146 +#define YYNSTATES 152 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 291 +#define YYMAXUTOK 292 -#define YYTRANSLATE(X) \ - ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK) +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const unsigned char yytranslate[] = @@ -359,7 +358,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, 36 + 35, 36, 37 }; #if YYDEBUG @@ -368,63 +367,64 @@ static const unsigned char yytranslate[] = static const unsigned short yyprhs[] = { 0, 0, 3, 4, 7, 9, 11, 13, 17, 19, - 21, 23, 26, 28, 30, 32, 34, 36, 39, 43, - 44, 48, 52, 55, 58, 61, 64, 67, 70, 73, - 77, 81, 83, 87, 89, 94, 97, 98, 102, 106, - 109, 112, 116, 118, 122, 123, 126, 129, 131, 137, - 141, 142, 145, 148, 151, 154, 158, 160, 165, 168, - 169, 172, 175, 178, 182, 185, 188, 191, 195, 198, - 201, 202, 206, 209, 213, 216, 219, 220, 222, 226, - 228, 230, 232, 234, 236, 238, 240, 241, 244, 246, - 250, 254, 258, 261, 265, 269, 271 + 21, 23, 26, 28, 30, 32, 34, 36, 38, 41, + 45, 48, 52, 53, 57, 61, 64, 67, 70, 73, + 76, 79, 82, 86, 90, 92, 96, 98, 103, 106, + 107, 111, 115, 118, 121, 125, 127, 131, 132, 135, + 138, 140, 146, 150, 151, 154, 157, 160, 163, 167, + 169, 174, 177, 178, 181, 184, 187, 191, 194, 197, + 200, 204, 207, 210, 211, 215, 218, 222, 225, 228, + 229, 231, 235, 237, 239, 241, 243, 245, 247, 249, + 250, 253, 255, 259, 263, 267, 270, 274, 278, 280 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yysigned_char yyrhs[] = { - 38, 0, -1, -1, 38, 39, -1, 40, -1, 48, - -1, 59, -1, 3, 70, 72, -1, 5, -1, 14, - -1, 8, -1, 1, 72, -1, 54, -1, 64, -1, - 42, -1, 62, -1, 72, -1, 10, 25, -1, 41, - 29, 43, -1, -1, 43, 44, 29, -1, 43, 68, - 29, -1, 43, 66, -1, 43, 29, -1, 20, 69, - -1, 21, 69, -1, 23, 69, -1, 24, 69, -1, - 22, 69, -1, 18, 70, 73, -1, 19, 75, 73, - -1, 7, -1, 45, 29, 49, -1, 71, -1, 46, - 51, 47, 29, -1, 46, 51, -1, -1, 49, 50, - 29, -1, 49, 68, 29, -1, 49, 66, -1, 49, - 29, -1, 18, 70, 73, -1, 17, -1, 19, 75, - 73, -1, -1, 51, 40, -1, 13, 74, -1, 71, - -1, 52, 29, 55, 53, 29, -1, 52, 29, 55, - -1, -1, 55, 40, -1, 55, 59, -1, 55, 48, - -1, 4, 70, -1, 56, 29, 67, -1, 71, -1, - 57, 60, 58, 29, -1, 57, 60, -1, -1, 60, - 40, -1, 60, 59, -1, 60, 48, -1, 60, 1, - 29, -1, 6, 70, -1, 61, 29, -1, 9, 70, - -1, 63, 29, 67, -1, 11, 29, -1, 65, 12, - -1, -1, 67, 68, 29, -1, 67, 29, -1, 15, - 32, 74, -1, 15, 74, -1, 16, 74, -1, -1, - 70, -1, 70, 13, 74, -1, 25, -1, 26, -1, - 5, -1, 8, -1, 14, -1, 29, -1, 28, -1, - -1, 13, 74, -1, 75, -1, 75, 35, 75, -1, - 75, 27, 75, -1, 31, 74, 30, -1, 36, 74, - -1, 74, 33, 74, -1, 74, 34, 74, -1, 25, - -1, 26, -1 + 39, 0, -1, -1, 39, 40, -1, 41, -1, 51, + -1, 62, -1, 3, 73, 75, -1, 5, -1, 15, + -1, 8, -1, 1, 75, -1, 57, -1, 67, -1, + 43, -1, 45, -1, 65, -1, 75, -1, 10, 26, + -1, 42, 30, 46, -1, 11, 26, -1, 44, 30, + 46, -1, -1, 46, 47, 30, -1, 46, 71, 30, + -1, 46, 69, -1, 46, 30, -1, 21, 72, -1, + 22, 72, -1, 24, 72, -1, 25, 72, -1, 23, + 72, -1, 19, 73, 76, -1, 20, 78, 76, -1, + 7, -1, 48, 30, 52, -1, 74, -1, 49, 54, + 50, 30, -1, 49, 54, -1, -1, 52, 53, 30, + -1, 52, 71, 30, -1, 52, 69, -1, 52, 30, + -1, 19, 73, 76, -1, 18, -1, 20, 78, 76, + -1, -1, 54, 41, -1, 14, 77, -1, 74, -1, + 55, 30, 58, 56, 30, -1, 55, 30, 58, -1, + -1, 58, 41, -1, 58, 62, -1, 58, 51, -1, + 4, 73, -1, 59, 30, 70, -1, 74, -1, 60, + 63, 61, 30, -1, 60, 63, -1, -1, 63, 41, + -1, 63, 62, -1, 63, 51, -1, 63, 1, 30, + -1, 6, 73, -1, 64, 30, -1, 9, 73, -1, + 66, 30, 70, -1, 12, 30, -1, 68, 13, -1, + -1, 70, 71, 30, -1, 70, 30, -1, 16, 33, + 77, -1, 16, 77, -1, 17, 77, -1, -1, 73, + -1, 73, 14, 77, -1, 26, -1, 27, -1, 5, + -1, 8, -1, 15, -1, 30, -1, 29, -1, -1, + 14, 77, -1, 78, -1, 78, 36, 78, -1, 78, + 28, 78, -1, 32, 77, 31, -1, 37, 77, -1, + 77, 34, 77, -1, 77, 35, 77, -1, 26, -1, + 27, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short yyrline[] = { - 0, 89, 89, 90, 93, 94, 95, 96, 97, 98, - 99, 100, 103, 105, 106, 107, 108, 114, 122, 128, - 130, 131, 132, 133, 136, 142, 148, 154, 160, 166, - 172, 180, 189, 195, 203, 205, 211, 213, 214, 215, - 216, 219, 225, 231, 237, 239, 244, 253, 261, 263, - 269, 271, 272, 273, 278, 285, 291, 299, 301, 307, - 309, 310, 311, 312, 315, 321, 328, 335, 342, 348, - 355, 356, 357, 360, 365, 370, 378, 380, 384, 389, - 390, 393, 394, 395, 398, 399, 401, 402, 405, 406, - 407, 408, 409, 410, 411, 414, 415 + 0, 90, 90, 91, 94, 95, 96, 97, 98, 99, + 100, 101, 105, 106, 107, 108, 109, 110, 116, 124, + 130, 138, 148, 150, 151, 152, 153, 156, 162, 168, + 174, 180, 186, 192, 200, 209, 215, 224, 225, 231, + 233, 234, 235, 236, 239, 245, 251, 257, 259, 264, + 273, 282, 283, 289, 291, 292, 293, 298, 305, 311, + 320, 321, 327, 329, 330, 331, 332, 335, 341, 348, + 355, 362, 368, 375, 376, 377, 380, 385, 390, 398, + 400, 404, 409, 410, 413, 414, 415, 419, 419, 421, + 422, 425, 426, 427, 428, 429, 430, 431, 434, 435 }; #endif @@ -435,19 +435,19 @@ static const char *const yytname[] = { "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU", "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG", - "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS", "T_REQUIRES", - "T_OPTIONAL", "T_PROMPT", "T_DEFAULT", "T_TRISTATE", "T_BOOLEAN", - "T_STRING", "T_INT", "T_HEX", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL", - "T_EOF", "T_EOL", "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_ON", "T_OR", - "T_AND", "T_EQUAL", "T_NOT", "$accept", "input", "block", + "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS", + "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_DEFAULT", "T_TRISTATE", + "T_BOOLEAN", "T_STRING", "T_INT", "T_HEX", "T_WORD", "T_WORD_QUOTE", + "T_UNEQUAL", "T_EOF", "T_EOL", "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_ON", + "T_OR", "T_AND", "T_EQUAL", "T_NOT", "$accept", "input", "block", "common_block", "config_entry_start", "config_stmt", - "config_option_list", "config_option", "choice", "choice_entry", - "choice_end", "choice_stmt", "choice_option_list", "choice_option", - "choice_block", "if", "if_end", "if_stmt", "if_block", "menu", - "menu_entry", "menu_end", "menu_stmt", "menu_block", "source", - "source_stmt", "comment", "comment_stmt", "help_start", "help", - "depends_list", "depends", "prompt_stmt_opt", "prompt", "end", - "nl_or_eof", "if_expr", "expr", "symbol", 0 + "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", "if_end", + "if_stmt", "if_block", "menu", "menu_entry", "menu_end", "menu_stmt", + "menu_block", "source", "source_stmt", "comment", "comment_stmt", + "help_start", "help", "depends_list", "depends", "prompt_stmt_opt", + "prompt", "end", "nl_or_eof", "if_expr", "expr", "symbol", 0 }; #endif @@ -459,38 +459,38 @@ static const unsigned short 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, 291 + 285, 286, 287, 288, 289, 290, 291, 292 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const unsigned char yyr1[] = { - 0, 37, 38, 38, 39, 39, 39, 39, 39, 39, - 39, 39, 40, 40, 40, 40, 40, 41, 42, 43, - 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, - 44, 45, 46, 47, 48, 48, 49, 49, 49, 49, - 49, 50, 50, 50, 51, 51, 52, 53, 54, 54, - 55, 55, 55, 55, 56, 57, 58, 59, 59, 60, - 60, 60, 60, 60, 61, 62, 63, 64, 65, 66, - 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, - 70, 71, 71, 71, 72, 72, 73, 73, 74, 74, - 74, 74, 74, 74, 74, 75, 75 + 0, 38, 39, 39, 40, 40, 40, 40, 40, 40, + 40, 40, 41, 41, 41, 41, 41, 41, 42, 43, + 44, 45, 46, 46, 46, 46, 46, 47, 47, 47, + 47, 47, 47, 47, 48, 49, 50, 51, 51, 52, + 52, 52, 52, 52, 53, 53, 53, 54, 54, 55, + 56, 57, 57, 58, 58, 58, 58, 59, 60, 61, + 62, 62, 63, 63, 63, 63, 63, 64, 65, 66, + 67, 68, 69, 70, 70, 70, 71, 71, 71, 72, + 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. */ static const unsigned char yyr2[] = { 0, 2, 0, 2, 1, 1, 1, 3, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 2, 3, 0, - 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, - 3, 1, 3, 1, 4, 2, 0, 3, 3, 2, - 2, 3, 1, 3, 0, 2, 2, 1, 5, 3, - 0, 2, 2, 2, 2, 3, 1, 4, 2, 0, - 2, 2, 2, 3, 2, 2, 2, 3, 2, 2, - 0, 3, 2, 3, 2, 2, 0, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 0, 2, 1, 3, - 3, 3, 2, 3, 3, 1, 1 + 1, 2, 1, 1, 1, 1, 1, 1, 2, 3, + 2, 3, 0, 3, 3, 2, 2, 2, 2, 2, + 2, 2, 3, 3, 1, 3, 1, 4, 2, 0, + 3, 3, 2, 2, 3, 1, 3, 0, 2, 2, + 1, 5, 3, 0, 2, 2, 2, 2, 3, 1, + 4, 2, 0, 2, 2, 2, 3, 2, 2, 2, + 3, 2, 2, 0, 3, 2, 3, 2, 2, 0, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 0, + 2, 1, 3, 3, 3, 2, 3, 3, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -498,127 +498,134 @@ static const unsigned char yyr2[] = means the default is an error. */ static const unsigned char yydefact[] = { - 2, 0, 1, 0, 0, 0, 8, 0, 31, 10, - 0, 0, 0, 9, 85, 84, 3, 4, 0, 14, - 0, 44, 5, 0, 12, 0, 59, 6, 0, 15, - 0, 13, 16, 11, 79, 80, 0, 54, 64, 66, - 17, 95, 96, 0, 0, 46, 88, 19, 36, 35, - 50, 70, 0, 65, 70, 7, 0, 92, 0, 0, - 0, 0, 18, 32, 81, 82, 83, 45, 0, 33, - 49, 55, 0, 60, 62, 0, 61, 56, 67, 91, - 93, 94, 90, 89, 0, 0, 0, 0, 0, 76, - 76, 76, 76, 76, 23, 0, 0, 22, 0, 42, - 0, 0, 40, 0, 39, 0, 34, 51, 53, 0, - 52, 47, 72, 0, 63, 57, 68, 0, 74, 75, - 86, 86, 24, 77, 25, 28, 26, 27, 20, 69, - 21, 86, 86, 37, 38, 48, 71, 73, 0, 29, - 30, 0, 41, 43, 87, 78 + 2, 0, 1, 0, 0, 0, 8, 0, 34, 10, + 0, 0, 0, 0, 9, 88, 87, 3, 4, 0, + 14, 0, 15, 0, 47, 5, 0, 12, 0, 62, + 6, 0, 16, 0, 13, 17, 11, 82, 83, 0, + 57, 67, 69, 18, 20, 98, 99, 0, 0, 49, + 91, 22, 22, 39, 38, 53, 73, 0, 68, 73, + 7, 0, 95, 0, 0, 0, 0, 19, 21, 35, + 84, 85, 86, 48, 0, 36, 52, 58, 0, 63, + 65, 0, 64, 59, 70, 94, 96, 97, 93, 92, + 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, + 26, 0, 0, 25, 0, 45, 0, 0, 43, 0, + 42, 0, 37, 54, 56, 0, 55, 50, 75, 0, + 66, 60, 71, 0, 77, 78, 89, 89, 27, 80, + 28, 31, 29, 30, 23, 72, 24, 89, 89, 40, + 41, 51, 74, 76, 0, 32, 33, 0, 44, 46, + 90, 81 }; /* YYDEFGOTO[NTERM-NUM]. */ static const short yydefgoto[] = { - -1, 1, 16, 17, 18, 19, 62, 95, 20, 21, - 68, 22, 63, 103, 49, 23, 109, 24, 70, 25, - 26, 75, 27, 52, 28, 29, 30, 31, 96, 97, - 71, 113, 122, 123, 69, 32, 139, 45, 46 + -1, 1, 17, 18, 19, 20, 21, 22, 67, 101, + 23, 24, 74, 25, 69, 109, 54, 26, 115, 27, + 76, 28, 29, 81, 30, 57, 31, 32, 33, 34, + 102, 103, 77, 104, 128, 129, 75, 35, 145, 49, + 50 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -120 +#define YYPACT_NINF -121 static const short yypact[] = { - -120, 17, -120, 32, 71, 71, -120, 71, -120, -120, - 71, 11, 99, -120, -120, -120, -120, -120, 12, -120, - 22, -120, -120, 35, -120, 52, -120, -120, 56, -120, - 60, -120, -120, -120, -120, -120, 32, -120, -120, -120, - -120, -120, -120, 99, 99, 83, 38, -120, -120, 74, - -120, -120, 49, -120, -120, -120, 98, -120, 99, 99, - 101, 101, 89, 104, -120, -120, -120, -120, 65, -120, - 62, 77, 72, -120, -120, 85, -120, -120, 77, -120, - 95, -120, -120, -120, 105, 8, 99, 71, 101, 71, - 71, 71, 71, 71, -120, 113, 131, -120, 115, -120, - 71, 101, -120, 116, -120, 117, -120, -120, -120, 118, - -120, -120, -120, 119, -120, -120, -120, 99, 83, 83, - 136, 136, -120, 137, -120, -120, -120, -120, -120, -120, - -120, 136, 136, -120, -120, -120, -120, 83, 99, -120, - -120, 99, -120, -120, 83, 83 + -121, 25, -121, -18, -11, -11, -121, -11, -121, -121, + -11, 21, 27, 112, -121, -121, -121, -121, -121, 51, + -121, 54, -121, 57, -121, -121, 58, -121, 62, -121, + -121, 80, -121, 96, -121, -121, -121, -121, -121, -18, + -121, -121, -121, -121, -121, -121, -121, 112, 112, 17, + 77, -121, -121, -121, 85, -121, -121, 56, -121, -121, + -121, -21, -121, 112, 112, 42, 42, 100, 100, 115, + -121, -121, -121, -121, 98, -121, 68, 28, 99, -121, + -121, 111, -121, -121, 28, -121, 105, -121, -121, -121, + 116, 110, 112, -11, 42, -11, -11, -11, -11, -11, + -121, 118, 137, -121, 121, -121, -11, 42, -121, 122, + -121, 123, -121, -121, -121, 124, -121, -121, -121, 125, + -121, -121, -121, 112, 17, 17, 142, 142, -121, 143, + -121, -121, -121, -121, -121, -121, -121, 142, 142, -121, + -121, -121, -121, 17, 112, -121, -121, 112, -121, -121, + 17, 17 }; /* YYPGOTO[NTERM-NUM]. */ static const yysigned_char yypgoto[] = { - -120, -120, -120, -38, -120, -120, -120, -120, -120, -120, - -120, -42, -120, -120, -120, -120, -120, -120, -120, -120, - -120, -120, -33, -120, -120, -120, -120, -120, -120, 88, - 100, 78, 46, -1, -23, 2, -119, -43, -53 + -121, -121, -121, -35, -121, -121, -121, -121, 106, -121, + -121, -121, -121, -34, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -33, -121, -121, -121, -121, -121, + -121, 90, 101, 34, 10, -4, -30, -1, -120, -43, + -57 }; /* 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, parse error. */ -#define YYTABLE_NINF -59 + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -62 static const short yytable[] = { - 56, 57, 140, 36, 37, 33, 38, 82, 83, 39, - 74, 67, 142, 143, 73, 80, 81, 2, 3, 76, - 4, 5, 6, 7, 8, 9, 10, 11, 108, 77, - 12, 13, 107, 41, 42, 121, 40, 110, 55, 43, - 117, 47, 118, 119, 44, 14, 15, 111, 132, -58, - 72, 48, -58, 5, 64, 7, 8, 65, 10, 11, - 14, 15, 12, 66, 50, 60, 5, 64, 7, 8, - 65, 10, 11, 61, 137, 12, 66, 14, 15, 64, - 7, 51, 65, 10, 11, 53, 120, 12, 66, 54, - 14, 15, 85, 86, 106, 144, 34, 35, 145, 131, - 84, 114, 14, 15, 85, 86, 112, 87, 88, 89, - 90, 91, 92, 93, 115, 84, 58, 59, 94, 85, - 86, 99, 100, 101, 41, 42, 41, 42, 79, 59, - 43, 58, 59, 102, 116, 44, 124, 125, 126, 127, - 98, 105, 128, 129, 130, 133, 134, 135, 136, 138, - 141, 104, 0, 0, 78 + 39, 40, 36, 41, 61, 62, 42, 146, 88, 89, + 85, 15, 16, 63, 64, 37, 38, 148, 149, 73, + 86, 87, 79, 80, 82, 2, 3, 83, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 127, 60, 13, + 14, 113, 114, 116, 91, 92, 117, 43, 124, 125, + 138, 63, 64, 44, 15, 16, -61, 78, 118, -61, + 5, 70, 7, 8, 71, 10, 11, 12, 45, 46, + 13, 72, 5, 70, 7, 8, 71, 10, 11, 12, + 143, 51, 13, 72, 52, 15, 16, 53, 55, 126, + 70, 7, 56, 71, 10, 11, 12, 15, 16, 13, + 72, 150, 137, 111, 151, 65, 130, 131, 132, 133, + 58, 119, 90, 66, 15, 16, 91, 92, 119, 93, + 94, 95, 96, 97, 98, 99, 59, 90, 112, 120, + 100, 91, 92, 105, 106, 107, 45, 46, 45, 46, + 64, 121, 47, 123, 47, 108, 122, 48, 134, 48, + 135, 136, 139, 140, 141, 142, 144, 147, 68, 110, + 84 }; -static const short yycheck[] = +static const unsigned char yycheck[] = { - 43, 44, 121, 4, 5, 3, 7, 60, 61, 10, - 52, 49, 131, 132, 52, 58, 59, 0, 1, 52, - 3, 4, 5, 6, 7, 8, 9, 10, 70, 52, - 13, 14, 70, 25, 26, 88, 25, 70, 36, 31, - 32, 29, 85, 86, 36, 28, 29, 70, 101, 0, - 1, 29, 3, 4, 5, 6, 7, 8, 9, 10, - 28, 29, 13, 14, 29, 27, 4, 5, 6, 7, - 8, 9, 10, 35, 117, 13, 14, 28, 29, 5, - 6, 29, 8, 9, 10, 29, 87, 13, 14, 29, - 28, 29, 15, 16, 29, 138, 25, 26, 141, 100, - 11, 29, 28, 29, 15, 16, 29, 18, 19, 20, - 21, 22, 23, 24, 29, 11, 33, 34, 29, 15, - 16, 17, 18, 19, 25, 26, 25, 26, 30, 34, - 31, 33, 34, 29, 29, 36, 90, 91, 92, 93, - 62, 63, 29, 12, 29, 29, 29, 29, 29, 13, - 13, 63, -1, -1, 54 + 4, 5, 3, 7, 47, 48, 10, 127, 65, 66, + 31, 29, 30, 34, 35, 26, 27, 137, 138, 54, + 63, 64, 57, 57, 57, 0, 1, 57, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 94, 39, 14, + 15, 76, 76, 76, 16, 17, 76, 26, 91, 92, + 107, 34, 35, 26, 29, 30, 0, 1, 30, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 26, 27, + 14, 15, 4, 5, 6, 7, 8, 9, 10, 11, + 123, 30, 14, 15, 30, 29, 30, 30, 30, 93, + 5, 6, 30, 8, 9, 10, 11, 29, 30, 14, + 15, 144, 106, 69, 147, 28, 96, 97, 98, 99, + 30, 77, 12, 36, 29, 30, 16, 17, 84, 19, + 20, 21, 22, 23, 24, 25, 30, 12, 30, 30, + 30, 16, 17, 18, 19, 20, 26, 27, 26, 27, + 35, 30, 32, 33, 32, 30, 30, 37, 30, 37, + 13, 30, 30, 30, 30, 30, 14, 14, 52, 69, + 59 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const unsigned char yystos[] = { - 0, 38, 0, 1, 3, 4, 5, 6, 7, 8, - 9, 10, 13, 14, 28, 29, 39, 40, 41, 42, - 45, 46, 48, 52, 54, 56, 57, 59, 61, 62, - 63, 64, 72, 72, 25, 26, 70, 70, 70, 70, - 25, 25, 26, 31, 36, 74, 75, 29, 29, 51, - 29, 29, 60, 29, 29, 72, 74, 74, 33, 34, - 27, 35, 43, 49, 5, 8, 14, 40, 47, 71, - 55, 67, 1, 40, 48, 58, 59, 71, 67, 30, - 74, 74, 75, 75, 11, 15, 16, 18, 19, 20, - 21, 22, 23, 24, 29, 44, 65, 66, 68, 17, - 18, 19, 29, 50, 66, 68, 29, 40, 48, 53, - 59, 71, 29, 68, 29, 29, 29, 32, 74, 74, - 70, 75, 69, 70, 69, 69, 69, 69, 29, 12, - 29, 70, 75, 29, 29, 29, 29, 74, 13, 73, - 73, 13, 73, 73, 74, 74 + 0, 39, 0, 1, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 14, 15, 29, 30, 40, 41, 42, + 43, 44, 45, 48, 49, 51, 55, 57, 59, 60, + 62, 64, 65, 66, 67, 75, 75, 26, 27, 73, + 73, 73, 73, 26, 26, 26, 27, 32, 37, 77, + 78, 30, 30, 30, 54, 30, 30, 63, 30, 30, + 75, 77, 77, 34, 35, 28, 36, 46, 46, 52, + 5, 8, 15, 41, 50, 74, 58, 70, 1, 41, + 51, 61, 62, 74, 70, 31, 77, 77, 78, 78, + 12, 16, 17, 19, 20, 21, 22, 23, 24, 25, + 30, 47, 68, 69, 71, 18, 19, 20, 30, 53, + 69, 71, 30, 41, 51, 56, 62, 74, 30, 71, + 30, 30, 30, 33, 77, 77, 73, 78, 72, 73, + 72, 72, 72, 72, 30, 13, 30, 73, 78, 30, + 30, 30, 30, 77, 14, 76, 76, 14, 76, 76, + 77, 77 }; #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) @@ -639,13 +646,14 @@ static const unsigned char yystos[] = #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) -#define YYEMPTY -2 +#define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrlab1 + /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ @@ -660,13 +668,13 @@ do \ { \ yychar = (Token); \ yylval = (Value); \ - yychar1 = YYTRANSLATE (yychar); \ + yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ { \ - yyerror ("syntax error: cannot back up"); \ + yyerror ("syntax error: cannot back up");\ YYERROR; \ } \ while (0) @@ -678,7 +686,7 @@ while (0) are run). */ #ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ +# define YYLLOC_DEFAULT(Current, Rhs, N) \ Current.first_line = Rhs[1].first_line; \ Current.first_column = Rhs[1].first_column; \ Current.last_line = Rhs[N].last_line; \ @@ -687,7 +695,11 @@ while (0) /* YYLEX -- calling `yylex' with the right arguments. */ -#define YYLEX yylex () +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif /* Enable debugging if requested. */ #if YYDEBUG @@ -702,19 +714,93 @@ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) + # define YYDSYMPRINT(Args) \ do { \ if (yydebug) \ yysymprint Args; \ } while (0) + +# define YYDSYMPRINTF(Title, Token, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (cinluded). | +`------------------------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_stack_print (short *bottom, short *top) +#else +static void +yy_stack_print (bottom, top) + short *bottom; + short *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (/* Nothing. */; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_reduce_print (int yyrule) +#else +static void +yy_reduce_print (yyrule) + int yyrule; +#endif +{ + int yyi; + unsigned int yylineno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + yyrule - 1, yylineno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (Rule); \ +} while (0) + /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ + /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 @@ -793,95 +879,85 @@ yystpcpy (yydest, yysrc) #if YYDEBUG -/*-----------------------------. -| Print this symbol on YYOUT. | -`-----------------------------*/ +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ -static void #if defined (__STDC__) || defined (__cplusplus) -yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue) +static void +yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) #else -yysymprint (yyout, yytype, yyvalue) - FILE* yyout; +static void +yysymprint (yyoutput, yytype, yyvaluep) + FILE *yyoutput; int yytype; - YYSTYPE yyvalue; + YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ - (void) yyvalue; + (void) yyvaluep; if (yytype < YYNTOKENS) { - YYFPRINTF (yyout, "token %s (", yytname[yytype]); + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); # ifdef YYPRINT - YYPRINT (yyout, yytoknum[yytype], yyvalue); + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif } else - YYFPRINTF (yyout, "nterm %s (", yytname[yytype]); + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); switch (yytype) { default: break; } - YYFPRINTF (yyout, ")"); + YYFPRINTF (yyoutput, ")"); } -#endif /* YYDEBUG. */ - +#endif /* ! YYDEBUG */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ -static void #if defined (__STDC__) || defined (__cplusplus) -yydestruct (int yytype, YYSTYPE yyvalue) +static void +yydestruct (int yytype, YYSTYPE *yyvaluep) #else -yydestruct (yytype, yyvalue) +static void +yydestruct (yytype, yyvaluep) int yytype; - YYSTYPE yyvalue; + YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ - (void) yyvalue; + (void) yyvaluep; switch (yytype) { + default: break; } } - -/* The user can define YYPARSE_PARAM as the name of an argument to be passed - into yyparse. The argument should have type void *. - It should actually point to an object. - Grammar actions can access the variable by casting it - to the proper pointer type. */ +/* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM # if defined (__STDC__) || defined (__cplusplus) -# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM -# define YYPARSE_PARAM_DECL +int yyparse (void *YYPARSE_PARAM); # else -# define YYPARSE_PARAM_ARG YYPARSE_PARAM -# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +int yyparse (); # endif -#else /* !YYPARSE_PARAM */ -# define YYPARSE_PARAM_ARG -# define YYPARSE_PARAM_DECL -#endif /* !YYPARSE_PARAM */ - -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ -# ifdef YYPARSE_PARAM -int yyparse (void *); -# else +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) int yyparse (void); -# endif +#else +int yyparse (); #endif +#endif /* ! YYPARSE_PARAM */ + /* The lookahead symbol. */ @@ -890,13 +966,32 @@ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; -/* Number of parse errors so far. */ +/* Number of syntax errors so far. */ int yynerrs; + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM) +# else +int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int +yyparse (void) +#else int -yyparse (YYPARSE_PARAM_ARG) - YYPARSE_PARAM_DECL +yyparse () + +#endif +#endif { register int yystate; @@ -905,7 +1000,7 @@ yyparse (YYPARSE_PARAM_ARG) /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Lookahead token as an internal (translated) token number. */ - int yychar1 = 0; + int yytoken = 0; /* Three stacks and their tools: `yyss': related to states, @@ -969,7 +1064,7 @@ yyparse (YYPARSE_PARAM_ARG) yysetstate: *yyssp = yystate; - if (yyssp >= yyss + yystacksize - 1) + if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; @@ -1001,10 +1096,10 @@ yyparse (YYPARSE_PARAM_ARG) goto yyoverflowlab; # else /* Extend the stack our own way. */ - if (yystacksize >= YYMAXDEPTH) + if (YYMAXDEPTH <= yystacksize) goto yyoverflowlab; yystacksize *= 2; - if (yystacksize > YYMAXDEPTH) + if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { @@ -1030,7 +1125,7 @@ yyparse (YYPARSE_PARAM_ARG) YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); - if (yyssp >= yyss + yystacksize - 1) + if (yyss + yystacksize - 1 <= yyssp) YYABORT; } @@ -1055,39 +1150,28 @@ yybackup: /* Not known => get a lookahead token if don't already have one. */ - /* yychar is either YYEMPTY or YYEOF - or a valid token in external form. */ - + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } - /* Convert token to internal form (in yychar1) for indexing tables with. */ - - if (yychar <= 0) /* This means end of input. */ + if (yychar <= YYEOF) { - yychar1 = 0; - yychar = YYEOF; /* Don't call YYLEX any more. */ - + yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { - yychar1 = YYTRANSLATE (yychar); - - /* We have to keep this `#if YYDEBUG', since we use variables - which are defined only if `YYDEBUG' is set. */ - YYDPRINTF ((stderr, "Next token is ")); - YYDSYMPRINT ((stderr, yychar1, yylval)); - YYDPRINTF ((stderr, "\n")); + yytoken = YYTRANSLATE (yychar); + YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); } - /* If the proper action on seeing token YYCHAR1 is to reduce or to + /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ - yyn += yychar1; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1) + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) @@ -1102,8 +1186,7 @@ yybackup: YYACCEPT; /* Shift the lookahead token. */ - YYDPRINTF ((stderr, "Shifting token %d (%s), ", - yychar, yytname[yychar1])); + YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) @@ -1149,378 +1232,430 @@ yyreduce: yyval = yyvsp[1-yylen]; - -#if YYDEBUG - /* We have to keep this `#if YYDEBUG', since we use variables which - are defined only if `YYDEBUG' is set. */ - if (yydebug) - { - int yyi; - - YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", - yyn - 1, yyrline[yyn]); - - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++) - YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); - YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]); - } -#endif + YY_REDUCE_PRINT (yyn); switch (yyn) { case 8: - { zconfprint("unexpected 'endmenu' statement"); } + + { zconfprint("unexpected 'endmenu' statement"); ;} break; case 9: - { zconfprint("unexpected 'endif' statement"); } + + { zconfprint("unexpected 'endif' statement"); ;} break; case 10: - { zconfprint("unexpected 'endchoice' statement"); } + + { zconfprint("unexpected 'endchoice' statement"); ;} break; case 11: - { zconfprint("syntax error"); yyerrok; } + + { zconfprint("syntax error"); yyerrok; ;} break; - case 17: + case 18: + { struct symbol *sym = sym_lookup(yyvsp[0].string, 0); sym->flags |= SYMBOL_OPTIONAL; menu_add_entry(sym); printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), yyvsp[0].string); -} +;} break; - case 18: + case 19: + { menu_end_entry(); printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); -} +;} + break; + + case 20: + + { + struct symbol *sym = sym_lookup(yyvsp[0].string, 0); + sym->flags |= SYMBOL_OPTIONAL; + menu_add_entry(sym); + printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), yyvsp[0].string); +;} + break; + + case 21: + + { + if (current_entry->prompt) + current_entry->prompt->type = P_MENU; + else + zconfprint("warning: menuconfig statement without prompt"); + menu_end_entry(); + printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); +;} break; - case 23: - { } + case 26: + + { ;} break; - case 24: + case 27: + { menu_set_type(S_TRISTATE); printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 25: + case 28: + { menu_set_type(S_BOOLEAN); printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 26: + case 29: + { menu_set_type(S_INT); printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 27: + case 30: + { menu_set_type(S_HEX); printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 28: + case 31: + { menu_set_type(S_STRING); printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 29: + case 32: + { menu_add_prop(P_PROMPT, yyvsp[-1].string, NULL, yyvsp[0].expr); printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 30: + case 33: + { menu_add_prop(P_DEFAULT, NULL, yyvsp[-1].symbol, yyvsp[0].expr); printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 31: + case 34: + { struct symbol *sym = sym_lookup(NULL, 0); sym->flags |= SYMBOL_CHOICE; menu_add_entry(sym); menu_add_prop(P_CHOICE, NULL, NULL, NULL); printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 32: + case 35: + { menu_end_entry(); menu_add_menu(); -} +;} break; - case 33: + case 36: + { if (zconf_endtoken(yyvsp[0].token, T_CHOICE, T_ENDCHOICE)) { menu_end_menu(); printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno()); } -} +;} break; - case 35: + case 38: + { printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno); zconfnerrs++; -} +;} break; - case 41: + case 44: + { menu_add_prop(P_PROMPT, yyvsp[-1].string, NULL, yyvsp[0].expr); printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 42: + case 45: + { current_entry->sym->flags |= SYMBOL_OPTIONAL; printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 43: + case 46: + { menu_add_prop(P_DEFAULT, NULL, yyvsp[-1].symbol, yyvsp[0].expr); printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 46: + case 49: + { printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno()); menu_add_entry(NULL); menu_add_dep(yyvsp[0].expr); menu_end_entry(); menu_add_menu(); -} +;} break; - case 47: + case 50: + { if (zconf_endtoken(yyvsp[0].token, T_IF, T_ENDIF)) { menu_end_menu(); printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno()); } -} +;} break; - case 49: + case 52: + { printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno); zconfnerrs++; -} +;} break; - case 54: + case 57: + { menu_add_entry(NULL); menu_add_prop(P_MENU, yyvsp[0].string, NULL, NULL); printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 55: + case 58: + { menu_end_entry(); menu_add_menu(); -} +;} break; - case 56: + case 59: + { if (zconf_endtoken(yyvsp[0].token, T_MENU, T_ENDMENU)) { menu_end_menu(); printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno()); } -} +;} break; - case 58: + case 61: + { printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno); zconfnerrs++; -} +;} break; - case 63: - { zconfprint("invalid menu option"); yyerrok; } + case 66: + + { zconfprint("invalid menu option"); yyerrok; ;} break; - case 64: + case 67: + { yyval.string = yyvsp[0].string; printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), yyvsp[0].string); -} +;} break; - case 65: + case 68: + { zconf_nextfile(yyvsp[-1].string); -} +;} break; - case 66: + case 69: + { menu_add_entry(NULL); menu_add_prop(P_COMMENT, yyvsp[0].string, NULL, NULL); printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 67: + case 70: + { menu_end_entry(); -} +;} break; - case 68: + case 71: + { printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno()); zconf_starthelp(); -} +;} break; - case 69: + case 72: + { current_entry->sym->help = yyvsp[0].string; -} +;} break; - case 72: - { } + case 75: + + { ;} break; - case 73: + case 76: + { menu_add_dep(yyvsp[0].expr); printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 74: + case 77: + { menu_add_dep(yyvsp[0].expr); printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 75: + case 78: + { menu_add_dep(yyvsp[0].expr); printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno()); -} +;} break; - case 77: + case 80: + { menu_add_prop(P_PROMPT, yyvsp[0].string, NULL, NULL); -} +;} break; - case 78: + case 81: + { menu_add_prop(P_PROMPT, yyvsp[-2].string, NULL, yyvsp[0].expr); -} +;} break; - case 81: - { yyval.token = T_ENDMENU; } - break; + case 84: - case 82: - { yyval.token = T_ENDCHOICE; } + { yyval.token = T_ENDMENU; ;} break; - case 83: - { yyval.token = T_ENDIF; } - break; + case 85: - case 86: - { yyval.expr = NULL; } + { yyval.token = T_ENDCHOICE; ;} break; - case 87: - { yyval.expr = yyvsp[0].expr; } - break; + case 86: - case 88: - { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); } + { yyval.token = T_ENDIF; ;} break; case 89: - { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); } + + { yyval.expr = NULL; ;} break; case 90: - { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); } + + { yyval.expr = yyvsp[0].expr; ;} break; case 91: - { yyval.expr = yyvsp[-1].expr; } + + { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); ;} break; case 92: - { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); } + + { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;} break; case 93: - { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); } + + { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;} break; case 94: - { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); } + + { yyval.expr = yyvsp[-1].expr; ;} break; case 95: - { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); } + + { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); ;} break; case 96: - { yyval.symbol = sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); } + + { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); ;} + break; + + case 97: + + { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); ;} + break; + + case 98: + + { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;} + break; + + case 99: + + { yyval.symbol = sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); ;} break; } -/* Line 1016 of /usr/share/bison/yacc.c. */ -#line 1509 "zconf.tab.c" +/* Line 999 of yacc.c. */ + yyvsp -= yylen; yyssp -= yylen; -#if YYDEBUG - if (yydebug) - { - short *yyssp1 = yyss - 1; - YYFPRINTF (stderr, "state stack now"); - while (yyssp1 != yyssp) - YYFPRINTF (stderr, " %d", *++yyssp1); - YYFPRINTF (stderr, "\n"); - } -#endif + YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; @@ -1565,12 +1700,12 @@ yyerrlab: yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) yysize += yystrlen (yytname[yyx]) + 15, yycount++; - yysize += yystrlen ("parse error, unexpected ") + 1; + yysize += yystrlen ("syntax error, unexpected ") + 1; yysize += yystrlen (yytname[yytype]); yymsg = (char *) YYSTACK_ALLOC (yysize); if (yymsg != 0) { - char *yyp = yystpcpy (yymsg, "parse error, unexpected "); + char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); yyp = yystpcpy (yyp, yytname[yytype]); if (yycount < 5) @@ -1591,19 +1726,15 @@ yyerrlab: YYSTACK_FREE (yymsg); } else - yyerror ("parse error; also virtual memory exhausted"); + yyerror ("syntax error; also virtual memory exhausted"); } else #endif /* YYERROR_VERBOSE */ - yyerror ("parse error"); + yyerror ("syntax error"); } - goto yyerrlab1; -/*----------------------------------------------------. -| yyerrlab1 -- error raised explicitly by an action. | -`----------------------------------------------------*/ -yyerrlab1: + if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an @@ -1615,28 +1746,30 @@ yyerrlab1: /* Pop the error token. */ YYPOPSTACK; /* Pop the rest of the stack. */ - while (yyssp > yyss) + while (yyss < yyssp) { - YYDPRINTF ((stderr, "Error: popping ")); - YYDSYMPRINT ((stderr, - yystos[*yyssp], - *yyvsp)); - YYDPRINTF ((stderr, "\n")); - yydestruct (yystos[*yyssp], *yyvsp); + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[*yyssp], yyvsp); YYPOPSTACK; } YYABORT; } - YYDPRINTF ((stderr, "Discarding token %d (%s).\n", - yychar, yytname[yychar1])); - yydestruct (yychar1, yylval); + YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); + yydestruct (yytoken, &yylval); yychar = YYEMPTY; + } /* Else will try to reuse lookahead token after shifting the error token. */ + goto yyerrlab1; + +/*----------------------------------------------------. +| yyerrlab1 -- error raised explicitly by an action. | +`----------------------------------------------------*/ +yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) @@ -1657,26 +1790,12 @@ yyerrlab1: if (yyssp == yyss) YYABORT; - YYDPRINTF ((stderr, "Error: popping ")); - YYDSYMPRINT ((stderr, - yystos[*yyssp], *yyvsp)); - YYDPRINTF ((stderr, "\n")); - - yydestruct (yystos[yystate], *yyvsp); + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[yystate], yyvsp); yyvsp--; yystate = *--yyssp; - -#if YYDEBUG - if (yydebug) - { - short *yyssp1 = yyss - 1; - YYFPRINTF (stderr, "Error: state stack now"); - while (yyssp1 != yyssp) - YYFPRINTF (stderr, " %d", *++yyssp1); - YYFPRINTF (stderr, "\n"); - } -#endif + YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) @@ -1726,12 +1845,14 @@ yyreturn: + void conf_parse(const char *name) { zconf_initscan(name); sym_init(); menu_init(); + modules_sym = sym_lookup("MODULES", 0); rootmenu.prompt = menu_add_prop(P_MENU, "Linux Kernel Configuration", NULL, NULL); //zconfdebug = 1; @@ -1740,8 +1861,6 @@ void conf_parse(const char *name) exit(1); menu_finalize(&rootmenu); - modules_sym = sym_lookup("MODULES", 0); - sym_change_count = 1; } diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y index 8d4abc5c1610a4..04e9499038942c 100644 --- a/scripts/kconfig/zconf.y +++ b/scripts/kconfig/zconf.y @@ -27,7 +27,7 @@ struct symbol *symbol_hash[257]; #define YYERROR_VERBOSE %} -%expect 36 +%expect 40 %union { @@ -46,6 +46,7 @@ struct symbol *symbol_hash[257]; %token T_ENDCHOICE %token T_COMMENT %token T_CONFIG +%token T_MENUCONFIG %token T_HELP %token <string> T_HELPTEXT %token T_IF @@ -104,12 +105,13 @@ common_block: if_stmt | comment_stmt | config_stmt + | menuconfig_stmt | source_stmt | nl_or_eof ; -/* config entry */ +/* config/menuconfig entry */ config_entry_start: T_CONFIG T_WORD { @@ -125,6 +127,24 @@ config_stmt: config_entry_start T_EOL config_option_list printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); }; +menuconfig_entry_start: T_MENUCONFIG T_WORD +{ + struct symbol *sym = sym_lookup($2, 0); + sym->flags |= SYMBOL_OPTIONAL; + menu_add_entry(sym); + printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2); +}; + +menuconfig_stmt: menuconfig_entry_start T_EOL config_option_list +{ + if (current_entry->prompt) + current_entry->prompt->type = P_MENU; + else + zconfprint("warning: menuconfig statement without prompt"); + menu_end_entry(); + printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); +}; + config_option_list: /* empty */ | config_option_list config_option T_EOL @@ -423,6 +443,7 @@ void conf_parse(const char *name) sym_init(); menu_init(); + modules_sym = sym_lookup("MODULES", 0); rootmenu.prompt = menu_add_prop(P_MENU, "Linux Kernel Configuration", NULL, NULL); //zconfdebug = 1; @@ -431,8 +452,6 @@ void conf_parse(const char *name) exit(1); menu_finalize(&rootmenu); - modules_sym = sym_lookup("MODULES", 0); - sym_change_count = 1; } |