|
@@ -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
|