bk://linux-sam.bkbits.net/kconfig
sam@mars.ravnborg.org|ChangeSet|20050105191821|07377 sam

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2005/01/11 22:03:40-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig
# 
# mm/memory.c
#   2005/01/11 22:03:33-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# arch/x86_64/mm/init.c
#   2005/01/11 22:03:33-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/11 12:19:40-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig
# 
# include/linux/mm.h
#   2005/01/11 12:19:36-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/10 15:14:25-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig
# 
# mm/memory.c
#   2005/01/10 15:14:22-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/08 21:56:20-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig
# 
# mm/memory.c
#   2005/01/08 21:56:16-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/mm.h
#   2005/01/08 21:56:16-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/05 18:37:31-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig
# 
# mm/memory.c
#   2005/01/05 18:37:27-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/mm.h
#   2005/01/05 18:37:27-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/05 15:19:08-08:00 akpm@bix.(none) 
#   Merge bk://linux-sam.bkbits.net/kconfig
#   into bix.(none):/usr/src/bk-kconfig
# 
# mm/memory.c
#   2005/01/05 15:19:04-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/mm.h
#   2005/01/05 15:19:04-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/asm-x86_64/page.h
#   2005/01/05 15:19:04-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# arch/x86_64/mm/init.c
#   2005/01/05 15:19:04-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/05 20:18:21+01:00 sam@mars.ravnborg.org 
#   Merge bk://linux-sam.bkbits.net/kconfig
#   into mars.ravnborg.org:/home/sam/bk/kconfig
# 
# mm/memory.c
#   2005/01/05 20:18:12+01:00 sam@mars.ravnborg.org +0 -0
#   Auto merged
# 
# include/linux/mm.h
#   2005/01/05 20:18:11+01:00 sam@mars.ravnborg.org +0 -0
#   Auto merged
# 
# include/asm-x86_64/page.h
#   2005/01/05 20:18:11+01:00 sam@mars.ravnborg.org +0 -0
#   Auto merged
# 
# arch/x86_64/mm/init.c
#   2005/01/05 20:18:11+01:00 sam@mars.ravnborg.org +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/04 23:33:58-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig
# 
# mm/memory.c
#   2005/01/04 23:33:54-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/mm.h
#   2005/01/04 23:33:54-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/04 23:22:39+01:00 sam@mars.ravnborg.org 
#   kconfig: Fold README.Menuconfig into mconf.c
#   
#   Content of README.Menuconfig folded into mconf.c and README.Menuconfig deleted.
#   Text was slightly updated - mainly by deleting obsolete information.
#   
#   Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
# 
# scripts/kconfig/mconf.c
#   2005/01/04 23:22:18+01:00 sam@mars.ravnborg.org +136 -8
#   Fold README.Menuconfig into mconf.c
# 
# ChangeSet
#   2005/01/04 14:21:36-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig
# 
# mm/memory.c
#   2005/01/04 14:21:32-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/mm.h
#   2005/01/04 14:21:32-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/asm-x86_64/page.h
#   2005/01/04 14:21:32-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# arch/x86_64/mm/init.c
#   2005/01/04 14:21:32-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# BitKeeper/deleted/.del-README.Menuconfig~f10bb8f47bedf17
#   2005/01/04 23:19:30+01:00 sam@mars.ravnborg.org +0 -0
#   Delete: scripts/README.Menuconfig
# 
# ChangeSet
#   2005/01/04 23:03:52+01:00 sam@mars.ravnborg.org 
#   kconfig: Include more info when selecting help for a symbol in menuconfig
#   
#   When selecting help on a symbol include information below help text
#   displaying relevant info that kconf has stored.
#   The info printed is the same info obtained when searching for a symbol
#   and the same methods are resued.
#   
#   Sample (help for "System V IPC"):
#   -----------------------------------------------------------------------
#   CONFIG_SYSIPC:
#   
#   Inter Process Communcation ...
#   
#   Symbol: SYSVIPC [=y]
#   Prompt: System V IPC
#     Defined at init/Kconfig:82
#     Depends on: MMU
#     Location:
#       -> General setup
#   -----------------------------------------------------------------------
#   
#   Idea-from: Cal Peake <cp@absolutedigital.net>
#   Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
# 
# scripts/kconfig/mconf.c
#   2005/01/04 23:03:31+01:00 sam@mars.ravnborg.org +45 -39
#   When selecting help on a symbol include information below help text
#   displaying relevant relations.
#   The info printed is the same info obtained when searching for a symbol
#   and the same methods are resued.
# 
# ChangeSet
#   2005/01/04 22:34:50+01:00 sam@mars.ravnborg.org 
#   kconfig: Redo and improve search support
#   
#   Based on patch from: Roman Zippel <zippel@linux-m68k.org>
#   
#   The search functionality has been improved:
#   - Restructured printout with more info
#   - Include value of relevant symbols
#   - Improved handling of corner cases
#   - Generic search support moved to backend - ready to be utilised by xconfig and gconfig
#   - Search functionality moved to fronend - not hardcoded in menubox.c
#   
#   Sample search (^$ used to limit search):
#   Search for "^USB_STORAGE$":
#   
#   Symbol: USB_STORAGE [=y]
#   Prompt: USB Mass Storage support
#     Defined at drivers/usb/storage/Kconfig:7
#     Depends on: USB
#     Location:
#       -> Device Drivers
#         -> USB Support
#     Selects: SCSI
#   
#   
#   Some symbols has loong "Depends on:" lines - for example FW_LOADER.
#   Use arrows to scroll horisontally to see full value.
#   
#   Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
# 
# scripts/lxdialog/menubox.c
#   2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +2 -9
#   Delete old support for search and just tell when '/' has been pressed
# 
# scripts/kconfig/symbol.c
#   2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +38 -0
#   Implement a method to search all symbols using regular expressions.
# 
# scripts/kconfig/mconf.c
#   2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +140 -126
#   Delete old support for searching and including new improved version.
#   - Utilises search method located in backend of kconfig
#   - Handling more cases correct with respect to corner cases - so info present to user is better
#   - Reformatted output format
#   - Included actual value of relevant symbols
#   - Added helt text
# 
# scripts/kconfig/lkc_proto.h
#   2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +1 -0
#   Prototype new generic search method
# 
# scripts/kconfig/expr.h
#   2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +2 -0
#   Prototype new print method utilising growable string
# 
# scripts/kconfig/expr.c
#   2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +10 -0
#   Add print helper utilising the growable string
# 
# ChangeSet
#   2005/01/04 00:33:25-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig
# 
# mm/memory.c
#   2005/01/04 00:33:20-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/mm.h
#   2005/01/04 00:33:20-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/03 21:17:14+01:00 sam@mars.ravnborg.org 
#   kconfig: introduce util.c
#   
#   Moved two functions from menu.c to new file util.c.
#   Introduced functions to handle growable strings - no user yet.
#   
#   Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
# 
# scripts/kconfig/util.c
#   2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +109 -0
# 
# scripts/kconfig/zconf.y
#   2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +1 -0
#   Include util.c
# 
# scripts/kconfig/zconf.tab.c_shipped
#   2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +1 -0
#   Include util.c
# 
# scripts/kconfig/util.c
#   2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +0 -0
#   BitKeeper file /home/sam/bk/kconfig/scripts/kconfig/util.c
# 
# scripts/kconfig/menu.c
#   2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +0 -40
#   Moved file_lookup() and file_write_dep() to util.c
# 
# scripts/kconfig/lkc.h
#   2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +13 -0
#   Added prototypes for util.c
# 
# ChangeSet
#   2005/01/03 19:06:13+01:00 sam@mars.ravnborg.org 
#   kconfig: pass 0, 0 to show_file() to select max size window
#   
#   From: Roman Zippel <zippel@linux-m68k.org>
#   Signed-off-by: Sam Ravbnorg <sam@ravnborg.org>
# 
# scripts/kconfig/mconf.c
#   2005/01/03 19:05:50+01:00 sam@mars.ravnborg.org +5 -5
#   pass 0, 0 to show_file to select max size
# 
# ChangeSet
#   2005/01/02 19:04:19-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig
# 
# mm/memory.c
#   2005/01/02 19:04:16-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/02 16:32:54-08:00 akpm@bix.(none) 
#   Merge bk://linux-sam.bkbits.net/kconfig
#   into bix.(none):/usr/src/bk-kconfig
# 
# mm/memory.c
#   2005/01/02 16:32:50-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/mm.h
#   2005/01/02 16:32:50-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/asm-x86_64/page.h
#   2005/01/02 16:32:50-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# arch/x86_64/mm/init.c
#   2005/01/02 16:32:50-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
diff -Nru a/scripts/README.Menuconfig b/scripts/README.Menuconfig
--- a/scripts/README.Menuconfig	2005-01-13 17:02:34 -08:00
+++ /dev/null	Wed Dec 31 16:00:00 196900
@@ -1,201 +0,0 @@
-Menuconfig gives the Linux kernel configuration a long needed face
-lift.  Featuring text based color menus and dialogs, it does not
-require X Windows (however, you need ncurses in order to use it).
-With this utility you can easily select a kernel option to modify
-without sifting through 100 other options.
-
-Overview
---------
-Some kernel features may be built directly into the kernel.
-Some may be made into loadable runtime modules.  Some features
-may be completely removed altogether.  There are also certain
-kernel parameters which are not really features, but must be 
-entered in as decimal or hexadecimal numbers or possibly text.
-
-Menu items beginning with [*], <M> or [ ] represent features 
-configured to be built in, modularized or removed respectively.
-Pointed brackets <> represent module capable features.
-                                                             more...
-
-To change any of these features, highlight it with the cursor 
-keys and press <Y> to build it in, <M> to make it a module or
-<N> to removed it.  You may also press the <Space Bar> to cycle
-through the available options (ie. Y->N->M->Y). 
-
-Items beginning with numbers or other text within parenthesis can 
-be changed by highlighting the item and pressing <Enter>.  Then
-enter the new parameter into the dialog box that pops up.
-
-
-Some additional keyboard hints:
-
-Menus
-----------
-o  Use the Up/Down arrow keys (cursor keys) to highlight the item 
-   you wish to change or submenu wish to select and press <Enter>.
-   Submenus are designated by "--->".
-
-   Shortcut: Press the option's highlighted letter (hotkey).
-             Pressing a hotkey more than once will sequence
-             through all visible items which use that hotkey.
-
-   You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll
-   unseen options into view.
-
-o  To exit a menu use the cursor keys to highlight the <Exit> button
-   and press <ENTER>.  
-
-   Shortcut: Press <ESC><ESC> or <E> or <X> if there is no hotkey
-             using those letters.  You may press a single <ESC>, but
-             there is a delayed response which you may find annoying.
-
-   Also, the <TAB> and cursor keys will cycle between <Select>,
-   <Exit> and <Help>
-
-o  To get help with an item, use the cursor keys to highlight <Help>
-   and Press <ENTER>.
-
-   Shortcut: Press <H> or <?>.
-
-
-Radiolists  (Choice lists)
------------
-o  Use the cursor keys to select the option you wish to set and press
-   <S> or the <SPACE BAR>.
-
-   Shortcut: Press the first letter of the option you wish to set then
-             press <S> or <SPACE BAR>.
-
-o  To see available help for the item, use the cursor keys to highlight
-   <Help> and Press <ENTER>.
-
-   Shortcut: Press <H> or <?>.
-
-   Also, the <TAB> and cursor keys will cycle between <Select> and
-   <Help>
-
-
-Data Entry
------------
-o  Enter the requested information and press <ENTER>
-   If you are entering hexadecimal values, it is not necessary to
-   add the '0x' prefix to the entry.
-
-o  For help, use the <TAB> or cursor keys to highlight the help option
-   and press <ENTER>.  You can try <TAB><H> as well.
-
-
-Text Box    (Help Window)
---------
-o  Use the cursor keys to scroll up/down/left/right.  The VI editor
-   keys h,j,k,l function here as do <SPACE BAR> and <B> for those
-   who are familiar with less and lynx.
-
-o  Press <E>, <X>, <Enter> or <Esc><Esc> to exit.
-
-
-Final Acceptance
-----------------
-With the exception of the old style sound configuration,
-YOUR CHANGES ARE NOT FINAL.  You will be given a last chance to
-confirm them prior to exiting Menuconfig.
-
-If Menuconfig quits with an error while saving your configuration,
-you may look in the file /usr/src/linux/.menuconfig.log for
-information which may help you determine the cause.
-
-Alternate Configuration Files
------------------------------
-Menuconfig supports the use of alternate configuration files for
-those who, for various reasons, find it necessary to switch 
-between different kernel configurations.
-
-At the end of the main menu you will find two options.  One is
-for saving the current configuration to a file of your choosing.
-The other option is for loading a previously saved alternate
-configuration.
-
-Even if you don't use alternate configuration files, but you 
-find during a Menuconfig session that you have completely messed
-up your settings, you may use the "Load Alternate..." option to
-restore your previously saved settings from ".config" without 
-restarting Menuconfig.
-
-Other information
------------------
-The windowing utility, lxdialog, will only be rebuilt if your kernel
-source tree is fresh, or changes are patched into it via a kernel
-patch or you do 'make mrproper'.  If changes to lxdialog are patched
-in, most likely the rebuild time will be short.  You may force a
-complete rebuild of lxdialog by changing to its directory and doing
-'make clean all'
-
-If you use Menuconfig in an XTERM window make sure you have your 
-$TERM variable set to point to a xterm definition which supports color.
-Otherwise, Menuconfig will look rather bad.  Menuconfig will not 
-display correctly in a RXVT window because rxvt displays only one
-intensity of color, bright.
-
-Menuconfig will display larger menus on screens or xterms which are
-set to display more than the standard 25 row by 80 column geometry.
-In order for this to work, the "stty size" command must be able to 
-display the screen's current row and column geometry.  I STRONGLY
-RECOMMEND that you make sure you do NOT have the shell variables
-LINES and COLUMNS exported into your environment.  Some distributions
-export those variables via /etc/profile.  Some ncurses programs can
-become confused when those variables (LINES & COLUMNS) don't reflect
-the true screen size.
-
-
-NOTICE:  lxdialog requires the ncurses libraries to compile.  If you
-         don't already have ncurses you really should get it.
-
-         The makefile for lxdialog attempts to find your ncurses
-         header file.  Although it should find the header for older
-         versions of ncurses, it is probably a good idea to get the
-         latest ncurses anyway. 
-
-         If you have upgraded your ncurses libraries, MAKE SURE you
-         remove the old ncurses header files.  If you don't you
-         will most certainly get a segmentation fault.
-
-WARNING: It is not recommended that you change any defines in
-         lxdialog's header files.  If you have a grayscale display and
-         are brave, you may tinker with color.h to tune the colors to
-         your preference.
-
-COMPATIBILITY ISSUE:
-         There have been some compatibility problems reported with
-         older versions of bash and sed.  I am trying to work these
-         out but it is preferable that you upgrade those utilities.
-
-
-******** IMPORTANT, OPTIONAL ALTERNATE PERSONALITY AVAILABLE ********
-********                                                     ********
-If you prefer to have all of the kernel options listed in a single
-menu, rather than the default multimenu hierarchy, run the menuconfig
-with MENUCONFIG_MODE environment variable set to single_menu. Example:
-
-make menuconfig MENUCONFIG_MODE=single_menu
-
-<Enter> will then unroll the appropriate category, or enfold it if it
-is already unrolled.
-
-Note that this mode can eventually be a little more CPU expensive
-(especially with a larger number of unrolled categories) than the
-default mode.
-*********************************************************************
-
-
-Propaganda
-----------
-The windowing support utility (lxdialog) is a VERY modified version of
-the dialog utility by Savio Lam <lam836@cs.cuhk.hk>.  Although lxdialog
-is significantly different from dialog, I have left Savio's copyrights
-intact.  Please DO NOT contact Savio with questions about lxdialog.
-He will not be able to assist.
-
-William Roadcap was the original author of Menuconfig.
-Michael Elizabeth Chastain <mec@shout.net> is the current maintainer.
-
-<END OF FILE>
diff -Nru a/scripts/kconfig/expr.c b/scripts/kconfig/expr.c
--- a/scripts/kconfig/expr.c	2005-01-13 17:02:34 -08:00
+++ b/scripts/kconfig/expr.c	2005-01-13 17:02:34 -08:00
@@ -1087,3 +1087,13 @@
 {
 	expr_print(e, expr_print_file_helper, out, E_NONE);
 }
