X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fmenu.h;h=38a32055ea50a6a5599b6cd34f598a159096af02;hb=8d8db2ae3c64d7de45bb34cbdac2c4f150ed0c09;hp=bb6d829777bcde7f8f7886cb3c1cd13fd2d19a84;hpb=0102df00b3e2485b084f11a8270a2365d1aa7cbc;p=flatwaifu.git diff --git a/src/menu.h b/src/menu.h index bb6d829..38a3205 100644 --- a/src/menu.h +++ b/src/menu.h @@ -24,32 +24,88 @@ #include "glob.h" -typedef struct { +/* menu types */ +#define GM_BIG 1 +#define GM_SMALL 2 + +/* variant types */ +#define GM_BUTTON 1 +#define GM_SCROLLER 2 +#define GM_TEXTFIELD 3 +#define GM_SMALL_BUTTON 4 +#define GM_TEXTFIELD_BUTTON 5 + +/* menu messages */ +#define GM_GETINT 1 +#define GM_SETINT 2 +#define GM_GETSTR 3 +#define GM_SETSTR 4 +#define GM_SELECT 5 // buttons +#define GM_ENTER 6 // menu +#define GM_LEAVE 7 // menu +#define GM_BEGIN 8 // textfield +#define GM_END 9 // textfield +#define GM_CANCEL 10 // textfield + +typedef struct new_str_msg_t { byte type; - int n, cur, x; - char *ttl; - char **m; - byte *t; -} menu_t; - -extern menu_t save_mnu; -extern byte *panimp; -extern byte _warp; + char *s; + int maxlen; +} new_str_msg_t; + +typedef struct new_int_msg_t { + byte type; + int i, a, b, s; +} new_int_msg_t; + +typedef union new_msg_t { + byte type; + new_str_msg_t string; + new_int_msg_t integer; +} new_msg_t; -#define PCOLORN 10 -extern byte pcolortab[PCOLORN]; -extern int p1color; -extern int p2color; +typedef struct new_var_t new_var_t; +typedef struct new_menu_t new_menu_t; -extern char ibuf[24]; +struct new_var_t { + byte type; + char *caption; + void *data; + int (*handler)(new_msg_t *msg, const new_menu_t *m, void *data); + const new_menu_t *submenu; +}; + +struct new_menu_t { + byte type; + char *title; + void *data; + int (*handler)(new_msg_t *msg, const new_menu_t *m, void *data); + new_var_t entries[]; +}; + +extern byte _warp; + +#define GM_MAX_INPUT 24 +extern char ibuf[GM_MAX_INPUT]; extern byte input; +extern int icur; +extern int imax; -extern menu_t *mnu; -extern byte gm_redraw; extern short lastkey; -void GMV_say (const char nm[8]); -void G_keyf (int key, int down); +int GM_init_int (new_msg_t *msg, int i, int a, int b, int s); +int GM_init_str (new_msg_t *msg, char *str, int maxlen); + +void GM_push (const new_menu_t *m); +void GM_pop (void); +void GM_popall (void); +const new_menu_t *GM_get (void); +int GM_geti (void); +int GM_send_this (const new_menu_t *m, new_msg_t *msg); +int GM_send (const new_menu_t *m, int i, new_msg_t *msg); + +void GM_key (int key, int down); +void GM_input (int ch); void G_code (void); int GM_act (void); void GM_init (void);