|
@@ -33,38 +33,53 @@
|
|
|
#define PAL_HAS_TOUCH 0
|
|
|
#endif
|
|
|
|
|
|
+#define MAKE_VALUE(defv, minv, maxv) (LPCSTR)(defv), (LPCSTR)(minv), (LPCSTR)(maxv)
|
|
|
+
|
|
|
static const ConfigItem gConfigItems[PALCFG_ALL_MAX] = {
|
|
|
- { PALCFG_FULLSCREEN, PALCFG_BOOLEAN, "FULLSCREEN", 10, FALSE, FALSE, TRUE },
|
|
|
- { PALCFG_KEEPASPECTRATIO, PALCFG_BOOLEAN, "KEEPASPECTRATIO", 15, TRUE, FALSE, TRUE },
|
|
|
- { PALCFG_LAUNCHSETTING, PALCFG_BOOLEAN, "LAUNCHSETTING", 13, TRUE, FALSE, TRUE },
|
|
|
- { PALCFG_STEREO, PALCFG_BOOLEAN, "STEREO", 6, TRUE, FALSE, TRUE }, // Default for stereo audio
|
|
|
- { PALCFG_USEEMBEDDEDFONTS, PALCFG_BOOLEAN, "USEEMBEDDEDFONTS", 16, TRUE, FALSE, TRUE }, // Default for using embedded fonts in DOS version
|
|
|
- { PALCFG_USESURROUNDOPL, PALCFG_BOOLEAN, "USESURROUNDOPL", 14, TRUE, FALSE, TRUE }, // Default for using surround opl
|
|
|
- { PALCFG_USETOUCHOVERLAY, PALCFG_BOOLEAN, "USETOUCHOVERLAY", 15, PAL_HAS_TOUCH, FALSE, TRUE },
|
|
|
-
|
|
|
- { PALCFG_SURROUNDOPLOFFSET, PALCFG_INTEGER, "SURROUNDOPLOFFSET", 17, 384, INT32_MIN, INT32_MAX },
|
|
|
-
|
|
|
- { PALCFG_AUDIOBUFFERSIZE, PALCFG_UNSIGNED, "AUDIOBUFFERSIZE", 15, PAL_AUDIO_DEFAULT_BUFFER_SIZE, 2, 32768 },
|
|
|
- { PALCFG_CODEPAGE, PALCFG_UNSIGNED, "CODEPAGE", 8, CP_BIG5, CP_BIG5, CP_MAX - 1 }, // Default for BIG5
|
|
|
- { PALCFG_OPLSAMPLERATE, PALCFG_UNSIGNED, "OPLSAMPLERATE", 13, 49716, 0, UINT32_MAX },
|
|
|
- { PALCFG_RESAMPLEQUALITY, PALCFG_UNSIGNED, "RESAMPLEQUALITY", 15, RESAMPLER_QUALITY_MAX, RESAMPLER_QUALITY_MIN, RESAMPLER_QUALITY_MAX }, // Default for best quality
|
|
|
- { PALCFG_SAMPLERATE, PALCFG_UNSIGNED, "SAMPLERATE", 10, 44100, 0, PAL_MAX_SAMPLERATE },
|
|
|
- { PALCFG_MUSICVOLUME, PALCFG_UNSIGNED, "MUSICVOLUME", 11, PAL_MAX_VOLUME, 0, PAL_MAX_VOLUME }, // Default for maximum volume
|
|
|
- { PALCFG_SOUNDVOLUME, PALCFG_UNSIGNED, "SOUNDVOLUME", 11, PAL_MAX_VOLUME, 0, PAL_MAX_VOLUME }, // Default for maximum volume
|
|
|
- { PALCFG_WINDOWHEIGHT, PALCFG_UNSIGNED, "WINDOWHEIGHT", 12, PAL_DEFAULT_WINDOW_HEIGHT, 0, UINT32_MAX },
|
|
|
- { PALCFG_WINDOWWIDTH, PALCFG_UNSIGNED, "WINDOWWIDTH", 11, PAL_DEFAULT_WINDOW_WIDTH, 0, UINT32_MAX },
|
|
|
-
|
|
|
- { PALCFG_CD, PALCFG_STRING, "CD", 2, "OGG", NULL, NULL },
|
|
|
- { PALCFG_GAMEPATH, PALCFG_STRING, "GAMEPATH", 8, NULL, NULL, NULL },
|
|
|
- { PALCFG_SAVEPATH, PALCFG_STRING, "SAVEPATH", 8, NULL, NULL, NULL },
|
|
|
- { PALCFG_MESSAGEFILE, PALCFG_STRING, "MESSAGEFILENAME", 15, NULL, NULL, NULL },
|
|
|
- { PALCFG_BDFFILE, PALCFG_STRING, "BDFFILENAME", 11, NULL, NULL, NULL },
|
|
|
- { PALCFG_MUSIC, PALCFG_STRING, "MUSIC", 5, "RIX", NULL, NULL },
|
|
|
+ { PALCFG_FULLSCREEN, PALCFG_BOOLEAN, "FullScreen", 10, MAKE_VALUE(FALSE, FALSE, TRUE) },
|
|
|
+ { PALCFG_KEEPASPECTRATIO, PALCFG_BOOLEAN, "KeepAspectRatio", 15, MAKE_VALUE(TRUE, FALSE, TRUE) },
|
|
|
+ { PALCFG_LAUNCHSETTING, PALCFG_BOOLEAN, "LaunchSetting", 13, MAKE_VALUE(TRUE, FALSE, TRUE) },
|
|
|
+ { PALCFG_STEREO, PALCFG_BOOLEAN, "Stereo", 6, MAKE_VALUE(TRUE, FALSE, TRUE) }, // Default for stereo audio
|
|
|
+ { PALCFG_USEEMBEDDEDFONTS, PALCFG_BOOLEAN, "UseEmbeddedFonts", 16, MAKE_VALUE(TRUE, FALSE, TRUE) }, // Default for using embedded fonts in DOS version
|
|
|
+ { PALCFG_USESURROUNDOPL, PALCFG_BOOLEAN, "UseSurroundOPL", 14, MAKE_VALUE(TRUE, FALSE, TRUE) }, // Default for using surround opl
|
|
|
+ { PALCFG_USETOUCHOVERLAY, PALCFG_BOOLEAN, "UseTouchOverlay", 15, MAKE_VALUE(PAL_HAS_TOUCH, FALSE, TRUE) },
|
|
|
+
|
|
|
+ { PALCFG_SURROUNDOPLOFFSET, PALCFG_INTEGER, "SurroundOPLOffset", 17, MAKE_VALUE(384, INT32_MIN, INT32_MAX) },
|
|
|
+ { PALCFG_AUDIOBUFFERSIZE, PALCFG_UNSIGNED, "AudioBufferSize", 15, MAKE_VALUE(PAL_AUDIO_DEFAULT_BUFFER_SIZE, 2, 32768) },
|
|
|
+ { PALCFG_CODEPAGE, PALCFG_UNSIGNED, "CodePage", 8, MAKE_VALUE(CP_BIG5, CP_MIN, CP_MAX - 1) }, // Default for BIG5
|
|
|
+ { PALCFG_OPLSAMPLERATE, PALCFG_UNSIGNED, "OPLSampleRate", 13, MAKE_VALUE(49716, 0, UINT32_MAX) },
|
|
|
+ { PALCFG_RESAMPLEQUALITY, PALCFG_UNSIGNED, "ResampleQuality", 15, MAKE_VALUE(RESAMPLER_QUALITY_MAX, RESAMPLER_QUALITY_MIN, RESAMPLER_QUALITY_MAX) }, // Default for best quality
|
|
|
+ { PALCFG_SAMPLERATE, PALCFG_UNSIGNED, "SampleRate", 10, MAKE_VALUE(44100, 0, PAL_MAX_SAMPLERATE) },
|
|
|
+ { PALCFG_MUSICVOLUME, PALCFG_UNSIGNED, "MusicVolume", 11, MAKE_VALUE(PAL_MAX_VOLUME, 0, PAL_MAX_VOLUME) }, // Default for maximum volume
|
|
|
+ { PALCFG_SOUNDVOLUME, PALCFG_UNSIGNED, "SoundVolume", 11, MAKE_VALUE(PAL_MAX_VOLUME, 0, PAL_MAX_VOLUME) }, // Default for maximum volume
|
|
|
+ { PALCFG_WINDOWHEIGHT, PALCFG_UNSIGNED, "WindowHeight", 12, MAKE_VALUE(PAL_DEFAULT_WINDOW_HEIGHT, 0, UINT32_MAX) },
|
|
|
+ { PALCFG_WINDOWWIDTH, PALCFG_UNSIGNED, "WindowWidth", 11, MAKE_VALUE(PAL_DEFAULT_WINDOW_WIDTH, 0, UINT32_MAX) },
|
|
|
+
|
|
|
+ { PALCFG_CD, PALCFG_STRING, "CD", 2, "OGG", NULL, NULL },
|
|
|
+ { PALCFG_GAMEPATH, PALCFG_STRING, "GamePath", 8, NULL, NULL, NULL },
|
|
|
+ { PALCFG_SAVEPATH, PALCFG_STRING, "SavePath", 8, NULL, NULL, NULL },
|
|
|
+ { PALCFG_MESSAGEFILE, PALCFG_STRING, "MessageFileName", 15, NULL, NULL, NULL },
|
|
|
+ { PALCFG_BDFFILE, PALCFG_STRING, "BDFFileName", 11, NULL, NULL, NULL },
|
|
|
+ { PALCFG_MUSIC, PALCFG_STRING, "Music", 5, "RIX", NULL, NULL },
|
|
|
{ PALCFG_OPL, PALCFG_STRING, "OPL", 3, "DOSBOX", NULL, NULL },
|
|
|
- { PALCFG_RIXEXTRAINIT, PALCFG_STRING, "RIXEXTRAINIT", 12, NULL, NULL, NULL },
|
|
|
+ { PALCFG_RIXEXTRAINIT, PALCFG_STRING, "RIXExtraInit", 12, NULL, NULL, NULL },
|
|
|
};
|
|
|
|
|
|
|
|
|
+static char * ParseStringValue(const char *sValue, char *original)
|
|
|
+{
|
|
|
+ int n = strlen(sValue);
|
|
|
+ while (n > 0 && isspace(sValue[n - 1])) n--;
|
|
|
+ if (n > 0)
|
|
|
+ {
|
|
|
+ char *newval = (char *)realloc(original, n + 1);
|
|
|
+ memcpy(newval, sValue, n);
|
|
|
+ newval[n] = '\0';
|
|
|
+ return newval;
|
|
|
+ }
|
|
|
+ return original;
|
|
|
+}
|
|
|
+
|
|
|
BOOL
|
|
|
PAL_ParseConfigLine(
|
|
|
const char * line,
|
|
@@ -268,53 +283,17 @@ PAL_LoadConfig(
|
|
|
values[item->Item] = value;
|
|
|
break;
|
|
|
case PALCFG_MESSAGEFILE:
|
|
|
- {
|
|
|
- int n = strlen(value.sValue);
|
|
|
- while (n > 0 && isspace(value.sValue[n - 1])) n--;
|
|
|
- if (n > 0)
|
|
|
- {
|
|
|
- gConfig.pszMsgFile = (char *)realloc(gConfig.pszMsgFile, n + 1);
|
|
|
- memcpy(gConfig.pszMsgFile, value.sValue, n);
|
|
|
- gConfig.pszMsgFile[n] = '\0';
|
|
|
- }
|
|
|
+ gConfig.pszMsgFile = ParseStringValue(value.sValue, gConfig.pszMsgFile);
|
|
|
break;
|
|
|
- }
|
|
|
case PALCFG_BDFFILE:
|
|
|
- {
|
|
|
- int n = strlen(value.sValue);
|
|
|
- while (n > 0 && isspace(value.sValue[n - 1])) n--;
|
|
|
- if (n > 0)
|
|
|
- {
|
|
|
- gConfig.pszBdfFile = (char *)realloc(gConfig.pszBdfFile, n + 1);
|
|
|
- memcpy(gConfig.pszBdfFile, value.sValue, n);
|
|
|
- gConfig.pszBdfFile[n] = '\0';
|
|
|
- }
|
|
|
+ gConfig.pszBdfFile = ParseStringValue(value.sValue, gConfig.pszBdfFile);
|
|
|
break;
|
|
|
- }
|
|
|
case PALCFG_GAMEPATH:
|
|
|
- {
|
|
|
- int n = strlen(value.sValue);
|
|
|
- while (n > 0 && isspace(value.sValue[n - 1])) n--;
|
|
|
- if (n > 0)
|
|
|
- {
|
|
|
- gConfig.pszGamePath = (char *)realloc(gConfig.pszGamePath, n + 1);
|
|
|
- memcpy(gConfig.pszGamePath, value.sValue, n);
|
|
|
- gConfig.pszGamePath[n] = '\0';
|
|
|
- }
|
|
|
+ gConfig.pszGamePath = ParseStringValue(value.sValue, gConfig.pszGamePath);
|
|
|
break;
|
|
|
- }
|
|
|
case PALCFG_SAVEPATH:
|
|
|
- {
|
|
|
- int n = strlen(value.sValue);
|
|
|
- while (n > 0 && isspace(value.sValue[n - 1])) n--;
|
|
|
- if (n > 0)
|
|
|
- {
|
|
|
- gConfig.pszSavePath = (char *)realloc(gConfig.pszSavePath, n + 1);
|
|
|
- memcpy(gConfig.pszSavePath, value.sValue, n);
|
|
|
- gConfig.pszSavePath[n] = '\0';
|
|
|
- }
|
|
|
+ gConfig.pszSavePath = ParseStringValue(value.sValue, gConfig.pszSavePath);
|
|
|
break;
|
|
|
- }
|
|
|
case PALCFG_CD:
|
|
|
{
|
|
|
if (PAL_HAS_MP3 && SDL_strncasecmp(value.sValue, "MP3", 3) == 0)
|
|
@@ -416,9 +395,7 @@ PAL_LoadConfig(
|
|
|
gConfig.fUseSurroundOPL = values[PALCFG_STEREO].bValue && values[PALCFG_USESURROUNDOPL].bValue;
|
|
|
gConfig.fLaunchSetting = values[PALCFG_LAUNCHSETTING].bValue;
|
|
|
gConfig.fUseTouchOverlay = values[PALCFG_USETOUCHOVERLAY].bValue;
|
|
|
-#if SDL_VERSION_ATLEAST(2,0,0)
|
|
|
gConfig.fKeepAspectRatio = values[PALCFG_KEEPASPECTRATIO].bValue;
|
|
|
-#endif
|
|
|
gConfig.fFullScreen = values[PALCFG_FULLSCREEN].bValue;
|
|
|
gConfig.iAudioChannels = values[PALCFG_STEREO].bValue ? 2 : 1;
|
|
|
|
|
@@ -457,9 +434,7 @@ PAL_SaveConfig(
|
|
|
|
|
|
if (fp)
|
|
|
{
|
|
|
-#if SDL_VERSION_ATLEAST(2,0,0)
|
|
|
sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_KEEPASPECTRATIO), gConfig.fKeepAspectRatio); fputs(buf, fp);
|
|
|
-#endif
|
|
|
sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_FULLSCREEN), gConfig.fFullScreen); fputs(buf, fp);
|
|
|
sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_LAUNCHSETTING), gConfig.fLaunchSetting); fputs(buf, fp);
|
|
|
sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_STEREO), gConfig.iAudioChannels == 2 ? TRUE : FALSE); fputs(buf, fp);
|