+
+static void expr_print_gstr_helper(void *data, const char *str)
+{
+	str_append((struct gstr*)data, str);
+}
+
+void expr_gstr_print(struct expr *e, struct gstr *gs)
+{
+	expr_print(e, expr_print_gstr_helper, gs, E_NONE);
+}
diff -Nru a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h
--- a/scripts/kconfig/expr.h	2005-01-13 17:02:34 -08:00
+++ b/scripts/kconfig/expr.h	2005-01-13 17:02:34 -08:00
@@ -174,6 +174,8 @@
 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym);
 
 void expr_fprint(struct expr *e, FILE *out);
+struct gstr; /* forward */
+void expr_gstr_print(struct expr *e, struct gstr *gs);
 
 static inline int expr_is_yes(struct expr *e)
 {
diff -Nru a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h
--- a/scripts/kconfig/lkc.h	2005-01-13 17:02:34 -08:00
+++ b/scripts/kconfig/lkc.h	2005-01-13 17:02:34 -08:00
@@ -56,8 +56,21 @@
 void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
 void menu_finalize(struct menu *parent);
 void menu_set_type(int type);
+
+/* util.c */
 struct file *file_lookup(const char *name);
 int file_write_dep(const char *name);
+
+struct gstr {
+	size_t len;
+	char  *s;
+};
+struct gstr str_new(void);
+struct gstr str_assign(const char *s);
+void str_free(struct gstr *gs);
+void str_append(struct gstr *gs, const char *s);
+void str_printf(struct gstr *gs, const char *fmt, ...);
+const char *str_get(struct gstr *gs);
 
 /* symbol.c */
 void sym_init(void);
diff -Nru a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
--- a/scripts/kconfig/lkc_proto.h	2005-01-13 17:02:34 -08:00
+++ b/scripts/kconfig/lkc_proto.h	2005-01-13 17:02:34 -08:00
@@ -18,6 +18,7 @@
 
 P(sym_lookup,struct symbol *,(const char *name, int isconst));
 P(sym_find,struct symbol *,(const char *name));
+P(sym_re_search,struct symbol **,(const char *pattern));
 P(sym_type_name,const char *,(enum symbol_type type));
 P(sym_calc_value,void,(struct symbol *sym));
 P(sym_get_type,enum symbol_type,(struct symbol *sym));
diff -Nru a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
--- a/scripts/kconfig/mconf.c	2005-01-13 17:02:34 -08:00
+++ b/scripts/kconfig/mconf.c	2005-01-13 17:02:34 -08:00
@@ -18,13 +18,146 @@
 #include <string.h>
 #include <termios.h>
 #include <unistd.h>
-#include <regex.h>
 
 #define LKC_DIRECT_LINK
 #include "lkc.h"
 
 static char menu_backtitle[128];
-static const char menu_instructions[] =
+static const char mconf_readme[] =
+"Overview\n"
+"--------\n"
+"Some kernel features may be built directly into the kernel.\n"
+"Some may be made into loadable runtime modules.  Some features\n"
+"may be completely removed altogether.  There are also certain\n"
+"kernel parameters which are not really features, but must be\n"
+"entered in as decimal or hexadecimal numbers or possibly text.\n"
+"\n"
+"Menu items beginning with [*], <M> or [ ] represent features\n"
+"configured to be built in, modularized or removed respectively.\n"
+"Pointed brackets <> represent module capable features.\n"
+"\n"
+"To change any of these features, highlight it with the cursor\n"
+"keys and press <Y> to build it in, <M> to make it a module or\n"
+"<N> to removed it.  You may also press the <Space Bar> to cycle\n"
+"through the available options (ie. Y->N->M->Y).\n"
+"\n"
+"Some additional keyboard hints:\n"
+"\n"
+"Menus\n"
+"----------\n"
+"o  Use the Up/Down arrow keys (cursor keys) to highlight the item\n"
+"   you wish to change or submenu wish to select and press <Enter>.\n"
+"   Submenus are designated by \"--->\".\n"
+"\n"
+"   Shortcut: Press the option's highlighted letter (hotkey).\n"
+"             Pressing a hotkey more than once will sequence\n"
+"             through all visible items which use that hotkey.\n"
+"\n"
+"   You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
+"   unseen options into view.\n"
+"\n"
+"o  To exit a menu use the cursor keys to highlight the <Exit> button\n"
+"   and press <ENTER>.\n"
+"\n"
+"   Shortcut: Press <ESC><ESC> or <E> or <X> if there is no hotkey\n"
+"             using those letters.  You may press a single <ESC>, but\n"
+"             there is a delayed response which you may find annoying.\n"
+"\n"
+"   Also, the <TAB> and cursor keys will cycle between <Select>,\n"
+"   <Exit> and <Help>\n"
+"\n"
+"o  To get help with an item, use the cursor keys to highlight <Help>\n"
+"   and Press <ENTER>.\n"
+"\n"
+"   Shortcut: Press <H> or <?>.\n"
+"\n"
+"\n"
+"Radiolists  (Choice lists)\n"
+"-----------\n"
+"o  Use the cursor keys to select the option you wish to set and press\n"
+"   <S> or the <SPACE BAR>.\n"
+"\n"
+"   Shortcut: Press the first letter of the option you wish to set then\n"
+"             press <S> or <SPACE BAR>.\n"
+"\n"
+"o  To see available help for the item, use the cursor keys to highlight\n"
+"   <Help> and Press <ENTER>.\n"
+"\n"
+"   Shortcut: Press <H> or <?>.\n"
+"\n"
+"   Also, the <TAB> and cursor keys will cycle between <Select> and\n"
+"   <Help>\n"
+"\n"
+"\n"
+"Data Entry\n"
+"-----------\n"
+"o  Enter the requested information and press <ENTER>\n"
+"   If you are entering hexadecimal values, it is not necessary to\n"
+"   add the '0x' prefix to the entry.\n"
+"\n"
+"o  For help, use the <TAB> or cursor keys to highlight the help option\n"
+"   and press <ENTER>.  You can try <TAB><H> as well.\n"
+"\n"
+"\n"
+"Text Box    (Help Window)\n"
+"--------\n"
+"o  Use the cursor keys to scroll up/down/left/right.  The VI editor\n"
+"   keys h,j,k,l function here as do <SPACE BAR> and <B> for those\n"
+"   who are familiar with less and lynx.\n"
+"\n"
+"o  Press <E>, <X>, <Enter> or <Esc><Esc> to exit.\n"
+"\n"
+"\n"
+"Alternate Configuration Files\n"
+"-----------------------------\n"
+"Menuconfig supports the use of alternate configuration files for\n"
+"those who, for various reasons, find it necessary to switch\n"
+"between different kernel configurations.\n"
+"\n"
+"At the end of the main menu you will find two options.  One is\n"
+"for saving the current configuration to a file of your choosing.\n"
+"The other option is for loading a previously saved alternate\n"
+"configuration.\n"
+"\n"
+"Even if you don't use alternate configuration files, but you\n"
+"find during a Menuconfig session that you have completely messed\n"
+"up your settings, you may use the \"Load Alternate...\" option to\n"
+"restore your previously saved settings from \".config\" without\n"
+"restarting Menuconfig.\n"
+"\n"
+"Other information\n"
+"-----------------\n"
+"If you use Menuconfig in an XTERM window make sure you have your\n"
+"$TERM variable set to point to a xterm definition which supports color.\n"
+"Otherwise, Menuconfig will look rather bad.  Menuconfig will not\n"
+"display correctly in a RXVT window because rxvt displays only one\n"
+"intensity of color, bright.\n"
+"\n"
+"Menuconfig will display larger menus on screens or xterms which are\n"
+"set to display more than the standard 25 row by 80 column geometry.\n"
+"In order for this to work, the \"stty size\" command must be able to\n"
+"display the screen's current row and column geometry.  I STRONGLY\n"
+"RECOMMEND that you make sure you do NOT have the shell variables\n"
+"LINES and COLUMNS exported into your environment.  Some distributions\n"
+"export those variables via /etc/profile.  Some ncurses programs can\n"
+"become confused when those variables (LINES & COLUMNS) don't reflect\n"
+"the true screen size.\n"
+"\n"
+"Optional personality available\n"
+"------------------------------\n"
+"If you prefer to have all of the kernel options listed in a single\n"
+"menu, rather than the default multimenu hierarchy, run the menuconfig\n"
+"with MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
+"\n"
+"make MENUCONFIG_MODE=single_menu menuconfig\n"
+"\n"
+"<Enter> will then unroll the appropriate category, or enfold it if it\n"
+"is already unrolled.\n"
+"\n"
+"Note that this mode can eventually be a little more CPU expensive\n"
+"(especially with a larger number of unrolled categories) than the\n"
+"default mode.\n",
+menu_instructions[] =
 	"Arrow keys navigate the menu.  "
 	"<Enter> selects submenus --->.  "
 	"Highlighted letters are hotkeys.  "
@@ -79,8 +212,45 @@
 	"configuration options you have selected at that time.\n"
 	"\n"
 	"If you are uncertain what all this means then you should probably\n"
-	"leave this blank.\n"
-;
+	"leave this blank.\n",
+search_help[] =
+	"\n"
+	"Search for CONFIG_ symbols and display their relations.\n"
+	"Example: search for \"^FOO\"\n"
+	"Result:\n"
+	"-----------------------------------------------------------------\n"
+	"Symbol: FOO [=m]\n"
+	"Prompt: Foo bus is used to drive the bar HW\n"
+	"Defined at drivers/pci/Kconfig:47\n"
+	"Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
+	"Location:\n"
+	"  -> Bus options (PCI, PCMCIA, EISA, MCA, ISA)\n"
+	"    -> PCI support (PCI [=y])\n"
+	"      -> PCI access mode (<choice> [=y])\n"
+	"Selects: LIBCRC32\n"
+	"Selected by: BAR\n"
+	"-----------------------------------------------------------------\n"
+	"o The line 'Prompt:' shows the text used in the menu structure for\n"
+	"  this CONFIG_ symbol\n"
+	"o The 'Defined at' line tell at what file / line number the symbol\n"
+	"  is defined\n"
+	"o The 'Depends on:' line tell what symbols needs to be defined for\n"
+	"  this symbol to be visible in the menu (selectable)\n"
+	"o The 'Location:' lines tell where in the menu structure this symbol\n"
+	"  is located\n"
+	"    A location followed by a [=y] indicate that this is a selectable\n"
+	"    menu item - and current value is displayed inside brackets.\n"
+	"o The 'Selects:' line tell what symbol will be automatically\n"
+	"  selected if this symbol is selected (y or m)\n"
+	"o The 'Selected by' line tell what symbol has selected this symbol\n"
+	"\n"
+	"Only relevant lines are shown.\n"
+	"\n\n"
+	"Search examples:\n"
+	"Examples: USB	=> find all CONFIG_ symbols containing USB\n"
+	"          ^USB => find all CONFIG_ symbols starting with USB\n"
+	"          USB$ => find all CONFIG_ symbols ending with USB\n"
+	"\n";
 
 static signed char buf[4096], *bufptr = buf;
 static signed char input_buf[4096];
@@ -102,11 +272,7 @@
 static void show_textbox(const char *title, const char *text, int r, int c);
 static void show_helptext(const char *title, const char *text);
 static void show_help(struct menu *menu);
-static void show_readme(void);
 static void show_file(const char *filename, const char *title, int r, int c);
-static void show_expr(struct menu *menu, FILE *fp);
-static void search_conf(char *pattern);
-static int regex_match(const char *string, regex_t *re);
 
 static void cprint_init(void);
 static int cprint1(const char *fmt, ...);
@@ -196,6 +362,78 @@
 	return res;
 }
 
