2009-06-10 Felix Zielcke <fzielcke@z-51.de>
[grub2/phcoder/solaris.git] / normal / menu_viewer.c
blobf7047c7fc29ccf9a45e84b45dbe765dc1d6435b4
1 /*
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/>.
19 #include <grub/mm.h>
20 #include <grub/misc.h>
21 #include <grub/env.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;
28 void
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)
47 return cur;
50 /* Fall back to the first entry (or null). */
51 return menu_viewer_list;
54 grub_err_t
55 grub_menu_viewer_show_menu (grub_menu_t menu, int nested)
57 grub_menu_viewer_t cur = get_current_menu_viewer ();
58 if (!cur)
59 return grub_error (GRUB_ERR_BAD_ARGUMENT, "No menu viewer available.");
61 return cur->show_menu (menu, nested);