1525 lines
41 KiB
C
1525 lines
41 KiB
C
/*
|
|
Copyright (C) 1997-2005 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
|
|
|
http://www.zsnes.com
|
|
http://sourceforge.net/projects/zsnes
|
|
|
|
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 __UNIXSDL__
|
|
#include "gblhdr.h"
|
|
#else
|
|
#include <io.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#ifndef _MSC_VER
|
|
#include <unistd.h>
|
|
#else
|
|
#include <direct.h>
|
|
#endif
|
|
#endif
|
|
|
|
#define StringA "FRAMESKIP"
|
|
#define StringB "AUTOFRAMESKIP"
|
|
#define StringC "PLAYER1DEVICE"
|
|
#define StringD "PLAYER2DEVICE"
|
|
#define StringE "SCANKEY1"
|
|
#define StringF "SCANKEY2"
|
|
#define StringG "SOUND"
|
|
#define StringH "SOUNDRATE"
|
|
#ifdef __WIN32__
|
|
#define StringI "VIDEOMODEWIN"
|
|
#endif
|
|
#ifdef __UNIXSDL__
|
|
#define StringI "VIDEOMODELIN"
|
|
#endif
|
|
#ifdef __MSDOS__
|
|
#define StringI "VIDEOMODEDOS"
|
|
#endif
|
|
#define StringJ "EXECUTE"
|
|
#define StringM "STEREO"
|
|
#define StringN "GUIDISABLE"
|
|
#define StringO "SCANLINES"
|
|
#define StringP "INTERPOLATION"
|
|
#define StringQ "ENTERSKIP"
|
|
#define StringR "FORCE8BIT"
|
|
#define StringS "SAVEDIRECTORY"
|
|
#define StringT "GAMEDIRECTORY"
|
|
#define StringU "JOYMAP1"
|
|
#define StringV "NEWGFX"
|
|
#define StringW "VSYNC"
|
|
#define StringX "VOLUME"
|
|
#define StringY "ECHODISABLE"
|
|
#define StringZ "REVERSESTEREO"
|
|
#define String1 "PL34TO12SHARE"
|
|
#define String2 "DONTSAVE"
|
|
#define String3 "REINITTIME"
|
|
|
|
#define ASCIIChar2Bool(x) (((x)-'0') ? 1 : 0)
|
|
|
|
extern char CMDLineStr[256];
|
|
extern char LoadDir[128];
|
|
extern char LoadDrive[2];
|
|
|
|
extern unsigned int pl2selk;
|
|
extern unsigned int pl2startk;
|
|
extern unsigned int pl2upk;
|
|
extern unsigned int pl2Ak;
|
|
extern unsigned int pl2Bk;
|
|
extern unsigned int pl2Lk;
|
|
extern unsigned int pl2Rk;
|
|
extern unsigned int pl2Xk;
|
|
extern unsigned int pl2Yk;
|
|
extern unsigned int pl2downk;
|
|
extern unsigned int pl2leftk;
|
|
extern unsigned int pl2rightk;
|
|
extern unsigned char pl2contrl;
|
|
|
|
extern unsigned int pl1selk;
|
|
extern unsigned int pl1startk;
|
|
extern unsigned int pl1upk;
|
|
extern unsigned int pl1Ak;
|
|
extern unsigned int pl1Bk;
|
|
extern unsigned int pl1Lk;
|
|
extern unsigned int pl1Rk;
|
|
extern unsigned int pl1Xk;
|
|
extern unsigned int pl1Yk;
|
|
extern unsigned int pl1downk;
|
|
extern unsigned int pl1leftk;
|
|
extern unsigned int pl1rightk;
|
|
extern unsigned char pl1contrl;
|
|
extern unsigned char JoyBC;
|
|
extern unsigned char JoyLC;
|
|
extern unsigned char JoyRC;
|
|
extern unsigned char JoySelec;
|
|
extern unsigned char JoyStart;
|
|
extern unsigned char JoyXC;
|
|
extern unsigned char JoyYC;
|
|
extern unsigned char JoyAC;
|
|
extern unsigned int per2exec;
|
|
extern unsigned int newengen;
|
|
extern char SRAMDrive[2];
|
|
extern unsigned char DontSavePath;
|
|
extern unsigned char guioff;
|
|
extern unsigned char frameskip;
|
|
extern unsigned char enterpress;
|
|
extern unsigned char cvidmode;
|
|
extern unsigned char antienab;
|
|
extern unsigned char StereoSound;
|
|
extern unsigned int SoundQuality;
|
|
extern unsigned char MusicRelVol;
|
|
extern unsigned char Force8b;
|
|
extern unsigned char scanlines;
|
|
extern unsigned char soundon;
|
|
extern unsigned char spcon;
|
|
extern unsigned char vsyncon;
|
|
|
|
extern unsigned char savecfgforce;
|
|
|
|
//extern void Open_File();
|
|
extern unsigned int ZFileRead();
|
|
extern unsigned int ZOpenMode;
|
|
extern unsigned int ZCloseFileHandle;
|
|
extern char *ZOpenFileName;
|
|
extern unsigned char *ZFileWriteBlock;
|
|
extern unsigned int ZFileWriteSize;
|
|
extern unsigned int ZFileWriteHandle;
|
|
extern unsigned char *ZFileReadBlock;
|
|
extern unsigned int ZFileReadHandle;
|
|
extern unsigned int ZFileReadSize;
|
|
extern unsigned int ZOpenFile(); //Create_File. Open_File
|
|
extern unsigned int ZFileWrite(); //Write_File();
|
|
extern unsigned int ZCloseFile(); //Close_File
|
|
|
|
#ifdef __UNIXSDL__
|
|
extern char zcfgdir[1024];
|
|
unsigned char cfgloadsdir = 1; //Set to yes, since savedir is always set and considered to be changed
|
|
#else
|
|
unsigned char cfgloadsdir = 0; //Only set to yes if modified in the paths window
|
|
#endif
|
|
|
|
|
|
char SRAMDir[1024];
|
|
|
|
char LoadDriveB[2];
|
|
char LoadDirB[128];
|
|
|
|
unsigned char cfgsoundon = 0;
|
|
unsigned char cfgSoundQuality = 5;
|
|
unsigned char cfgStereoSound = 1;
|
|
unsigned char cfgguioff = 0;
|
|
unsigned char cfgper2exec = 100;
|
|
unsigned char cfgcvidmode = 4;
|
|
unsigned char cfgscanline = 0;
|
|
unsigned char cfginterp = 0;
|
|
unsigned char cfgenterskip = 0;
|
|
unsigned char cfgforce8b = 0;
|
|
unsigned char cfgloadgdir = 0;
|
|
unsigned char cfgnewgfx = 0;
|
|
unsigned char cfgvsync = 0;
|
|
unsigned char cfgvolume = 75;
|
|
unsigned char cfgecho = 0;
|
|
unsigned char RevStereo = 0;
|
|
unsigned char JoyStatRead = 0;
|
|
unsigned char pl12s34 = 0;
|
|
unsigned char cfgdontsave = 0;
|
|
unsigned char cfgreinittime = 30;
|
|
|
|
#define ConvertJoyMapHelp(a,b,c)\
|
|
if(b == c) \
|
|
{\
|
|
if(c!=0)\
|
|
{ \
|
|
c+=0x81;\
|
|
a=c;\
|
|
}\
|
|
}
|
|
|
|
|
|
|
|
void ConvertJoyMap1()
|
|
{
|
|
unsigned int bl;
|
|
// Convert if 2,4,6, or sidewinder
|
|
if (pl1contrl == 2)
|
|
{
|
|
pl1Bk = 0x83;
|
|
pl1Yk = 0x82;
|
|
pl1upk = 0xCC;
|
|
pl1downk = 0xCD;
|
|
pl1leftk = 0xCE;
|
|
pl1rightk = 0xCF;
|
|
}
|
|
|
|
if (pl1contrl == 3 || pl1contrl == 4)
|
|
{
|
|
bl = 4;
|
|
}
|
|
else
|
|
{
|
|
bl = 0;
|
|
}
|
|
|
|
if (pl1contrl == 5)
|
|
{
|
|
bl = 6;
|
|
}
|
|
if (bl != 0)
|
|
{
|
|
// Convert button data
|
|
pl1upk = 0xCC;
|
|
pl1downk = 0xCD;
|
|
pl1leftk = 0xCE;
|
|
pl1rightk = 0xCF;
|
|
ConvertJoyMapHelp(JoyStart, bl, pl1startk);
|
|
ConvertJoyMapHelp(JoySelec, bl, pl1selk);
|
|
ConvertJoyMapHelp(JoyBC, bl, pl1Yk);
|
|
ConvertJoyMapHelp(JoyYC, bl, pl1Xk);
|
|
ConvertJoyMapHelp(JoyAC, bl, pl1Bk);
|
|
ConvertJoyMapHelp(JoyXC, bl, pl1Ak);
|
|
ConvertJoyMapHelp(JoyLC, bl, pl1Lk);
|
|
ConvertJoyMapHelp(JoyRC, bl, pl1Rk);
|
|
}
|
|
if (pl1contrl == 6)
|
|
{
|
|
pl1upk = 0xD4;
|
|
pl1downk = 0xD5;
|
|
pl1leftk = 0xD6;
|
|
pl1rightk = 0xD7;
|
|
pl1startk = 0xC8;
|
|
pl1selk = 0xC9;
|
|
pl1Ak = 0x89;
|
|
pl1Bk = 0x88;
|
|
pl1Xk = 0x8C;
|
|
pl1Yk = 0x8B;
|
|
pl1Lk = 0x8E;
|
|
pl1Rk = 0x8F;
|
|
}
|
|
return;
|
|
}
|
|
|
|
void ConvertJoyMap2()
|
|
{
|
|
unsigned int bl;
|
|
// mov al,[pl2contrl]
|
|
// Convert if 2,4,6, or sidewinder
|
|
//If pl1contrl=2 and pl2contrl=2, then set pl2 buttons to 3 & 4
|
|
if (pl2contrl == 2)
|
|
{
|
|
if (pl1contrl != 2)
|
|
{
|
|
pl2Bk = 0x83;
|
|
pl2Yk = 0x82;
|
|
pl2upk = 0xCC;
|
|
pl2downk = 0xCD;
|
|
pl2leftk = 0xCE;
|
|
pl2rightk = 0xCF;
|
|
}
|
|
else
|
|
{
|
|
pl2Bk = 0x85;
|
|
pl2Yk = 0x84;
|
|
pl2upk = 0xE8;
|
|
pl2downk = 0xE9;
|
|
pl2leftk = 0xEA;
|
|
pl2rightk = 0xEB;
|
|
}
|
|
}
|
|
|
|
if (pl2contrl == 3 || pl2contrl == 4)
|
|
{
|
|
bl = 4;
|
|
}
|
|
else
|
|
{
|
|
bl = 0;
|
|
}
|
|
|
|
if (pl2contrl == 5)
|
|
{
|
|
bl = 6;
|
|
}
|
|
|
|
if (bl != 0)
|
|
{
|
|
//Convert button data
|
|
pl2upk = 0xCC;
|
|
pl2downk = 0xCD;
|
|
pl2leftk = 0xCE;
|
|
pl2rightk = 0xCF;
|
|
ConvertJoyMapHelp(JoyStart, bl, pl2startk);
|
|
ConvertJoyMapHelp(JoySelec, bl, pl2selk);
|
|
ConvertJoyMapHelp(JoyBC, bl, pl2Yk);
|
|
ConvertJoyMapHelp(JoyYC, bl, pl2Xk);
|
|
ConvertJoyMapHelp(JoyAC, bl, pl2Bk);
|
|
ConvertJoyMapHelp(JoyXC, bl, pl2Ak);
|
|
ConvertJoyMapHelp(JoyLC, bl, pl2Lk);
|
|
ConvertJoyMapHelp(JoyRC, bl, pl2Rk);
|
|
}
|
|
|
|
//If both sidewinder, set pl2 buttons to sw2
|
|
if (pl2contrl == 6)
|
|
{
|
|
if (pl1contrl != 6)
|
|
{
|
|
pl2upk = 0xD4;
|
|
pl2downk = 0xD5;
|
|
pl2leftk = 0xD6;
|
|
pl2rightk = 0xD7;
|
|
pl2startk = 0xC8;
|
|
pl2selk = 0xC9;
|
|
pl2Ak = 0x89;
|
|
pl2Bk = 0x88;
|
|
pl2Xk = 0x8C;
|
|
pl2Yk = 0x8B;
|
|
pl2Lk = 0x8E;
|
|
pl2Rk = 0x8F;
|
|
}
|
|
else
|
|
{
|
|
pl2upk = 0xDC;
|
|
pl2downk = 0xDD;
|
|
pl2leftk = 0xDE;
|
|
pl2rightk = 0xDF;
|
|
pl2startk = 0xD0;
|
|
pl2selk = 0xD1;
|
|
pl2Ak = 0x91;
|
|
pl2Bk = 0x90;
|
|
pl2Xk = 0x94;
|
|
pl2Yk = 0x93;
|
|
pl2Lk = 0x96;
|
|
pl2Rk = 0x97;
|
|
pl2contrl = 7;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
void ConvertJoyMap()
|
|
{
|
|
if (JoyStatRead == 1)
|
|
{
|
|
ConvertJoyMap1();
|
|
ConvertJoyMap2();
|
|
}
|
|
return;
|
|
}
|
|
|
|
#define SAVE_LINE(a) fwrite(a, 1, strlen(a), fp)
|
|
#define WRITE_LINE(a) sprintf(buffer, a);\
|
|
SAVE_LINE(buffer);
|
|
|
|
|
|
void DOScreatenewcfg()
|
|
{
|
|
char buffer[4096];
|
|
FILE *fp = 0;
|
|
|
|
if (cfgdontsave && !savecfgforce)
|
|
{
|
|
return;
|
|
}
|
|
|
|
#ifdef __UNIXSDL__
|
|
chdir(zcfgdir);
|
|
#endif
|
|
|
|
fp = fopen(CMDLineStr, "wb");
|
|
if (!fp)
|
|
{
|
|
return;
|
|
}
|
|
|
|
WRITE_LINE("; ZSNES Configuration file\r\n\r\n");
|
|
WRITE_LINE("; Frame Skip: 0 = Auto, 1-10 = Skip 0 .. 9\r\n\r\n");
|
|
|
|
sprintf(buffer, "FrameSkip = %d\r\n\r\n", frameskip);
|
|
SAVE_LINE(buffer);
|
|
|
|
// WRITE_LINE("; Auto Frame Skip = 0 or 1 (1 = ON)\r\n\r\n");
|
|
|
|
// sprintf(buffer, "AutoFrameSkip = %d\r\n\r\n", (frameskip == 0) ? 1 : 0);
|
|
// SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Player 1/2 Input Device. Use the GUI to set these values\r\n");
|
|
WRITE_LINE("; NOTE : Using this to select joysticks manually will NOT work!\r\n\r\n");
|
|
|
|
sprintf(buffer, "Player1Device = %d\r\n", pl1contrl);
|
|
SAVE_LINE(buffer);
|
|
|
|
sprintf(buffer, "Player2Device = %d\r\n\r\n", pl2contrl);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Keyboard Scancodes/Joystick Mappings for Keyboard 1 & 2\r\n");
|
|
WRITE_LINE("; In order of Right, Left, Down, Up, Start, Select, B, Y, A, X, L, R\r\n");
|
|
WRITE_LINE("; Use the GUI to set these values\r\n\r\n");
|
|
|
|
sprintf(buffer, "ScanKey1 = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\r\n", pl1rightk, pl1leftk,
|
|
pl1downk, pl1upk, pl1startk, pl1selk, pl1Bk, pl1Yk, pl1Ak, pl1Xk, pl1Lk, pl1Rk);
|
|
SAVE_LINE(buffer);
|
|
|
|
sprintf(buffer, "ScanKey2 = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\r\n\r\n", pl2rightk, pl2leftk,
|
|
pl2downk, pl2upk, pl2startk, pl2selk, pl2Bk, pl2Yk, pl2Ak, pl2Xk, pl2Lk, pl2Rk);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Share Player 3 and 4 control inputs with Player 1 and 2 to allow\r\n");
|
|
WRITE_LINE("; 2 devices to be shared on a single player. This feature automatically\r\n");
|
|
WRITE_LINE("; disables MultiTap (Multiplayer 5) support. Set this to 1 to enable.\r\n\r\n");
|
|
|
|
sprintf(buffer, "Pl34to12Share = %d\r\n\r\n", pl12s34);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Percent to Execute [50 .. 150]\r\n\r\n");
|
|
|
|
sprintf(buffer, "Execute = %d\r\n\r\n", cfgper2exec);
|
|
SAVE_LINE(buffer);
|
|
|
|
#ifdef __WIN32__
|
|
WRITE_LINE("; Video Mode, 0 - 32\r\n");
|
|
WRITE_LINE("; 0 = 256x224 R WIN 1 = 256x224 R FULL\r\n");
|
|
WRITE_LINE("; 2 = 512x448 R WIN 3 = 512x448 DR WIN\r\n");
|
|
WRITE_LINE("; 4 = 640x480 S WIN 5 = 640x480 DS WIN\r\n");
|
|
WRITE_LINE("; 6 = 640x480 DR FULL 7 = 640x480 DS FULL\r\n");
|
|
WRITE_LINE("; 8 = 640x480 S FULL 9 = 768x672 R WIN\r\n");
|
|
WRITE_LINE("; 10 = 768x672 DR WIN 11 = 800x600 S WIN\r\n");
|
|
WRITE_LINE("; 12 = 800x600 DS WIN 13 = 800x600 S FULL\r\n");
|
|
WRITE_LINE("; 14 = 800x600 DR FULL 15 = 800x600 DS FULL\r\n");
|
|
WRITE_LINE("; 16 = 1024x768 S WIN 17 = 1024x768 DS WIN\r\n");
|
|
WRITE_LINE("; 18 = 1024x768 S FULL 19 = 1024x768 DR FULL\r\n");
|
|
WRITE_LINE("; 20 = 1024x768 DS FULL 21 = 1024x896 R WIN\r\n");
|
|
WRITE_LINE("; 22 = 1024x896 DR WIN 23 = 1280x960 S WIN\r\n");
|
|
WRITE_LINE("; 24 = 1280x960 DS WIN 25 = 1280x960 S FULL\r\n");
|
|
WRITE_LINE("; 26 = 1280x960 DR FULL 27 = 1280x960 DS FULL\r\n");
|
|
WRITE_LINE("; 28 = 1280x1024 S WIN 29 = 1280x1024 DS WIN\r\n");
|
|
WRITE_LINE("; 30 = 1280x1024 S FULL 31 = 1280x1024 DR FULL\r\n");
|
|
WRITE_LINE("; 32 = 1280x1024 DS FULL 33 = 1600x1200 S WIN\r\n");
|
|
WRITE_LINE("; 34 = 1600x1200 DS WIN 35 = 1600x1200 DR FULL\r\n");
|
|
WRITE_LINE("; 36 = 1600x1200 DS FULL\r\n\r\n");
|
|
sprintf(buffer, "VideoModeWin = %d\r\n\r\n", cfgcvidmode);
|
|
SAVE_LINE(buffer);
|
|
#endif
|
|
#ifdef __UNIXSDL__
|
|
#ifdef __OPENGL__
|
|
WRITE_LINE("; Video Mode, 0 - 21\r\n");
|
|
#else
|
|
WRITE_LINE("; Video Mode, 0 - 5\r\n");
|
|
#endif
|
|
WRITE_LINE("; 0 = 256x224 R WIN 1 = 256x224 R FULL\r\n");
|
|
WRITE_LINE("; 2 = 512x448 DR WIN 3 = 512x448 DR FULL\r\n");
|
|
WRITE_LINE("; 4 = 640x480 DR FULL 5 = 800x600 DR FULL\r\n");
|
|
#ifdef __OPENGL__
|
|
WRITE_LINE("; 6 = 256x224 OR WIN 7 = 512x448 ODR WIN\r\n");
|
|
WRITE_LINE("; 8 = 640x480 ODS FULL 9 = 640x480 ODS WIN\r\n");
|
|
WRITE_LINE("; 10 = 640x576 ODR WIN 11 = 768x672 ODR WIN\r\n");
|
|
WRITE_LINE("; 12 = 800x600 ODS FULL 13 = 800x600 ODS WIN\r\n");
|
|
WRITE_LINE("; 14 = 896x784 ODR WIN 15 = 1024x768 ODS FULL\r\n");
|
|
WRITE_LINE("; 16 = 1024x768 ODS WIN 17 = 1024x896 ODR WIN\r\n");
|
|
WRITE_LINE("; 18 = 1280x960 ODS FULL 19 = 1280x1024 ODS FULL\r\n");
|
|
WRITE_LINE("; 20 = 1600x1200 ODR FULL 21 = VARIABLE ODR WIN\r\n");
|
|
#endif
|
|
sprintf(buffer, "\r\nVideoModeLin = %d\r\n\r\n", cfgcvidmode);
|
|
SAVE_LINE(buffer);
|
|
|
|
#endif
|
|
#ifdef __MSDOS__
|
|
WRITE_LINE("; Video Mode, 0 - 18\r\n");
|
|
WRITE_LINE("; 0 = 256x224x8B (MODEQ) 1 = 256x240x8B (MODEQ)\r\n");
|
|
WRITE_LINE("; 2 = 256x256x8B (MODEQ) 3 = 320x224x8B (MODEX)\r\n");
|
|
WRITE_LINE("; 4 = 320x240x8B (MODEX) 5 = 320x256x8B (MODEX)\r\n");
|
|
WRITE_LINE("; 6 = 640x480x16B (VESA1) 7 = 320x240x8B (VESA2)\r\n");
|
|
WRITE_LINE("; 8 = 320x240x16B (VESA2) 9 = 320x480x8B (VESA2)\r\n");
|
|
WRITE_LINE("; 10 = 320x480x16B (VESA2) 11 = 512x384x8B (VESA2)\r\n");
|
|
WRITE_LINE("; 12 = 512x384x16B (VESA2) 13 = 640x400x8B (VESA2)\r\n");
|
|
WRITE_LINE("; 14 = 640x400x16B (VESA2) 15 = 640x480x8B (VESA2)\r\n");
|
|
WRITE_LINE("; 16 = 640x480x16B (VESA2) 17 = 800x600x8B (VESA2)\r\n");
|
|
WRITE_LINE("; 18 = 800x600x16B (VESA2)\r\n\r\n");
|
|
|
|
sprintf(buffer, "VideoModeDos = %d\r\n\r\n", cfgcvidmode);
|
|
SAVE_LINE(buffer);
|
|
#endif
|
|
WRITE_LINE("; Sound Emulation = 0 or 1 (1 = ON)\r\n\r\n");
|
|
|
|
sprintf(buffer, "Sound = %d\r\n\r\n", cfgsoundon);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Sound Sampling Rate\r\n");
|
|
WRITE_LINE("; 0 = 8,000 Hz, 1 = 11,025 Hz, 2 = 22,050 Hz\r\n");
|
|
WRITE_LINE("; 3 = 44,100 Hz, 4 = 16,000 Hz, 5 = 32,000 Hz\r\n");
|
|
WRITE_LINE("; 6 = 48,000 Hz\r\n\r\n");
|
|
|
|
sprintf(buffer, "SoundRate = %d\r\n\r\n", cfgSoundQuality);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Stereo (0 = off, 1 = on)\r\n\r\n");
|
|
sprintf(buffer, "Stereo = %d\r\n\r\n", cfgStereoSound);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Stereo Reversed. Swaps left channel with right. (0 = off, 1 = L <-> R)\r\n\r\n");
|
|
sprintf(buffer, "ReverseStereo = %d\r\n\r\n", RevStereo);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; GUI Disable (1 = Disable GUI, 0 = Enable GUI)\r\n\r\n");
|
|
sprintf(buffer, "GUIDisable = %d\r\n\r\n", cfgguioff);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; New Graphics Engine (1 = Enable, 0 = Disable)\r\n");
|
|
#ifdef __MSDOS__
|
|
WRITE_LINE("; All 256 color modes and 320x240x65536 supported\r\n");
|
|
#endif
|
|
sprintf(buffer, "\r\nNewGfx = %d\r\n\r\n", cfgnewgfx);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Scanlines (0 = Disable, 1 = Full, 2 = 25%%, 3 = 50%%)\r\n");
|
|
#ifdef __MSDOS__
|
|
WRITE_LINE("; 256x256x256 or 640x480 modes only (25%% and 50%% in 640x480x65536 mode only)\r\n");
|
|
#endif
|
|
sprintf(buffer, "\r\nScanlines = %d\r\n", cfgscanline);
|
|
SAVE_LINE(buffer);
|
|
#ifdef __MSDOS__
|
|
WRITE_LINE("\r\n; Interpolation (1 = Enable, 0 = Disable) - 640x480x65536 mode only\r\n");
|
|
WRITE_LINE("; This option also Enables EAGLE - 640x480x256 mode only\r\n");
|
|
#else
|
|
WRITE_LINE("; Interpolation (1 = Enable, 0 = Disable)\r\n");
|
|
#endif
|
|
sprintf(buffer, "\r\nInterpolation = %d\r\n\r\n", cfginterp);
|
|
SAVE_LINE(buffer);
|
|
|
|
#ifndef __UNIXSDL__
|
|
WRITE_LINE("; VSync (1 = Enable, 0 = Disable) - Wait for Vertical Sync (Fast cpu reqd)\r\n\r\n");
|
|
sprintf(buffer, "VSync = %d\r\n\r\n", cfgvsync);
|
|
SAVE_LINE(buffer);
|
|
|
|
#endif
|
|
#ifdef __MSDOS__
|
|
WRITE_LINE("; Skip Enter Press at Beginning (1 = Yes, 0 = No)\r\n\r\n");
|
|
sprintf(buffer, "EnterSkip = %d\r\n\r\n", cfgenterskip);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Force 8-bit sound on (1 = Yes, 0 = No)\r\n\r\n");
|
|
sprintf(buffer, "Force8bit = %d\r\n\r\n", cfgforce8b);
|
|
SAVE_LINE(buffer);
|
|
|
|
#endif
|
|
WRITE_LINE("; Disable Echo (1 = Yes, 0 = No)\r\n\r\n");
|
|
sprintf(buffer, "EchoDisable = %d\r\n\r\n", cfgecho);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Sound Volume Level (0 .. 100)\r\n");
|
|
WRITE_LINE("; Note : Setting this too high can cause sound overflow which degrades quality\r\n\r\n");
|
|
sprintf(buffer, "Volume = %d\r\n\r\n", cfgvolume);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Set this to 1 if you do not want ZSNES to save the configuration files.\r\n\r\n");
|
|
sprintf(buffer, "DontSave = %d\r\n\r\n", cfgdontsave);
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Savefile directory. Leave it blank if you want the save files to be in the\r\n");
|
|
WRITE_LINE("; same directory as the games. It should be in a format like : C:\\dir\\dir\r\n\r\n");
|
|
|
|
if (cfgloadsdir)
|
|
{
|
|
sprintf(buffer, "SaveDirectory = %s\r\n\r\n", SRAMDir);
|
|
}
|
|
else
|
|
{
|
|
sprintf(buffer, "SaveDirectory = \r\n\r\n");
|
|
}
|
|
SAVE_LINE(buffer);
|
|
|
|
WRITE_LINE("; Game directory. This is the directory where the GUI starts at.\r\n");
|
|
WRITE_LINE("; ZSNES automatically writes the current directory here upon exit.\r\n\r\n");
|
|
|
|
if (DontSavePath != 1)
|
|
{
|
|
#ifdef __UNIXSDL__
|
|
sprintf(buffer, "GameDirectory = %s\r\n\r\n", LoadDir);
|
|
#else
|
|
sprintf(buffer, "GameDirectory = %c:\\%s\r\n", (char) (*LoadDrive + 65), LoadDir);
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
#ifdef __UNIXSDL__
|
|
sprintf(buffer, "GameDirectory = %s\r\n\r\n", LoadDirB);
|
|
#else
|
|
sprintf(buffer, "GameDirectory = %c:\\%s\r\n", (char) (*LoadDriveB + 65), LoadDirB);
|
|
#endif
|
|
}
|
|
SAVE_LINE(buffer);
|
|
fclose(fp);
|
|
}
|
|
|
|
unsigned char _per2exec;
|
|
unsigned char _volume;
|
|
unsigned short _fileloc;
|
|
unsigned char _eofile;
|
|
unsigned char _ignore;
|
|
unsigned int _strlen;
|
|
unsigned int _stralen; // actual string length
|
|
unsigned int _strlena;
|
|
unsigned int _strlenb;
|
|
unsigned char _cchar;
|
|
unsigned char _forceauto;
|
|
char _string[128]; // full string
|
|
char _stringa[128];
|
|
char _stringb[128];
|
|
unsigned char _usespace;
|
|
|
|
void getcfg()
|
|
{
|
|
unsigned char button_select = 0;
|
|
int i = 0, j = 0;
|
|
char temp;
|
|
unsigned char no_save = 0;
|
|
_forceauto = 0;
|
|
|
|
//open file
|
|
ZOpenFileName = CMDLineStr;
|
|
ZOpenMode = 0;
|
|
i = ZOpenFile();
|
|
if (-1 != i)
|
|
{
|
|
_fileloc = i;
|
|
|
|
|
|
//mov [.fileloc],ax //handled above
|
|
_eofile = 0;
|
|
ZFileReadHandle = _fileloc;
|
|
ZFileReadSize = 1;
|
|
ZFileReadBlock = &_cchar;
|
|
|
|
do
|
|
{
|
|
_strlen = 0;
|
|
_stralen = 0;
|
|
_ignore = 0;
|
|
|
|
while (0 != (i = ZFileRead()))
|
|
{
|
|
if (_cchar == ';')
|
|
{
|
|
_strlen++;
|
|
_ignore = 1;
|
|
continue;
|
|
}
|
|
else if (_cchar == 13)
|
|
{
|
|
}
|
|
else if (_cchar == 10)
|
|
break;
|
|
else
|
|
{
|
|
if (_strlen <= 127)
|
|
{
|
|
if (_ignore != 1)
|
|
{
|
|
_string[_stralen] = _cchar;
|
|
_stralen++;
|
|
}
|
|
}
|
|
_strlen++;
|
|
}
|
|
}
|
|
|
|
if (i == 0)
|
|
_eofile = 1;
|
|
|
|
if (_stralen > 1)
|
|
{
|
|
_string[_stralen] = '\0';
|
|
//; search for ='s
|
|
i = 0;
|
|
j = 0;
|
|
do
|
|
{
|
|
if (_string[i] == '=')
|
|
j++;
|
|
i++;
|
|
}
|
|
while ((unsigned)i < _stralen);
|
|
|
|
if (j == 1)
|
|
{
|
|
i = 0;
|
|
j = 0;
|
|
_strlena = 0;
|
|
_strlenb = 0;
|
|
while ((unsigned)i < _stralen)
|
|
{
|
|
if (_string[i] == '=')
|
|
{
|
|
i++;
|
|
if ((unsigned)i == _stralen)
|
|
continue;
|
|
j = 0;
|
|
_usespace = 0;
|
|
while ((unsigned)i < _stralen)
|
|
{
|
|
temp = _string[i];
|
|
if (_usespace || temp != ' ')
|
|
{
|
|
#ifndef __UNIXSDL__
|
|
if (temp >= 'a' && temp <= 'z')
|
|
temp -= ('a' - 'A');
|
|
#endif
|
|
_usespace = 1;
|
|
_stringb[j] = temp;
|
|
_strlenb++;
|
|
j++;
|
|
}
|
|
i++;
|
|
}
|
|
_stringb[_strlenb] = '\0';
|
|
}
|
|
else
|
|
{
|
|
if (_string[i] != ' ')
|
|
{
|
|
temp = _string[i];
|
|
if (_string[i] >= 'a' && _string[i] <= 'z')
|
|
{
|
|
temp -= ('a' - 'A');
|
|
}
|
|
_stringa[j] = temp;
|
|
_strlena++;
|
|
j++;
|
|
}
|
|
|
|
i++;
|
|
}
|
|
}
|
|
_stringa[_strlena] = '\0';
|
|
no_save = 0;
|
|
|
|
if (_strlena != 0 && _strlenb != 0)
|
|
{
|
|
if (_strlena == strlen(StringA))
|
|
{
|
|
if (!strcmp(StringA, _stringa))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb >= '0' && *_stringb <= '9')
|
|
{
|
|
if (_forceauto != 1)
|
|
{
|
|
frameskip = *_stringb - 48;//shouldn't this be 48??
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringB))
|
|
{
|
|
if (!strcmp(StringB, _stringa))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
{
|
|
_forceauto = 1;
|
|
frameskip = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringC))
|
|
{
|
|
if (!strcmp(_stringa, StringC))
|
|
{
|
|
if (_strlenb == 2)
|
|
{
|
|
if (*_stringb == '1')
|
|
{
|
|
if (_stringb[1] >= '0' && _stringb[1] <= '8')
|
|
{
|
|
pl1contrl = _stringb[1] - 38;
|
|
}
|
|
}
|
|
}
|
|
else if (_strlenb == 1)
|
|
{
|
|
if (*_stringb >= '0' && *_stringb <= '9')
|
|
{
|
|
pl1contrl = *_stringb - 48;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringD))
|
|
{
|
|
if (!strcmp(_stringa, StringD))
|
|
{
|
|
if (_strlenb == 2)
|
|
{
|
|
if (*_stringb == '1')
|
|
{
|
|
if (_stringb[1] >= '0' && _stringb[1] <= '8')
|
|
{
|
|
pl2contrl = _stringb[1] - 38;
|
|
}
|
|
}
|
|
}
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb >= '0' && *_stringb <= '9')
|
|
{
|
|
pl2contrl = *_stringb - 48;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringE))
|
|
{
|
|
if (!strcmp(_stringa, StringE))
|
|
{
|
|
i = 0;
|
|
j = 0;
|
|
button_select = 0;
|
|
while (_strlenb > 0)
|
|
{
|
|
if (_stringb[i] != ',')
|
|
{
|
|
if (_stringb[i] < '0' || _stringb[i] > '9')
|
|
{
|
|
i++;
|
|
_strlenb--;
|
|
continue;
|
|
}
|
|
j *= 10;
|
|
j += ((_stringb[i] - 48) & 0xFF);
|
|
}
|
|
if (_stringb[i] == ',')
|
|
{
|
|
// In order of Right, Left, Down, Up, Start, Select, A, B, X, Y, L, R
|
|
if (button_select == 0)
|
|
pl1rightk = j;
|
|
|
|
if (button_select == 1)
|
|
pl1leftk = j;
|
|
|
|
if (button_select == 2)
|
|
pl1downk = j;
|
|
|
|
if (button_select == 3)
|
|
pl1upk = j;
|
|
|
|
if (button_select == 4)
|
|
pl1startk = j;
|
|
|
|
if (button_select == 5)
|
|
pl1selk = j;
|
|
|
|
if (button_select == 6)
|
|
pl1Bk = j;
|
|
|
|
if (button_select == 7)
|
|
pl1Yk = j;
|
|
|
|
if (button_select == 8)
|
|
pl1Ak = j;
|
|
|
|
if (button_select == 9)
|
|
pl1Xk = j;
|
|
|
|
if (button_select == 10)
|
|
pl1Lk = j;
|
|
|
|
if (button_select == 11)
|
|
pl1Rk = j;
|
|
|
|
j = 0;
|
|
button_select++;
|
|
}
|
|
i++;
|
|
_strlenb--;
|
|
}
|
|
if (_strlenb == 0)
|
|
{
|
|
// In order of Right, Left, Down, Up, Start, Select, A, B, X, Y, L, R
|
|
if (button_select == 0)
|
|
pl1rightk = j;
|
|
|
|
if (button_select == 1)
|
|
pl1leftk = j;
|
|
|
|
if (button_select == 2)
|
|
pl1downk = j;
|
|
|
|
if (button_select == 3)
|
|
pl1upk = j;
|
|
|
|
if (button_select == 4)
|
|
pl1startk = j;
|
|
|
|
if (button_select == 5)
|
|
pl1selk = j;
|
|
|
|
if (button_select == 6)
|
|
pl1Bk = j;
|
|
|
|
if (button_select == 7)
|
|
pl1Yk = j;
|
|
|
|
if (button_select == 8)
|
|
pl1Ak = j;
|
|
|
|
if (button_select == 9)
|
|
pl1Xk = j;
|
|
|
|
if (button_select == 10)
|
|
pl1Lk = j;
|
|
|
|
if (button_select == 11)
|
|
pl1Rk = j;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringF))
|
|
{
|
|
if (!strcmp(_stringa, StringF))
|
|
{
|
|
i = 0;
|
|
j = 0;
|
|
button_select = 0;
|
|
while (_strlenb != 0)
|
|
{
|
|
if (_stringb[i] != ',')
|
|
{
|
|
if (_stringb[i] < '0' || _stringb[i] > '9')
|
|
{
|
|
i++;
|
|
_strlenb--;
|
|
continue;
|
|
}
|
|
j *= 10;
|
|
j += ((_stringb[i] - 48) & 0xFF);
|
|
}
|
|
if (_stringb[i] == ',')
|
|
{
|
|
// In order of Right, Left, Down, Up, Start, Select, A, B, X, Y, L, R
|
|
if (button_select == 0)
|
|
pl2rightk = j;
|
|
|
|
if (button_select == 1)
|
|
pl2leftk = j;
|
|
|
|
if (button_select == 2)
|
|
pl2downk = j;
|
|
|
|
if (button_select == 3)
|
|
pl2upk = j;
|
|
|
|
if (button_select == 4)
|
|
pl2startk = j;
|
|
|
|
if (button_select == 5)
|
|
pl2selk = j;
|
|
|
|
if (button_select == 6)
|
|
pl2Bk = j;
|
|
|
|
if (button_select == 7)
|
|
pl2Yk = j;
|
|
|
|
if (button_select == 8)
|
|
pl2Ak = j;
|
|
|
|
if (button_select == 9)
|
|
pl2Xk = j;
|
|
|
|
if (button_select == 10)
|
|
pl2Lk = j;
|
|
|
|
if (button_select == 11)
|
|
pl2Rk = j;
|
|
|
|
j = 0;
|
|
button_select++;
|
|
}
|
|
i++;
|
|
_strlenb--;
|
|
}
|
|
if (_strlenb == 0)
|
|
{
|
|
// In order of Right, Left, Down, Up, Start, Select, A, B, X, Y, L, R
|
|
if (button_select == 0)
|
|
pl2rightk = j;
|
|
|
|
if (button_select == 1)
|
|
pl2leftk = j;
|
|
|
|
if (button_select == 2)
|
|
pl2downk = j;
|
|
|
|
if (button_select == 3)
|
|
pl2upk = j;
|
|
|
|
if (button_select == 4)
|
|
pl2startk = j;
|
|
|
|
if (button_select == 5)
|
|
pl2selk = j;
|
|
|
|
if (button_select == 6)
|
|
pl2Bk = j;
|
|
|
|
if (button_select == 7)
|
|
pl2Yk = j;
|
|
|
|
if (button_select == 8)
|
|
pl2Ak = j;
|
|
|
|
if (button_select == 9)
|
|
pl2Xk = j;
|
|
|
|
if (button_select == 10)
|
|
pl2Lk = j;
|
|
|
|
if (button_select == 11)
|
|
pl2Rk = j;
|
|
|
|
j = 0;
|
|
button_select++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringG))
|
|
{
|
|
if (!strcmp(_stringa, StringG))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
spcon = ASCIIChar2Bool(*_stringb); // SPC Enabled?
|
|
soundon = ASCIIChar2Bool(*_stringb);
|
|
cfgsoundon = ASCIIChar2Bool(*_stringb);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringH))
|
|
{
|
|
if (!strcmp(_stringa, StringH))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb >= '0' && *_stringb <= '6')
|
|
{
|
|
SoundQuality = *_stringb - 48;
|
|
cfgSoundQuality = *_stringb - 48;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringI))
|
|
{
|
|
if (!strcmp(_stringa, StringI))
|
|
{
|
|
if (_strlenb == 2)
|
|
{
|
|
if (*_stringb == '1')
|
|
{
|
|
cvidmode = _stringb[1] - 38;
|
|
cfgcvidmode = _stringb[1] - 38;
|
|
}
|
|
if (*_stringb == '2')
|
|
{
|
|
cvidmode = _stringb[1] - 28;
|
|
cfgcvidmode = _stringb[1] - 28;
|
|
}
|
|
if (*_stringb == '3')
|
|
{
|
|
cvidmode = _stringb[1] - 18;
|
|
cfgcvidmode = _stringb[1] - 18;
|
|
}
|
|
}
|
|
else if (_strlenb == 1)
|
|
{
|
|
if (*_stringb >= '0' && *_stringb <= '9')
|
|
{
|
|
cvidmode = *_stringb - 48;
|
|
cfgcvidmode = *_stringb - 48;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringJ))
|
|
{
|
|
if (!strcmp(_stringa, StringJ))
|
|
{
|
|
if (_strlenb != 0)
|
|
{
|
|
i = 0;
|
|
_per2exec = 0;
|
|
do
|
|
{
|
|
if (_per2exec >= 100)
|
|
{
|
|
no_save = 1;
|
|
break; //needs to go pasr setting the vars.
|
|
}
|
|
_per2exec *= 10;
|
|
if (_stringb[i] >= '0' && _stringb[i] <= '9')
|
|
{
|
|
_per2exec += (_stringb[i] - 48);
|
|
}
|
|
else
|
|
{
|
|
no_save = 1;
|
|
break; //needs to go pasr setting the vars.
|
|
}
|
|
i++;
|
|
}
|
|
while ((unsigned)i < _strlenb);
|
|
if ((_per2exec<150 && _per2exec>50) && !no_save)
|
|
{
|
|
per2exec = _per2exec;
|
|
cfgper2exec = _per2exec;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (_strlena == strlen(StringM))
|
|
{
|
|
if (!strcmp(StringM, _stringa))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
StereoSound = ASCIIChar2Bool(*_stringb);
|
|
cfgStereoSound = ASCIIChar2Bool(*_stringb);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringN))
|
|
{
|
|
if (!strcmp(StringN, _stringa))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
{
|
|
guioff = 1;
|
|
cfgguioff = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringO))
|
|
{
|
|
if (!strcmp(StringO, _stringa))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
{
|
|
scanlines = 1;
|
|
cfgscanline = 1;
|
|
}
|
|
if (*_stringb == '2')
|
|
{
|
|
scanlines = 2;
|
|
cfgscanline = 2;
|
|
}
|
|
if (*_stringb == '3')
|
|
{
|
|
scanlines = 3;
|
|
cfgscanline = 3;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringP))
|
|
{
|
|
if (!strcmp(_stringa, StringP))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
{
|
|
antienab = 1;
|
|
cfginterp = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringQ))
|
|
{
|
|
if (!strcmp(_stringa, StringQ))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
{
|
|
enterpress = 1;
|
|
cfgenterskip = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringR))
|
|
{
|
|
if (!strcmp(_stringa, StringR))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
{
|
|
Force8b = 1;
|
|
cfgforce8b = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringS))
|
|
{
|
|
if (!strcmp(_stringa, StringS))
|
|
{
|
|
if (_strlenb >= 1)
|
|
{
|
|
cfgloadsdir = 1;
|
|
strncpy(SRAMDir, _stringb, _strlenb);
|
|
SRAMDir[_strlenb]='\0';
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringT))
|
|
{
|
|
if (!strcmp(_stringa, StringT))
|
|
{
|
|
if (_strlenb >= 3)
|
|
{
|
|
#ifndef __UNIXSDL__
|
|
if (_stringb[1] == ':' && _stringb[2] == '\\')
|
|
{
|
|
cfgloadgdir = 1;
|
|
*LoadDrive = (char) (_stringb[0] - 65);
|
|
LoadDriveB[0] = _stringb[0] - 65;
|
|
strncpy(LoadDir, _stringb + 3, _strlenb - 3);
|
|
*(LoadDir + (_strlenb - 3)) = '\0';
|
|
|
|
#else
|
|
cfgloadgdir = 1;
|
|
strncpy(LoadDir, _stringb, _strlenb);
|
|
LoadDir[_strlenb] = '\0';
|
|
|
|
#endif
|
|
strcpy(LoadDirB, LoadDir);
|
|
#ifndef __UNIXSDL__
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringU))
|
|
{
|
|
if (!strcmp(_stringa, StringU))
|
|
{
|
|
JoyStatRead = 1;
|
|
i = 0;
|
|
button_select = 0;
|
|
j = 0;
|
|
while (_strlenb != 0)
|
|
{
|
|
if (_stringb[i] != ',')
|
|
{
|
|
if (_stringb[i] < '0' || _stringb[i] > '9')
|
|
{
|
|
i++;
|
|
_strlenb--;
|
|
continue;
|
|
}
|
|
j *= 10;
|
|
j += (_stringb[i] - 48);
|
|
}
|
|
if (_strlenb == 0 || _stringb[i] == ',')
|
|
{
|
|
// In order of Start, Select, B, Y, A, X, L, R
|
|
if (button_select == 0)
|
|
JoyStart = j;
|
|
|
|
if (button_select == 1)
|
|
JoySelec = j;
|
|
|
|
if (button_select == 2)
|
|
JoyBC = j;
|
|
|
|
if (button_select == 3)
|
|
JoyYC = j;
|
|
|
|
if (button_select == 4)
|
|
JoyAC = j;
|
|
|
|
if (button_select == 5)
|
|
JoyXC = j;
|
|
|
|
if (button_select == 6)
|
|
JoyLC = j;
|
|
|
|
if (button_select == 7)
|
|
JoyRC = j;
|
|
|
|
j = 0;
|
|
button_select++;
|
|
}
|
|
i++;
|
|
_strlenb--;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringV))
|
|
{
|
|
if (!strcmp(_stringa, StringV))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
{
|
|
newengen = 1;
|
|
cfgnewgfx = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringW))
|
|
{
|
|
if (!strcmp(_stringa, StringW))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
{
|
|
vsyncon = 1;
|
|
cfgvsync = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringX))
|
|
{
|
|
if (!strcmp(_stringa, StringX))
|
|
{
|
|
if (_strlenb != 0)
|
|
{
|
|
i = 0;
|
|
_volume = 0;
|
|
do
|
|
{
|
|
if (_volume >= 100)
|
|
{
|
|
no_save = 1;
|
|
break; //needs to go pasr setting the vars.
|
|
}
|
|
_volume *= 10;
|
|
if (_stringb[i] >= '0' && _stringb[i] <= '9')
|
|
_volume += (_stringb[i] - 48);
|
|
else
|
|
{
|
|
no_save = 1;
|
|
break; //needs to go pasr setting the vars.
|
|
}
|
|
i++;
|
|
}
|
|
while ((unsigned)i < _strlenb);
|
|
if (_volume <= 100 && !no_save)
|
|
{
|
|
MusicRelVol = _volume;
|
|
cfgvolume = _volume;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringY))
|
|
{
|
|
if (!strcmp(_stringa, StringY))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
cfgecho = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(StringZ))
|
|
{
|
|
if (!strcmp(_stringa, StringZ))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
RevStereo = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(String1))
|
|
{
|
|
if (!strcmp(String1, _stringa))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
pl12s34 = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(String2))
|
|
{
|
|
if (!strcmp(_stringa, String2))
|
|
{
|
|
if (_strlenb == 1)
|
|
{
|
|
if (*_stringb == '1')
|
|
cfgdontsave = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_strlena == strlen(String3))
|
|
{
|
|
if (!strcmp(_stringa, String3))
|
|
{
|
|
if (_strlenb == 0)
|
|
{
|
|
i = 0;
|
|
_per2exec = 0;
|
|
do
|
|
{
|
|
if (_per2exec >= 100)
|
|
{
|
|
no_save = 1;
|
|
break; //should go past the setting of cfgreinit
|
|
}
|
|
_per2exec *= 10;
|
|
if (_stringb[i] >= '0' && _stringb[i] <= '9')
|
|
{
|
|
_per2exec += (_stringb[i] - 48);
|
|
}
|
|
else
|
|
{
|
|
no_save = 1;
|
|
break;
|
|
}
|
|
i++;
|
|
}
|
|
while ((unsigned)i < _strlenb);
|
|
if ((_per2exec<150 && _per2exec>5) && !no_save)//shouldn't this be 50?
|
|
cfgreinittime = _per2exec;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
while (_eofile == 0);
|
|
ZCloseFileHandle = _fileloc;
|
|
ZCloseFile();
|
|
}
|
|
else
|
|
{
|
|
DOScreatenewcfg();
|
|
}
|
|
}
|
|
|
|
unsigned char SRAMChdirFail = 0;
|
|
|
|
void SRAMChdir()
|
|
{
|
|
if (!chdir(SRAMDir))
|
|
{
|
|
SRAMChdirFail = 0;
|
|
}
|
|
else
|
|
{
|
|
SRAMChdirFail = 1;
|
|
}
|
|
}
|
|
|
|
void SRAMDirCurDir()
|
|
{
|
|
getcwd(SRAMDir,1024);
|
|
}
|
|
|
|
void UpChdir()
|
|
{
|
|
chdir("..");
|
|
}
|