+static void get_prompt_str(struct gstr *r, struct property *prop)
+{
+	int i, j;
+	struct menu *submenu[8], *menu;
+
+	str_printf(r, "Prompt: %s\n", prop->text);
+	str_printf(r, "  Defined at %s:%d\n", prop->menu->file->name,
+		prop->menu->lineno);
+	if (!expr_is_yes(prop->visible.expr)) {
+		str_append(r, "  Depends on: ");
+		expr_gstr_print(prop->visible.expr, r);
+		str_append(r, "\n");
+	}
+	menu = prop->menu->parent;
+	for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent)
+		submenu[i++] = menu;
+	if (i > 0) {
+		str_printf(r, "  Location:\n");
+		for (j = 4; --i >= 0; j += 2) {
+			menu = submenu[i];
+			str_printf(r, "%*c-> %s", j, ' ', menu_get_prompt(menu));
+			if (menu->sym) {
+				str_printf(r, " (%s [=%s])", menu->sym->name ?
+					menu->sym->name : "<choice>",
+					sym_get_string_value(menu->sym));
+			}
+			str_append(r, "\n");
+		}
+	}
+}
+
+static void get_symbol_str(struct gstr *r, struct symbol *sym)
+{
+	bool hit;
+	struct property *prop;
+
+	str_printf(r, "Symbol: %s [=%s]\n", sym->name,
+	                               sym_get_string_value(sym));
+	for_all_prompts(sym, prop)
+		get_prompt_str(r, prop);
+	hit = false;
+	for_all_properties(sym, prop, P_SELECT) {
+		if (!hit) {
+			str_append(r, "  Selects: ");
+			hit = true;
+		} else
+			str_printf(r, " && ");
+		expr_gstr_print(prop->expr, r);
+	}
+	if (hit)
+		str_append(r, "\n");
+	if (sym->rev_dep.expr) {
+		str_append(r, "  Selected by: ");
+		expr_gstr_print(sym->rev_dep.expr, r);
+		str_append(r, "\n");
+	}
+	str_append(r, "\n\n");
+}
+
+static struct gstr get_relations_str(struct symbol **sym_arr)
+{
+	struct symbol *sym;
+	struct gstr res = str_new();
+	int i;
+
+	for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
+		get_symbol_str(&res, sym);
+	if (!i)
+		str_append(&res, "No matches found.\n");
+	return res;
+}
+
 pid_t pid;
 
 static void winch_handler(int sig)
