diff --git a/src/menu.h b/src/menu.h
index bb6d829777bcde7f8f7886cb3c1cd13fd2d19a84..cfb7d439653afadf7383aef7f140a93c148157f5 100644 (file)
--- a/src/menu.h
+++ b/src/menu.h
#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;
+ 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;
- int n, cur, x;
- char *ttl;
- char **m;
- byte *t;
-} menu_t;
-
-extern menu_t save_mnu;
-extern byte *panimp;
+ new_str_msg_t string;
+ new_int_msg_t integer;
+} new_msg_t;
+
+typedef struct new_var_t new_var_t;
+typedef struct new_menu_t new_menu_t;
+
+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 PCOLORN 10
-extern byte pcolortab[PCOLORN];
-extern int p1color;
-extern int p2color;
+//#define PCOLORN 10
+//extern byte pcolortab[PCOLORN];
+//extern int p1color;
+//extern int p2color;
-extern char ibuf[24];
+#define GM_MAX_INPUT 24
+extern char ibuf[GM_MAX_INPUT];
extern byte input;
+extern int icur;
-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);
+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);