]> granicus.if.org Git - nethack/commitdiff
followup to compression changes
authornethack.allison <nethack.allison>
Sun, 23 Jan 2005 14:34:29 +0000 (14:34 +0000)
committernethack.allison <nethack.allison>
Sun, 23 Jan 2005 14:34:29 +0000 (14:34 +0000)
doc/Guidebook.mn
doc/Guidebook.tex
include/config.h
src/files.c
util/makedefs.c

index 403ddf9d1dba6250756cc485ec9f402510ce1ff4..dc7cbfbaf1971b9cd20860517ae186254ecba765 100644 (file)
@@ -2087,8 +2087,8 @@ value is examined; `r' is an exception with ``Rogue'', ``Ranger'',
 and ``random'' values. If you prefix a `!' or ``no'' to the value, you can 
 exclude that role from being picked randomly.
 .lp rlecomp
-When writing out a save file, perform run length compression of level 
-structures. Not all ports support run length compression. It has no
+When writing out a save file, perform run length compression of the map. 
+Not all ports support run length compression. It has no
 effect on reading an existing save file.
 .lp runmode
 Controls the amount of screen updating for the map window when engaged
index 36eb28a593fb70345c5b9184bac66a673672d6b4..bdb61084ecfea6908de19c7987d5d55833011ddc 100644 (file)
@@ -27,7 +27,7 @@
 \begin{document}
 %
 % input file: guidebook.mn
-% $Revision: 1.90 $ $Date: 2005/01/16 03:57:39 $
+% $Revision: 1.91 $ $Date: 2005/01/22 15:27:20 $
 %
 %.ds h0 "
 %.ds h1 %.ds h2 \%
