From ebee9215eef19bd33b1412e5db5e21e7f6704b57 Mon Sep 17 00:00:00 2001 From: teuf <> Date: Mon, 30 Apr 2001 20:41:30 +0000 Subject: [PATCH] Added gzip support to the dos version --- zsnes/src/dos/zfile.c | 158 ++++++++++++++++++++++++++------------ zsnes/src/gui/guiload.inc | 9 --- 2 files changed, 108 insertions(+), 59 deletions(-) diff --git a/zsnes/src/dos/zfile.c b/zsnes/src/dos/zfile.c index c66203df..3e298d77 100644 --- a/zsnes/src/dos/zfile.c +++ b/zsnes/src/dos/zfile.c @@ -18,7 +18,7 @@ #include #include - +#include #ifdef ZDOS #include #endif @@ -30,6 +30,9 @@ FILE *FILEHANDLE[16]; DWORD CurrentHandle=0; +//Indicate whether the file must be opened using +//zlib or not (used for gzip support) +BYTE TextFile; // ZFileSystemInit @@ -86,81 +89,136 @@ DWORD DriveNumber; BYTE * ZFileDelFName; // return current position + DWORD ZFileSystemInit() { - CurrentHandle=0; - return(0); +#ifdef __GZIP__ + TextFile = 0; +#else + TextFile = 1; +#endif + CurrentHandle=0; + return(0); } + DWORD ZOpenFile() { - if(ZOpenMode==0) - { - if((FILEHANDLE[CurrentHandle]=fopen(ZOpenFileName,"rb"))!=NULL) - { - CurrentHandle+=1; - return(CurrentHandle-1); - } - return(0xFFFFFFFF); - } - if(ZOpenMode==1) - { - if((FILEHANDLE[CurrentHandle]=fopen(ZOpenFileName,"wb"))!=NULL) - { - CurrentHandle+=1; - return(CurrentHandle-1); - } - return(0xFFFFFFFF); - } - if(ZOpenMode==2) - { - if((FILEHANDLE[CurrentHandle]=fopen(ZOpenFileName,"r+b"))!=NULL) - { - CurrentHandle+=1; - return(CurrentHandle-1); - } - return(0xFFFFFFFF); - } - return(0xFFFFFFFF); + if(ZOpenMode==0) + { + if (TextFile) + FILEHANDLE[CurrentHandle]=fopen(ZOpenFileName,"rb"); + else + FILEHANDLE[CurrentHandle]=(FILE *)gzopen(ZOpenFileName,"rb"); + if(FILEHANDLE[CurrentHandle]!=NULL) + { + CurrentHandle+=1; + return(CurrentHandle-1); + } + return(0xFFFFFFFF); + } + if(ZOpenMode==1) + { + if (TextFile) + FILEHANDLE[CurrentHandle]=fopen(ZOpenFileName,"wb"); + else + FILEHANDLE[CurrentHandle]=(FILE *)gzopen(ZOpenFileName,"wb"); + if(FILEHANDLE[CurrentHandle]!=NULL) + { + CurrentHandle+=1; + return(CurrentHandle-1); + } + return(0xFFFFFFFF); + } + if(ZOpenMode==2) + { + if (TextFile) + FILEHANDLE[CurrentHandle]=fopen(ZOpenFileName,"r+b"); + else + FILEHANDLE[CurrentHandle]=gzopen(ZOpenFileName,"r+b"); + if(FILEHANDLE[CurrentHandle]!=NULL) + { + CurrentHandle+=1; + return(CurrentHandle-1); + } + return(0xFFFFFFFF); + } + return(0xFFFFFFFF); } DWORD ZCloseFile() { - fclose(FILEHANDLE[ZCloseFileHandle]); - CurrentHandle-=1; - return(0); + if (TextFile) + fclose(FILEHANDLE[ZCloseFileHandle]); + else + gzclose(FILEHANDLE[ZCloseFileHandle]); + CurrentHandle-=1; + return(0); } DWORD ZFileSeek() { - if(ZFileSeekMode==0) - { - fseek(FILEHANDLE[ZFileSeekHandle],ZFileSeekPos,SEEK_SET); - return(0); - } - if(ZFileSeekMode==1) - { - fseek(FILEHANDLE[ZFileSeekHandle],ZFileSeekPos,SEEK_END); - return(0); - } - return(0xFFFFFFFF); + int res = 0; + int mode = 0; + if (ZFileSeekMode==0) + mode = SEEK_SET; + else if (ZFileSeekMode==1) { + mode = SEEK_END; + if (TextFile==0) + printf("Warning : gzseek(SEEK_END) not supported"); + } else return (0xFFFFFFFF); + + if (TextFile) { + fseek(FILEHANDLE[ZFileSeekHandle], ZFileSeekPos, mode); + return 0; + } else { + gzseek(FILEHANDLE[ZFileSeekHandle], ZFileSeekPos, mode); + return 0; + } + return(0xFFFFFFFF); } DWORD ZFileRead() { - return(fread(ZFileReadBlock,1,ZFileReadSize,FILEHANDLE[ZFileReadHandle])); + if (TextFile) + return(fread(ZFileReadBlock, + 1, + ZFileReadSize, + FILEHANDLE[ZFileReadHandle])); + else + return(gzread(FILEHANDLE[ZFileReadHandle], + ZFileReadBlock, + ZFileReadSize)); } DWORD ZFileWrite() { - if((fwrite(ZFileWriteBlock,1,ZFileWriteSize,FILEHANDLE[ZFileWriteHandle]))!=ZFileWriteSize) return(0xFFFFFFFF); - return(0); + int res=0; + if (TextFile) + res = fwrite(ZFileWriteBlock, + 1, + ZFileWriteSize, + FILEHANDLE[ZFileWriteHandle]); + else + res = gzwrite(FILEHANDLE[ZFileWriteHandle], + ZFileWriteBlock, + ZFileWriteSize); + + if (res!=ZFileWriteSize) + return(0xFFFFFFFF); + + return(0); } DWORD ZFileTell() { - return(ftell(FILEHANDLE[ZFileTellHandle])); + int res = 0; + if (TextFile) { + res = ftell(FILEHANDLE[ZFileTellHandle]); + if (res == -1) fprintf(stderr, "Oups!! gzTell\n"); + return(res); + } else return gztell(FILEHANDLE[ZFileTellHandle]); } DWORD ZFileDelete() @@ -264,4 +322,4 @@ DWORD GetDate() +((newtime->tm_wday) << 28); return(value); -} \ No newline at end of file +} diff --git a/zsnes/src/gui/guiload.inc b/zsnes/src/gui/guiload.inc index b9d597b5..bb2ec825 100644 --- a/zsnes/src/gui/guiload.inc +++ b/zsnes/src/gui/guiload.inc @@ -568,10 +568,7 @@ GetNormalEntries2: GUIGetEntry2 GUIsfcfind GUIGetEntry2 GUIswcfind GUIGetEntry2 GUIfigfind - cmp byte[OSPort],1 - jbe near .dos GUIGetEntry2 GUIfindGZIP -.dos GUIGetEntry2 GUIfind058 GUIGetEntry2 GUIfind078 GUIGetEntry2 GUIfindUSA @@ -595,10 +592,7 @@ GetNormalEntries: GUIGetEntry GUIsfcfind GUIGetEntry GUIswcfind GUIGetEntry GUIfigfind - cmp byte[OSPort],1 - jbe near .dos GUIGetEntry GUIfindGZIP -.dos GUIGetEntry GUIfind058 GUIGetEntry GUIfind078 GUIGetEntry GUIfindUSA @@ -760,10 +754,7 @@ GetLoadLfn: GUIGetEntryLFN GUIsfcfind GUIGetEntryLFN GUIswcfind GUIGetEntryLFN GUIfigfind - cmp byte[OSPort],1 - jbe near .dos GUIGetEntryLFN GUIfindGZIP -.dos GUIGetEntryLFN GUIfind058 GUIGetEntryLFN GUIfind078 GUIGetEntryLFN GUIfindUSA