projects
/
carl9170fw.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
kconfig: do not override symbols already set
[carl9170fw.git]
/
config
/
menu.c
diff --git
a/config/menu.c
b/config/menu.c
index a5241859326a90cd1828734121c465bd01704b17..f3bffa309333061ed5d852e7c00132107017add5 100644
(file)
--- a/
config/menu.c
+++ b/
config/menu.c
@@
-48,7
+48,7
@@
void menu_add_entry(struct symbol *sym)
{
struct menu *menu;
{
struct menu *menu;
- menu = malloc(sizeof(*menu));
+ menu =
x
malloc(sizeof(*menu));
memset(menu, 0, sizeof(*menu));
menu->sym = sym;
menu->parent = current_menu;
memset(menu, 0, sizeof(*menu));
menu->sym = sym;
menu->parent = current_menu;
@@
-507,12
+507,12
@@
const char *menu_get_help(struct menu *menu)
return "";
}
return "";
}
-static
int get_prompt_str(struct gstr *r, struct property *prop, struct menu
-
**jumps, int jump_nb
)
+static
void get_prompt_str(struct gstr *r, struct property *prop,
+
struct list_head *head
)
{
int i, j;
{
int i, j;
- char header[4];
struct menu *submenu[8], *menu, *location = NULL;
struct menu *submenu[8], *menu, *location = NULL;
+ struct jump_key *jump;
str_printf(r, _("Prompt: %s\n"), _(prop->text));
str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
str_printf(r, _("Prompt: %s\n"), _(prop->text));
str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
@@
-530,7
+530,9
@@
static int get_prompt_str(struct gstr *r, struct property *prop, struct menu
if (location == NULL && accessible)
location = menu;
}
if (location == NULL && accessible)
location = menu;
}
- if (jumps && jump_nb < JUMP_NB && location) {
+ if (head && location) {
+ jump = xmalloc(sizeof(struct jump_key));
+
if (menu_is_visible(prop->menu)) {
/*
* There is not enough room to put the hint at the
if (menu_is_visible(prop->menu)) {
/*
* There is not enough room to put the hint at the
@@
-538,19
+540,27
@@
static int get_prompt_str(struct gstr *r, struct property *prop, struct menu
* last "Location" line even when it would belong on
* the former.
*/
* last "Location" line even when it would belong on
* the former.
*/
- jump
s[jump_nb]
= prop->menu;
+ jump
->target
= prop->menu;
} else
} else
- jumps[jump_nb] = location;
- snprintf(header, 4, "(%d)", jump_nb + 1);
- } else
- location = NULL;
+ jump->target = location;
+
+ if (list_empty(head))
+ jump->index = 0;
+ else
+ jump->index = list_entry(head->prev, struct jump_key,
+ entries)->index + 1;
+
+ list_add_tail(&jump->entries, head);
+ }
if (i > 0) {
str_printf(r, _(" Location:\n"));
if (i > 0) {
str_printf(r, _(" Location:\n"));
- for (j =
1
; --i >= 0; j += 2) {
+ for (j =
4
; --i >= 0; j += 2) {
menu = submenu[i];
menu = submenu[i];
- str_printf(r, "%s%*c-> %s", menu == location ? header
- : " ", j, ' ', _(menu_get_prompt(menu)));
+ if (head && location && menu == location)
+ jump->offset = r->len - 1;
+ 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>"),
if (menu->sym) {
str_printf(r, " (%s [=%s])", menu->sym->name ?
menu->sym->name : _("<choice>"),
@@
-559,20
+569,16
@@
static int get_prompt_str(struct gstr *r, struct property *prop, struct menu
str_append(r, "\n");
}
}
str_append(r, "\n");
}
}
-
- return location ? 1 : 0;
}
/*
}
/*
- * jumps is optional and may be NULL
- * returns the number of jumps inserted
+ * head is optional and may be NULL
*/
*/
-
int get_symbol_str(struct gstr *r, struct symbol *sym, struct menu **jumps
,
-
int jump_nb
)
+
void get_symbol_str(struct gstr *r, struct symbol *sym
,
+
struct list_head *head
)
{
bool hit;
struct property *prop;
{
bool hit;
struct property *prop;
- int i = 0;
if (sym && sym->name) {
str_printf(r, "Symbol: %s [=%s]\n", sym->name,
if (sym && sym->name) {
str_printf(r, "Symbol: %s [=%s]\n", sym->name,
@@
-588,7
+594,7
@@
int get_symbol_str(struct gstr *r, struct symbol *sym, struct menu **jumps,
}
}
for_all_prompts(sym, prop)
}
}
for_all_prompts(sym, prop)
-
i += get_prompt_str(r, prop, jumps, jump_nb + i
);
+
get_prompt_str(r, prop, head
);
hit = false;
for_all_properties(sym, prop, P_SELECT) {
if (!hit) {
hit = false;
for_all_properties(sym, prop, P_SELECT) {
if (!hit) {
@@
-606,18
+612,16
@@
int get_symbol_str(struct gstr *r, struct symbol *sym, struct menu **jumps,
str_append(r, "\n");
}
str_append(r, "\n\n");
str_append(r, "\n");
}
str_append(r, "\n\n");
-
- return i;
}
}
-struct gstr get_relations_str(struct symbol **sym_arr, struct
menu **jumps
)
+struct gstr get_relations_str(struct symbol **sym_arr, struct
list_head *head
)
{
struct symbol *sym;
struct gstr res = str_new();
{
struct symbol *sym;
struct gstr res = str_new();
- int i
, jump_nb = 0
;
+ int i;
for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
-
jump_nb += get_symbol_str(&res, sym, jumps, jump_nb
);
+
get_symbol_str(&res, sym, head
);
if (!i)
str_append(&res, _("No matches found.\n"));
return res;
if (!i)
str_append(&res, _("No matches found.\n"));
return res;
@@
-636,5
+640,5
@@
void menu_get_ext_help(struct menu *menu, struct gstr *help)
}
str_printf(help, "%s\n", _(help_text));
if (sym)
}
str_printf(help, "%s\n", _(help_text));
if (sym)
- get_symbol_str(help, sym, NULL
, 0
);
+ get_symbol_str(help, sym, NULL);
}
}