@@ -279,112 +517,39 @@
 	return WEXITSTATUS(stat);
 }
 
-static int regex_match(const char *string, regex_t *re)
+static void search_conf(void)
 {
-	int rc;
-
-	rc = regexec(re, string, (size_t) 0, NULL, 0);
-	if (rc)
-		return 0;
-	return 1;
-}
-
-static void show_expr(struct menu *menu, FILE *fp)
-{
-	bool hit = false;
-	fprintf(fp, "Depends:\n ");
-	if (menu->prompt->visible.expr) {
-		if (!hit)
-			hit = true;
-		expr_fprint(menu->prompt->visible.expr, fp);
-	}
-	if (!hit)
-		fprintf(fp, "None");
-	if (menu->sym) {
-		struct property *prop;
-		hit = false;
-		fprintf(fp, "\nSelects:\n ");
-		for_all_properties(menu->sym, prop, P_SELECT) {
-			if (!hit)
-				hit = true;
-			expr_fprint(prop->expr, fp);
-		}
-		if (!hit)
-			fprintf(fp, "None");
-		hit = false;
-		fprintf(fp, "\nSelected by:\n ");
-		if (menu->sym->rev_dep.expr) {
-			hit = true;
-			expr_fprint(menu->sym->rev_dep.expr, fp);
-		}
-		if (!hit)
-			fprintf(fp, "None");
-	}
-}
-
-static void search_conf(char *pattern)
-{
-	struct symbol *sym = NULL;
-	struct menu *menu[32] = { 0 };
-	struct property *prop = NULL;
-	FILE *fp = NULL;
-	bool hit = false;
-	int i, j, k, l;
-	regex_t re;
-
-	if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB))
+	struct symbol **sym_arr;
+	int stat;
+	struct gstr res;
+
+again:
+	cprint_init();
+	cprint("--title");
+	cprint("Search Configuration Parameter");
+	cprint("--inputbox");
+	cprint("Enter Keyword");
+	cprint("10");
+	cprint("75");
+	cprint("");
+	stat = exec_conf();
+	if (stat < 0)
+		goto again;
+	switch (stat) {
+	case 0:
+		break;
+	case 1:
+		show_helptext("Search Configuration", search_help);
+		goto again;
+	default:
 		return;
-
-	fp = fopen(".search.tmp", "w");
-	if (fp == NULL) {
-		perror("fopen");
-		return;
-	}
-	for_all_symbols(i, sym) {
-		if (!sym->name)
-			continue;
-		if (!regex_match(sym->name, &re))
-			continue;
-		for_all_prompts(sym, prop) {
-			struct menu *submenu = prop->menu;
-			if (!submenu)
-				continue;
-			j = 0;
-			hit = false;
-			while (submenu) {
-				menu[j++] = submenu;
-				submenu = submenu->parent;
-			}
-			if (j > 0) {
-				if (!hit)
-					hit = true;
-				fprintf(fp, "%s (%s)\n", prop->text, sym->name);
-				fprintf(fp, "Location:\n");
-			}
-			for (k = j-2, l=1; k > 0; k--, l++) {
-				const char *prompt = menu_get_prompt(menu[k]);
-				if (menu[k]->sym)
-					fprintf(fp, "%*c-> %s (%s)\n",
-								l, ' ',
-								prompt,
-								menu[k]->sym->name);
-				else
-					fprintf(fp, "%*c-> %s\n",
-								l, ' ',
-								prompt);
-			}
-			if (hit) {
-				show_expr(menu[0], fp);
-				fprintf(fp, "\n\n\n");
-			}
-		}
 	}
-	if (!hit)
-		fprintf(fp, "No matches found.");
-	regfree(&re);
-	fclose(fp);
-	show_file(".search.tmp", "Search Results", rows, cols);
-	unlink(".search.tmp");
+
+	sym_arr = sym_re_search(input_buf);
+	res = get_relations_str(sym_arr);
+	free(sym_arr);
+	show_textbox("Search Results", str_get(&res), 0, 0);
+	str_free(&res);
 }
 
 static void build_conf(struct menu *menu)
