2 * GRUB -- GRand Unified Bootloader
3 * Copyright (C) 2009 Free Software Foundation, Inc.
5 * GRUB is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * GRUB is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
20 #include <grub/misc.h>
22 #include <grub/menu_viewer.h>
23 #include <grub/menu.h>
25 /* The list of menu viewers. */
26 static grub_menu_viewer_t menu_viewer_list
;
29 grub_menu_viewer_register (grub_menu_viewer_t viewer
)
31 viewer
->next
= menu_viewer_list
;
32 menu_viewer_list
= viewer
;
35 static grub_menu_viewer_t
get_current_menu_viewer (void)
37 const char *selected_name
= grub_env_get ("menuviewer");
39 /* If none selected, pick the last registered one. */
40 if (selected_name
== 0)
41 return menu_viewer_list
;
43 grub_menu_viewer_t cur
;
44 for (cur
= menu_viewer_list
; cur
; cur
= cur
->next
)
46 if (grub_strcmp (cur
->name
, selected_name
) == 0)
50 /* Fall back to the first entry (or null). */
51 return menu_viewer_list
;
55 grub_menu_viewer_show_menu (grub_menu_t menu
, int nested
)
57 grub_menu_viewer_t cur
= get_current_menu_viewer ();
59 return grub_error (GRUB_ERR_BAD_ARGUMENT
, "No menu viewer available.");
61 return cur
->show_menu (menu
, nested
);