diff --git a/zsnes/src/cfgload.asm b/zsnes/src/cfgload.asm index b4d348fb..e8775e17 100644 --- a/zsnes/src/cfgload.asm +++ b/zsnes/src/cfgload.asm @@ -27,8 +27,12 @@ EXTSYM StereoSound,antienab,cvidmode,enterpress,frameskip,guioff EXTSYM newengen,per2exec,pl1Ak,pl1Bk,pl1Lk,pl1Rk,pl1Xk,pl1Yk EXTSYM pl1contrl,pl1downk,pl1leftk,pl1rightk,scanlines,soundon EXTSYM spcon,vsyncon,Open_File,Read_File - EXTSYM Create_File,Write_File,Close_File - +EXTSYM Create_File,Write_File,Close_File +%ifdef __LINUX__ +; if TextFile==0, zlib functions aren't used +; useful to save the config file +EXTSYM TextFile +%endif NEWSYM CfgLoadAsmStart @@ -272,6 +276,9 @@ NEWSYM DOScreatenewcfg push ecx ; Save .CFG file mov edx,CMDLineStr +%ifdef _GZIP__ + mov byte[TextFile], 1 +%endif call Create_File pop ecx jc .failed @@ -280,6 +287,9 @@ NEWSYM DOScreatenewcfg mov edx,mode7tab call Write_File call Close_File +%ifdef __GZIP__ + mov byte[TextFile], 0 +%endif .failed ret diff --git a/zsnes/src/gui/guiload.inc b/zsnes/src/gui/guiload.inc index 15be3a09..a8c97e01 100644 --- a/zsnes/src/gui/guiload.inc +++ b/zsnes/src/gui/guiload.inc @@ -566,6 +566,9 @@ GetNormalEntries2: GUIGetEntry2 GUIsfcfind GUIGetEntry2 GUIswcfind GUIGetEntry2 GUIfigfind +%ifdef __GZIP__ + GUIGetEntry2 GUIfindGZIP +%endif GUIGetEntry2 GUIfind058 GUIGetEntry2 GUIfind078 GUIGetEntry2 GUIfindUSA @@ -589,6 +592,9 @@ GetNormalEntries: GUIGetEntry GUIsfcfind GUIGetEntry GUIswcfind GUIGetEntry GUIfigfind +%ifdef __GZIP__ + GUIGetEntry GUIfindGZIP +%endif GUIGetEntry GUIfind058 GUIGetEntry GUIfind078 GUIGetEntry GUIfindUSA @@ -750,6 +756,9 @@ GetLoadLfn: GUIGetEntryLFN GUIsfcfind GUIGetEntryLFN GUIswcfind GUIGetEntryLFN GUIfigfind +%ifdef __GZIP__ + GUIGetEntryLFN GUIfindGZIP +%endif GUIGetEntryLFN GUIfind058 GUIGetEntryLFN GUIfind078 GUIGetEntryLFN GUIfindUSA diff --git a/zsnes/src/linux/zfilew.c b/zsnes/src/linux/zfilew.c index ebbeb520..0ac743b0 100644 --- a/zsnes/src/linux/zfilew.c +++ b/zsnes/src/linux/zfilew.c @@ -17,6 +17,11 @@ #include + +#ifdef __GZIP__ +#include +#endif + #ifdef __LINUX__ #include #include @@ -37,7 +42,13 @@ #define STUB_FUNCTION fprintf(stderr,"STUB: %s at " __FILE__ ", line %d, thread %d\n",__FUNCTION__,__LINE__,getpid()) #endif #include + +#ifdef __GZIP__ +gzFile *FILEHANDLE[16]; +#else FILE *FILEHANDLE[16]; +#endif + DWORD CurrentHandle=0; @@ -86,7 +97,7 @@ DWORD ZFTime; BYTE * MKPath; BYTE * CHPath; BYTE * RMPath; - +BYTE TextFile; // GetDir BYTE * DirName; DWORD DriveNumber; @@ -97,79 +108,132 @@ BYTE * ZFileDelFName; 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]=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]=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 = gztell(FILEHANDLE[ZFileTellHandle]); + if (res == -1) fprintf(stderr, "Oups!! gzTell\n"); + return(res); + } else return gztell(FILEHANDLE[ZFileTellHandle]); } DWORD ZFileDelete()