parent
b64f190b7a
commit
d7854223c5
@ -1,66 +0,0 @@ |
||||
#include "menu.h" |
||||
|
||||
#define SINGLE_BOX 0 |
||||
#define DOUBLE_BOX 1 |
||||
|
||||
void video_draw_box(int style, int attr, char *title, int separate, int x, int y, int w, int h); |
||||
void video_draw_text(int x, int y, int attr, char *text); |
||||
void video_save_rect(int x, int y, int w, int h, void *save_area, int clearchar, int clearattr); |
||||
void video_restore_rect(int x, int y, int w, int h, void *save_area); |
||||
int video_rows(void); |
||||
int video_cols(void); |
||||
|
||||
#define MAX_MENU_OPTIONS 200 |
||||
|
||||
typedef struct |
||||
{ |
||||
int used; /* flag if this entry is used */ |
||||
int entry_x; /* Character column of the menu entry */ |
||||
int entry_y; /* Character line of the entry */ |
||||
int option_x; /* Character colum of the option (entry is same) */ |
||||
} option_data_t; |
||||
|
||||
option_data_t odata[MAX_MENU_OPTIONS]; |
||||
|
||||
int normal_attr = 0x0F; |
||||
int select_attr = 0x2F; |
||||
int disabled_attr = 0x07; |
||||
|
||||
menu_t *root_menu; |
||||
|
||||
int menu_init (menu_t *root) |
||||
{ |
||||
char *s; |
||||
int i; |
||||
|
||||
s = getenv("menu_normal"); |
||||
if (s) normal_attr = atoi(s); |
||||
|
||||
s = getenv("menu_select"); |
||||
if (s) select_attr = atoi(s); |
||||
|
||||
s = getenv("menu_disabled"); |
||||
if (s) disabled_attr = atoi(s); |
||||
|
||||
for (i=0; i<MAX_MENU_OPTIONS; i++) odata[i].used = 0; |
||||
|
||||
root_menu = root; |
||||
} |
||||
|
||||
option_data_t *menu_alloc_odata(void) |
||||
{ |
||||
int i; |
||||
for (int i=0; i<MAX_MENU_OPTIONS; i++) |
||||
{ |
||||
if (odata[i].used == 0) return &odata[i]; |
||||
} |
||||
return NULL; |
||||
} |
||||
|
||||
void menu_free_odata(option_data_t *odata) |
||||
{ |
||||
odata->used = 0; |
||||
} |
||||
|
||||
void menu_layout (menu_t *menu) |
||||
{ |
@ -1,162 +0,0 @@ |
||||
#ifndef MENU_H |
||||
#define MENU_H |
||||
|
||||
/* A single menu */ |
||||
typedef void (*menu_finish_callback)(struct menu_s *menu); |
||||
|
||||
typedef struct menu_s { |
||||
char *name; /* Menu name */ |
||||
int num_options; /* Number of options in this menu */ |
||||
int flags; /* Various flags - see below */ |
||||
int option_align; /* Aligns options to a field width of this much characters if != 0 */ |
||||
|
||||
struct menu_option_s **options; /* Pointer to this menu's options */ |
||||
menu_finish_callback callback; /* Called when the menu closes */ |
||||
} menu_t; |
||||
|
||||
/*
|
||||
* type: Type of the option (see below) |
||||
* name: Name to display for this option |
||||
* help: Optional help string |
||||
* id : optional id number |
||||
* sys : pointer for system-specific data, init to NULL and don't touch |
||||
*/ |
||||
|
||||
#define OPTION_PREAMBLE \ |
||||
int type; \
|
||||
char *name; \
|
||||
char *help; \
|
||||
int id; \
|
||||
void *sys; |
||||
|
||||
/*
|
||||
* Menu option types. |
||||
* There are a number of different layouts for menu options depending |
||||
* on their types. Currently there are the following possibilities: |
||||
* |
||||
* Submenu: |
||||
* This entry links to a new menu. |
||||
* |
||||
* Boolean: |
||||
* A simple on/off toggle entry. Booleans can be either yes/no, 0/1 or on/off. |
||||
* Optionally, this entry can enable/disable a set of other options. An example would |
||||
* be to enable/disable on-board USB, and if enabled give access to further options like |
||||
* irq settings, base address etc. |
||||
* |
||||
* Text: |
||||
* A single line/limited number of characters text entry box. Text can be restricted |
||||
* to a certain charset (digits/hex digits/all/custom). Result is also available as an |
||||
* int if numeric. |
||||
* |
||||
* Selection: |
||||
* One-of-many type of selection entry. User may choose on of a set of strings, which |
||||
* maps to a specific value for the variable. |
||||
* |
||||
* Routine: |
||||
* Selecting this calls an entry-specific routine. This can be used for saving contents etc. |
||||
* |
||||
* Custom: |
||||
* Display and behaviour of this entry is defined by a set of callbacks. |
||||
*/ |
||||
|
||||
#define MENU_SUBMENU_TYPE 0 |
||||
typedef struct menu_submenu_s |
||||
{ |
||||
OPTION_PREAMBLE |
||||
|
||||
menu_t * submenu; /* Pointer to the submenu */ |
||||
} menu_submenu_t; |
||||
|
||||
#define MENU_BOOLEAN_TYPE 1 |
||||
typedef struct menu_boolean_s |
||||
{ |
||||
OPTION_PREAMBLE |
||||
|
||||
char *variable; /* Name of the variable to getenv()/setenv() */ |
||||
int subtype; /* Subtype (on/off, 0/1, yes/no, enable/disable), see below */ |
||||
int mutex; /* Bit mask of options to enable/disable. Bit 0 is the option
|
||||
immediately following this one, bit 1 is the next one etc. |
||||
bit 7 = 0 means to disable when this option is off, |
||||
bit 7 = 1 means to disable when this option is on. |
||||
An option is disabled when the type field's upper bit is set */ |
||||
} menu_boolean_t; |
||||
|
||||
/* BOOLEAN Menu flags */ |
||||
#define MENU_BOOLEAN_ONOFF 0x01 |
||||
#define MENU_BOOLEAN_01 0x02 |
||||
#define MENU_BOOLEAN_YESNO 0x03 |
||||
#define MENU_BOOLEAN_ENDIS 0x04 |
||||
#define MENU_BOOLEAN_TYPE_MASK 0x07 |
||||
|
||||
|
||||
#define MENU_TEXT_TYPE 2 |
||||
typedef struct menu_text_s |
||||
{ |
||||
OPTION_PREAMBLE |
||||
|
||||
char *variable; /* Name of the variable to getenv()/setenv() */ |
||||
int maxchars; /* Max number of characters */ |
||||
char *charset; /* Optional charset to use */ |
||||
int flags; /* Flags - see below */ |
||||
} menu_text_t; |
||||
|
||||
/* TEXT entry menu flags */ |
||||
#define MENU_TEXT_NUMERIC 0x01 |
||||
#define MENU_TEXT_HEXADECIMAL 0x02 |
||||
#define MENU_TEXT_FREE 0x03 |
||||
#define MENU_TEXT_TYPE_MASK 0x07 |
||||
|
||||
|
||||
#define MENU_SELECTION_TYPE 3 |
||||
typedef struct menu_select_option_s { |
||||
char *map_from; /* Map this variable contents ... */ |
||||
char *map_to; /* ... to this menu text and vice versa */ |
||||
} menu_select_option_t; |
||||
|
||||
typedef struct menu_select_s { |
||||
OPTION_PREAMBLE int num_options; /* Number of mappings */ |
||||
menu_select_option_t **options; |
||||
/* Option list array */ |
||||
} menu_select_t; |
||||
|
||||
|
||||
#define MENU_ROUTINE_TYPE 4 |
||||
typedef void (*menu_routine_callback) (struct menu_routine_s *); |
||||
|
||||
typedef struct menu_routine_s { |
||||
OPTION_PREAMBLE menu_routine_callback callback; |
||||
/* routine to be called */ |
||||
void *user_data; /* User data, don't care for system */ |
||||
} menu_routine_t; |
||||
|
||||
|
||||
#define MENU_CUSTOM_TYPE 5 |
||||
typedef void (*menu_custom_draw) (struct menu_custom_s *); |
||||
typedef void (*menu_custom_key) (struct menu_custom_s *, int); |
||||
|
||||
typedef struct menu_custom_s { |
||||
OPTION_PREAMBLE menu_custom_draw drawfunc; |
||||
menu_custom_key keyfunc; |
||||
void *user_data; |
||||
} menu_custom_t; |
||||
|
||||
/*
|
||||
* The menu option superstructure |
||||
*/ |
||||
typedef struct menu_option_s { |
||||
union { |
||||
menu_submenu_t m_sub_menu; |
||||
menu_boolean_t m_boolean; |
||||
menu_text_t m_text; |
||||
menu_select_t m_select; |
||||
menu_routine_t m_routine; |
||||
}; |
||||
} menu_option_t; |
||||
|
||||
/* Init the menu system. Returns <0 on error */ |
||||
int menu_init(menu_t *root); |
||||
|
||||
/* Execute a single menu. Returns <0 on error */ |
||||
int menu_do(menu_t *menu); |
||||
|
||||
#endif |
Loading…
Reference in new issue