diff options
Diffstat (limited to 'engines/sludge/language.cpp')
-rw-r--r-- | engines/sludge/language.cpp | 104 |
1 files changed, 37 insertions, 67 deletions
diff --git a/engines/sludge/language.cpp b/engines/sludge/language.cpp index b7a45ed9dc..2f37eb35c4 100644 --- a/engines/sludge/language.cpp +++ b/engines/sludge/language.cpp @@ -21,7 +21,6 @@ */ #include "sludge/allfiles.h" -#include "sludge/stringy.h" #include "sludge/newfatal.h" #include "sludge/moreio.h" #include "sludge/language.h" @@ -33,60 +32,39 @@ namespace Sludge { int *languageTable; -char **languageName; +Common::String *languageName; settingsStruct gameSettings; -uint stringToInt(char *s) { - int i = 0; - bool negative = false; - for (;;) { - if (*s >= '0' && *s <= '9') { - i *= 10; - i += *s - '0'; - s++; - } else if (*s == '-') { - negative = !negative; - s++; - } else { - if (negative) - return -i; - return i; - } - } -} - -char *getPrefsFilename(char *filename) { +Common::String getPrefsFilename(Common::String filename) { // Yes, this trashes the original string, but // we also free it at the end (warning!)... - int n, i; - - n = strlen(filename); + int n = filename.size(); if (n > 4 && filename[n - 4] == '.') { - filename[n - 4] = 0; + filename.setChar(0, n - 4); } - char *f = filename; - for (i = 0; i < n; i++) { + // get file name from dir + int pos = 0; + for (int i = 0; i < n; i++) { if (filename[i] == '/') - f = filename + i + 1; + pos = i + 1; } - char *joined = joinStrings(f, ".ini"); + Common::String f = filename.c_str() + pos; + Common::String joined = f + ".ini"; - delete[] filename; - filename = NULL; return joined; } -void readIniFile(const char *filename) { +void readIniFile(const Common::String &filename) { - char *langName = getPrefsFilename(copyString(filename)); + Common::String langName = getPrefsFilename(filename); Common::File fd; if (!fd.open(langName)) { - debug(kSludgeDebugDataLoad, "Fail to open language file : %s", langName); + debug(kSludgeDebugDataLoad, "Fail to open language file : %s", langName.c_str()); return; } @@ -98,12 +76,8 @@ void readIniFile(const char *filename) { gameSettings.noStartWindow = false; gameSettings.debugMode = false; - delete langName; - langName = NULL; - - char lineSoFar[257] = ""; - char secondSoFar[257] = ""; - byte here = 0; + Common::String lineSoFar = ""; + Common::String secondSoFar = ""; char readChar = ' '; bool keepGoing = true; bool doingSecond = false; @@ -118,40 +92,36 @@ void readIniFile(const char *filename) { case '\n': case '\r': if (doingSecond) { - if (strcmp(lineSoFar, "LANGUAGE") == 0) { - gameSettings.languageID = stringToInt(secondSoFar); - } else if (strcmp(lineSoFar, "WINDOW") == 0) { - gameSettings.userFullScreen = !stringToInt(secondSoFar); - } else if (strcmp(lineSoFar, "REFRESH") == 0) { - gameSettings.refreshRate = stringToInt(secondSoFar); - } else if (strcmp(lineSoFar, "ANTIALIAS") == 0) { - gameSettings.antiAlias = stringToInt(secondSoFar); - } else if (strcmp(lineSoFar, "FIXEDPIXELS") == 0) { - gameSettings.fixedPixels = stringToInt(secondSoFar); - } else if (strcmp(lineSoFar, "NOSTARTWINDOW") == 0) { - gameSettings.noStartWindow = stringToInt(secondSoFar); - } else if (strcmp(lineSoFar, "DEBUGMODE") == 0) { - gameSettings.debugMode = stringToInt(secondSoFar); + if (lineSoFar == "LANGUAGE") { + gameSettings.languageID = (uint)secondSoFar.asUint64(); + } else if (lineSoFar == "WINDOW") { + gameSettings.userFullScreen = !secondSoFar.asUint64(); + } else if (lineSoFar == "REFRESH") { + gameSettings.refreshRate = (uint)secondSoFar.asUint64(); + } else if (lineSoFar == "ANTIALIAS") { + gameSettings.antiAlias = (int)secondSoFar.asUint64(); + } else if (lineSoFar == "FIXEDPIXELS") { + gameSettings.fixedPixels = secondSoFar.asUint64(); + } else if (lineSoFar == "NOSTARTWINDOW") { + gameSettings.noStartWindow = secondSoFar.asUint64(); + } else if (lineSoFar == "DEBUGMODE") { + gameSettings.debugMode = secondSoFar.asUint64(); } } - here = 0; doingSecond = false; - lineSoFar[0] = 0; - secondSoFar[0] = 0; + lineSoFar.clear(); + secondSoFar.clear(); break; case '=': doingSecond = true; - here = 0; break; default: if (doingSecond) { - secondSoFar[here++] = readChar; - secondSoFar[here] = 0; + secondSoFar += readChar; } else { - lineSoFar[here++] = readChar; - lineSoFar[here] = 0; + lineSoFar += readChar; } break; } @@ -160,7 +130,7 @@ void readIniFile(const char *filename) { fd.close(); } -void saveIniFile(const char *filename) { +void saveIniFile(const Common::String &filename) { #if 0 char *langName = getPrefsFilename(copyString(filename)); FILE *fp = fopen(langName, "wt"); @@ -182,18 +152,18 @@ void makeLanguageTable(Common::File *table) { if (!checkNew(languageTable)) return; - languageName = new char *[gameSettings.numLanguages + 1]; + languageName = new Common::String[gameSettings.numLanguages + 1]; if (!checkNew(languageName)) return; for (uint i = 0; i <= gameSettings.numLanguages; i++) { languageTable[i] = i ? table->readUint16BE() : 0; debug(kSludgeDebugDataLoad, "languageTable %i: %i", i, languageTable[i]); - languageName[i] = 0; + languageName[i].clear(); if (gameVersion >= VERSION(2, 0)) { if (gameSettings.numLanguages) { languageName[i] = readString(table); - debug(kSludgeDebugDataLoad, "languageName %i: %s\n", i, languageName[i]); + debug(kSludgeDebugDataLoad, "languageName %i: %s\n", i, languageName[i].c_str()); } } } |