@@ -576,23 +741,6 @@
 			cprint("    Save Configuration to an Alternate File");
 		}
 		stat = exec_conf();
-		if (stat == 26) {
-			char *pattern;
-
-			if (!strlen(input_buf))
-				continue;
-			pattern = malloc(sizeof(char)*sizeof(input_buf));
-			if (pattern == NULL) {
-				perror("malloc");
-				continue;
-			}
-			for (i = 0; input_buf[i]; i++)
-				pattern[i] = toupper(input_buf[i]);
-			pattern[i] = '\0';
-			search_conf(pattern);
-			free(pattern);
-			continue;
-		}
 		if (stat < 0)
 			continue;
 
@@ -645,7 +793,7 @@
 			if (sym)
 				show_help(submenu);
 			else
-				show_readme();
+				show_helptext("README", mconf_readme);
 			break;
 		case 3:
 			if (type == 't') {
@@ -669,6 +817,9 @@
 			else if (type == 'm')
 				conf(submenu);
 			break;
+		case 7:
+			search_conf();
+			break;
 		}
 	}
 }
@@ -686,30 +837,27 @@
 
 static void show_helptext(const char *title, const char *text)
 {
-	show_textbox(title, text, rows, cols);
+	show_textbox(title, text, 0, 0);
 }
 
 static void show_help(struct menu *menu)
 {
-	const char *help;
-	char *helptext;
+	struct gstr help = str_new();
 	struct symbol *sym = menu->sym;
 
-	help = sym->help;
-	if (!help)
-		help = nohelp_text;
-	if (sym->name) {
-		helptext = malloc(strlen(sym->name) + strlen(help) + 16);
-		sprintf(helptext, "CONFIG_%s:\n\n%s", sym->name, help);
-		show_helptext(menu_get_prompt(menu), helptext);
-		free(helptext);
-	} else
-		show_helptext(menu_get_prompt(menu), help);
-}
-
-static void show_readme(void)
-{
-	show_file("scripts/README.Menuconfig", NULL, rows, cols);
+	if (sym->help)
+	{
+		if (sym->name) {
+			str_printf(&help, "CONFIG_%s:\n\n", sym->name);
+			str_append(&help, sym->help);
+			str_append(&help, "\n");
+		}
+	} else {
+		str_append(&help, nohelp_text);
+	}
+	get_symbol_str(&help, sym);
+	show_helptext(menu_get_prompt(menu), str_get(&help));
+	str_free(&help);
 }
 
 static void show_file(const char *filename, const char *title, int r, int c)
