#ifndef _MENU_H_
#define _MENU_H_
#include <curses.h>
#include <eti.h>
#define REQ_BASE_NUM (KEY_MAX + 0x200)
#define REQ_LEFT_ITEM (KEY_MAX + 0x201)
#define REQ_RIGHT_ITEM (KEY_MAX + 0x202)
#define REQ_UP_ITEM (KEY_MAX + 0x203)
#define REQ_DOWN_ITEM (KEY_MAX + 0x204)
#define REQ_SCR_ULINE (KEY_MAX + 0x205)
#define REQ_SCR_DLINE (KEY_MAX + 0x206)
#define REQ_SCR_DPAGE (KEY_MAX + 0x207)
#define REQ_SCR_UPAGE (KEY_MAX + 0x208)
#define REQ_FIRST_ITEM (KEY_MAX + 0x209)
#define REQ_LAST_ITEM (KEY_MAX + 0x20a)
#define REQ_NEXT_ITEM (KEY_MAX + 0x20b)
#define REQ_PREV_ITEM (KEY_MAX + 0x20c)
#define REQ_TOGGLE_ITEM (KEY_MAX + 0x20d)
#define REQ_CLEAR_PATTERN (KEY_MAX + 0x20e)
#define REQ_BACK_PATTERN (KEY_MAX + 0x20f)
#define REQ_NEXT_MATCH (KEY_MAX + 0x210)
#define REQ_PREV_MATCH (KEY_MAX + 0x211)
#define MAX_COMMAND (KEY_MAX + 0x211)
typedef unsigned int OPTIONS;
#define O_ONEVALUE (0x1)
#define O_SHOWDESC (0x2)
#define O_ROWMAJOR (0x4)
#define O_IGNORECASE (0x8)
#define O_SHOWMATCH (0x10)
#define O_NONCYCLIC (0x20)
#define O_SELECTABLE (0x40)
#define O_RADIO (0x80)
typedef struct __menu_str {
char *string;
int length;
} MENU_STR;
typedef struct __menu MENU;
typedef struct __item ITEM;
typedef void (*Menu_Hook) (MENU *);
struct __item {
MENU_STR name;
MENU_STR description;
char *userptr;
int visible;
int selected;
int row;
int col;
OPTIONS opts;
MENU *parent;
int index;
ITEM *left;
ITEM *right;
ITEM *up;
ITEM *down;
};
struct __menu {
int rows;
int cols;
int item_rows;
int item_cols;
int cur_row;
int cur_col;
MENU_STR mark;
MENU_STR unmark;
OPTIONS opts;
char *pattern;
int plen;
int match_len;
int posted;
attr_t fore;
attr_t back;
attr_t grey;
int pad;
char *userptr;
int top_row;
int max_item_width;
int col_width;
int item_count;
ITEM **items;
int cur_item;
int in_init;
Menu_Hook menu_init;
Menu_Hook menu_term;
Menu_Hook item_init;
Menu_Hook item_term;
WINDOW *menu_win;
WINDOW *menu_subwin;
WINDOW *scrwin;
};
__BEGIN_DECLS
int menu_driver(MENU *, int);
int scale_menu(MENU *, int *, int *);
int set_top_row(MENU *, int);
int pos_menu_cursor(MENU *);
int top_row(MENU *);
int free_menu(MENU *);
char menu_back(MENU *);
char menu_fore(MENU *);
void menu_format(MENU *, int *, int *);
char menu_grey(MENU *);
Menu_Hook menu_init(MENU *);
char *menu_mark(MENU *);
OPTIONS menu_opts(MENU *);
int menu_opts_off(MENU *, OPTIONS);
int menu_opts_on(MENU *, OPTIONS);
int menu_pad(MENU *);
char *menu_pattern(MENU *);
WINDOW *menu_sub(MENU *);
Menu_Hook menu_term(MENU *);
char *menu_unmark (MENU *);
char *menu_userptr(MENU *);
WINDOW *menu_win(MENU *);
MENU *new_menu(ITEM **);
int post_menu(MENU *);
int set_menu_back(MENU *, attr_t);
int set_menu_fore(MENU *, attr_t);
int set_menu_format(MENU *, int, int);
int set_menu_grey(MENU *, attr_t);
int set_menu_init(MENU *, Menu_Hook);
int set_menu_items(MENU *, ITEM **);
int set_menu_mark(MENU *, char *);
int set_menu_opts(MENU *, OPTIONS);
int set_menu_pad(MENU *, int);
int set_menu_pattern(MENU *, char *);
int set_menu_sub(MENU *, WINDOW *);
int set_menu_term(MENU *, Menu_Hook);
int set_menu_unmark(MENU *, char *);
int set_menu_userptr(MENU *, char *);
int set_menu_win(MENU *, WINDOW *);
int unpost_menu(MENU *);
ITEM *current_item(MENU *);
int free_item(ITEM *);
int item_count(MENU *);
char *item_description(ITEM *);
int item_index(ITEM *);
Menu_Hook item_init(MENU *);
char *item_name(ITEM *);
OPTIONS item_opts(ITEM *);
int item_opts_off(ITEM *, OPTIONS);
int item_opts_on(ITEM *, OPTIONS);
int item_selected(MENU *, int **);
Menu_Hook item_term(MENU *);
char *item_userptr(ITEM *);
int item_value(ITEM *);
int item_visible(ITEM *);
ITEM **menu_items(MENU *);
ITEM *new_item(char *, char *);
int set_current_item(MENU *, ITEM *);
int set_item_init(MENU *, Menu_Hook);
int set_item_opts(ITEM *, OPTIONS);
int set_item_term(MENU *, Menu_Hook);
int set_item_userptr(ITEM *, char *);
int set_item_value(ITEM *, int);
__END_DECLS
#endif