void *extra)
{
if (!m->item_data_print) {
- putc(item->key);
+ puts(item->key);
putc('\n');
} else {
m->item_data_print(item->data);
return NULL;
}
+void __menu_display_statusline(struct menu *m)
+{
+ return;
+}
+void menu_display_statusline(struct menu *m)
+ __attribute__ ((weak, alias("__menu_display_statusline")));
+
/*
* Display a menu so the user can make a choice of an item. First display its
* title, if any, and then each item in the menu.
puts(m->title);
putc('\n');
}
+ menu_display_statusline(m);
menu_items_iter(m, menu_item_print, NULL);
}
return menu_items_iter(m, menu_item_key_match, item_key);
}
-/*
- * Wait for the user to hit a key according to the timeout set for the menu.
- * Returns 1 if the user hit a key, or 0 if the timeout expired.
- */
-static inline int menu_interrupted(struct menu *m)
-{
- if (!m->timeout)
- return 0;
-
- if (abortboot(m->timeout/10))
- return 1;
-
- return 0;
-}
-
-/*
- * Checks whether or not the default menu item should be used without
- * prompting for a user choice. If the menu is set to always prompt, or the
- * user hits a key during the timeout period, return 0. Otherwise, return 1 to
- * indicate we should use the default menu item.
- */
-static inline int menu_use_default(struct menu *m)
-{
- return !m->prompt && !menu_interrupted(m);
-}
-
/*
* Set *choice to point to the default item's data, if any default item was
* set, and returns 1. If no default item was set, returns -ENOENT.
menu_display(m);
- readret = readline_into_buffer("Enter choice: ", cbuf);
+ readret = readline_into_buffer("Enter choice: ", cbuf,
+ m->timeout / 10);
if (readret >= 0) {
choice_item = menu_item_by_key(m, cbuf);
- if (!choice_item)
+ if (!choice_item) {
printf("%s not found\n", cbuf);
- } else {
- puts("^C\n");
- return -EINTR;
- }
+ m->timeout = 0;
+ }
+ } else
+ return menu_default_choice(m, choice);
}
*choice = choice_item->data;
if (!m || !choice)
return -EINVAL;
- if (menu_use_default(m))
+ if (!m->prompt)
return menu_default_choice(m, choice);
return menu_interactive_choice(m, choice);