@@ -722,8 +870,8 @@
 		}
 		cprint("--textbox");
 		cprint("%s", filename);
-		cprint("%d", r);
-		cprint("%d", c);
+		cprint("%d", r ? r : rows);
+		cprint("%d", c ? c : cols);
 	} while (exec_conf() < 0);
 }
 
diff -Nru a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
--- a/scripts/kconfig/menu.c	2005-01-13 17:02:34 -08:00
+++ b/scripts/kconfig/menu.c	2005-01-13 17:02:34 -08:00
@@ -388,43 +388,3 @@
 	return menu;
 }
 
-struct file *file_lookup(const char *name)
-{
-	struct file *file;
-
-	for (file = file_list; file; file = file->next) {
-		if (!strcmp(name, file->name))
-			return file;
-	}
-
-	file = malloc(sizeof(*file));
-	memset(file, 0, sizeof(*file));
-	file->name = strdup(name);
-	file->next = file_list;
-	file_list = file;
-	return file;
-}
-
-int file_write_dep(const char *name)
-{
-	struct file *file;
-	FILE *out;
-
-	if (!name)
-		name = ".config.cmd";
-	out = fopen("..config.tmp", "w");
-	if (!out)
-		return 1;
-	fprintf(out, "deps_config := \\\n");
-	for (file = file_list; file; file = file->next) {
-		if (file->next)
-			fprintf(out, "\t%s \\\n", file->name);
-		else
-			fprintf(out, "\t%s\n", file->name);
-	}
-	fprintf(out, "\n.config include/linux/autoconf.h: $(deps_config)\n\n$(deps_config):\n");
-	fclose(out);
-	rename("..config.tmp", name);
-	return 0;
-}
-
diff -Nru a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
--- a/scripts/kconfig/symbol.c	2005-01-13 17:02:34 -08:00
+++ b/scripts/kconfig/symbol.c	2005-01-13 17:02:34 -08:00
@@ -6,6 +6,7 @@
 #include <ctype.h>
 #include <stdlib.h>
 #include <string.h>
