more followup (trunk only)

make the handling recognition use an int instead of string.
This commit is contained in:
nethack.allison
2006-09-21 05:53:08 +00:00
parent 39d5f48ce0
commit 72011cb75f
8 changed files with 68 additions and 53 deletions

View 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

View 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"},

View 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 = new_handling;
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 = i;
return;
}
}
i++;
}
}
#endif /*ASCIIGRAPH*/

View 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

View 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

View 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

View 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) {

View 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