pcsxr/plugins/dfsound/cfg.c

156 lines
4.3 KiB
C
Executable File

/***************************************************************************
cfg.c - description
-------------------
begin : Wed May 15 2002
copyright : (C) 2002 by Pete Bernert
email : BlackDove@addcom.de
***************************************************************************/
/***************************************************************************
* *
* 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. See also the license.txt file for *
* additional informations. *
* *
***************************************************************************/
#include "stdafx.h"
#define _IN_CFG
#include "externals.h"
////////////////////////////////////////////////////////////////////////
// LINUX CONFIG/ABOUT HANDLING
////////////////////////////////////////////////////////////////////////
#include <unistd.h>
#if defined(__linux__)
#include <sys/types.h>
#include <sys/wait.h>
#endif
////////////////////////////////////////////////////////////////////////
// START EXTERNAL CFG TOOL
////////////////////////////////////////////////////////////////////////
void StartCfgTool(char * pCmdLine)
{
FILE * cf;
char filename[255];
strcpy(filename,"cfgDFSound");
cf=fopen(filename,"rb");
if(cf!=NULL)
{
int pid;
fclose(cf);
pid=fork();
if(pid==0)
{
if(fork()==0)
{
execl("./cfgDFSound","cfgDFSound",pCmdLine,NULL);
}
exit(0);
}
else if(pid>0)
{
waitpid(pid,NULL,0);
}
}
}
/////////////////////////////////////////////////////////
// READ LINUX CONFIG FILE
/////////////////////////////////////////////////////////
void ReadConfigFile(void)
{
FILE *in;char t[256];int len;
char * pB, * p;
strcpy(t,"dfsound.cfg");
in = fopen(t,"rb");
if(!in)
{
strcpy(t,"cfg/dfsound.cfg");
in = fopen(t,"rb");
if(!in)
{
sprintf(t,"%s/dfsound.cfg",getenv("HOME"));
in = fopen(t,"rb");
if(!in) return;
}
}
pB = (char *)malloc(32767);
memset(pB,0,32767);
len = fread(pB, 1, 32767, in);
fclose(in);
strcpy(t,"\nVolume");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
if(p) iVolume=4-atoi(p+len);
if(iVolume<1) iVolume=1;
if(iVolume>5) iVolume=5;
strcpy(t,"\nXAPitch");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
if(p) iXAPitch=atoi(p+len);
if(iXAPitch<0) iXAPitch=0;
if(iXAPitch>1) iXAPitch=1;
strcpy(t,"\nHighCompMode");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
if(p) iUseTimer=atoi(p+len);
if(iUseTimer<0) iUseTimer=0;
// note: timer mode 1 (win time events) is not supported
// in linux. But timer mode 2 (spuupdate) is safe to use.
if(iUseTimer) iUseTimer=2;
strcpy(t,"\nSPUIRQWait");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
if(p) iSPUIRQWait=atoi(p+len);
if(iSPUIRQWait<0) iSPUIRQWait=0;
if(iSPUIRQWait>1) iSPUIRQWait=1;
strcpy(t,"\nUseReverb");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
if(p) iUseReverb=atoi(p+len);
if(iUseReverb<0) iUseReverb=0;
if(iUseReverb>2) iUseReverb=2;
strcpy(t,"\nUseInterpolation");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
if(p) iUseInterpolation=atoi(p+len);
if(iUseInterpolation<0) iUseInterpolation=0;
if(iUseInterpolation>3) iUseInterpolation=3;
strcpy(t,"\nDisStereo");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
if(p) iDisStereo=atoi(p+len);
if(iDisStereo<0) iDisStereo=0;
if(iDisStereo>1) iDisStereo=1;
strcpy(t,"\nFreqResponse");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
if(p) iFreqResponse=atoi(p+len);
if(iFreqResponse<0) iFreqResponse=0;
if(iFreqResponse>1) iFreqResponse=1;
free(pB);
}
/////////////////////////////////////////////////////////
// READ CONFIG called by spu funcs
/////////////////////////////////////////////////////////
void ReadConfig(void)
{
iVolume=2;
iXAPitch=0;
iSPUIRQWait=1;
iUseTimer=2;
iUseReverb=2;
iUseInterpolation=2;
iDisStereo=0;
iFreqResponse=0;
ReadConfigFile();
}