|
@@ -9,6 +9,9 @@
|
|
|
#define LKC_DIRECT_LINK
|
|
|
#include "lkc.h"
|
|
|
|
|
|
+static const char nohelp_text[] = N_(
|
|
|
+ "There is no help available for this kernel option.\n");
|
|
|
+
|
|
|
struct menu rootmenu;
|
|
|
static struct menu **last_entry_ptr;
|
|
|
|
|
@@ -451,3 +454,79 @@ const char *menu_get_help(struct menu *menu)
|
|
|
else
|
|
|
return "";
|
|
|
}
|
|
|
+
|
|
|
+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");
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void get_symbol_str(struct gstr *r, struct symbol *sym)
|
|
|
+{
|
|
|
+ bool hit;
|
|
|
+ struct property *prop;
|
|
|
+
|
|
|
+ if (sym && sym->name)
|
|
|
+ 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");
|
|
|
+}
|
|
|
+
|
|
|
+void menu_get_ext_help(struct menu *menu, struct gstr *help)
|
|
|
+{
|
|
|
+ struct symbol *sym = menu->sym;
|
|
|
+
|
|
|
+ if (menu_has_help(menu)) {
|
|
|
+ if (sym->name) {
|
|
|
+ str_printf(help, "CONFIG_%s:\n\n", sym->name);
|
|
|
+ str_append(help, _(menu_get_help(menu)));
|
|
|
+ str_append(help, "\n");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ str_append(help, nohelp_text);
|
|
|
+ }
|
|
|
+ get_symbol_str(help, sym);
|
|
|
+}
|