From: nethack.allison Date: Sun, 23 Jan 2005 14:34:29 +0000 (+0000) Subject: followup to compression changes X-Git-Tag: MOVE2GIT~1341 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fd205fc1dbf9b9ebececa60ac6ed9f53a21ab4ce;p=nethack followup to compression changes --- diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index 403ddf9d1..dc7cbfbaf 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -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 diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index 36eb28a59..bdb61084e 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -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}] diff --git a/include/config.h b/include/config.h index 7c0ebfb10..6f65d278b 100644 --- a/include/config.h +++ b/include/config.h @@ -168,7 +168,8 @@ * 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. * diff --git a/src/files.c b/src/files.c index 7254b6489..09d0d5f3c 100644 --- a/src/files.c +++ b/src/files.c @@ -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; } diff --git a/util/makedefs.c b/util/makedefs.c index 4b04f0908..efc241325 100644 --- a/util/makedefs.c +++ b/util/makedefs.c @@ -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"