]> granicus.if.org Git - nethack/commitdiff
updated window_procs
authornhmall <nhmall@nethack.org>
Thu, 30 Jun 2022 03:21:19 +0000 (23:21 -0400)
committernhmall <nhmall@nethack.org>
Thu, 30 Jun 2022 03:21:19 +0000 (23:21 -0400)
Add a non-string identifier to window_procs for use in runtime
identification of the current window port being used.

Use a macro WPID to add the identification at the top of the
various existing window_procs declarations. It expands to the
existing text string, as well as the newly added field wp_id
with a wp_ identifier.

For example, WPID(tty) expands to: "tty", wp_tty

The generated wp_tty must be present in the wp_ids enum at
the top of include/winprocs.h.

The WINDOWPORT(x) macro has been updated to expand to a simple
value comparison (port.wp_id == wp_x), instead of a
string comparison.

15 files changed:
include/winprocs.h
src/options.c
src/windows.c
sys/windows/stubs.c
sys/windows/windmain.c
sys/windows/windsys.c
win/Qt/qt_bind.cpp
win/X11/winX.c
win/chain/wc_chainin.c
win/chain/wc_chainout.c
win/curses/cursmain.c
win/share/safeproc.c
win/shim/winshim.c
win/tty/wintty.c
win/win32/mswproc.c

index 85432fad593bc05545e7cbb4bda6597bd53dbef6..c3dffd3acae142c5f6120335419af63326200fe1 100644 (file)
@@ -7,11 +7,20 @@
 
 #include "botl.h"
 
