mupen64plus-oldsvn/z64/rgl_settings.cpp

121 lines
3 KiB
C++

/*
* z64
*
* This program is free software; you can redistribute it and/
* or modify it under the terms of the GNU General Public Li-
* cence as published by the Free Software Foundation; either
* version 2 of the Licence, or any later version.
*
* This program is distributed in the hope that it will be use-
* ful, but WITHOUT ANY WARRANTY; without even the implied war-
* ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public Licence for more details.
*
* You should have received a copy of the GNU General Public
* Licence along with this program; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
* USA.
*
**/
#include "Gfx #1.3.h"
#include "rdp.h"
#include "rgl.h"
char rgl_cwd[512];
int rglReadSettings()
{
FILE * fp;
char line[512];
char section[256];
char key[256];
int value;
int i, ignore = 0;
char rom[21];
#ifdef WIN32
if (!rgl_cwd[0]) {
getcwd(rgl_cwd, 512-32);
LOG("getcwd = '%s'\n", rgl_cwd);
}
sprintf(line, "%s/Plugin/z64gl.conf", rgl_cwd);
fp = fopen(line, "r");
#else
char configName[PATH_MAX];
strcpy(rgl_cwd, ".");
strcpy(configName, g_ConfigDir);
strcat(configName, "z64gl.conf");
fp = fopen(configName, "r");
#endif
if (!fp) {
LOGERROR("Couldn't open z64gl config file\n");
return -1;
}
for (i=0; i<20; i++)
rom[i] = gfx.HEADER[(32+i)^3];
rom[20] = 0;
i = strlen(rom);
while (i > 0 && rom[i-1] == ' ')
rom[--i] = 0;
LOG("rom name '%s'\n", rom);
section[0] = 0;
while (fgets(line, 255, fp)) {
int l = strlen(line);
char * e;
if (l > 0 && line[l-1] == '\n') {
line[l-1] = 0;
l--;
}
if (line[0] == '#')
continue;
else if (sscanf(line, "[%21c]", section) == 1) {
for (i=0; i<21; i++)
if (section[i] == ']') {
section[i] = 0;
break;
}
LOG("section '%s'\n", section);
ignore = strcmp(section, rom) && strcmp(section, "override");
} else if (ignore)
continue;
if (sscanf(line , " %s = %d ", key, &value) == 2) {
LOG("key '%s' value %d\n", key, value);
if (!strcmp(key, "res_x"))
rglSettings.resX = value;
else if (!strcmp(key, "res_y"))
rglSettings.resY = value;
else if (!strcmp(key, "fs_res_x"))
rglSettings.fsResX = value;
else if (!strcmp(key, "fs_res_y"))
rglSettings.fsResY = value;
else if (!strcmp(key, "hires_fb"))
rglSettings.hiresFb = value;
else if (!strcmp(key, "fb_info"))
rglSettings.fbInfo = value;
else if (!strcmp(key, "force_swap"))
rglSettings.forceSwap = value;
else if (!strcmp(key, "threaded"))
rglSettings.threaded = value;
else if (!strcmp(key, "async"))
rglSettings.async = value;
else if (!strcmp(key, "no_npot_fbos"))
rglSettings.noNpotFbos = value;
else if (!strcmp(key, "lowres"))
rglSettings.lowres = value;
else
LOGERROR("Unknown config key '%s'\n", key);
}
}
fclose(fp);
return 0;
}