@@ -2555,8 +2555,8 @@ and ``{\tt random}'' values. If you prefix `{\tt !}' or ``{\tt no}'' to the
 value, you can exclude that role from being picked randomly.
 %.lp
 \item[\ib{rlecomp}]
-When writing out a save file, perform run length compression of level 
-structures. Not all ports support run length compression. It has no
+When writing out a save file, perform run length compression of the map.
+Not all ports support run length compression. It has no
 effect on reading an existing save file.
 %.lp
 \item[\ib{runmode}]
index 7c0ebfb10c2b6db8367845f7dd01a4dc9f79c2c9..6f65d278b41b5d8d985aec3927948afec22f21ef 100644 (file)
  *     la unixmain.c if so inclined.
  *
  *     Defining ZLIB_COMP builds in support for zlib compression. If you
- *     define ZLIB_COMP, you must link with a zlib library.
+ *     define ZLIB_COMP, you must link with a zlib library. Not all ports
+ *     support ZLIB_COMP.
  *
  *     COMPRESS and ZLIB_COMP are mutually exclusive.
  *
index 7254b6489db608e04fd911b01241f930a0627107..09d0d5f3c87a882ba418b141abe30f397c28181f 100644 (file)
@@ -97,6 +97,15 @@ char lock[PL_NSIZ+25];               /* long enough for username+-+name+.99 */
 # endif
 #endif
 
+#if !defined(SAVE_EXTENSION)
+# ifdef MICRO
+#define SAVE_EXTENSION ".sav"
+# endif
+# ifdef WIN32
+#define SAVE_EXTENSION ".NetHack-saved-game"
+# endif
+#endif
+
 char SAVEF[SAVESIZE];  /* holds relative path of save file from playground */
 #ifdef MICRO
 char SAVEP[SAVESIZE];  /* holds path of directory for save file */
@@ -169,6 +178,9 @@ STATIC_DCL void FDECL(redirect, (const char *,const char *,FILE *,BOOLEAN_P));
 #if defined(COMPRESS) || defined(ZLIB_COMP)
 STATIC_DCL void FDECL(docompress_file, (const char *,BOOLEAN_P));
 #endif
+#if defined(ZLIB_COMP)
+STATIC_DCL boolean FDECL(make_compressed_name, (const char *, char *));
+#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 *,BOOLEAN_P,int,const char *));
@@ -839,7 +851,7 @@ set_savefile_name()
 #  endif
                regularize(SAVEF+i);
        }
-       Strcat(SAVEF, ".sav");
+       Strcat(SAVEF, SAVE_EXTENSION);
 # else
 #  if defined(WIN32)
        /* Obtain the name of the logged on user and incorporate
@@ -847,7 +859,7 @@ set_savefile_name()
        Sprintf(fnamebuf, "%s-%s", get_username(0), plname);
        (void)fname_encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-.",
                                '%', fnamebuf, encodedfnamebuf, BUFSZ);
-       Sprintf(SAVEF, "%s.NetHack-saved-game", encodedfnamebuf);
+       Sprintf(SAVEF, "%s%s", encodedfnamebuf,SAVE_EXTENSION);
 #  else
        Sprintf(SAVEF, "save/%d%s", (int)getuid(), plname);
        regularize(SAVEF+5);    /* avoid . or / in name */
@@ -1042,7 +1054,7 @@ get_saved_games()
        Sprintf(fnamebuf, "%s-", get_username(0));
        (void)fname_encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-.",
                                '%', fnamebuf, encodedfnamebuf, BUFSZ);
-       Sprintf(SAVEF, "%s*.NetHack-saved-game", encodedfnamebuf);
+       Sprintf(SAVEF, "%s*%s", encodedfnamebuf, SAVE_EXTENSION);
 #if defined(ZLIB_COMP)
        Strcat(SAVEF, COMPRESS_EXTENSION);
 #endif
@@ -1319,45 +1331,36 @@ const char *filename;
 }
 
 #ifdef ZLIB_COMP /* RLC 09 Mar 1999: Support internal ZLIB */
-static int
+STATIC_OVL boolean
 make_compressed_name(filename,cfn)
 const char *filename;
 char *cfn;
 {
 #ifndef SHORT_FILENAMES
-       /* Assume free-form filename */
-
+       /* Assume free-form filename with no 8.3 restrictions */
        strcpy(cfn, filename);
        strcat(cfn, COMPRESS_EXTENSION);
        return TRUE;
 #else
-       /* Accomodates 8.3 restriction, but otherwise assumes free-form filenames.
-          This may need to be revised for some systems.  If a name cannot be
-          generated, this function may return FALSE and the file will then remain
-          uncompressed. */
-       unsigned len;
-
-       /* Assume DOS style filename */
-
+# ifdef SAVE_EXTENSION
+       char *bp = (char *)0;
        strcpy(cfn, filename);
-       len = strlen(cfn);
-       if (len>4 && stricmp(cfn+len-4,".sav")==0) {
-               /* Save file; change .SAV extension to .SAZ */
-               /* EMX/GCC (for OS/2) seems to miscompile cfn[len-1] */
-
-               cfn[strlen(cfn)-1]='z';
-               return TRUE;
-       } else if (strnicmp(cfn,"bones",5)==0) {
-               /* Bones file; change BONES prefix to BONEZ */
-
-               cfn[4]='z';
+       if ((bp = strstri(cfn, SAVE_EXTENSION))) {
+               strsubst(bp, SAVE_EXTENSION, ".saz");
                return TRUE;
        } else {
-               /* Don't know how to convert this filename */
-
-               return FALSE;
+               /* find last occurrence of bon */
+               bp = eos(cfn);
+               while (bp-- > cfn) {
+                       if (strstri(bp,"bon")) {
+                               strsubst(bp, "bon", "boz");
+                               return TRUE;
+                       }
+               }
        }
-#endif /* !MSDOS */
+# endif /* SAVE_EXTENSION */
+       return FALSE;
+#endif /* SHORT_FILENAMES */
 }
 
 STATIC_OVL void
@@ -1371,11 +1374,8 @@ boolean uncomp;
        char buf[1024];
        unsigned len, len2;
 
-       if (!make_compressed_name(filename, cfn)) {
-               /* Can't generate a name for the compressed file
-                  due to 8.3 restriction */
+       if (!make_compressed_name(filename, cfn))
                return;
-       }
 
        if (!uncomp) {
                /* Open the input and output files */
@@ -1383,8 +1383,8 @@ boolean uncomp;
                   fopen takes "r" and "w" */
 
                uncompressedfile = fopen(filename, RDBMODE);
-               if (uncompressedfile == NULL) {
-                       perror(filename);
+               if (!uncompressedfile) {
+                       pline("Error in zlib docompress_file %s", filename);
                        return;
                }
                compressedfile = gzopen(cfn, "wb");
@@ -1392,7 +1392,8 @@ boolean uncomp;
                        if (errno == 0) {
                                pline("zlib failed to allocate memory");
                        } else {
-                               perror(filename);
+                               panic("Error in docompress_file %d",
+                                       errno);
                        }
                        fclose(uncompressedfile);
                        return;
@@ -1441,13 +1442,15 @@ boolean uncomp;
                        if (errno == 0) {
                                pline("zlib failed to allocate memory");
                        } else if (errno != ENOENT) {
-                               perror(filename);
+                               panic("Error in zlib docompress_file %s, %d",
+                                       filename, errno);
                        }
                        return;
                }
                uncompressedfile = fopen(filename, WRBMODE);
-               if (uncompressedfile == NULL) {
-                       perror(filename);
+               if (!uncompressedfile) {
+                       pline("Error in zlib docompress file uncompress %s",
+                               filename);
                        gzclose(compressedfile);
                        return;
                }
index 4b04f0908ea73f1271d62d6f01ced8cdf6b21228..efc2413259e05ef564f59103f812177d89352243 100644 (file)
@@ -803,7 +803,7 @@ static const char *build_opts[] = {
                "zero-compressed save files",
 #endif
 #ifdef RLECOMP
-               "run-length compression of levl array in save files",
+               "run-length compression of map in save files",
 #endif
                save_bones_compat_buf,
                "basic NetHack features"