forked from kexecboot/kexecboot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmenu.h
91 lines (73 loc) · 2.5 KB
/
menu.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
* kexecboot - A kexec based bootloader
*
* Copyright (c) 2009-2011 Yuri Bushmelev <[email protected]>
* Copyright (c) 2009 Omegamoon <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef _HAVE_MENU_H_
#define _HAVE_MENU_H_
#include "config.h"
#include <sys/queue.h>
typedef int kx_menu_id;
typedef unsigned int kx_menu_dim;
struct kx_menu;
struct kx_menu_level;
typedef struct kx_menu_item {
kx_menu_id id; /* Unique id */
char *label; /* Item label */
char *description; /* Item description */
void *data; /* User driven data */
struct kx_menu_level *submenu; /* Sub-menu if any */
TAILQ_ENTRY(kx_menu_item) links;
} kx_menu_item;
typedef struct kx_menu_level {
kx_menu_dim current_no; /* Current active item No */
kx_menu_item *current; /* Current active item */
struct kx_menu_level *parent; /* Upper menu level */
TAILQ_ENTRY(kx_menu_level) links;
TAILQ_HEAD(kx_head, kx_menu_item) head_itms;
} kx_menu_level;
typedef struct kx_menu {
kx_menu_id next_id;
kx_menu_level *top; /* Main menu */
kx_menu_level *current; /* Current active menu */
TAILQ_HEAD(kx_head, kx_menu_level) head_lvls;
} kx_menu;
/* Create menu of 'size' submenus/levels */
//kx_menu *menu_create(kx_menu_dim size);
kx_menu *
menu_create(void);
/* Get next available menu id */
kx_menu_id
menu_get_next_id(kx_menu *menu);
/* Select next/prev/first item in current level */
void
menu_item_select(kx_menu *menu, int direction);
/* Select no'th item in current level */
kx_menu_dim
menu_item_select_by_no(kx_menu *menu, int no);
/* Create menu level (submenu) of 'size' items */
// kx_menu_level *menu_level_create(kx_menu *menu, kx_menu_dim size,
// kx_menu_level *parent);
kx_menu_level *
menu_level_create(kx_menu *menu, kx_menu_level *parent);
/* Add menu item to menu level */
kx_menu_item *
menu_item_add(kx_menu_level *level, kx_menu_id id, char *label,
char *description, kx_menu_level *submenu);
void
menu_item_set_data(kx_menu_item *item, void *data);
void
menu_destroy(kx_menu *menu, int destroy_data);
#endif /* _HAVE_MENU_H_*/