|
@@ -1,6 +1,9 @@
|
|
|
|
|
|
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
|
|
|
* Released under the terms of the GNU GPL v2.0.
|
|
|
+ *
|
|
|
+ * Introduced single menu mode (show all sub-menus in one large tree).
|
|
|
+ * 2002-11-06 Petr Baudis <pasky@ucw.cz>
|
|
|
*/
|
|
|
|
|
|
#include <sys/ioctl.h>
|
|
@@ -12,6 +15,7 @@
|
|
|
#include <stdarg.h>
|
|
|
#include <stdlib.h>
|
|
|
#include <string.h>
|
|
|
+#include <termios.h>
|
|
|
#include <unistd.h>
|
|
|
|
|
|
#define LKC_DIRECT_LINK
|
|
@@ -80,10 +84,12 @@ static char buf[4096], *bufptr = buf;
|
|
|
static char input_buf[4096];
|
|
|
static char *args[1024], **argptr = args;
|
|
|
static int indent = 0;
|
|
|
+static struct termios ios_org;
|
|
|
static int rows, cols;
|
|
|
static struct menu *current_menu;
|
|
|
static int child_count;
|
|
|
static int do_resize;
|
|
|
+static int single_menu_mode;
|
|
|
|
|
|
static void conf(struct menu *menu);
|
|
|
static void conf_choice(struct menu *menu);
|
|
@@ -274,10 +280,20 @@ static void build_conf(struct menu *menu)
|
|
|
case P_MENU:
|
|
|
child_count++;
|
|
|
cprint("m%p", menu);
|
|
|
- if (menu->parent != &rootmenu)
|
|
|
- cprint1(" %*c", indent + 1, ' ');
|
|
|
- cprint1("%s --->", prompt);
|
|
|
+
|
|
|
+ if (single_menu_mode) {
|
|
|
+ cprint1("%s%*c%s",
|
|
|
+ menu->data ? "-->" : "++>",
|
|
|
+ indent + 1, ' ', prompt);
|
|
|
+ } else {
|
|
|
+ if (menu->parent != &rootmenu)
|
|
|
+ cprint1(" %*c", indent + 1, ' ');
|
|
|
+ cprint1("%s --->", prompt);
|
|
|
+ }
|
|
|
+
|
|
|
cprint_done();
|
|
|
+ if (single_menu_mode && menu->data)
|
|
|
+ goto conf_childs;
|
|
|
return;
|
|
|
default:
|
|
|
if (prompt) {
|
|
@@ -392,6 +408,7 @@ static void conf(struct menu *menu)
|
|
|
char active_entry[40];
|
|
|
int stat, type, i;
|
|
|
|
|
|
+ unlink("lxdialog.scrltmp");
|
|
|
active_entry[0] = 0;
|
|
|
while (1) {
|
|
|
cprint_init();
|
|
@@ -442,7 +459,10 @@ static void conf(struct menu *menu)
|
|
|
case 0:
|
|
|
switch (type) {
|
|
|
case 'm':
|
|
|
- conf(submenu);
|
|
|
+ if (single_menu_mode)
|
|
|
+ submenu->data = (void *) !submenu->data;
|
|
|
+ else
|
|
|
+ conf(submenu);
|
|
|
break;
|
|
|
case 't':
|
|
|
if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)
|
|
@@ -484,6 +504,8 @@ static void conf(struct menu *menu)
|
|
|
case 6:
|
|
|
if (type == 't')
|
|
|
sym_toggle_tristate_value(sym);
|
|
|
+ else if (type == 'm')
|
|
|
+ conf(submenu);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -518,11 +540,19 @@ static void show_helptext(const char *title, const char *text)
|
|
|
static void show_help(struct menu *menu)
|
|
|
{
|
|
|
const char *help;
|
|
|
+ char *helptext;
|
|
|
+ struct symbol *sym = menu->sym;
|
|
|
|
|
|
- help = menu->sym->help;
|
|
|
+ help = sym->help;
|
|
|
if (!help)
|
|
|
help = nohelp_text;
|
|
|
- show_helptext(menu_get_prompt(menu), help);
|
|
|
+ if (sym->name) {
|
|
|
+ helptext = malloc(strlen(sym->name) + strlen(help) + 16);
|
|
|
+ sprintf(helptext, "%s:\n\n%s", sym->name, help);
|
|
|
+ show_helptext(menu_get_prompt(menu), helptext);
|
|
|
+ free(helptext);
|
|
|
+ } else
|
|
|
+ show_helptext(menu_get_prompt(menu), help);
|
|
|
}
|
|
|
|
|
|
static void show_readme(void)
|
|
@@ -679,14 +709,35 @@ static void conf_save(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void conf_cleanup(void)
|
|
|
+{
|
|
|
+ tcsetattr(1, TCSAFLUSH, &ios_org);
|
|
|
+ unlink(".help.tmp");
|
|
|
+ unlink("lxdialog.scrltmp");
|
|
|
+}
|
|
|
+
|
|
|
int main(int ac, char **av)
|
|
|
{
|
|
|
+ struct symbol *sym;
|
|
|
+ char *mode;
|
|
|
int stat;
|
|
|
+
|
|
|
conf_parse(av[1]);
|
|
|
conf_read(NULL);
|
|
|
|
|
|
- sprintf(menu_backtitle, "uClibc v%s Configuration", getenv("VERSION"));
|
|
|
+ sym = sym_lookup("VERSION", 0);
|
|
|
+ sym_calc_value(sym);
|
|
|
+ sprintf(menu_backtitle, "uClibc v%s Configuration",
|
|
|
+ sym_get_string_value(sym));
|
|
|
|
|
|
+ mode = getenv("MENUCONFIG_MODE");
|
|
|
+ if (mode) {
|
|
|
+ if (!strcasecmp(mode, "single_menu"))
|
|
|
+ single_menu_mode = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ tcgetattr(1, &ios_org);
|
|
|
+ atexit(conf_cleanup);
|
|
|
init_wsize();
|
|
|
conf(&rootmenu);
|
|
|
|