+#include <regex.h>
 #include <sys/utsname.h>
 
 #define LKC_DIRECT_LINK
@@ -655,6 +656,43 @@
 
 	return symbol;
 }
+
+struct symbol **sym_re_search(const char *pattern)
+{
+	struct symbol *sym, **sym_arr = NULL;
+	int i, cnt, size;
+	regex_t re;
+
+	cnt = size = 0;
+	/* Skip if empty */
+	if (strlen(pattern) == 0)
+		return NULL;
+	if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB|REG_ICASE))
+		return NULL;
+
+	for_all_symbols(i, sym) {
+		if (sym->flags & SYMBOL_CONST || !sym->name)
+			continue;
+		if (regexec(&re, sym->name, 0, NULL, 0))
+			continue;
+		if (cnt + 1 >= size) {
+			void *tmp = sym_arr;
+			size += 16;
+			sym_arr = realloc(sym_arr, size * sizeof(struct symbol *));
+			if (!sym_arr) {
+				free(tmp);
+				return NULL;
+			}
+		}
+		sym_arr[cnt++] = sym;
+	}
+	if (sym_arr)
+		sym_arr[cnt] = NULL;
+	regfree(&re);
+
+	return sym_arr;
+}
+
 
 struct symbol *sym_check_deps(struct symbol *sym);
 
