diff --git a/src/menu.h b/src/menu.h
index 38a32055ea50a6a5599b6cd34f598a159096af02..8431ee484597f6f860fdd22c0e14ad4f6e7b3adb 100644 (file)
--- a/src/menu.h
+++ b/src/menu.h
-/*
- Copyright (C) Prikol Software 1996-1997
- Copyright (C) Aleksey Volynskov 1996-1997
-
- This file is part of the Doom2D:Rembo project.
-
- Doom2D:Rembo is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation.
-
- Doom2D:Rembo is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/> or
- write to the Free Software Foundation, Inc.,
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-
+/* Copyright (C) 2020 SovietPony
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License ONLY.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
#ifndef MENU_H_INCLUDED
#define MENU_H_INCLUDED
#define GM_BEGIN 8 // textfield
#define GM_END 9 // textfield
#define GM_CANCEL 10 // textfield
-
-typedef struct new_str_msg_t {
+#define GM_QUERY 11 // menu
+#define GM_GETTITLE 12 // menu
+#define GM_GETENTRY 13 // entry
+#define GM_GETCAPTION 14 // entry
+#define GM_UP 15
+#define GM_DOWN 16
+
+typedef struct menu_str_msg_t {
byte type;
char *s;
int maxlen;
-} new_str_msg_t;
+} menu_str_msg_t;
-typedef struct new_int_msg_t {
+typedef struct menu_int_msg_t {
byte type;
int i, a, b, s;
-} new_int_msg_t;
+} menu_int_msg_t;
-typedef union new_msg_t {
+typedef union menu_msg_t {
byte type;
- 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;
+ menu_str_msg_t string;
+ menu_int_msg_t integer;
+} menu_msg_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;
+typedef struct menu_t menu_t;
+struct menu_t {
+ int (*handler)(menu_msg_t *msg, const menu_t *m, int i);
};
-struct new_menu_t {
+typedef struct simple_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[];
-};
+ char *say;
+ struct simple_entry_t {
+ char *caption;
+ const menu_t *submenu;
+ } entries[];
+} simple_menu_t;
extern byte _warp;
extern short lastkey;
-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);
+#define GM_INIT_STRING(msg, str) GM_init_str(msg, str, sizeof str);
+#define GM_CYCLE(i, m, n) ((i) < (m) ? (n) : (((i) > (n)) ? (m) : (i)))
+int GM_init_int0 (menu_msg_t *msg, int i, int a, int b, int s);
+int GM_init_int (menu_msg_t *msg, int i, int a, int b, int s);
+int GM_init_str (menu_msg_t *msg, char *str, int maxlen);
+int basic_menu_handler (menu_msg_t *msg, byte type, char *title, char *say, int n, int *cur);
+int simple_menu_handler (menu_msg_t *msg, int i, int n, const simple_menu_t *m, int *cur);
+
+int GM_push (const menu_t *m);
+int GM_pop (void);
+int GM_popall (void);
+const menu_t *GM_get (void);
+int GM_send_this (const menu_t *m, menu_msg_t *msg);
+int GM_send (const menu_t *m, int i, menu_msg_t *msg);
void GM_key (int key, int down);
void GM_input (int ch);