]> granicus.if.org Git - nethack/commitdiff
more followup (trunk only)
authornethack.allison <nethack.allison>
Thu, 21 Sep 2006 05:53:08 +0000 (05:53 +0000)
committernethack.allison <nethack.allison>
Thu, 21 Sep 2006 05:53:08 +0000 (05:53 +0000)
make the handling recognition use an int instead of string.

include/rm.h
src/drawing.c
src/files.c
src/mapglyph.c
sys/wince/mhfont.c
win/tty/termcap.c
win/tty/wintty.c
win/win32/mhfont.c

index 0ad57f9274602217cb10bc5d92391bb09963a1e6..c62fc02baffa0554c1000a021b6fab233324d0e3 100644 (file)
@@ -241,21 +241,28 @@ struct textlist {
        struct textlist *next;  /* next in list   */
 };
 
+/*
+ * special symbol set handling types (callbacks, etc.)
+ * Must match the order of the known_handlers strings
+ * in drawing.c
+ */
+#define H_UNK  0
+#define H_IBM  1
+#define H_DEC  2
+
 #ifdef REINCARNATION
-#define ROGUEHANDLING(H) ((Is_rogue_level(&u.uz) && roguehandling && \
-                          !strcmpi(roguehandling,H)))
-#define SYMHANDLING(H) (ROGUEHANDLING(H) || \
-                        (!Is_rogue_level(&u.uz) && symhandling && \
-                         !strcmpi(symhandling,H)))
+#define ROGUEHANDLING(ht) (Is_rogue_level(&u.uz) && roguehandling == (ht))
+#define SYMHANDLING(ht)   (ROGUEHANDLING(ht) || \
+                            (!Is_rogue_level(&u.uz) && symhandling == (ht)))
 #else
-#define SYMHANDLING(H) (symhandling && !strcmpi(symhandling,H))
+#define SYMHANDLING(ht)   (symhandling == (ht))
 #endif
 
 extern const struct symdef defsyms[MAXPCHARS]; /* defaults */
 extern uchar showsyms[MAXPCHARS];
 extern const struct symdef def_warnsyms[WARNCOUNT];
-extern char *symset, *symhandling;             /* from drawing.c */
-extern char *roguesymset, *roguehandling;      /* from drawing.c */
+extern char *symset, *roguesymset;             /* from drawing.c */
+extern int symhandling, roguehandling;         /* from drawing.c */
 
 /*
  * Graphics sets for display symbols
index a9ece38178f31ce7a6f8688cc62bd85eba9e9b8b..772abc62ed9ceb84420a620b645abf0f499b7956 100644 (file)
@@ -17,8 +17,8 @@
 #define C(n)
 #endif
 
-char *symset = 0, *symhandling = 0;            /* from drawing.c */
-char *roguesymset = 0, *roguehandling = 0;     /* from drawing.c */
+char *symset = 0, *roguesymset = 0;
+int symhandling = 0, roguehandling = 0;
 
 uchar oc_syms[MAXOCLASSES] = DUMMY; /* the current object  display symbols */
 uchar showsyms[MAXPCHARS]  = DUMMY; /* the current feature display symbols */
@@ -380,14 +380,14 @@ int nondefault;
                 * the Is_Roguelevel checks in those macros.
                 */
 #ifdef PC9800
-               if (symhandling && !strcmpi(symhandling,"IBM")
+               if (symhandling == H_IBM
                    && ibmgraphics_mode_callback)
                        (*ibmgraphics_mode_callback)();
                else if (!symset && ascgraphics_mode_callback)
                        (*ascgraphics_mode_callback)();
 #endif
 #ifdef TERMLIB
-               if (symhandling && !strcmp(symhandling,"DEC")
+               if (symhandling == H_DEC
                    && decgraphics_mode_callback)
                        (*decgraphics_mode_callback)();
 #endif
@@ -538,6 +538,20 @@ int val;
         }
 }
 
