]> granicus.if.org Git - nethack/commitdiff
handle 0 in DUNGEONS et al
authorcohrs <cohrs>
Tue, 13 Aug 2002 04:18:46 +0000 (04:18 +0000)
committercohrs <cohrs>
Tue, 13 Aug 2002 04:18:46 +0000 (04:18 +0000)
As suggested by <Someone>, treat 0 entries in the various graphics symbol
specifications as leaving the value unchanged.

doc/Guidebook.mn
doc/Guidebook.tex
doc/fixes34.1
src/files.c
src/options.c

index 815d9cef7b004cb315c3b1ba337a389e764c644d..8587889c0295768899f369c14eb44fc12ee7df71 100644 (file)
@@ -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.
index 450c626a41385bd21b3384f2ec3f981c84bc4152..3847b004c23410113c6f635e17ff1cbcc529ea3f 100644 (file)
@@ -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.
index 9ca1bc443f2817e88c40789f8562cccb35b8cc66..82c93bc926c6d660d0f35434c9800b724655e7b6 100644 (file)
@@ -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
index 213c31060332f8b99ca92d345233ecef3dbb4ada..b92f1c1cb5a541db0ff13a663ff5dfae22dd64b9 100644 (file)
@@ -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
index 5c1d630e0079994c888414a05acb761addf68ec7..7ff3d79cae92175823efabdca222eb088ea3acd6 100644 (file)
@@ -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