From dd8da1dcfd876feeaa0358392e9d93637f72478f Mon Sep 17 00:00:00 2001 From: stainless <> Date: Wed, 29 Aug 2001 03:39:25 +0000 Subject: [PATCH] Cleaned up the DOS port a bit. --- zsnes/src/dos/zfile.c | 657 +++++++++++++++++---------------- zsnes/src/dos/zloader.c | 797 ++++++++++++++++++++-------------------- zsnes/src/makefile.dos | 376 +++++++++---------- zsnes/src/zip/zzip.c | 661 +++++++++++++++++---------------- 4 files changed, 1259 insertions(+), 1232 deletions(-) diff --git a/zsnes/src/dos/zfile.c b/zsnes/src/dos/zfile.c index 7a84c0b2..ae7d1bd2 100644 --- a/zsnes/src/dos/zfile.c +++ b/zsnes/src/dos/zfile.c @@ -1,323 +1,334 @@ -//Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com ) -// -//This program is free software; you can redistribute it and/or -//modify it under the terms of the GNU General Public License -//as published by the Free Software Foundation; either -//version 2 of the License, or (at your option) any later -//version. -// -//This program is distributed in the hope that it will be useful, -//but WITHOUT ANY WARRANTY; without even the implied warranty of -//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -//GNU General Public License for more details. -// -//You should have received a copy of the GNU General Public License -//along with this program; if not, write to the Free Software -//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - -#include -#include -#include -#ifdef ZDOS -#include -#endif - - -#define DWORD unsigned int -#define BYTE unsigned char - -FILE *FILEHANDLE[16]; -DWORD CurrentHandle=0; - -//Indicate whether the file must be opened using -//zlib or not (used for gzip support) -BYTE TextFile; - - -// ZFileSystemInit -// return 0 - -// ZOpenFile info : -BYTE * ZOpenFileName; -DWORD ZOpenMode; -// Open modes : 0 read/write in -// 1 write (create file, overwrite) -// return file handle if success, 0xFFFFFFFF if error - -// ZCloseFile info : -DWORD ZCloseFileHandle; -// return 0 - -// ZFileSeek info : -DWORD ZFileSeekHandle; -DWORD ZFileSeekPos; -DWORD ZFileSeekMode; // 0 start, 1 end -// return 0 - -// ZFileReadBlock info : -BYTE * ZFileReadBlock; -DWORD ZFileReadSize; -DWORD ZFileReadHandle; -// return 0 - -// ZFileWriteBlock info : -BYTE * ZFileWriteBlock; -DWORD ZFileWriteSize; -DWORD ZFileWriteHandle; -// return 0 - -// ZFileTell -DWORD ZFileTellHandle; - -// ZFileGetftime -BYTE * ZFFTimeFName; -DWORD ZFTimeHandle; -DWORD ZFDate; -DWORD ZFTime; - -// MKDir/CHDir -BYTE * MKPath; -BYTE * CHPath; -BYTE * RMPath; - -// GetDir -BYTE * DirName; -DWORD DriveNumber; - -// ZFileDelete -BYTE * ZFileDelFName; -// return current position - - -DWORD ZFileSystemInit() -{ -#ifdef __GZIP__ - TextFile = 0; -#else - TextFile = 1; -#endif - CurrentHandle=0; - return(0); -} - - -DWORD ZOpenFile() -{ - 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]=(FILE *)gzopen(ZOpenFileName,"r+b"); - if(FILEHANDLE[CurrentHandle]!=NULL) - { - CurrentHandle+=1; - return(CurrentHandle-1); - } - return(0xFFFFFFFF); - } - return(0xFFFFFFFF); -} - -DWORD ZCloseFile() -{ - if (TextFile) - fclose(FILEHANDLE[ZCloseFileHandle]); - else - gzclose(FILEHANDLE[ZCloseFileHandle]); - CurrentHandle-=1; - return(0); -} - -DWORD ZFileSeek() -{ - 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() -{ - if (TextFile) - return(fread(ZFileReadBlock, - 1, - ZFileReadSize, - FILEHANDLE[ZFileReadHandle])); - else - return(gzread(FILEHANDLE[ZFileReadHandle], - ZFileReadBlock, - ZFileReadSize)); -} - - -DWORD ZFileWrite() -{ - 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() -{ - 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() -{ - return(remove(ZFileDelFName)); -} - - -DWORD ZFileGetFTime() -{ - _dos_open(ZFFTimeFName, 0,&ZFTimeHandle); - _dos_getftime(ZFTimeHandle,&ZFDate,&ZFTime); - _dos_close(ZFTimeHandle); - return(0); -} - -DWORD ZFileMKDir() -{ - return(mkdir(MKPath)); -} - -DWORD ZFileCHDir() -{ - return(chdir(CHPath)); -} - -DWORD ZFileRMDir() -{ - return(rmdir(RMPath)); -} - -DWORD ZFileGetDir() -{ - return(getcwd(DirName,128)); -} - -BYTE * ZFileFindPATH; -DWORD ZFileFindATTRIB; -DWORD DTALocPos; - -//struct _find_t { -// char reserved[21] __attribute__((packed)); -// unsigned char attrib __attribute__((packed)); -// unsigned short wr_time __attribute__((packed)); -// unsigned short wr_date __attribute__((packed)); -// unsigned long size __attribute__((packed)); -// char name[256] __attribute__((packed)); -//}; - -DWORD ZFileFindFirst() -{ - return(_dos_findfirst(ZFileFindPATH,ZFileFindATTRIB,DTALocPos)); -} - -DWORD ZFileFindNext() -{ - return(_dos_findnext(DTALocPos)); -} - -DWORD ZFileFindEnd() // for compatibility with windows later -{ - return(0); -} - - -//BYTE * DirName; -//DWORD DriveNumber; - -//unsigned int _dos_findfirst(char *_name, unsigned int _attr, struct _find_t *_result); -//unsigned int _dos_findnext(struct _find_t *_result); - - -DWORD GetTime() -{ - DWORD value; - struct tm *newtime; - time_t long_time; - - time( &long_time ); - newtime = localtime( &long_time ); - - value = ((newtime->tm_sec) % 10)+((newtime->tm_sec)/10)*16 - +((((newtime->tm_min) % 10)+((newtime->tm_min)/10)*16) << 8) - +((((newtime->tm_hour) % 10)+((newtime->tm_hour)/10)*16) << 16); - return(value); -} - -DWORD GetDate() -{ - DWORD value; - struct tm *newtime; - time_t long_time; - - time( &long_time ); - newtime = localtime( &long_time ); - value = ((newtime->tm_mday) % 10)+((newtime->tm_mday)/10)*16 - +(((newtime->tm_mon)+1) << 8) - +((((newtime->tm_year) % 10)+((newtime->tm_year)/10)*16) << 16); - +((newtime->tm_wday) << 28); - - return(value); -} +//Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com ) +// +//This program is free software; you can redistribute it and/or +//modify it under the terms of the GNU General Public License +//as published by the Free Software Foundation; either +//version 2 of the License, or (at your option) any later +//version. +// +//This program is distributed in the hope that it will be useful, +//but WITHOUT ANY WARRANTY; without even the implied warranty of +//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//GNU General Public License for more details. +// +//You should have received a copy of the GNU General Public License +//along with this program; if not, write to the Free Software +//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +#include +#include +#include +#include +#include +#include +#include +#include +/* #ifdef ZDOS +#include +#endif */ + + +#define DWORD unsigned int +#define BYTE unsigned char + +FILE *FILEHANDLE[16]; +DWORD CurrentHandle=0; + +//Indicate whether the file must be opened using +//zlib or not (used for gzip support) +BYTE TextFile; + + +// ZFileSystemInit +// return 0 + +// ZOpenFile info : +BYTE * ZOpenFileName; +DWORD ZOpenMode; +// Open modes : 0 read/write in +// 1 write (create file, overwrite) +// return file handle if success, 0xFFFFFFFF if error + +// ZCloseFile info : +DWORD ZCloseFileHandle; +// return 0 + +// ZFileSeek info : +DWORD ZFileSeekHandle; +DWORD ZFileSeekPos; +DWORD ZFileSeekMode; // 0 start, 1 end +// return 0 + +// ZFileReadBlock info : +BYTE * ZFileReadBlock; +DWORD ZFileReadSize; +DWORD ZFileReadHandle; +// return 0 + +// ZFileWriteBlock info : +BYTE * ZFileWriteBlock; +DWORD ZFileWriteSize; +DWORD ZFileWriteHandle; +// return 0 + +// ZFileTell +DWORD ZFileTellHandle; + +// ZFileGetftime +BYTE * ZFFTimeFName; +DWORD ZFTimeHandle; +DWORD ZFDate; +DWORD ZFTime; + +// MKDir/CHDir +BYTE * MKPath; +BYTE * CHPath; +BYTE * RMPath; + +// GetDir +BYTE * DirName; +DWORD DriveNumber; + +// ZFileDelete +BYTE * ZFileDelFName; +// return current position + + +DWORD ZFileSystemInit() +{ +#ifdef __GZIP__ + TextFile = 0; +#else + TextFile = 1; +#endif + CurrentHandle=0; + return(0); +} + + +DWORD ZOpenFile() +{ + 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]=(FILE *)gzopen(ZOpenFileName,"r+b"); + if(FILEHANDLE[CurrentHandle]!=NULL) + { + CurrentHandle+=1; + return(CurrentHandle-1); + } + return(0xFFFFFFFF); + } + return(0xFFFFFFFF); +} + +DWORD ZCloseFile() +{ + if (TextFile) + fclose(FILEHANDLE[ZCloseFileHandle]); + else + gzclose(FILEHANDLE[ZCloseFileHandle]); + CurrentHandle-=1; + return(0); +} + +DWORD ZFileSeek() +{ + /*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() +{ + if (TextFile) + return(fread(ZFileReadBlock, + 1, + ZFileReadSize, + FILEHANDLE[ZFileReadHandle])); + else + return(gzread(FILEHANDLE[ZFileReadHandle], + ZFileReadBlock, + ZFileReadSize)); +} + + +DWORD ZFileWrite() +{ + 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() +{ + 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() +{ + return(remove(ZFileDelFName)); +} + + +DWORD ZFileGetFTime() +{ + _dos_open(ZFFTimeFName, 0,&ZFTimeHandle); + _dos_getftime(ZFTimeHandle,&ZFDate,&ZFTime); + _dos_close(ZFTimeHandle); + return(0); +} + +DWORD ZFileMKDir() +{ + /*return(mkdir(MKPath));*/ + return (mkdir(MKPath, S_IWUSR)); +} + +DWORD ZFileCHDir() +{ + return(chdir(CHPath)); +} + +DWORD ZFileRMDir() +{ + return(rmdir(RMPath)); +} + +DWORD ZFileGetDir() +{ + /*return(getcwd(DirName,128));*/ + return(*getcwd(DirName,128)); +} + +BYTE * ZFileFindPATH; +DWORD ZFileFindATTRIB; +DWORD DTALocPos; + +//struct _find_t { +// char reserved[21] __attribute__((packed)); +// unsigned char attrib __attribute__((packed)); +// unsigned short wr_time __attribute__((packed)); +// unsigned short wr_date __attribute__((packed)); +// unsigned long size __attribute__((packed)); +// char name[256] __attribute__((packed)); +//}; + +DWORD ZFileFindFirst() +{ + /*return(_dos_findfirst(ZFileFindPATH,ZFileFindATTRIB,DTALocPos));*/ + return(_dos_findfirst(ZFileFindPATH,ZFileFindATTRIB,((struct find_t *)DTALocPos))); + +} + +DWORD ZFileFindNext() +{ + /*return(_dos_findnext(DTALocPos));*/ + return(_dos_findnext(((struct find_t *) DTALocPos))); +} + +DWORD ZFileFindEnd() // for compatibility with windows later +{ + return(0); +} + + +//BYTE * DirName; +//DWORD DriveNumber; + +//unsigned int _dos_findfirst(char *_name, unsigned int _attr, struct _find_t *_result); +//unsigned int _dos_findnext(struct _find_t *_result); + + +DWORD GetTime() +{ + DWORD value; + struct tm *newtime; + time_t long_time; + + time( &long_time ); + newtime = localtime( &long_time ); + + value = ((newtime->tm_sec) % 10)+((newtime->tm_sec)/10)*16 + +((((newtime->tm_min) % 10)+((newtime->tm_min)/10)*16) << 8) + +((((newtime->tm_hour) % 10)+((newtime->tm_hour)/10)*16) << 16); + return(value); +} + +DWORD GetDate() +{ + DWORD value; + struct tm *newtime; + time_t long_time; + + /*time( &long_time );*/ + long_time = time (NULL); + newtime = localtime( &long_time ); + value = ((newtime->tm_mday) % 10)+((newtime->tm_mday)/10)*16 + +(((newtime->tm_mon)+1) << 8) + +((((newtime->tm_year) % 10)+((newtime->tm_year)/10)*16) << 16); + +((newtime->tm_wday) << 28); + + return(value); +} diff --git a/zsnes/src/dos/zloader.c b/zsnes/src/dos/zloader.c index 7377ab6b..dd81c736 100644 --- a/zsnes/src/dos/zloader.c +++ b/zsnes/src/dos/zloader.c @@ -1,396 +1,401 @@ -//Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com ) -// -//This program is free software; you can redistribute it and/or -//modify it under the terms of the GNU General Public License -//as published by the Free Software Foundation; either -//version 2 of the License, or (at your option) any later -//version. -// -//This program is distributed in the hope that it will be useful, -//but WITHOUT ANY WARRANTY; without even the implied warranty of -//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -//GNU General Public License for more details. -// -//You should have received a copy of the GNU General Public License -//along with this program; if not, write to the Free Software -//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - -#include -#include - -extern void zstart(void); -extern void DosExit(void); -extern void ConvertJoyMap1(void); -extern void ConvertJoyMap2(void); -extern void displayparams(void); -extern void makeextension(void); - -extern unsigned char Palette0, SPC700sh, OffBy1Line, DSPDisable, - FPUCopy, Force8b, ForcePal, GUIClick, MouseDis, - MusicRelVol, ScreenScale, SoundCompD, SoundQuality, - StereoSound, V8Mode, antienab, cvidmode, debugdisble, - debugger, enterpress, finterleave, frameskip, - gammalevel, guioff, per2exec, pl1contrl, pl2contrl, - romtype, scanlines, showallext, smallscreenon, soundon, - spcon, vsyncon, DisplayS, fname, filefound, SnowOn; - -void ccmdline(void); - -char *ers[] = -{ - "Frame Skip must be a value of 0 to 9!\n", - "Gamma Correction Level must be a value of 0 to 5!\n", - "Sound Sampling Rate must be a value of 0 to 6!\n", - "Invalid Video Mode!\n", - "Percentage of instructions to execute must be a number from 50 to 150!\n", - "Player Input must be a value from 0 to 6!\n", - "Volume must be a number from 0 to 100!\n" - -}; - - - -int argc; -char **argv; -int main(int margc, char **margv) -{ - argc=margc; - argv=margv; - zstart(); -} - - -int my_atoi(char *nptr) -{ - int p,c; - c=0; - for(p=0;nptr[p];p++) - { - if( !isdigit(nptr[p]) ) c+=1; - } - if(c) return -1; - else return atoi(nptr); - -} - - -void ccmdline(void) -{ - int p=0; - p=pccmdline(); - if(p == 0) return; - - if(p == 9) - { - displayparams(); - } - if(p == 4) - { -// printf("Mangled command line, did you forget a parm?\n"); - printf("Invalid Commandline!\n"); - DosExit(); - } - - if((p > 9) && (p < 17)) - { - printf(ers[p-10]); - DosExit(); - } - if(p == 2) - { - DosExit(); - } - - - printf("cmdline returned %i\n",p); - DosExit(); - -} - -int pccmdline(void) -{ - int p; - int gfnm=0; - - for(p=1;p 6) return 15; - p++; - ConvertJoyMap1(); - break; - } - case '2': /* Player 2 Input */ - { - if(!hasroom) return 4; - pl2contrl=my_atoi(argv[p+1]); - if(pl2contrl > 6) return 15; - p++; - ConvertJoyMap2(); - break; - } - case 'f': - { - if(!hasroom) return 4; - frameskip=my_atoi(argv[p+1]); - if(frameskip > 9) return 10; - frameskip++; - p++; - break; - } - case 'g': - { - if(!hasroom) return 4; - gammalevel=my_atoi(argv[p+1]); - if(gammalevel > 5) return 11; - p++; - break; - } - case 'p': - { - if(!hasroom) return 4; - per2exec=my_atoi(argv[p+1]); - if(per2exec > 150) return 14; - if(per2exec < 50) return 14; - p++; - break; - } - case 'r': - { - if(!hasroom) return 4; - SoundQuality=my_atoi(argv[p+1]); - if(SoundQuality > 6) return 12; - p++; - break; - } - case 'v': - { - if(nn == '8') - { - V8Mode=1; - pp++; - } - else - { - if(!hasroom) return 4; - cvidmode=my_atoi(argv[p+1]); - if(cvidmode > 10) return 13; - p++; - } - break; - } - case 'k': - { - if(!hasroom) return 4; - MusicRelVol=my_atoi(argv[p+1]); - if(MusicRelVol > 100) return 16; - p++; - break; - } - case '8': - { - Force8b=1; - break; - } - case '0': /* Palette 0 disable */ - { - Palette0=1; - break; - } - case '7': /* SPC700 speed hack disable */ - { - SPC700sh=1; - break; - } - case '9': /* Off by 1 line */ - { - OffBy1Line=1; - break; - } - case 'e': - { - enterpress=1; - break; - } - case 'h': - { - romtype=2; - break; - } - case 'l': - { - romtype=1; - break; - } - case 'm': - { - guioff=1; /* disables GUI */ - break; - } - case 'n': - { - scanlines=1; - break; - } - case 's': - { - if(nn == 'p') - { - DisplayS=1; - pp++; - } - else - if(nn == 'a') - { - showallext=1; - pp++; - } - else - if(nn == 'n') - { - SnowOn=1; - pp++; - } - else - { - spcon=1; - soundon=1; - } - break; - } - case 't': - { - ForcePal=1; - break; - } - case 'u': - { - ForcePal=2; - break; - } - case 'w': - { - vsyncon=1; - break; - } - case 'z': - { - StereoSound=1; - break; - } - case 'd': - { - if(nn == 'd') - { - DSPDisable=1; - pp++; - } - else - { - debugger=1; - debugdisble=0; - } - break; - } - case 'b': - { - SoundCompD=1; - break; - } - - case 'c': - { - if(nn == 'c') - { - smallscreenon=1; - pp++; - } - else - { - ScreenScale=1; - } - break; - } - - case 'y': - { - antienab=1; - break; - } - case 'o': - { - if(nn == 'm') - { - FPUCopy=2; - pp++; - } - else - { - FPUCopy=0; - } - break; - } - case 'i': - { - finterleave=1; - break; - } - case 'j': - { - GUIClick=0; - MouseDis=1; - break; - } - case '?': - { - return 9; - } - } - - } - - } - else - { - if(gfnm > 0) - { - printf("Limit yourself to one filename\n"); - return 2; - } - else - { - char *fvar; - fvar=&fname; - fvar[0] = strlen(argv[p]); - strncpy(&fvar[1],argv[p],127); - gfnm++; - } - } - } - if(gfnm == 1) - { - filefound=0; - makeextension(); - } - return 0; -} +//Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com ) +// +//This program is free software; you can redistribute it and/or +//modify it under the terms of the GNU General Public License +//as published by the Free Software Foundation; either +//version 2 of the License, or (at your option) any later +//version. +// +//This program is distributed in the hope that it will be useful, +//but WITHOUT ANY WARRANTY; without even the implied warranty of +//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//GNU General Public License for more details. +// +//You should have received a copy of the GNU General Public License +//along with this program; if not, write to the Free Software +//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +#include +#include +#include +#include + +int pccmdline(void); + +extern void zstart(void); +extern void DosExit(void); +extern void ConvertJoyMap1(void); +extern void ConvertJoyMap2(void); +extern void displayparams(void); +extern void makeextension(void); + +extern unsigned char Palette0, SPC700sh, OffBy1Line, DSPDisable, + FPUCopy, Force8b, ForcePal, GUIClick, MouseDis, + MusicRelVol, ScreenScale, SoundCompD, SoundQuality, + StereoSound, V8Mode, antienab, cvidmode, debugdisble, + debugger, enterpress, finterleave, frameskip, + gammalevel, guioff, per2exec, pl1contrl, pl2contrl, + romtype, scanlines, showallext, smallscreenon, soundon, + spcon, vsyncon, DisplayS, fname, filefound, SnowOn; + +void ccmdline(void); + +char *ers[] = +{ + "Frame Skip must be a value of 0 to 9!\n", + "Gamma Correction Level must be a value of 0 to 5!\n", + "Sound Sampling Rate must be a value of 0 to 6!\n", + "Invalid Video Mode!\n", + "Percentage of instructions to execute must be a number from 50 to 150!\n", + "Player Input must be a value from 0 to 6!\n", + "Volume must be a number from 0 to 100!\n" + +}; + + + +int argc; +char **argv; +int main(int margc, char **margv) +{ + argc=margc; + argv=margv; + zstart(); + return(0); +} + + +int my_atoi(char *nptr) +{ + int p,c; + c=0; + for(p=0;nptr[p];p++) + { + if( !isdigit(nptr[p]) ) c+=1; + } + if(c) return -1; + else return atoi(nptr); + +} + + +void ccmdline(void) +{ + int p=0; + p=pccmdline(); + if(p == 0) return; + + if(p == 9) + { + displayparams(); + } + if(p == 4) + { +// printf("Mangled command line, did you forget a parm?\n"); + printf("Invalid Commandline!\n"); + DosExit(); + } + + if((p > 9) && (p < 17)) + { + printf(ers[p-10]); + DosExit(); + } + if(p == 2) + { + DosExit(); + } + + + printf("cmdline returned %i\n",p); + DosExit(); + +} + +int pccmdline(void) +{ + int p; + int gfnm=0; + + for(p=1;p 6) return 15; + p++; + ConvertJoyMap1(); + break; + } + case '2': /* Player 2 Input */ + { + if(!hasroom) return 4; + pl2contrl=my_atoi(argv[p+1]); + if(pl2contrl > 6) return 15; + p++; + ConvertJoyMap2(); + break; + } + case 'f': + { + if(!hasroom) return 4; + frameskip=my_atoi(argv[p+1]); + if(frameskip > 9) return 10; + frameskip++; + p++; + break; + } + case 'g': + { + if(!hasroom) return 4; + gammalevel=my_atoi(argv[p+1]); + if(gammalevel > 5) return 11; + p++; + break; + } + case 'p': + { + if(!hasroom) return 4; + per2exec=my_atoi(argv[p+1]); + if(per2exec > 150) return 14; + if(per2exec < 50) return 14; + p++; + break; + } + case 'r': + { + if(!hasroom) return 4; + SoundQuality=my_atoi(argv[p+1]); + if(SoundQuality > 6) return 12; + p++; + break; + } + case 'v': + { + if(nn == '8') + { + V8Mode=1; + pp++; + } + else + { + if(!hasroom) return 4; + cvidmode=my_atoi(argv[p+1]); + if(cvidmode > 10) return 13; + p++; + } + break; + } + case 'k': + { + if(!hasroom) return 4; + MusicRelVol=my_atoi(argv[p+1]); + if(MusicRelVol > 100) return 16; + p++; + break; + } + case '8': + { + Force8b=1; + break; + } + case '0': /* Palette 0 disable */ + { + Palette0=1; + break; + } + case '7': /* SPC700 speed hack disable */ + { + SPC700sh=1; + break; + } + case '9': /* Off by 1 line */ + { + OffBy1Line=1; + break; + } + case 'e': + { + enterpress=1; + break; + } + case 'h': + { + romtype=2; + break; + } + case 'l': + { + romtype=1; + break; + } + case 'm': + { + guioff=1; /* disables GUI */ + break; + } + case 'n': + { + scanlines=1; + break; + } + case 's': + { + if(nn == 'p') + { + DisplayS=1; + pp++; + } + else + if(nn == 'a') + { + showallext=1; + pp++; + } + else + if(nn == 'n') + { + SnowOn=1; + pp++; + } + else + { + spcon=1; + soundon=1; + } + break; + } + case 't': + { + ForcePal=1; + break; + } + case 'u': + { + ForcePal=2; + break; + } + case 'w': + { + vsyncon=1; + break; + } + case 'z': + { + StereoSound=1; + break; + } + case 'd': + { + if(nn == 'd') + { + DSPDisable=1; + pp++; + } + else + { + debugger=1; + debugdisble=0; + } + break; + } + case 'b': + { + SoundCompD=1; + break; + } + + case 'c': + { + if(nn == 'c') + { + smallscreenon=1; + pp++; + } + else + { + ScreenScale=1; + } + break; + } + + case 'y': + { + antienab=1; + break; + } + case 'o': + { + if(nn == 'm') + { + FPUCopy=2; + pp++; + } + else + { + FPUCopy=0; + } + break; + } + case 'i': + { + finterleave=1; + break; + } + case 'j': + { + GUIClick=0; + MouseDis=1; + break; + } + case '?': + { + return 9; + } + } + + } + + } + else + { + if(gfnm > 0) + { + printf("Limit yourself to one filename\n"); + return 2; + } + else + { + char *fvar; + fvar=&fname; + fvar[0] = strlen(argv[p]); + strncpy(&fvar[1],argv[p],127); + gfnm++; + } + } + } + if(gfnm == 1) + { + filefound=0; + makeextension(); + } + return 0; +} diff --git a/zsnes/src/makefile.dos b/zsnes/src/makefile.dos index 2a8e4da8..072481a9 100644 --- a/zsnes/src/makefile.dos +++ b/zsnes/src/makefile.dos @@ -1,188 +1,188 @@ -#Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com ) -# -#This program is free software; you can redistribute it and/or -#modify it under the terms of the GNU General Public License -#as published by the Free Software Foundation; either -#version 2 of the License, or (at your option) any later -#version. -# -#This program is distributed in the hope that it will be useful, -#but WITHOUT ANY WARRANTY; without even the implied warranty of -#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#GNU General Public License for more details. -# -#You should have received a copy of the GNU General Public License -#along with this program; if not, write to the Free Software -#Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -CHIPDIR=chips -CPUDIR=cpu -DOSDIR=dos -GUIDIR=gui -VIDEODIR=video -WINDIR=win -OBJDIR=obj -ZIPDIR=zip - -CHIPSOBJ=${CHIPDIR}/dsp1emu.o ${CHIPDIR}/fxemu2.o ${CHIPDIR}/sfxproc.o\ - ${CHIPDIR}/fxemu2b.o ${CHIPDIR}/fxemu2c.o ${CHIPDIR}/fxtable.o\ - ${CHIPDIR}/sa1proc.o ${CHIPDIR}/sa1regs.o ${CHIPDIR}/dsp1proc.o - -CPUOBJ=${CPUDIR}/addrni.o ${CPUDIR}/dma.o ${CPUDIR}/dsp.o ${CPUDIR}/dspproc.o\ - ${CPUDIR}/execute.o ${CPUDIR}/irq.o ${CPUDIR}/memory.o\ - ${CPUDIR}/spc700.o ${CPUDIR}/stable.o ${CPUDIR}/table.o\ - ${CPUDIR}/tableb.o ${CPUDIR}/tablec.o - -GUIOBJ=${GUIDIR}/gui.o ${GUIDIR}/menu.o - -VIDEOBJ=${VIDEODIR}/makev16b.o ${VIDEODIR}/makev16t.o ${VIDEODIR}/makevid.o\ - ${VIDEODIR}/mode716.o ${VIDEODIR}/mode716b.o ${VIDEODIR}/mode716d.o\ - ${VIDEODIR}/mode716e.o ${VIDEODIR}/mode716t.o ${VIDEODIR}/mode7.o\ - ${VIDEODIR}/mode7ext.o ${VIDEODIR}/mv16tms.o ${VIDEODIR}/newg162.o\ - ${VIDEODIR}/newgfx16.o ${VIDEODIR}/newgfx2.o ${VIDEODIR}/newgfx.o\ - ${VIDEODIR}/m716text.o ${VIDEODIR}/procvid.o - -DOSOBJ= ${DOSDIR}/dosintrf.o ${DOSDIR}/gppro.o ${DOSDIR}/debug.o\ - ${DOSDIR}/initvid.o ${DOSDIR}/modemrtn.o ${DOSDIR}/sw32.o\ - ${DOSDIR}/joy.o ${DOSDIR}/sw.o ${DOSDIR}/vesa12.o ${DOSDIR}/vesa2.o\ - ${DOSDIR}/zloader.o ${DOSDIR}/zsipx.o ${DOSDIR}/zfile.o - -WINOBJ=${WINDIR}/copywin.o ${WINDIR}/winintrf.o ${WINDIR}/winlink.o\ - ${WINDIR}/zloaderw.o ${WINDIR}/ztcp.o ${WINDIR}/zipxw.o - -PREOBJ=${OBJDIR}/dosbuff.o ${OBJDIR}/ipx.o ${OBJDIR}/zipx.o - -ZIPOBJ=${ZIPDIR}/zzip.o ${ZIPDIR}/unzip.o ${ZIPDIR}/zpng.o - -MAINOBJ=cfgload.o endmem.o fixsin.o init.o ui.o vcache.o water.o - - -OBJS=${CHIPSOBJ} ${CPUOBJ} ${DOSOBJ} ${GUIOBJ} ${VIDEOBJ} ${PREOBJ} ${MAINOBJ} ${ZIPOBJ} -LIBS=-lz -lgcc -lm -lpng -CFLAGS=-D__MSDOS__ -O2 -ASM=nasm -ASMFLAGS=-f coff -D__MSDOS__ -CC=gcc -PP=gpp - - -.SUFFIXES: .c .cpp .asm - -%.o: %.c - ${CC} ${CFLAGS} -o $@ -c $< - -%.o: %.cpp - ${PP} ${CFLAGS} -o $@ -c $< - -%.o: %.asm - ${ASM} ${ASMFLAGS} -o $@ $< - -ALL: zsnes.exe - -zsnes.exe: ${OBJS} - ${CC} -Ws -L./obj -s -o zsnes.exe ${OBJS} ${LIBS} - -${DOSDIR}/zloader.o: ${DOSDIR}/zloader.c -fixsin.o: fixsin.c -water.o: water.c -${DOSDIR}/zfile.o: ${DOSDIR}/zfile.c -${ZIPDIR}/unzip.o: ${ZIPDIR}/unzip.c ${ZIPDIR}/unzip.h -${ZIPDIR}/zzip.o: ${ZIPDIR}/zzip.c ${ZIPDIR}/unzip.h -${ZIPDIR}/zpng.o: ${ZIPDIR}/zpng.c ${ZIPDIR}/zpng.h ${ZIPDIR}/png.h -${VIDEODIR}/procvid.o: ${VIDEODIR}/procvid.asm macros.mac ${VIDEODIR}/copyvid.inc ${VIDEODIR}/2xSaImmx.inc -${CHIPDIR}/dsp1proc.o: ${CHIPDIR}/dsp1proc.asm macros.mac -${CHIPDIR}/sa1regs.o: ${CHIPDIR}/sa1regs.asm macros.mac\ - ${CPUDIR}/regs.mac ${CPUDIR}/regsw.mac -${CHIPDIR}/sfxproc.o: ${CHIPDIR}/sfxproc.asm macros.mac\ - ${CPUDIR}/regs.mac ${CPUDIR}/regsw.mac -${CHIPDIR}/dsp1emu.o: ${CHIPDIR}/dsp1emu.c betauser.mac -ui.o: ui.asm macros.mac betauser.mac -cfgload.o:cfgload.asm macros.mac -init.o:init.asm macros.mac -${DOSDIR}/debug.o: ${DOSDIR}/debug.asm macros.mac -${CPUDIR}/execute.o: ${CPUDIR}/execute.asm macros.mac -${CPUDIR}/table.o: ${CPUDIR}/table.asm ${CPUDIR}/65816d.inc\ - ${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816.inc\ - ${CPUDIR}/regs.mac ${CPUDIR}/regs.inc ${CPUDIR}/regsw.mac\ - ${CPUDIR}/regsw.inc macros.mac -${CPUDIR}/tableb.o: ${CPUDIR}/tableb.asm ${CPUDIR}/65816db.inc\ - ${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816b.inc\ - ${CPUDIR}/regs.mac macros.mac -${CPUDIR}/tablec.o: ${CPUDIR}/tablec.asm ${CPUDIR}/65816dc.inc\ - ${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816c.inc\ - ${CPUDIR}/regs.mac macros.mac -${CPUDIR}/stable.o: ${CPUDIR}/stable.asm ${CPUDIR}/s65816d.inc\ - ${CPUDIR}/saddress.inc ${CPUDIR}/saddrni.inc ${CPUDIR}/se65816.inc\ - macros.mac -${CPUDIR}/memory.o: ${CPUDIR}/memory.asm macros.mac -${CPUDIR}/dma.o: ${CPUDIR}/dma.asm macros.mac -${DOSDIR}/dosintrf.o: ${DOSDIR}/dosintrf.asm macros.mac -vcache.o:vcache.asm macros.mac -${DOSDIR}/initvid.o:${DOSDIR}/initvid.asm macros.mac -${VIDEODIR}/makevid.o: ${VIDEODIR}/makevid.asm ${VIDEODIR}/vidmacro.mac\ - macros.mac -${VIDEODIR}/makev16b.o: ${VIDEODIR}/makev16b.asm ${VIDEODIR}/vidmacro.mac\ - macros.mac -${VIDEODIR}/makev16t.o: ${VIDEODIR}/makev16t.asm ${VIDEODIR}/vidmacro.mac\ - macros.mac -${VIDEODIR}/mv16tms.o: ${VIDEODIR}/mv16tms.asm ${VIDEODIR}/vidmacro.mac\ - macros.mac -${VIDEODIR}/mode7.o: ${VIDEODIR}/mode7.asm ${VIDEODIR}/mode7.mac\ - macros.mac -${VIDEODIR}/mode716.o: ${VIDEODIR}/mode716.asm ${VIDEODIR}/mode716.mac\ - macros.mac -${VIDEODIR}/mode716b.o:${VIDEODIR}/mode716b.asm ${VIDEODIR}/mode7.mac\ - macros.mac -${VIDEODIR}/mode716t.o:${VIDEODIR}/mode716t.asm ${VIDEODIR}/mode7.mac\ - macros.mac -${VIDEODIR}/mode716d.o:${VIDEODIR}/mode716d.asm ${VIDEODIR}/mode7.mac\ - macros.mac -${VIDEODIR}/mode7ext.o:${VIDEODIR}/mode7ext.asm macros.mac -${VIDEODIR}/mode716e.o:${VIDEODIR}/mode716e.asm macros.mac -${VIDEODIR}/m716text.o:${VIDEODIR}/m716text.asm ${VIDEODIR}/mode7.mac\ - macros.mac -${CPUDIR}/irq.o: ${CPUDIR}/irq.asm macros.mac -${CPUDIR}/dspproc.o: ${CPUDIR}/dspproc.asm macros.mac -${CPUDIR}/spc700.o:${CPUDIR}/spc700.asm macros.mac\ - ${CPUDIR}/regsw.mac ${CPUDIR}/spcdef.inc ${CPUDIR}/spcaddr.inc -${CPUDIR}/dsp.o: ${CPUDIR}/dsp.asm macros.mac -${DOSDIR}/vesa2.o: ${DOSDIR}/vesa2.asm macros.mac -${DOSDIR}/vesa12.o: ${DOSDIR}/vesa12.asm macros.mac -${DOSDIR}/joy.o: ${DOSDIR}/joy.asm macros.mac -${DOSDIR}/sw.o: ${DOSDIR}/sw.asm macros.mac -${GUIDIR}/gui.o: ${GUIDIR}/gui.asm ${GUIDIR}/guitools.inc\ - ${GUIDIR}/guimisc.inc ${GUIDIR}/guimouse.inc ${GUIDIR}/guiwindp.inc\ - ${GUIDIR}/guinetpl.inc ${GUIDIR}/guikeys.inc ${GUIDIR}/guicheat.inc\ - ${GUIDIR}/guicombo.inc ${GUIDIR}/guiload.inc macros.mac -${GUIDIR}/menu.o: ${GUIDIR}/menu.asm macros.mac -${VIDEODIR}/newgfx.o:${VIDEODIR}/newgfx.asm ${VIDEODIR}/vidmacro.mac\ - ${VIDEODIR}/newgfx2.mac ${VIDEODIR}/newgfx.mac macros.mac -${VIDEODIR}/newgfx2.o:${VIDEODIR}/newgfx2.asm ${VIDEODIR}/newgfxwn.mac\ - ${VIDEODIR}/newgfx.mac macros.mac -${VIDEODIR}/newgfx16.o: ${VIDEODIR}/newgfx16.asm macros.mac ${VIDEODIR}/vidmacro.mac\ - ${VIDEODIR}/newgfx16.mac ${VIDEODIR}/newg162.mac -${VIDEODIR}/newg162.o: macros.mac ${VIDEODIR}/newg162.asm ${VIDEODIR}/newg162.mac\ - ${VIDEODIR}/vidmacro.mac ${VIDEODIR}/newg16wn.mac -${CHIPDIR}/fxemu2.o: ${CHIPDIR}/fxemu2.asm ${CHIPDIR}/fxemu2.mac\ - macros.mac -${CHIPSDIR}/fxemu2b.o: ${CHIPDIR}/fxemu2b.asm ${CHIPDIR}/fxemu2.mac\ - ${CHIPDIR}/fxemu2b.mac -${CHIPSDIR}/fxemu2c.o: ${CHIPDIR}/fxemu2c.asm macros.mac ${CHIPDIR}/fxemu2.mac\ - ${CHIPDIR}/fxemu2b.mac ${CHIPDIR}/fxemu2c.mac -${CHIPDIR}/fxtable.o: ${CHIPDIR}/fxtable.asm macros.mac -${DOSDIR}/gppro.o: ${DOSDIR}/gppro.asm macros.mac -${DOSDIR}/zsipx.o: ${DOSDIR}/zsipx.asm -${CHIPDIR}/sa1proc.o: ${CHIPDIR}/sa1proc.asm macros.mac -endmem.o: endmem.asm macros.mac -${DOSDIR}/modemrtn.o: ${DOSDIR}/modemrtn.asm macros.mac - -clean: - del *.o - del ${CHIPDIR}\*.o - del ${CPUDIR}\*.o - del ${VIDEODIR}\*.o - del ${GUIDIR}\*.o - del ${DOSDIR}\*.o - del ${ZIPDIR}\*.o - del zsnes.exe - +#Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com ) +# +#This program is free software; you can redistribute it and/or +#modify it under the terms of the GNU General Public License +#as published by the Free Software Foundation; either +#version 2 of the License, or (at your option) any later +#version. +# +#This program is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +#along with this program; if not, write to the Free Software +#Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +CHIPDIR=chips +CPUDIR=cpu +DOSDIR=dos +GUIDIR=gui +VIDEODIR=video +WINDIR=win +OBJDIR=obj +ZIPDIR=zip + +CHIPSOBJ=${CHIPDIR}/dsp1emu.o ${CHIPDIR}/fxemu2.o ${CHIPDIR}/sfxproc.o\ + ${CHIPDIR}/fxemu2b.o ${CHIPDIR}/fxemu2c.o ${CHIPDIR}/fxtable.o\ + ${CHIPDIR}/sa1proc.o ${CHIPDIR}/sa1regs.o ${CHIPDIR}/dsp1proc.o + +CPUOBJ=${CPUDIR}/addrni.o ${CPUDIR}/dma.o ${CPUDIR}/dsp.o ${CPUDIR}/dspproc.o\ + ${CPUDIR}/execute.o ${CPUDIR}/irq.o ${CPUDIR}/memory.o\ + ${CPUDIR}/spc700.o ${CPUDIR}/stable.o ${CPUDIR}/table.o\ + ${CPUDIR}/tableb.o ${CPUDIR}/tablec.o + +GUIOBJ=${GUIDIR}/gui.o ${GUIDIR}/menu.o + +VIDEOBJ=${VIDEODIR}/makev16b.o ${VIDEODIR}/makev16t.o ${VIDEODIR}/makevid.o\ + ${VIDEODIR}/mode716.o ${VIDEODIR}/mode716b.o ${VIDEODIR}/mode716d.o\ + ${VIDEODIR}/mode716e.o ${VIDEODIR}/mode716t.o ${VIDEODIR}/mode7.o\ + ${VIDEODIR}/mode7ext.o ${VIDEODIR}/mv16tms.o ${VIDEODIR}/newg162.o\ + ${VIDEODIR}/newgfx16.o ${VIDEODIR}/newgfx2.o ${VIDEODIR}/newgfx.o\ + ${VIDEODIR}/m716text.o ${VIDEODIR}/procvid.o + +DOSOBJ= ${DOSDIR}/dosintrf.o ${DOSDIR}/gppro.o ${DOSDIR}/debug.o\ + ${DOSDIR}/initvid.o ${DOSDIR}/modemrtn.o ${DOSDIR}/sw32.o\ + ${DOSDIR}/joy.o ${DOSDIR}/sw.o ${DOSDIR}/vesa12.o ${DOSDIR}/vesa2.o\ + ${DOSDIR}/zloader.o ${DOSDIR}/zsipx.o ${DOSDIR}/zfile.o + +WINOBJ=${WINDIR}/copywin.o ${WINDIR}/winintrf.o ${WINDIR}/winlink.o\ + ${WINDIR}/zloaderw.o ${WINDIR}/ztcp.o ${WINDIR}/zipxw.o + +PREOBJ=${OBJDIR}/dosbuff.o ${OBJDIR}/ipx.o ${OBJDIR}/zipx.o + +ZIPOBJ=${ZIPDIR}/zzip.o ${ZIPDIR}/unzip.o ${ZIPDIR}/zpng.o + +MAINOBJ=cfgload.o endmem.o fixsin.o init.o ui.o vcache.o water.o + + +OBJS=${CHIPSOBJ} ${CPUOBJ} ${DOSOBJ} ${GUIOBJ} ${VIDEOBJ} ${PREOBJ} ${MAINOBJ} ${ZIPOBJ} +LIBS=-lz -lgcc -lm -lpng +CFLAGS=-O2 -fomit-frame-pointer -Wall -D__MSDOS__ +ASM=nasm +ASMFLAGS=-f coff -D__MSDOS__ +CC=gcc +PP=gpp + + +.SUFFIXES: .c .cpp .asm + +%.o: %.c + ${CC} ${CFLAGS} -o $@ -c $< + +%.o: %.cpp + ${PP} ${CFLAGS} -o $@ -c $< + +%.o: %.asm + ${ASM} ${ASMFLAGS} -o $@ $< + +ALL: zsnes.exe + +zsnes.exe: ${OBJS} + ${CC} -Ws -L./obj -s -o zsnes.exe ${OBJS} ${LIBS} + +${DOSDIR}/zloader.o: ${DOSDIR}/zloader.c +fixsin.o: fixsin.c +water.o: water.c +${DOSDIR}/zfile.o: ${DOSDIR}/zfile.c +${ZIPDIR}/unzip.o: ${ZIPDIR}/unzip.c ${ZIPDIR}/unzip.h +${ZIPDIR}/zzip.o: ${ZIPDIR}/zzip.c ${ZIPDIR}/unzip.h +${ZIPDIR}/zpng.o: ${ZIPDIR}/zpng.c ${ZIPDIR}/zpng.h ${ZIPDIR}/png.h +${VIDEODIR}/procvid.o: ${VIDEODIR}/procvid.asm macros.mac ${VIDEODIR}/copyvid.inc ${VIDEODIR}/2xSaImmx.inc +${CHIPDIR}/dsp1proc.o: ${CHIPDIR}/dsp1proc.asm macros.mac +${CHIPDIR}/sa1regs.o: ${CHIPDIR}/sa1regs.asm macros.mac\ + ${CPUDIR}/regs.mac ${CPUDIR}/regsw.mac +${CHIPDIR}/sfxproc.o: ${CHIPDIR}/sfxproc.asm macros.mac\ + ${CPUDIR}/regs.mac ${CPUDIR}/regsw.mac +${CHIPDIR}/dsp1emu.o: ${CHIPDIR}/dsp1emu.c betauser.mac +ui.o: ui.asm macros.mac betauser.mac +cfgload.o:cfgload.asm macros.mac +init.o:init.asm macros.mac +${DOSDIR}/debug.o: ${DOSDIR}/debug.asm macros.mac +${CPUDIR}/execute.o: ${CPUDIR}/execute.asm macros.mac +${CPUDIR}/table.o: ${CPUDIR}/table.asm ${CPUDIR}/65816d.inc\ + ${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816.inc\ + ${CPUDIR}/regs.mac ${CPUDIR}/regs.inc ${CPUDIR}/regsw.mac\ + ${CPUDIR}/regsw.inc macros.mac +${CPUDIR}/tableb.o: ${CPUDIR}/tableb.asm ${CPUDIR}/65816db.inc\ + ${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816b.inc\ + ${CPUDIR}/regs.mac macros.mac +${CPUDIR}/tablec.o: ${CPUDIR}/tablec.asm ${CPUDIR}/65816dc.inc\ + ${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816c.inc\ + ${CPUDIR}/regs.mac macros.mac +${CPUDIR}/stable.o: ${CPUDIR}/stable.asm ${CPUDIR}/s65816d.inc\ + ${CPUDIR}/saddress.inc ${CPUDIR}/saddrni.inc ${CPUDIR}/se65816.inc\ + macros.mac +${CPUDIR}/memory.o: ${CPUDIR}/memory.asm macros.mac +${CPUDIR}/dma.o: ${CPUDIR}/dma.asm macros.mac +${DOSDIR}/dosintrf.o: ${DOSDIR}/dosintrf.asm macros.mac +vcache.o:vcache.asm macros.mac +${DOSDIR}/initvid.o:${DOSDIR}/initvid.asm macros.mac +${VIDEODIR}/makevid.o: ${VIDEODIR}/makevid.asm ${VIDEODIR}/vidmacro.mac\ + macros.mac +${VIDEODIR}/makev16b.o: ${VIDEODIR}/makev16b.asm ${VIDEODIR}/vidmacro.mac\ + macros.mac +${VIDEODIR}/makev16t.o: ${VIDEODIR}/makev16t.asm ${VIDEODIR}/vidmacro.mac\ + macros.mac +${VIDEODIR}/mv16tms.o: ${VIDEODIR}/mv16tms.asm ${VIDEODIR}/vidmacro.mac\ + macros.mac +${VIDEODIR}/mode7.o: ${VIDEODIR}/mode7.asm ${VIDEODIR}/mode7.mac\ + macros.mac +${VIDEODIR}/mode716.o: ${VIDEODIR}/mode716.asm ${VIDEODIR}/mode716.mac\ + macros.mac +${VIDEODIR}/mode716b.o:${VIDEODIR}/mode716b.asm ${VIDEODIR}/mode7.mac\ + macros.mac +${VIDEODIR}/mode716t.o:${VIDEODIR}/mode716t.asm ${VIDEODIR}/mode7.mac\ + macros.mac +${VIDEODIR}/mode716d.o:${VIDEODIR}/mode716d.asm ${VIDEODIR}/mode7.mac\ + macros.mac +${VIDEODIR}/mode7ext.o:${VIDEODIR}/mode7ext.asm macros.mac +${VIDEODIR}/mode716e.o:${VIDEODIR}/mode716e.asm macros.mac +${VIDEODIR}/m716text.o:${VIDEODIR}/m716text.asm ${VIDEODIR}/mode7.mac\ + macros.mac +${CPUDIR}/irq.o: ${CPUDIR}/irq.asm macros.mac +${CPUDIR}/dspproc.o: ${CPUDIR}/dspproc.asm macros.mac +${CPUDIR}/spc700.o:${CPUDIR}/spc700.asm macros.mac\ + ${CPUDIR}/regsw.mac ${CPUDIR}/spcdef.inc ${CPUDIR}/spcaddr.inc +${CPUDIR}/dsp.o: ${CPUDIR}/dsp.asm macros.mac +${DOSDIR}/vesa2.o: ${DOSDIR}/vesa2.asm macros.mac +${DOSDIR}/vesa12.o: ${DOSDIR}/vesa12.asm macros.mac +${DOSDIR}/joy.o: ${DOSDIR}/joy.asm macros.mac +${DOSDIR}/sw.o: ${DOSDIR}/sw.asm macros.mac +${GUIDIR}/gui.o: ${GUIDIR}/gui.asm ${GUIDIR}/guitools.inc\ + ${GUIDIR}/guimisc.inc ${GUIDIR}/guimouse.inc ${GUIDIR}/guiwindp.inc\ + ${GUIDIR}/guinetpl.inc ${GUIDIR}/guikeys.inc ${GUIDIR}/guicheat.inc\ + ${GUIDIR}/guicombo.inc ${GUIDIR}/guiload.inc macros.mac +${GUIDIR}/menu.o: ${GUIDIR}/menu.asm macros.mac +${VIDEODIR}/newgfx.o:${VIDEODIR}/newgfx.asm ${VIDEODIR}/vidmacro.mac\ + ${VIDEODIR}/newgfx2.mac ${VIDEODIR}/newgfx.mac macros.mac +${VIDEODIR}/newgfx2.o:${VIDEODIR}/newgfx2.asm ${VIDEODIR}/newgfxwn.mac\ + ${VIDEODIR}/newgfx.mac macros.mac +${VIDEODIR}/newgfx16.o: ${VIDEODIR}/newgfx16.asm macros.mac ${VIDEODIR}/vidmacro.mac\ + ${VIDEODIR}/newgfx16.mac ${VIDEODIR}/newg162.mac +${VIDEODIR}/newg162.o: macros.mac ${VIDEODIR}/newg162.asm ${VIDEODIR}/newg162.mac\ + ${VIDEODIR}/vidmacro.mac ${VIDEODIR}/newg16wn.mac +${CHIPDIR}/fxemu2.o: ${CHIPDIR}/fxemu2.asm ${CHIPDIR}/fxemu2.mac\ + macros.mac +${CHIPSDIR}/fxemu2b.o: ${CHIPDIR}/fxemu2b.asm ${CHIPDIR}/fxemu2.mac\ + ${CHIPDIR}/fxemu2b.mac +${CHIPSDIR}/fxemu2c.o: ${CHIPDIR}/fxemu2c.asm macros.mac ${CHIPDIR}/fxemu2.mac\ + ${CHIPDIR}/fxemu2b.mac ${CHIPDIR}/fxemu2c.mac +${CHIPDIR}/fxtable.o: ${CHIPDIR}/fxtable.asm macros.mac +${DOSDIR}/gppro.o: ${DOSDIR}/gppro.asm macros.mac +${DOSDIR}/zsipx.o: ${DOSDIR}/zsipx.asm +${CHIPDIR}/sa1proc.o: ${CHIPDIR}/sa1proc.asm macros.mac +endmem.o: endmem.asm macros.mac +${DOSDIR}/modemrtn.o: ${DOSDIR}/modemrtn.asm macros.mac + +clean: + del *.o + del ${CHIPDIR}\*.o + del ${CPUDIR}\*.o + del ${VIDEODIR}\*.o + del ${GUIDIR}\*.o + del ${DOSDIR}\*.o + del ${ZIPDIR}\*.o + del zsnes.exe + diff --git a/zsnes/src/zip/zzip.c b/zsnes/src/zip/zzip.c index 0b2aafde..c01f973d 100644 --- a/zsnes/src/zip/zzip.c +++ b/zsnes/src/zip/zzip.c @@ -1,325 +1,336 @@ -//Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com ) -// -//This program is free software; you can redistribute it and/or -//modify it under the terms of the GNU General Public License -//as published by the Free Software Foundation; either -//version 2 of the License, or (at your option) any later -//version. -// -//This program is distributed in the hope that it will be useful, -//but WITHOUT ANY WARRANTY; without even the implied warranty of -//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -//GNU General Public License for more details. -// -//You should have received a copy of the GNU General Public License -//along with this program; if not, write to the Free Software -//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - -#ifdef __LINUX__ -#include "../gblhdr.h" -#else -#include -#include -#include -#include -#include -#include -#endif - -#include "unzip.h" - -#define CASESENSITIVITY (0) -#define WRITEBUFFERSIZE (8192) - - -unsigned int ZipError=0; -// 1 : Cannot open file -// 2 : Could not create directory -// 3 : Zip error -// 4 : Memory error -// 5 : Error opening file -// 6 : Error Writing file - -#ifndef __LINUX__ -struct utimbuf { - time_t actime; - time_t modtime; -}; -#endif - -void change_file_date(const char *filename,uLong dosdate,tm_unz tmu_date) -{ - struct utimbuf ut; - struct tm newdate; - newdate.tm_sec = tmu_date.tm_sec; - newdate.tm_min=tmu_date.tm_min; - newdate.tm_hour=tmu_date.tm_hour; - newdate.tm_mday=tmu_date.tm_mday; - newdate.tm_mon=tmu_date.tm_mon; - if (tmu_date.tm_year > 1900) - newdate.tm_year=tmu_date.tm_year - 1900; - else - newdate.tm_year=tmu_date.tm_year ; - newdate.tm_isdst=-1; - - ut.actime=ut.modtime=mktime(&newdate); - utime(filename,&ut); -} - - -int mymkdir(const char *dirname) -{ -#ifdef __LINUX__ - return(mkdir(dirname, (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH))); -#else - return(mkdir(dirname)); -#endif -} - -int makedir (char *newdir) -{ - char *buffer ; - char *p; - int len = strlen(newdir); - - if (len <= 0) - return 0; - - buffer = (char*)malloc(len+1); - strcpy(buffer,newdir); - - if (buffer[len-1] == '/') { - buffer[len-1] = '\0'; - } - if (mymkdir(buffer) == 0) - { - free(buffer); - return 1; - } - - p = buffer+1; - while (1) - { - char hold; - - while(*p && *p != '\\' && *p != '/') - p++; - hold = *p; - *p = 0; - if ((mymkdir(buffer) == -1) && (errno == ENOENT)) - { - ZipError=2; - free(buffer); - return 0; - } - if (hold == 0) - break; - *p++ = hold; - } - free(buffer); - return 1; -} - - - - -int do_extract_currentfile(unzFile uf, - const int* popt_extract_without_path, - int *popt_overwrite) -{ - char filename_inzip[256]; - char* filename_withoutpath; - char* p; - int err=UNZ_OK; - FILE *fout=NULL; - void* buf; - uInt size_buf; - - unz_file_info file_info; - err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); - - if (err!=UNZ_OK) - { - ZipError=3; - return err; - } - - size_buf = WRITEBUFFERSIZE; - buf = (void*)malloc(size_buf); - if (buf==NULL) - { - ZipError=4; - return UNZ_INTERNALERROR; - } - - p = filename_withoutpath = filename_inzip; - while ((*p) != '\0') - { - if (((*p)=='/') || ((*p)=='\\')) - filename_withoutpath = p+1; - p++; - } - - if ((*filename_withoutpath)=='\0') - { - if ((*popt_extract_without_path)==0) - { - mymkdir(filename_inzip); - } - } - else - { - char* write_filename; - int skip=0; - - if ((*popt_extract_without_path)==0) - write_filename = filename_inzip; - else - write_filename = filename_withoutpath; - - err = unzOpenCurrentFile(uf); - if (err!=UNZ_OK) - { - ZipError=4; - } - - if (((*popt_overwrite)==0) && (err==UNZ_OK)) - { - char rep='A'; - FILE* ftestexist; - ftestexist = fopen(write_filename,"rb"); - if (ftestexist!=NULL) - { - fclose(ftestexist); - rep='N'; - } - - if (rep == 'N') - skip = 1; - - if (rep == 'A') - *popt_overwrite=1; - } - - if ((skip==0) && (err==UNZ_OK)) - { - fout=fopen(write_filename,"wb"); - - /* some zipfile don't contain directory alone before file */ - if ((fout==NULL) && ((*popt_extract_without_path)==0) && - (filename_withoutpath!=(char*)filename_inzip)) - { - char c=*(filename_withoutpath-1); - *(filename_withoutpath-1)='\0'; - makedir(write_filename); - *(filename_withoutpath-1)=c; - fout=fopen(write_filename,"wb"); - } - - if (fout==NULL) - { - ZipError=5; - } - } - - if (fout!=NULL) - { - do - { - err = unzReadCurrentFile(uf,buf,size_buf); - if (err<0) - { - ZipError=4; - break; - } - if (err>0) - if (fwrite(buf,err,1,fout)!=1) - { - ZipError=6; - err=UNZ_ERRNO; - break; - } - } - while (err>0); - fclose(fout); - if (err==0) - change_file_date(write_filename,file_info.dosDate, - file_info.tmu_date); - } - - if (err==UNZ_OK) - { - err = unzCloseCurrentFile (uf); - if (err!=UNZ_OK) - { - ZipError=4; - } - } - else - unzCloseCurrentFile(uf); /* don't lose the error */ - } - - free(buf); - return err; -} - - -int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite) -{ - uLong i; - unz_global_info gi; - int err; - - err = unzGetGlobalInfo (uf,&gi); - if (err!=UNZ_OK) - ZipError=4; - - for (i=0;i +#include +#include +#include +#include +#include +#include +#endif + +#ifdef __MSDOS__ +#include +#endif + +#include "unzip.h" + +#define CASESENSITIVITY (0) +#define WRITEBUFFERSIZE (8192) + + +unsigned int ZipError=0; +// 1 : Cannot open file +// 2 : Could not create directory +// 3 : Zip error +// 4 : Memory error +// 5 : Error opening file +// 6 : Error Writing file + +#ifndef __LINUX__ +#ifndef __MSDOS__ +struct utimbuf { + time_t actime; + time_t modtime; +}; +#endif +#endif + +void change_file_date(const char *filename,uLong dosdate,tm_unz tmu_date) +{ + struct utimbuf ut; + struct tm newdate; + newdate.tm_sec = tmu_date.tm_sec; + newdate.tm_min=tmu_date.tm_min; + newdate.tm_hour=tmu_date.tm_hour; + newdate.tm_mday=tmu_date.tm_mday; + newdate.tm_mon=tmu_date.tm_mon; + if (tmu_date.tm_year > 1900) + newdate.tm_year=tmu_date.tm_year - 1900; + else + newdate.tm_year=tmu_date.tm_year ; + newdate.tm_isdst=-1; + + ut.actime=ut.modtime=mktime(&newdate); + utime(filename,&ut); +} + + +int mymkdir(const char *dirname) +{ +#ifdef __LINUX__ + return(mkdir(dirname, (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH))); +#else +#ifdef __MSDOS__ + return(mkdir(dirname, (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH))); +#else + return(mkdir(dirname)); +#endif +#endif +} + +int makedir (char *newdir) +{ + char *buffer ; + char *p; + int len = strlen(newdir); + + if (len <= 0) + return 0; + + buffer = (char*)malloc(len+1); + strcpy(buffer,newdir); + + if (buffer[len-1] == '/') { + buffer[len-1] = '\0'; + } + if (mymkdir(buffer) == 0) + { + free(buffer); + return 1; + } + + p = buffer+1; + while (1) + { + char hold; + + while(*p && *p != '\\' && *p != '/') + p++; + hold = *p; + *p = 0; + if ((mymkdir(buffer) == -1) && (errno == ENOENT)) + { + ZipError=2; + free(buffer); + return 0; + } + if (hold == 0) + break; + *p++ = hold; + } + free(buffer); + return 1; +} + + + + +int do_extract_currentfile(unzFile uf, + const int* popt_extract_without_path, + int *popt_overwrite) +{ + char filename_inzip[256]; + char* filename_withoutpath; + char* p; + int err=UNZ_OK; + FILE *fout=NULL; + void* buf; + uInt size_buf; + + unz_file_info file_info; + err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); + + if (err!=UNZ_OK) + { + ZipError=3; + return err; + } + + size_buf = WRITEBUFFERSIZE; + buf = (void*)malloc(size_buf); + if (buf==NULL) + { + ZipError=4; + return UNZ_INTERNALERROR; + } + + p = filename_withoutpath = filename_inzip; + while ((*p) != '\0') + { + if (((*p)=='/') || ((*p)=='\\')) + filename_withoutpath = p+1; + p++; + } + + if ((*filename_withoutpath)=='\0') + { + if ((*popt_extract_without_path)==0) + { + mymkdir(filename_inzip); + } + } + else + { + char* write_filename; + int skip=0; + + if ((*popt_extract_without_path)==0) + write_filename = filename_inzip; + else + write_filename = filename_withoutpath; + + err = unzOpenCurrentFile(uf); + if (err!=UNZ_OK) + { + ZipError=4; + } + + if (((*popt_overwrite)==0) && (err==UNZ_OK)) + { + char rep='A'; + FILE* ftestexist; + ftestexist = fopen(write_filename,"rb"); + if (ftestexist!=NULL) + { + fclose(ftestexist); + rep='N'; + } + + if (rep == 'N') + skip = 1; + + if (rep == 'A') + *popt_overwrite=1; + } + + if ((skip==0) && (err==UNZ_OK)) + { + fout=fopen(write_filename,"wb"); + + /* some zipfile don't contain directory alone before file */ + if ((fout==NULL) && ((*popt_extract_without_path)==0) && + (filename_withoutpath!=(char*)filename_inzip)) + { + char c=*(filename_withoutpath-1); + *(filename_withoutpath-1)='\0'; + makedir(write_filename); + *(filename_withoutpath-1)=c; + fout=fopen(write_filename,"wb"); + } + + if (fout==NULL) + { + ZipError=5; + } + } + + if (fout!=NULL) + { + do + { + err = unzReadCurrentFile(uf,buf,size_buf); + if (err<0) + { + ZipError=4; + break; + } + if (err>0) + if (fwrite(buf,err,1,fout)!=1) + { + ZipError=6; + err=UNZ_ERRNO; + break; + } + } + while (err>0); + fclose(fout); + if (err==0) + change_file_date(write_filename,file_info.dosDate, + file_info.tmu_date); + } + + if (err==UNZ_OK) + { + err = unzCloseCurrentFile (uf); + if (err!=UNZ_OK) + { + ZipError=4; + } + } + else + unzCloseCurrentFile(uf); /* don't lose the error */ + } + + free(buf); + return err; +} + + +int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite) +{ + uLong i; + unz_global_info gi; + int err; + + err = unzGetGlobalInfo (uf,&gi); + if (err!=UNZ_OK) + ZipError=4; + + for (i=0;i