+/*
+ * If you are adding code somewhere to be able to recognize
+ * particular types of symset "handling", define a 
+ * H_XXX macro in include/rm.h and add the name
+ * to this array at the matching offset.
+ */
+const char *known_handling[] = {
+       "UNKNOWN",      /* H_UNK */
+       "IBM",          /* H_IBM */
+       "DEC",          /* H_DEC */
+       (const char *)0,
+};
+
 struct symparse loadsyms[] = {
        {SYM_CONTROL, 0, "start"},
        {SYM_CONTROL, 0, "begin"},
index 16ed838259f47c73108e5dc14f34d03533a662c2..29e10c6b78cb4c3d93be554032329fd517d5e21c 100644 (file)
@@ -2422,8 +2422,9 @@ read_wizkit()
 #endif /*WIZARD*/
 
 #ifdef ASCIIGRAPH
-extern struct symparse loadsyms[];     /* drawing.c */
 extern struct textlist *symset_list;   /* options.c */
+extern struct symparse loadsyms[];     /* drawing.c */
+extern const char *known_handling[];   /* drawing.c */
 static int symset_count = 0;           /* for pick-list building only */
 static boolean chosen_symset_start = FALSE, chosen_symset_end = FALSE;
 
@@ -2560,12 +2561,15 @@ boolean rogueflag;
                            if (!strcmpi(bufp, symsetname)) { /* desired one? */
                                chosen_symset_start = TRUE;
 #ifdef REINCARNATION
-                               if (rogueflag)
+                               if (rogueflag) {
                                    init_r_symbols();
-                               else
+                                   roguehandling = H_UNK;
+                               }
 #endif
+                               if (!rogueflag) {
                                    init_l_symbols();
-                               free_symhandling(rogueflag);
+                                   symhandling = H_UNK;
+                               }
                            }
                            break;
                    case 1:
@@ -2594,42 +2598,32 @@ boolean rogueflag;
        return 1;
 }
 
-STATIC_OVL void
-free_symhandling(rogueflag)
-boolean rogueflag;
-{
-       if (rogueflag) {
-#ifdef REINCARNATION
-               if (roguehandling) {
-                       free((genericptr_t)roguehandling);
-                       roguehandling = (char *)0;
-               }
-#endif
-       } else {
-               if (symhandling) {
-                       free((genericptr_t)symhandling);
-                       symhandling = (char *)0;
-               }
-       }
-}
-
 STATIC_OVL void
 set_symhandling(handling, rogueflag)
 char *handling;
 boolean rogueflag;
 {
-       char *new_handling;
+       int i = 0;
 
-       free_symhandling(rogueflag);
-       if (!handling) return;
-       new_handling = (char *)alloc(strlen(handling)+1);
-       Strcpy(new_handling, handling);
 #ifdef REINCARNATION
-       if (rogueflag)
-               roguehandling = new_handling;
+       if (rogueflag) roguehandling = H_UNK;
+#endif
+       if (!rogueflag) symhandling = H_UNK;
+       while (known_handling[i]) {
+           if (!strcmpi(known_handling[i], handling)) {
+#ifdef REINCARNATION
+               if (rogueflag) {
+                       roguehandling = i;
+                       return;
+               }
 #endif
-       if (!rogueflag)
-               symhandling = new_handling;
+               if (!rogueflag) {
+                       symhandling = i;
+                       return;
+               }
+           }
+           i++;
+       }
 }
 #endif /*ASCIIGRAPH*/
 