+enum wp_ids { wp_tty = 1, wp_X11, wp_Qt, wp_mswin, wp_curses, 
+              wp_chainin, wp_chainout, wp_safestartup, wp_shim,
+             wp_hup, wp_guistubs, wp_ttystubs,
+#ifdef OUTDATED_STUFF
+             , wp_mac, wp_Gem, wp_Gnome, wp_amii, wp_amiv
+#endif
+};
+
 /* NB: this MUST match chain_procs below */
 struct window_procs {
     const char *name;     /* Names should start with [a-z].  Names must
                            * not start with '-'.  Names starting with
                            * '+' are reserved for processors. */
+    enum wp_ids wp_id;
     unsigned long wincap; /* window port capability options supported */
     unsigned long wincap2; /* additional window port capability options */
     boolean has_color[CLR_MAX];
@@ -167,6 +176,12 @@ extern
 #define status_update (*windowprocs.win_status_update)
 #define update_invent_slot (*windowprocs.win_update_invent_slot)
 
+/*
+ * 
+ */
+#define WPID(name) #name, wp_##name
+#define WPIDMINUS(name) "-" #name, wp_##name 
+
 /*
  * WINCAP
  * Window port preference capability bits.
@@ -278,8 +293,13 @@ struct wc_Opt {
 
 /* Macro for the currently active Window Port whose function
    pointers have been loaded */
+#if 0
+/* 3.7 The string comparison version isn't used anymore */
 #define WINDOWPORT(wn) \
     (windowprocs.name && !strncmpi((#wn), windowprocs.name, strlen((#wn))))
+#endif
+
+#define WINDOWPORT(wn) (windowprocs.wp_id == wp_##wn)
 
 /* role selection by player_selection(); this ought to be in the core... */
 #define RS_NAME    0
@@ -320,6 +340,7 @@ struct chain_procs {
     const char *name;     /* Names should start with [a-z].  Names must
                            * not start with '-'.  Names starting with
                            * '+' are reserved for processors. */
+    enum wp_ids wp_id;
     unsigned long wincap; /* window port capability options supported */
     unsigned long wincap2; /* additional window port capability options */
     boolean has_color[CLR_MAX];
index 55a47a5b16cd70d829572f0590a6ee5cca260fa1..919e565a8c760a2fac13cf6ad6a84413496df4be 100644 (file)
@@ -6304,7 +6304,7 @@ initoptions_finish(void)
      * Option processing can take place before a user-decided WindowPort
      * is even initialized, so check for that too.
      */
-    if (!WINDOWPORT(safe-startup)) {
+    if (!WINDOWPORT(safestartup)) {
         if (iflags.hilite_delta && !wc2_supported("statushilites")) {
             raw_printf("Status highlighting not supported for %s interface.",
                        windowprocs.name);
index 17762eaa9b48c709fa5aa4b4d9444179fe0f1b17..53462868cdd082e35417682cede098cb1b25fd60 100644 (file)
@@ -312,7 +312,7 @@ choose_windows(const char *s)
         free((genericptr_t) tmps) /*, tmps = 0*/ ;
 
     if (windowprocs.win_raw_print == def_raw_print
-            || WINDOWPORT(safe-startup))
+            || WINDOWPORT(safestartup))
         nh_terminate(EXIT_SUCCESS);
 }
 
@@ -539,7 +539,7 @@ static void hup_void_fdecl_constchar_p(const char *);
 static perminvent_info *hup_update_invent_slot(winid, int, perminvent_info *);
 
 static struct window_procs hup_procs = {
-    "hup", 0L, 0L,
+    WPID(hup), 0L, 0L,
     {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     hup_init_nhwindows,
     hup_void_ndecl,                                    /* player_selection */
index 2cdc4ff22cf872411abe52f8ab6ba88137cd2f73..1c510450082c3555991e07888786b20db344e5f5 100644 (file)
 #error You cannot compile this with both GUISTUB and TTYSTUB defined.
 #endif
 
-struct window_procs mswin_procs = { "-guistubs" };
+struct window_procs mswin_procs = { WPIDMINUS(guistubs) };
 
 #ifdef QT_GRAPHICS
-struct window_procs Qt_procs = { "-guistubs" };
+struct window_procs Qt_procs = { WPIDMINUS(guistubs) };
 int qt_tilewidth, qt_tileheight, qt_fontsize, qt_compact_mode;
 #endif
 void
@@ -59,7 +59,7 @@ main(int argc, char *argv[])
 
 HANDLE hConIn;
 HANDLE hConOut;
-struct window_procs tty_procs = { "-ttystubs" };
+struct window_procs tty_procs = { WPIDMINUS(ttystubs) };
 #ifdef CURSES_GRAPHICS
 char erase_char, kill_char;
 #endif
index 537cff883b33c839daaff608a65f6c374d9277ff..4fc5261c7e9117d5ebd63bfed81b7d7447ab1145 100644 (file)
@@ -893,7 +893,7 @@ safe_routines(void)
      * Get a set of valid safe windowport function
      * pointers during early startup initialization.
      */
-    if (!WINDOWPORT(safe-startup))
+    if (!WINDOWPORT(safestartup))
         windowprocs = *get_safe_procs(1);
     if (!GUILaunched)
         windowprocs.win_nhgetch = windows_console_custom_nhgetch;
@@ -1316,7 +1316,7 @@ tty_self_recover_prompt(void)
     c = 'n';
     ct = 0;
     saved_procs = windowprocs;
-    if (!WINDOWPORT(safe-startup))
+    if (!WINDOWPORT(safestartup))
         windowprocs = *get_safe_procs(2); /* arg 2 uses no-newline variant */
     windowprocs.win_nhgetch = windows_console_custom_nhgetch;
     raw_print("\n");
index 33aae1128c00028df31e1e87d2df0491170bc12d..af51e9c5b10fc61765c2a4440a1e8fed7f373971 100644 (file)
@@ -233,7 +233,7 @@ win32_abort(void)
             exit_nhwindows((char *) 0);
         iflags.window_inited = FALSE;
     }
-    if (!WINDOWPORT(mswin) && !WINDOWPORT(safe-startup))
+    if (!WINDOWPORT(mswin) && !WINDOWPORT(safestartup))
         safe_routines();
     if (wizard) {
         raw_print("Execute debug breakpoint wizard?");
index cdc631b527934d3ec49fdadaa2fd690be4a6b250..577ec978fdc7568a39f9b1298a4afc11633e7301 100644 (file)
@@ -1033,7 +1033,7 @@ static void Qt_positionbar(char *) {}
 } // namespace nethack_qt_
 
 struct window_procs Qt_procs = {
-    "Qt",
+    WPID(Qt),
     (WC_COLOR | WC_HILITE_PET
      | WC_ASCII_MAP | WC_TILED_MAP
      | WC_FONT_MAP | WC_TILE_FILE | WC_TILE_WIDTH | WC_TILE_HEIGHT
index 6084c6b2657236904c74195f229d3088b8e50158..271e1040159a11c021092d470a87543b16702fa7 100644 (file)
@@ -100,7 +100,7 @@ static XtSignalId X11_sig_id;
 
 /* Interface definition, for windows.c */
 struct window_procs X11_procs = {
-    "X11",
+    WPID(X11),
     ( WC_COLOR | WC_INVERSE | WC_HILITE_PET | WC_ASCII_MAP | WC_TILED_MAP
      | WC_PLAYER_SELECTION | WC_PERM_INVENT | WC_MOUSE_SUPPORT ),
     /* status requires VIA_WINDOWPORT(); WC2_FLUSH_STATUS ensures that */
index e318a9fd054c50789efd7bd4567c91329d5f736a..4cef2347543ec3fe1de51cf47f26ad87ad1c301e 100644 (file)
@@ -594,7 +594,7 @@ chainin_update_invent_slot(
 }
 
 struct window_procs chainin_procs = {
-    "-chainin", 0, /* wincap */
+    WPIDMINUS(chainin), 0, /* wincap */
     0,             /* wincap2 */
     {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* color availability */
     /*
index 734008b5c79d7b42e790f79f2a3bea9df7be14e8..4fd855a03cc319fc2284b41ac5024c27afbfd6fa 100644 (file)
@@ -717,7 +717,7 @@ chainout_update_invent_slot(
 }
 
 struct chain_procs chainout_procs = {
-    "-chainout", 0, /* wincap */
+    WPIDMINUS(chainout), 0, /* wincap */
     0,              /* wincap2 */
     {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* color availability */
     /*
index 4c9dd2ddc52b5176caa954395e30fa36d0134ce5..36612937c48453bd82ba5ac39dc84bd8407f4bac 100644 (file)
@@ -36,7 +36,7 @@ static char *dummy_get_color_string(void);
 
 /* Interface definition, for windows.c */
 struct window_procs curses_procs = {
-    "curses",
+    WPID(curses),
     (WC_ALIGN_MESSAGE | WC_ALIGN_STATUS | WC_COLOR | WC_INVERSE
      | WC_HILITE_PET
 #ifdef NCURSES_MOUSE_VERSION /* (this macro name works for PDCURSES too) */
index 7fe6f57910ee616c6bb57a9acf7414b3981662c9..292aa387450b45bc1cb2a51031f69e26104d8bb6 100644 (file)
@@ -66,7 +66,7 @@
  */
 
 struct window_procs safe_procs = {
-    "safe-startup", 0L, 0L,
+    WPID(safestartup), 0L, 0L,
     {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* color availability */
     safe_init_nhwindows, safe_player_selection, safe_askname,
     safe_get_nh_event,
index 9869de2a2dd9e2efb4ce8f36d00549d85ee83f57..3785a01e99d4eeeb9a55147fdf187bd7bcd06a5c 100644 (file)
@@ -202,7 +202,7 @@ DECLB(perminvent_info *, shim_update_invent_slot,
 
 /* Interface definition used in windows.c */
 struct window_procs shim_procs = {
-    "shim",
+    WPID(shim),
     (0
      | WC_ASCII_MAP
      | WC_COLOR | WC_HILITE_PET | WC_INVERSE | WC_EIGHT_BIT_IN),
index 68c694b1f3b9cddfa943d95a15529b59787c56e3..c82845ea871062514d2e1a6447d97018f337bb4a 100644 (file)
@@ -98,7 +98,7 @@ extern void msmsg(const char *, ...);
 
 /* Interface definition, for windows.c */
 struct window_procs tty_procs = {
-    "tty",
+    WPID(tty),
     (0
 #ifdef TTY_PERM_INVENT
      | WC_PERM_INVENT
index 2d0d3a938209cb941d1e5d35d7175fc74d8c909f..61e6c4ed758a5519a41da8c8d2e668b9215eff3c 100644 (file)
@@ -79,7 +79,7 @@ strbuf_t raw_print_strbuf = { 0 };
 
 /* Interface definition, for windows.c */
 struct window_procs mswin_procs = {
-    "MSWIN",
+    WPID(mswin),
     WC_COLOR | WC_HILITE_PET | WC_ALIGN_MESSAGE | WC_ALIGN_STATUS | WC_INVERSE
         | WC_SCROLL_AMOUNT | WC_SCROLL_MARGIN | WC_MAP_MODE | WC_FONT_MESSAGE
         | WC_FONT_STATUS | WC_FONT_MENU | WC_FONT_TEXT | WC_FONT_MAP