2010-09-24 02:48:03 +02:00
|
|
|
/****************************************************************************
|
2010-09-19 22:25:12 +02:00
|
|
|
* Copyright (C) 2010
|
|
|
|
* by Dimok
|
|
|
|
*
|
|
|
|
* This software is provided 'as-is', without any express or implied
|
|
|
|
* warranty. In no event will the authors be held liable for any
|
|
|
|
* damages arising from the use of this software.
|
|
|
|
*
|
|
|
|
* Permission is granted to anyone to use this software for any
|
|
|
|
* purpose, including commercial applications, and to alter it and
|
|
|
|
* redistribute it freely, subject to the following restrictions:
|
|
|
|
*
|
|
|
|
* 1. The origin of this software must not be misrepresented; you
|
|
|
|
* must not claim that you wrote the original software. If you use
|
|
|
|
* this software in a product, an acknowledgment in the product
|
|
|
|
* documentation would be appreciated but is not required.
|
|
|
|
*
|
|
|
|
* 2. Altered source versions must be plainly marked as such, and
|
|
|
|
* must not be misrepresented as being the original software.
|
|
|
|
*
|
|
|
|
* 3. This notice may not be removed or altered from any source
|
|
|
|
* distribution.
|
|
|
|
***************************************************************************/
|
|
|
|
#include <ogcsys.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "CSettings.h"
|
2010-09-25 08:54:27 +02:00
|
|
|
#include "CGameSettings.h"
|
2010-09-25 10:51:44 +02:00
|
|
|
#include "CGameStatistics.h"
|
2010-09-19 22:25:12 +02:00
|
|
|
#include "language/gettext.h"
|
2010-09-24 19:58:56 +02:00
|
|
|
#include "themes/CTheme.h"
|
2010-09-25 08:54:27 +02:00
|
|
|
#include "FileOperations/fileops.h"
|
2010-09-19 22:25:12 +02:00
|
|
|
|
|
|
|
CSettings Settings;
|
|
|
|
|
|
|
|
CSettings::CSettings()
|
|
|
|
{
|
2010-09-24 19:58:56 +02:00
|
|
|
CONF_Init();
|
2010-09-19 22:25:12 +02:00
|
|
|
strcpy(BootDevice, "SD:");
|
2010-11-28 16:31:08 +01:00
|
|
|
snprintf(ConfigPath, sizeof(ConfigPath), "%s/config/", BootDevice);
|
2010-09-19 22:25:12 +02:00
|
|
|
this->SetDefault();
|
|
|
|
}
|
|
|
|
|
|
|
|
CSettings::~CSettings()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void CSettings::SetDefault()
|
|
|
|
{
|
2010-11-28 16:31:08 +01:00
|
|
|
snprintf(covers_path, sizeof(covers_path), "%simages/", ConfigPath);
|
|
|
|
snprintf(covers2d_path, sizeof(covers2d_path), "%simages/2D/", ConfigPath);
|
|
|
|
snprintf(disc_path, sizeof(disc_path), "%simages/disc/", ConfigPath);
|
|
|
|
snprintf(titlestxt_path, sizeof(titlestxt_path), "%s", ConfigPath);
|
|
|
|
snprintf(languagefiles_path, sizeof(languagefiles_path), "%slanguage/", ConfigPath);
|
2010-09-24 02:48:03 +02:00
|
|
|
snprintf(update_path, sizeof(update_path), "%s/apps/usbloader_gx/", BootDevice);
|
2010-11-28 16:31:08 +01:00
|
|
|
snprintf(theme_downloadpath, sizeof(theme_downloadpath), "%sthemes/", ConfigPath);
|
2010-09-24 02:48:03 +02:00
|
|
|
snprintf(homebrewapps_path, sizeof(homebrewapps_path), "%s/apps/", BootDevice);
|
2010-11-28 16:31:08 +01:00
|
|
|
snprintf(Cheatcodespath, sizeof(Cheatcodespath), "%scodes/", ConfigPath);
|
|
|
|
snprintf(TxtCheatcodespath, sizeof(TxtCheatcodespath), "%stxtcodes/", ConfigPath);
|
|
|
|
snprintf(BcaCodepath, sizeof(BcaCodepath), "%sbca/", ConfigPath);
|
|
|
|
snprintf(WipCodepath, sizeof(WipCodepath), "%swip/", ConfigPath);
|
|
|
|
snprintf(theme_path, sizeof(theme_path), "%stheme/", ConfigPath);
|
2010-09-24 02:48:03 +02:00
|
|
|
snprintf(dolpath, sizeof(dolpath), "%s/", BootDevice);
|
2010-11-07 21:31:45 +01:00
|
|
|
strcpy(language_path, "");
|
2010-09-19 22:25:12 +02:00
|
|
|
strcpy(ogg_path, "");
|
|
|
|
strcpy(unlockCode, "");
|
|
|
|
|
2010-10-27 16:45:27 +02:00
|
|
|
videomode = VIDEO_MODE_DISCDEFAULT;
|
|
|
|
videopatch = OFF;
|
|
|
|
language = CONSOLE_DEFAULT;
|
|
|
|
ocarina = OFF;
|
|
|
|
hddinfo = CLOCK_HR12;
|
|
|
|
sinfo = ON;
|
|
|
|
rumble = ON;
|
2010-11-07 21:31:45 +01:00
|
|
|
GameSort = SORT_ABC;
|
2010-09-19 22:25:12 +02:00
|
|
|
volume = 80;
|
|
|
|
sfxvolume = 80;
|
|
|
|
gamesoundvolume = 80;
|
2010-10-27 16:45:27 +02:00
|
|
|
tooltips = ON;
|
2010-09-19 22:25:12 +02:00
|
|
|
gamesound = 1;
|
|
|
|
parentalcontrol = 0;
|
2010-09-28 20:58:56 +02:00
|
|
|
lockedgames = 0;
|
2010-11-07 21:31:45 +01:00
|
|
|
cios = 222;
|
2010-10-27 16:45:27 +02:00
|
|
|
xflip = XFLIP_NO;
|
|
|
|
quickboot = OFF;
|
2010-09-19 22:25:12 +02:00
|
|
|
wiilight = 1;
|
|
|
|
autonetwork = 0;
|
|
|
|
discart = 0;
|
|
|
|
patchcountrystrings = 0;
|
|
|
|
gridRows = 3;
|
|
|
|
error002 = 2;
|
|
|
|
titlesOverride = 1;
|
|
|
|
db_JPtoEN = 0;
|
|
|
|
screensaver = 3;
|
|
|
|
musicloopmode = 1;
|
|
|
|
partition = -1;
|
|
|
|
marknewtitles = 1;
|
|
|
|
FatInstallToDir = 0;
|
2010-10-27 16:45:27 +02:00
|
|
|
InstallPartitions = ONLY_GAME_PARTITION;
|
2010-09-19 22:25:12 +02:00
|
|
|
fullcopy = 0;
|
|
|
|
beta_upgrades = 0;
|
|
|
|
strcpy(db_url, "");
|
|
|
|
strcpy(db_language, "");
|
|
|
|
strcpy(unlockCode, "");
|
|
|
|
strcpy(returnTo, "");
|
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
memset(&Parental, 0, sizeof(Parental));
|
2010-09-19 22:25:12 +02:00
|
|
|
|
|
|
|
char buf[0x4a];
|
2010-09-24 02:48:03 +02:00
|
|
|
s32 res = CONF_Get("IPL.PC", buf, 0x4A);
|
|
|
|
if (res > 0)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
2010-09-24 02:48:03 +02:00
|
|
|
if (buf[2] != 0x14)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
Parental.enabled = 1;
|
|
|
|
Parental.rating = buf[2];
|
|
|
|
}
|
|
|
|
Parental.question = buf[7];
|
2010-09-24 02:48:03 +02:00
|
|
|
memcpy(Parental.pin, buf + 3, 4);
|
|
|
|
memcpy(Parental.answer, buf + 8, 32);
|
2010-09-19 22:25:12 +02:00
|
|
|
}
|
2010-09-24 19:58:56 +02:00
|
|
|
widescreen = (CONF_GetAspectRatio() == CONF_ASPECT_16_9);
|
2010-09-24 02:48:03 +02:00
|
|
|
godmode = (Parental.enabled == 0) ? 1 : 0;
|
2010-09-19 22:25:12 +02:00
|
|
|
|
2010-09-24 19:58:56 +02:00
|
|
|
Theme.SetDefault(); //! We need to move this later
|
|
|
|
}
|
|
|
|
|
|
|
|
bool CSettings::Load()
|
|
|
|
{
|
|
|
|
FindConfig();
|
2010-11-07 21:31:45 +01:00
|
|
|
//! Reset default path variables to the right device
|
|
|
|
SetDefault();
|
2010-09-24 19:58:56 +02:00
|
|
|
|
|
|
|
char line[1024];
|
|
|
|
char filepath[300];
|
2010-11-28 16:31:08 +01:00
|
|
|
snprintf(filepath, sizeof(filepath), "%sGXGlobal.cfg", ConfigPath);
|
2010-09-24 19:58:56 +02:00
|
|
|
|
|
|
|
file = fopen(filepath, "r");
|
|
|
|
if (!file) return false;
|
|
|
|
|
|
|
|
while (fgets(line, sizeof(line), file))
|
|
|
|
{
|
|
|
|
if (line[0] == '#') continue;
|
|
|
|
|
|
|
|
this->ParseLine(line);
|
|
|
|
}
|
|
|
|
fclose(file);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
bool CSettings::Reset()
|
|
|
|
{
|
|
|
|
this->SetDefault();
|
|
|
|
|
|
|
|
if (this->Save()) return true;
|
|
|
|
|
|
|
|
return false;
|
2010-09-19 22:25:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
bool CSettings::Save()
|
|
|
|
{
|
2010-09-24 02:48:03 +02:00
|
|
|
if (!FindConfig()) return false;
|
2010-09-19 22:25:12 +02:00
|
|
|
|
2010-11-28 16:31:08 +01:00
|
|
|
char filedest[300];
|
|
|
|
snprintf(filedest, sizeof(filedest), "%sGXGlobal.cfg", ConfigPath);
|
2010-09-19 22:25:12 +02:00
|
|
|
|
2010-11-28 16:31:08 +01:00
|
|
|
if(!CreateSubfolder(ConfigPath)) return false;
|
2010-09-19 22:25:12 +02:00
|
|
|
|
2010-11-28 16:31:08 +01:00
|
|
|
file = fopen(filedest, "w");
|
2010-09-24 02:48:03 +02:00
|
|
|
if (!file) return false;
|
|
|
|
|
|
|
|
fprintf(file, "# USB Loader global settings file\n");
|
|
|
|
fprintf(file, "# Note: This file is automatically generated\n ");
|
|
|
|
fprintf(file, "videomode = %d\n ", videomode);
|
|
|
|
fprintf(file, "videopatch = %d\n ", videopatch);
|
|
|
|
fprintf(file, "language = %d\n ", language);
|
|
|
|
fprintf(file, "ocarina = %d\n ", ocarina);
|
|
|
|
fprintf(file, "hddinfo = %d\n ", hddinfo);
|
|
|
|
fprintf(file, "sinfo = %d\n ", sinfo);
|
|
|
|
fprintf(file, "rumble = %d\n ", rumble);
|
|
|
|
fprintf(file, "volume = %d\n ", volume);
|
|
|
|
fprintf(file, "sfxvolume = %d\n ", sfxvolume);
|
|
|
|
fprintf(file, "gamesoundvolume = %d\n ", gamesoundvolume);
|
|
|
|
fprintf(file, "tooltips = %d\n ", tooltips);
|
|
|
|
fprintf(file, "password = %s\n ", unlockCode);
|
2010-11-07 21:31:45 +01:00
|
|
|
fprintf(file, "GameSort = %d\n ", GameSort);
|
2010-09-24 02:48:03 +02:00
|
|
|
fprintf(file, "cios = %d\n ", cios);
|
|
|
|
fprintf(file, "keyset = %d\n ", keyset);
|
|
|
|
fprintf(file, "xflip = %d\n ", xflip);
|
|
|
|
fprintf(file, "gridRows = %d\n ", gridRows);
|
2010-09-24 23:22:01 +02:00
|
|
|
fprintf(file, "quickboot = %d\n ", quickboot);
|
2010-09-24 02:48:03 +02:00
|
|
|
fprintf(file, "wsprompt = %d\n ", wsprompt);
|
|
|
|
fprintf(file, "parentalcontrol = %d\n ", parentalcontrol);
|
2010-09-28 20:58:56 +02:00
|
|
|
fprintf(file, "lockedgames = %d\n ", lockedgames);
|
2010-09-24 23:43:46 +02:00
|
|
|
fprintf(file, "covers_path = %s\n ", covers_path);
|
|
|
|
fprintf(file, "covers2d_path = %s\n ", covers2d_path);
|
2010-09-24 02:48:03 +02:00
|
|
|
fprintf(file, "theme_path = %s\n ", theme_path);
|
|
|
|
fprintf(file, "disc_path = %s\n ", disc_path);
|
|
|
|
fprintf(file, "language_path = %s\n ", language_path);
|
|
|
|
fprintf(file, "languagefiles_path = %s\n ", languagefiles_path);
|
|
|
|
fprintf(file, "TxtCheatcodespath = %s\n ", TxtCheatcodespath);
|
|
|
|
fprintf(file, "titlestxt_path = %s\n ", titlestxt_path);
|
|
|
|
fprintf(file, "gamesound = %d\n ", gamesound);
|
|
|
|
fprintf(file, "dolpath = %s\n ", dolpath);
|
|
|
|
fprintf(file, "ogg_path = %s\n ", ogg_path);
|
|
|
|
fprintf(file, "wiilight = %d\n ", wiilight);
|
|
|
|
fprintf(file, "gameDisplay = %d\n ", gameDisplay);
|
|
|
|
fprintf(file, "update_path = %s\n ", update_path);
|
|
|
|
fprintf(file, "theme_downloadpath = %s\n ", theme_downloadpath);
|
|
|
|
fprintf(file, "homebrewapps_path = %s\n ", homebrewapps_path);
|
|
|
|
fprintf(file, "Cheatcodespath = %s\n ", Cheatcodespath);
|
|
|
|
fprintf(file, "BcaCodepath = %s\n ", BcaCodepath);
|
|
|
|
fprintf(file, "WipCodepath = %s\n ", WipCodepath);
|
|
|
|
fprintf(file, "titlesOverride = %d\n ", titlesOverride);
|
|
|
|
fprintf(file, "patchcountrystrings = %d\n ", patchcountrystrings);
|
|
|
|
fprintf(file, "screensaver = %d\n ", screensaver);
|
|
|
|
fprintf(file, "musicloopmode = %d\n ", musicloopmode);
|
|
|
|
fprintf(file, "error002 = %d\n ", error002);
|
|
|
|
fprintf(file, "autonetwork = %d\n ", autonetwork);
|
|
|
|
fprintf(file, "discart = %d\n ", discart);
|
|
|
|
fprintf(file, "partition = %d\n ", partition);
|
|
|
|
fprintf(file, "marknewtitles = %d\n ", marknewtitles);
|
2010-09-24 23:43:46 +02:00
|
|
|
fprintf(file, "FatInstallToDir = %d\n ", FatInstallToDir);
|
2010-10-27 16:45:27 +02:00
|
|
|
fprintf(file, "InstallPartitions = %d\n ", InstallPartitions);
|
2010-09-24 02:48:03 +02:00
|
|
|
fprintf(file, "fullcopy = %d\n ", fullcopy);
|
|
|
|
fprintf(file, "beta_upgrades = %d\n ", beta_upgrades);
|
|
|
|
fprintf(file, "returnTo = %s\n ", returnTo);
|
|
|
|
fclose(file);
|
2010-09-19 22:25:12 +02:00
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
return true;
|
2010-09-19 22:25:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
bool CSettings::SetSetting(char *name, char *value)
|
|
|
|
{
|
|
|
|
int i = 0;
|
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
if (strcmp(name, "videomode") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1)
|
|
|
|
{
|
|
|
|
videomode = i;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "videopatch") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1)
|
|
|
|
{
|
|
|
|
videopatch = i;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "language") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1)
|
|
|
|
{
|
|
|
|
language = i;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "ocarina") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1)
|
|
|
|
{
|
|
|
|
ocarina = i;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "hddinfo") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1)
|
|
|
|
{
|
|
|
|
hddinfo = i;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "sinfo") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1)
|
|
|
|
{
|
|
|
|
sinfo = i;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "rumble") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1)
|
|
|
|
{
|
|
|
|
rumble = i;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "volume") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1)
|
|
|
|
{
|
|
|
|
volume = i;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "sfxvolume") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1)
|
|
|
|
{
|
|
|
|
sfxvolume = i;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "gamesoundvolume") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1)
|
|
|
|
{
|
|
|
|
gamesoundvolume = i;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "tooltips") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1)
|
|
|
|
{
|
|
|
|
tooltips = i;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
2010-09-24 23:43:46 +02:00
|
|
|
else if (strcmp(name, "password") == 0)
|
2010-09-24 02:48:03 +02:00
|
|
|
{
|
|
|
|
strcpy(unlockCode, value);
|
|
|
|
return true;
|
|
|
|
}
|
2010-10-27 16:45:27 +02:00
|
|
|
else if (strcmp(name, "GameSort") == 0)
|
2010-09-24 02:48:03 +02:00
|
|
|
{
|
2010-10-27 16:45:27 +02:00
|
|
|
if (sscanf(value, "%d", &i) == 1) GameSort = i;
|
2010-09-24 02:48:03 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "cios") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) cios = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "keyset") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) keyset = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "xflip") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) xflip = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "gridRows") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) gridRows = i;
|
|
|
|
return true;
|
|
|
|
}
|
2010-09-24 23:22:01 +02:00
|
|
|
else if (strcmp(name, "quickboot") == 0)
|
2010-09-24 02:48:03 +02:00
|
|
|
{
|
2010-09-24 23:22:01 +02:00
|
|
|
if (sscanf(value, "%d", &i) == 1) quickboot = i;
|
2010-09-24 02:48:03 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "partition") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) partition = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "wsprompt") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) wsprompt = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "gameDisplay") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) gameDisplay = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "parentalcontrol") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) parentalcontrol = i;
|
|
|
|
return true;
|
|
|
|
}
|
2010-09-28 20:58:56 +02:00
|
|
|
else if (strcmp(name, "lockedgames") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) lockedgames = i;
|
|
|
|
return true;
|
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (strcmp(name, "screensaver") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) screensaver = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "titlesOverride") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) titlesOverride = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "musicloopmode") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) musicloopmode = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "gamesound") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) gamesound = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "wiilight") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) wiilight = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "marknewtitles") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) marknewtitles = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "patchcountrystrings") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) patchcountrystrings = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "fullcopy") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) fullcopy = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "discart") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) discart = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "error002") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) error002 = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "autonetwork") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) autonetwork = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "FatInstallToDir") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) FatInstallToDir = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "beta_upgrades") == 0)
|
|
|
|
{
|
|
|
|
if (sscanf(value, "%d", &i) == 1) beta_upgrades = i;
|
|
|
|
return true;
|
|
|
|
}
|
2010-10-27 16:45:27 +02:00
|
|
|
else if (strcmp(name, "InstallPartitions") == 0)
|
2010-09-24 02:48:03 +02:00
|
|
|
{
|
2010-10-27 16:45:27 +02:00
|
|
|
if (sscanf(value, "%u", &i) == 1) InstallPartitions = i;
|
2010-09-24 02:48:03 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "covers_path") == 0)
|
|
|
|
{
|
|
|
|
strcpy(covers_path, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "covers2d_path") == 0)
|
|
|
|
{
|
|
|
|
strcpy(covers2d_path, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "theme_path") == 0)
|
|
|
|
{
|
|
|
|
strcpy(theme_path, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "disc_path") == 0)
|
|
|
|
{
|
|
|
|
strcpy(disc_path, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "language_path") == 0)
|
|
|
|
{
|
|
|
|
strcpy(language_path, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "languagefiles_path") == 0)
|
|
|
|
{
|
|
|
|
strcpy(languagefiles_path, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "TxtCheatcodespath") == 0)
|
|
|
|
{
|
|
|
|
strcpy(TxtCheatcodespath, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "titlestxt_path") == 0)
|
|
|
|
{
|
|
|
|
strcpy(titlestxt_path, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "dolpath") == 0)
|
|
|
|
{
|
|
|
|
strcpy(dolpath, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "ogg_path") == 0)
|
|
|
|
{
|
|
|
|
strcpy(ogg_path, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "update_path") == 0)
|
|
|
|
{
|
|
|
|
strcpy(update_path, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "theme_downloadpath") == 0)
|
|
|
|
{
|
|
|
|
strcpy(theme_downloadpath, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "homebrewapps_path") == 0)
|
|
|
|
{
|
|
|
|
strcpy(homebrewapps_path, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "Cheatcodespath") == 0)
|
|
|
|
{
|
|
|
|
strcpy(Cheatcodespath, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "BcaCodepath") == 0)
|
|
|
|
{
|
|
|
|
strcpy(BcaCodepath, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "WipCodepath") == 0)
|
|
|
|
{
|
|
|
|
strcpy(WipCodepath, value);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (strcmp(name, "returnTo") == 0)
|
|
|
|
{
|
|
|
|
strcpy(returnTo, value);
|
|
|
|
return true;
|
|
|
|
}
|
2010-09-19 22:25:12 +02:00
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2010-09-24 19:58:56 +02:00
|
|
|
bool CSettings::FindConfig()
|
|
|
|
{
|
|
|
|
bool found = false;
|
2010-11-28 16:31:08 +01:00
|
|
|
char CheckPath[300];
|
2010-09-24 19:58:56 +02:00
|
|
|
strcpy(BootDevice, "SD:");
|
|
|
|
|
|
|
|
for (int i = 0; i < 2; ++i)
|
|
|
|
{
|
|
|
|
if (i == 1) strcpy(BootDevice, "USB:");
|
|
|
|
|
2010-11-28 16:31:08 +01:00
|
|
|
snprintf(ConfigPath, sizeof(ConfigPath), "%s/apps/usbloader_gx/", BootDevice);
|
|
|
|
snprintf(CheckPath, sizeof(CheckPath), "%sGXGlobal.cfg", ConfigPath);
|
|
|
|
if ((found = CheckFile(CheckPath))) break;
|
2010-09-24 19:58:56 +02:00
|
|
|
|
2010-11-28 16:31:08 +01:00
|
|
|
snprintf(ConfigPath, sizeof(ConfigPath), "%s/config/", BootDevice);
|
|
|
|
snprintf(CheckPath, sizeof(CheckPath), "%sGXGlobal.cfg", ConfigPath);
|
|
|
|
if ((found = CheckFile(CheckPath))) break;
|
2010-09-24 19:58:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!found)
|
|
|
|
{
|
|
|
|
FILE * testFp = NULL;
|
|
|
|
strcpy(BootDevice, "SD:");
|
|
|
|
//! No existing config so try to find a place where we can write it too
|
|
|
|
for (int i = 0; i < 2; ++i)
|
|
|
|
{
|
|
|
|
if (i == 1) strcpy(BootDevice, "USB:");
|
|
|
|
if (!found)
|
|
|
|
{
|
2010-11-06 16:30:14 +01:00
|
|
|
snprintf(ConfigPath, sizeof(ConfigPath), "%s/apps/usbloader_gx/", BootDevice);
|
2010-11-28 16:31:08 +01:00
|
|
|
snprintf(CheckPath, sizeof(CheckPath), "%sGXGlobal.cfg", ConfigPath);
|
|
|
|
testFp = fopen(CheckPath, "wb");
|
2010-09-24 19:58:56 +02:00
|
|
|
found = (testFp != NULL);
|
|
|
|
fclose(testFp);
|
|
|
|
}
|
|
|
|
if (!found)
|
|
|
|
{
|
2010-11-06 16:30:14 +01:00
|
|
|
snprintf(ConfigPath, sizeof(ConfigPath), "%s/config/", BootDevice);
|
|
|
|
CreateSubfolder(ConfigPath);
|
2010-11-28 16:31:08 +01:00
|
|
|
snprintf(CheckPath, sizeof(CheckPath), "%sGXGlobal.cfg", ConfigPath);
|
|
|
|
testFp = fopen(CheckPath, "wb");
|
2010-09-24 19:58:56 +02:00
|
|
|
found = (testFp != NULL);
|
|
|
|
fclose(testFp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return found;
|
|
|
|
}
|
|
|
|
|
2010-09-19 22:25:12 +02:00
|
|
|
void CSettings::ParseLine(char *line)
|
|
|
|
{
|
|
|
|
char temp[1024], name[1024], value[1024];
|
|
|
|
|
|
|
|
strncpy(temp, line, sizeof(temp));
|
|
|
|
|
|
|
|
char * eq = strchr(temp, '=');
|
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
if (!eq) return;
|
2010-09-19 22:25:12 +02:00
|
|
|
|
|
|
|
*eq = 0;
|
|
|
|
|
|
|
|
this->TrimLine(name, temp, sizeof(name));
|
2010-09-24 02:48:03 +02:00
|
|
|
this->TrimLine(value, eq + 1, sizeof(value));
|
2010-09-19 22:25:12 +02:00
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
this->SetSetting(name, value);
|
2010-09-19 22:25:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void CSettings::TrimLine(char *dest, char *src, int size)
|
|
|
|
{
|
2010-09-24 02:48:03 +02:00
|
|
|
int len;
|
|
|
|
while (*src == ' ')
|
|
|
|
src++;
|
|
|
|
len = strlen(src);
|
|
|
|
while (len > 0 && strchr(" \r\n", src[len - 1]))
|
|
|
|
len--;
|
|
|
|
if (len >= size) len = size - 1;
|
|
|
|
strncpy(dest, src, len);
|
|
|
|
dest[len] = 0;
|
2010-09-19 22:25:12 +02:00
|
|
|
}
|
|
|
|
|
2010-11-07 21:31:45 +01:00
|
|
|
//! Get the language code from CONF
|
2010-09-24 02:48:03 +02:00
|
|
|
static inline const char * GetLangCode(int langid)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
2010-09-24 02:48:03 +02:00
|
|
|
switch (langid)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
case CONF_LANG_JAPANESE:
|
|
|
|
return "JA";
|
|
|
|
case CONF_LANG_ENGLISH:
|
|
|
|
return "EN";
|
|
|
|
case CONF_LANG_GERMAN:
|
|
|
|
return "DE";
|
|
|
|
case CONF_LANG_FRENCH:
|
|
|
|
return "FR";
|
|
|
|
case CONF_LANG_SPANISH:
|
|
|
|
return "ES";
|
|
|
|
case CONF_LANG_ITALIAN:
|
|
|
|
return "IT";
|
|
|
|
case CONF_LANG_DUTCH:
|
|
|
|
return "NL";
|
|
|
|
case CONF_LANG_SIMP_CHINESE:
|
|
|
|
return "ZHCN";
|
|
|
|
case CONF_LANG_TRAD_CHINESE:
|
|
|
|
return "ZHTW";
|
|
|
|
case CONF_LANG_KOREAN:
|
|
|
|
return "KO";
|
|
|
|
default:
|
|
|
|
return "EN";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-11-07 21:31:45 +01:00
|
|
|
//! Get language code from the selected language file
|
|
|
|
//! eg. german.lang = DE and default to EN
|
|
|
|
static inline const char * GetLangCode(const char * langpath)
|
|
|
|
{
|
|
|
|
if(strcasestr(langpath, "japanese"))
|
|
|
|
return "JA";
|
|
|
|
|
|
|
|
else if(strcasestr(langpath, "german"))
|
|
|
|
return "DE";
|
|
|
|
|
|
|
|
else if(strcasestr(langpath, "french"))
|
|
|
|
return "FR";
|
|
|
|
|
|
|
|
else if(strcasestr(langpath, "spanish"))
|
|
|
|
return "ES";
|
|
|
|
|
|
|
|
else if(strcasestr(langpath, "italian"))
|
|
|
|
return "IT";
|
|
|
|
|
|
|
|
else if(strcasestr(langpath, "dutch"))
|
|
|
|
return "NL";
|
|
|
|
|
|
|
|
else if(strcasestr(langpath, "s_chinese"))
|
|
|
|
return "ZHCN";
|
|
|
|
|
|
|
|
else if(strcasestr(langpath, "t_chinese"))
|
|
|
|
return "ZHTW";
|
|
|
|
|
|
|
|
else if(strcasestr(langpath, "korean"))
|
|
|
|
return "KO";
|
|
|
|
|
|
|
|
return "EN";
|
|
|
|
}
|
|
|
|
|
2010-09-19 22:25:12 +02:00
|
|
|
bool CSettings::LoadLanguage(const char *path, int language)
|
|
|
|
{
|
|
|
|
bool ret = false;
|
|
|
|
|
2010-11-28 16:31:08 +01:00
|
|
|
if (language >= 0 || !path || strlen(path) == 0)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
2010-09-24 02:48:03 +02:00
|
|
|
if (language < 0) return false;
|
2010-09-19 22:25:12 +02:00
|
|
|
|
|
|
|
char filepath[150];
|
|
|
|
char langpath[150];
|
|
|
|
snprintf(langpath, sizeof(langpath), "%s", language_path);
|
2010-09-24 02:48:03 +02:00
|
|
|
if (langpath[strlen(langpath) - 1] != '/')
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
char * ptr = strrchr(langpath, '/');
|
2010-09-24 02:48:03 +02:00
|
|
|
if (ptr)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
ptr++;
|
|
|
|
ptr[0] = '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-09-24 02:48:03 +02:00
|
|
|
if (language == APP_DEFAULT)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
2010-11-07 21:31:45 +01:00
|
|
|
strcpy(language_path, "");
|
2010-09-19 22:25:12 +02:00
|
|
|
gettextCleanUp();
|
|
|
|
return true;
|
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (language == CONSOLE_DEFAULT)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
2010-09-24 02:48:03 +02:00
|
|
|
return LoadLanguage(NULL, CONF_GetLanguage() + 2);
|
2010-09-19 22:25:12 +02:00
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (language == JAPANESE)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
snprintf(filepath, sizeof(filepath), "%s/japanese.lang", langpath);
|
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (language == ENGLISH)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
snprintf(filepath, sizeof(filepath), "%s/english.lang", langpath);
|
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (language == GERMAN)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
snprintf(filepath, sizeof(filepath), "%s/german.lang", langpath);
|
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (language == FRENCH)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
snprintf(filepath, sizeof(filepath), "%s/french.lang", langpath);
|
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (language == SPANISH)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
snprintf(filepath, sizeof(filepath), "%s/spanish.lang", langpath);
|
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (language == ITALIAN)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
snprintf(filepath, sizeof(filepath), "%s/italian.lang", langpath);
|
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (language == DUTCH)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
snprintf(filepath, sizeof(filepath), "%s/dutch.lang", langpath);
|
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (language == S_CHINESE)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
snprintf(filepath, sizeof(filepath), "%s/s_chinese.lang", langpath);
|
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (language == T_CHINESE)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
snprintf(filepath, sizeof(filepath), "%s/t_chinese.lang", langpath);
|
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (language == KOREAN)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
|
|
|
snprintf(filepath, sizeof(filepath), "%s%s/korean.lang", BootDevice, langpath);
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = gettextLoadLanguage(filepath);
|
2010-11-28 16:31:08 +01:00
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
strncpy(language_path, filepath, sizeof(language_path));
|
|
|
|
strcpy(db_language, GetLangCode(language_path));
|
|
|
|
}
|
2010-09-19 22:25:12 +02:00
|
|
|
}
|
2010-09-24 02:48:03 +02:00
|
|
|
else if (strlen(path) < 3)
|
2010-09-19 22:25:12 +02:00
|
|
|
{
|
2010-09-24 02:48:03 +02:00
|
|
|
return LoadLanguage(NULL, CONF_GetLanguage() + 2);
|
2010-09-19 22:25:12 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ret = gettextLoadLanguage(path);
|
2010-11-07 21:31:45 +01:00
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
strncpy(language_path, path, sizeof(language_path));
|
|
|
|
strcpy(db_language, GetLangCode(language_path));
|
|
|
|
}
|
2010-09-19 22:25:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|