index cb24ca5db8bce169dcd989b238d160ee924791c2..186e22f95acbcfa16677ed9c15c925e3483eda72 100644 (file)
@@ -50,9 +50,9 @@ int explcolors[] = {
 
 #ifdef ROGUE_COLOR
 # if defined(USE_TILES) && defined(MSDOS)
-#define HAS_ROGUE_IBM_GRAPHICS (ROGUEHANDLING("IBM") && !iflags.grmode)
+#define HAS_ROGUE_IBM_GRAPHICS (ROGUEHANDLING(H_IBM) && !iflags.grmode)
 # else
-#define HAS_ROGUE_IBM_GRAPHICS (ROGUEHANDLING("IBM"))
+#define HAS_ROGUE_IBM_GRAPHICS (ROGUEHANDLING(H_IBM))
 # endif
 #endif
 
index 1f40aea1d2f128dfa2c6f542c09b8c8bddf396e1..4599cc6217c2665ca7af8a2890506cdbc9976bd1 100644 (file)
@@ -155,7 +155,7 @@ HGDIOBJ mswin_get_font(int win_type, int attr, HDC hdc, BOOL replace)
 UINT mswin_charset()
 {
        CHARSETINFO cis;
-       if( SYMHANDLING("IBM") )
+       if( SYMHANDLING(H_IBM) )
                if( TranslateCharsetInfo((DWORD*)GetOEMCP(), &cis, TCI_SRCCODEPAGE) ) 
                        return cis.ciCharset;
                else
index f6312f2d6351a413d9360f9a25a9c27162142f61..fd98cd5723f0468162530492662e99c2f7c44a58 100644 (file)
@@ -386,7 +386,7 @@ tty_decgraphics_termcap_fixup()
         * Do not select NA ASCII as the primary font since people may
         * reasonably be using the UK character set.
         */
-       if (SYMHANDLING("DEC")) xputs("\033)0");
+       if (SYMHANDLING(H_DEC)) xputs("\033)0");
 #ifdef PC9800
        init_hilite();
 #endif
@@ -449,19 +449,19 @@ tty_start_screen()
        xputs(TI);
        xputs(VS);
 #ifdef PC9800
-    if (!SYMHANDLING("IBM"))
+    if (!SYMHANDLING(H_IBM))
            tty_ascgraphics_hilite_fixup();
     /* set up callback in case option is not set yet but toggled later */
     ascgraphics_mode_callback = tty_ascgraphics_hilite_fixup;
 # ifdef ASCIIGRAPH
-    if (SYMHANDLING("IBM")) init_hilite();
+    if (SYMHANDLING(H_IBM)) init_hilite();
     /* set up callback in case option is not set yet but toggled later */
     ibmgraphics_mode_callback = init_hilite;
 # endif
 #endif /* PC9800 */
 
 #ifdef TERMLIB
-       if (SYMHANDLING("DEC")) tty_decgraphics_termcap_fixup();
+       if (SYMHANDLING(H_DEC)) tty_decgraphics_termcap_fixup();
        /* set up callback in case option is not set yet but toggled later */
        decgraphics_mode_callback = tty_decgraphics_termcap_fixup;
 #endif
index 6907cad478966db211a5992790f3747f901f42ed..693b5b7723918d4178461815f1650f9b677acc66 100644 (file)
@@ -2402,7 +2402,7 @@ int in_ch;
     register char ch = (char)in_ch;
 
 # if defined(ASCIIGRAPH) && !defined(NO_TERMS)
-    if (SYMHANDLING("IBM") || iflags.eight_bit_tty) {
+    if (SYMHANDLING(H_IBM) || iflags.eight_bit_tty) {
        /* IBM-compatible displays don't need other stuff */
        (void) putchar(ch);
     } else if (ch & 0x80) {
index 2e3554f49739811d3711ea1625e6abd40aa78978..71490010c7da3fb7b3f5c050064ac5ccb40176f9 100644 (file)
@@ -183,7 +183,7 @@ HGDIOBJ mswin_get_font(int win_type, int attr, HDC hdc, BOOL replace)
 UINT mswin_charset()
 {
        CHARSETINFO cis;
-       if( SYMHANDLING("IBM") )
+       if( SYMHANDLING(H_IBM) )
                if( TranslateCharsetInfo((DWORD*)GetOEMCP(), &cis, TCI_SRCCODEPAGE) ) 
                        return cis.ciCharset;
                else