diff -Nru a/scripts/kconfig/util.c b/scripts/kconfig/util.c
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/scripts/kconfig/util.c	2005-01-13 17:02:34 -08:00
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2002-2005 Roman Zippel <zippel@linux-m68k.org>
+ * Copyright (C) 2002-2005 Sam Ravnborg <sam@ravnborg.org>
+ *
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <string.h>
+#include "lkc.h"
+
+/* file already present in list? If not add it */
+struct file *file_lookup(const char *name)
+{
+	struct file *file;
+
+	for (file = file_list; file; file = file->next) {
+		if (!strcmp(name, file->name))
+			return file;
+	}
+
+	file = malloc(sizeof(*file));
+	memset(file, 0, sizeof(*file));
+	file->name = strdup(name);
+	file->next = file_list;
+	file_list = file;
+	return file;
+}
+
+/* write a dependency file as used by kbuild to track dependencies */
+int file_write_dep(const char *name)
+{
+	struct file *file;
+	FILE *out;
+
+	if (!name)
+		name = ".config.cmd";
+	out = fopen("..config.tmp", "w");
+	if (!out)
+		return 1;
+	fprintf(out, "deps_config := \\\n");
+	for (file = file_list; file; file = file->next) {
+		if (file->next)
+			fprintf(out, "\t%s \\\n", file->name);
+		else
+			fprintf(out, "\t%s\n", file->name);
+	}
+	fprintf(out, "\n.config include/linux/autoconf.h: $(deps_config)\n\n$(deps_config):\n");
+	fclose(out);
+	rename("..config.tmp", name);
+	return 0;
+}
+
+
+/* Allocate initial growable sting */
+struct gstr str_new(void)
+{
+	struct gstr gs;
+	gs.s = malloc(sizeof(char) * 64);
+	gs.len = 16;
+	strcpy(gs.s, "\0");
+	return gs;
+}
+
+/* Allocate and assign growable string */
+struct gstr str_assign(const char *s)
+{
+	struct gstr gs;
+	gs.s = strdup(s);
+	gs.len = strlen(s) + 1;
+	return gs;
+}
+
+/* Free storage for growable string */
+void str_free(struct gstr *gs)
+{
+	if (gs->s)
+		free(gs->s);
+	gs->s = NULL;
+	gs->len = 0;
+}
+
+/* Append to growable string */
+void str_append(struct gstr *gs, const char *s)
+{
+	size_t l = strlen(gs->s) + strlen(s) + 1;
+	if (l > gs->len) {
+		gs->s   = realloc(gs->s, l);
+		gs->len = l;
+	}
+	strcat(gs->s, s);
+}
+
+/* Append printf formatted string to growable string */
+void str_printf(struct gstr *gs, const char *fmt, ...)
+{
+	va_list ap;
+	char s[10000]; /* big enough... */
+	va_start(ap, fmt);
+	vsnprintf(s, sizeof(s), fmt, ap);
+	str_append(gs, s);
+	va_end(ap);
+}
+
+/* Retreive value of growable string */
+const char *str_get(struct gstr *gs)
+{
+	return gs->s;
+}
+
diff -Nru a/scripts/kconfig/zconf.tab.c_shipped b/scripts/kconfig/zconf.tab.c_shipped
--- a/scripts/kconfig/zconf.tab.c_shipped	2005-01-13 17:02:34 -08:00
+++ b/scripts/kconfig/zconf.tab.c_shipped	2005-01-13 17:02:34 -08:00
@@ -2121,6 +2121,7 @@
 }
 
 #include "lex.zconf.c"
+#include "util.c"
 #include "confdata.c"
 #include "expr.c"
 #include "symbol.c"
diff -Nru a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y
--- a/scripts/kconfig/zconf.y	2005-01-13 17:02:34 -08:00
+++ b/scripts/kconfig/zconf.y	2005-01-13 17:02:34 -08:00
@@ -683,6 +683,7 @@
 }
 
 #include "lex.zconf.c"
+#include "util.c"
 #include "confdata.c"
 #include "expr.c"
 #include "symbol.c"
diff -Nru a/scripts/lxdialog/menubox.c b/scripts/lxdialog/menubox.c
--- a/scripts/lxdialog/menubox.c	2005-01-13 17:02:34 -08:00
+++ b/scripts/lxdialog/menubox.c	2005-01-13 17:02:34 -08:00
@@ -276,15 +276,6 @@
 
     while (key != ESC) {
 	key = wgetch(menu);
-	if ( key == '/' ) {
-		int ret = dialog_inputbox("Search Configuration Parameter",
-					"Enter Keyword", height, width,
-					(char *) NULL);
-		if (ret == 0) {
-			fprintf(stderr, "%s", dialog_input_result);
-			return 26;
-		}
-	}
 
 	if (key < 256 && isalpha(key)) key = tolower(key);
 
@@ -408,6 +399,7 @@
 	case 'y':
 	case 'n':
 	case 'm':
+	case '/':
 	    /* save scroll info */
 	    if ( (f=fopen("lxdialog.scrltmp","w")) != NULL ) {
 		fprintf(f,"%d\n",scroll);
@@ -421,6 +413,7 @@
             case 'n': return 4;
             case 'm': return 5;
             case ' ': return 6;
+            case '/': return 7;
             }
 	    return 0;
 	case 'h':