$(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \
| sh $(srcdir)/genhandlerlist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1)
-#{terminal}: #{src} $(#{src}_DEPENDENCIES) genterminlist.sh
+#{terminal}: #{src} $(#{src}_DEPENDENCIES) genterminallist.sh
set -e; \
$(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \
| sh $(srcdir)/genterminallist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1)
#include <grub/symbol.h>
#include <grub/types.h>
#include <grub/menu.h>
+#include <grub/term.h>
struct grub_menu_viewer
{
void grub_menu_register_viewer (struct grub_menu_viewer *viewer);
-grub_err_t grub_menu_register_viewer_init (void (*callback) (int entry,
- grub_menu_t menu,
- int nested));
+grub_err_t
+grub_menu_try_text (struct grub_term_output *term,
+ int entry, grub_menu_t menu, int nested);
+
+extern grub_err_t (*grub_gfxmenu_try_hook) (int entry, grub_menu_t menu,
+ int nested);
#endif /* GRUB_MENU_VIEWER_HEADER */
grub_set_history (GRUB_DEFAULT_HISTORY_SIZE);
- grub_menu_register_viewer_init (grub_menu_text_register_instances);
- if (grub_errno)
- {
- grub_print_error ();
- grub_errno = GRUB_ERR_NONE;
- }
-
grub_register_variable_hook ("pager", 0, grub_env_write_pager);
/* Register a command "normal" for the rescue mode. */
#include <grub/parser.h>
#include <grub/auth.h>
#include <grub/i18n.h>
+#include <grub/term.h>
/* Time to delay after displaying an error message about a default/fallback
entry failing to boot. */
#define DEFAULT_ENTRY_ERROR_DELAY_MS 2500
-struct menu_run_callback
-{
- struct menu_run_callback *next;
- void (*hook) (int entry, grub_menu_t menu, int nested);
-};
-
-struct menu_run_callback *callbacks = NULL;
+grub_err_t (*grub_gfxmenu_try_hook) (int entry, grub_menu_t menu,
+ int nested) = NULL;
/* Wait until the user pushes any key so that the user
can see what happened. */
static void
menu_init (int entry, grub_menu_t menu, int nested)
{
- struct menu_run_callback *cb;
- for (cb = callbacks; cb; cb = cb->next)
- cb->hook (entry, menu, nested);
+ struct grub_term_output *term;
+
+ FOR_ACTIVE_TERM_OUTPUTS(term)
+ {
+ grub_err_t err;
+
+ if (grub_gfxmenu_try_hook && grub_strcmp (term->name, "gfxterm") == 0)
+ {
+ err = grub_gfxmenu_try_hook (entry, menu, nested);
+ if(!err)
+ continue;
+ grub_print_error ();
+ grub_errno = GRUB_ERR_NONE;
+ }
+
+ err = grub_menu_try_text (term, entry, menu, nested);
+ if(!err)
+ continue;
+ grub_print_error ();
+ grub_errno = GRUB_ERR_NONE;
+ }
}
static void
viewers = viewer;
}
-grub_err_t
-grub_menu_register_viewer_init (void (*callback) (int entry, grub_menu_t menu,
- int nested))
-{
- struct menu_run_callback *cb;
- cb = grub_malloc (sizeof (*cb));
- if (!cb)
- return grub_errno;
- cb->hook = callback;
- cb->next = callbacks;
- callbacks = cb;
- return GRUB_ERR_NONE;
-}
-
/* Get the entry number from the variable NAME. */
static int
get_entry_number (const char *name)
grub_term_refresh (data->term);
}
-void
-grub_menu_text_register_instances (int entry, grub_menu_t menu, int nested)
+grub_err_t
+grub_menu_try_text (struct grub_term_output *term,
+ int entry, grub_menu_t menu, int nested)
{
struct menu_viewer_data *data;
struct grub_menu_viewer *instance;
- struct grub_term_output *term;
- FOR_ACTIVE_TERM_OUTPUTS(term)
- {
- instance = grub_zalloc (sizeof (*instance));
- if (!instance)
- {
- grub_print_error ();
- grub_errno = GRUB_ERR_NONE;
- continue;
- }
- data = grub_zalloc (sizeof (*data));
- if (!data)
- {
- grub_free (instance);
- grub_print_error ();
- grub_errno = GRUB_ERR_NONE;
- continue;
- }
-
- data->term = term;
- instance->data = data;
- instance->set_chosen_entry = menu_text_set_chosen_entry;
- instance->print_timeout = menu_text_print_timeout;
- instance->clear_timeout = menu_text_clear_timeout;
- instance->fini = menu_text_fini;
-
- data->menu = menu;
-
- data->offset = entry;
- data->first = 0;
- if (data->offset > grub_term_num_entries (data->term) - 1)
- {
- data->first = data->offset - (grub_term_num_entries (data->term) - 1);
- data->offset = grub_term_num_entries (data->term) - 1;
- }
-
- grub_term_setcursor (data->term, 0);
- grub_menu_init_page (nested, 0, data->term);
- print_entries (menu, data->first, data->offset, data->term);
- grub_term_refresh (data->term);
- grub_menu_register_viewer (instance);
- }
+ instance = grub_zalloc (sizeof (*instance));
+ if (!instance)
+ return grub_errno;
+
+ data = grub_zalloc (sizeof (*data));
+ if (!data)
+ {
+ grub_free (instance);
+ return grub_errno;
+ }
+
+ data->term = term;
+ instance->data = data;
+ instance->set_chosen_entry = menu_text_set_chosen_entry;
+ instance->print_timeout = menu_text_print_timeout;
+ instance->clear_timeout = menu_text_clear_timeout;
+ instance->fini = menu_text_fini;
+
+ data->menu = menu;
+
+ data->offset = entry;
+ data->first = 0;
+ if (data->offset > grub_term_num_entries (data->term) - 1)
+ {
+ data->first = data->offset - (grub_term_num_entries (data->term) - 1);
+ data->offset = grub_term_num_entries (data->term) - 1;
+ }
+
+ grub_term_setcursor (data->term, 0);
+ grub_menu_init_page (nested, 0, data->term);
+ print_entries (menu, data->first, data->offset, data->term);
+ grub_term_refresh (data->term);
+ grub_menu_register_viewer (instance);
+
+ return GRUB_ERR_NONE;
}