# 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 */
#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 *));
# 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
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 */
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
}
#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
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 */
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");
if (errno == 0) {
pline("zlib failed to allocate memory");
} else {
- perror(filename);
+ panic("Error in docompress_file %d",
+ errno);
}
fclose(uncompressedfile);
return;
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;
}