From dee94b041085f3193bdf8a109bbb3f42b6a3fdc7 Mon Sep 17 00:00:00 2001 From: cohrs Date: Tue, 13 Aug 2002 04:18:46 +0000 Subject: [PATCH] handle 0 in DUNGEONS et al As suggested by , treat 0 entries in the various graphics symbol specifications as leaving the value unchanged. --- doc/Guidebook.mn | 2 ++ doc/Guidebook.tex | 4 +++- doc/fixes34.1 | 2 ++ src/files.c | 38 +++++++++++++++++++++++++------------- src/options.c | 2 +- 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index 815d9cef7..8587889c0 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -1602,6 +1602,8 @@ or option in a different syntax, a sequence of decimal numbers giving the character position in the current font to be used in displaying each entry. +A zero in any entry in such a sequence leaves the display of that +entry unchanged; this feature is not available using the option syntax. Such a sequence can be continued to multiple lines by putting a `\e' at the end of each line to be continued. Any line starting with `#' is treated as a comment. diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index 450c626a4..3847b004c 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -27,7 +27,7 @@ \begin{document} % % input file: guidebook.mn -% $Revision: 1.49 $ $Date: 2002/08/07 03:26:50 $ +% $Revision: 1.50 $ $Date: 2002/08/12 01:39:55 $ % %.ds h0 " %.ds h1 %.ds h2 \% @@ -2008,6 +2008,8 @@ is taken as defining the corresponding {\it dungeon}, {\it boulder\/} option in a different syntax, a sequence of decimal numbers giving the character position in the current font to be used in displaying each entry. +A zero in any entry in such a sequence leaves the display of that +entry unchanged; this feature is not available using the option syntax. Such a sequence can be continued to multiple lines by putting a `{\tt \verb+\+}' at the end of each line to be continued. Any line starting with `{\tt \#}' is treated as a comment. diff --git a/doc/fixes34.1 b/doc/fixes34.1 index 9ca1bc443..82c93bc92 100644 --- a/doc/fixes34.1 +++ b/doc/fixes34.1 @@ -203,6 +203,8 @@ when polymorphed into a hider, cease hiding during level changes let mind flayer grow up into master mind flayer; also giant/sewer rat and cave/large spider engulfing green slime as a purple worm was causing stoning not sliming +zero entries in DUNGEON, MONSTERS, et al, of config file are now treated + as preserving the default rather than being ignored Platform- and/or Interface-Specific Fixes diff --git a/src/files.c b/src/files.c index 213c31060..b92f1c1cb 100644 --- a/src/files.c +++ b/src/files.c @@ -127,7 +127,7 @@ STATIC_DCL void FDECL(docompress_file, (const char *,BOOLEAN_P)); #endif STATIC_DCL char *FDECL(make_lockname, (const char *,char *)); STATIC_DCL FILE *FDECL(fopen_config_file, (const char *)); -STATIC_DCL int FDECL(get_uchars, (FILE *,char *,char *,uchar *,int,const char *)); +STATIC_DCL int FDECL(get_uchars, (FILE *,char *,char *,uchar *,BOOLEAN_P,int,const char *)); int FDECL(parse_config_line, (FILE *,char *,char *,char *)); #ifdef NOCWD_ASSUMPTIONS STATIC_DCL void FDECL(adjust_prefix, (char *, int)); @@ -1430,27 +1430,33 @@ const char *filename; /* * Retrieve a list of integers from a file into a uchar array. * - * NOTE: This routine is unable to read a value of 0. + * NOTE: zeros are inserted unless modlist is TRUE, in which case the list + * location is unchanged. Callers must handle zeros if modlist is FALSE. */ STATIC_OVL int -get_uchars(fp, buf, bufp, list, size, name) +get_uchars(fp, buf, bufp, list, modlist, size, name) FILE *fp; /* input file pointer */ char *buf; /* read buffer, must be of size BUFSZ */ char *bufp; /* current pointer */ uchar *list; /* return list */ + boolean modlist; /* TRUE: list is being modified in place */ int size; /* return list size */ const char *name; /* name of option for error message */ { unsigned int num = 0; int count = 0; + boolean havenum = FALSE; while (1) { switch(*bufp) { case ' ': case '\0': case '\t': case '\n': - if (num) { - list[count++] = num; + if (havenum) { + /* if modifying in place, don't insert zeros */ + if (num || !modlist) list[count] = num; + count++; num = 0; + havenum = FALSE; } if (count == size || !*bufp) return count; bufp++; @@ -1459,6 +1465,7 @@ get_uchars(fp, buf, bufp, list, size, name) case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + havenum = TRUE; num = num*10 + (*bufp-'0'); bufp++; break; @@ -1620,30 +1627,35 @@ char *tmp_levels; (void) strncpy(catname, bufp, PL_PSIZ-1); } else if (match_varname(buf, "BOULDER", 3)) { - (void) get_uchars(fp, buf, bufp, &iflags.bouldersym, 1, "BOULDER"); + (void) get_uchars(fp, buf, bufp, &iflags.bouldersym, TRUE, + 1, "BOULDER"); } else if (match_varname(buf, "GRAPHICS", 4)) { - len = get_uchars(fp, buf, bufp, translate, MAXPCHARS, "GRAPHICS"); + len = get_uchars(fp, buf, bufp, translate, FALSE, + MAXPCHARS, "GRAPHICS"); assign_graphics(translate, len, MAXPCHARS, 0); } else if (match_varname(buf, "DUNGEON", 4)) { - len = get_uchars(fp, buf, bufp, translate, MAXDCHARS, "DUNGEON"); + len = get_uchars(fp, buf, bufp, translate, FALSE, + MAXDCHARS, "DUNGEON"); assign_graphics(translate, len, MAXDCHARS, 0); } else if (match_varname(buf, "TRAPS", 4)) { - len = get_uchars(fp, buf, bufp, translate, MAXTCHARS, "TRAPS"); + len = get_uchars(fp, buf, bufp, translate, FALSE, + MAXTCHARS, "TRAPS"); assign_graphics(translate, len, MAXTCHARS, MAXDCHARS); } else if (match_varname(buf, "EFFECTS", 4)) { - len = get_uchars(fp, buf, bufp, translate, MAXECHARS, "EFFECTS"); + len = get_uchars(fp, buf, bufp, translate, FALSE, + MAXECHARS, "EFFECTS"); assign_graphics(translate, len, MAXECHARS, MAXDCHARS+MAXTCHARS); } else if (match_varname(buf, "OBJECTS", 3)) { /* oc_syms[0] is the RANDOM object, unused */ - (void) get_uchars(fp, buf, bufp, &(oc_syms[1]), + (void) get_uchars(fp, buf, bufp, &(oc_syms[1]), TRUE, MAXOCLASSES-1, "OBJECTS"); } else if (match_varname(buf, "MONSTERS", 3)) { /* monsyms[0] is unused */ - (void) get_uchars(fp, buf, bufp, &(monsyms[1]), + (void) get_uchars(fp, buf, bufp, &(monsyms[1]), TRUE, MAXMCLASSES-1, "MONSTERS"); } else if (match_varname(buf, "WARNINGS", 5)) { - (void) get_uchars(fp, buf, bufp, translate, + (void) get_uchars(fp, buf, bufp, translate, FALSE, WARNCOUNT, "WARNINGS"); assign_warnings(translate); #ifdef WIZARD diff --git a/src/options.c b/src/options.c index 5c1d630e0..7ff3d79ca 100644 --- a/src/options.c +++ b/src/options.c @@ -831,7 +831,7 @@ register uchar *graph_chars; { int i; for (i = 0; i < WARNCOUNT; i++) - warnsyms[i] = graph_chars[i]; + if (graph_chars[i]) warnsyms[i] = graph_chars[i]; } STATIC_OVL int -- 2.40.0