SLUDGE: replace char *by Common::String

This commit is contained in:
yinsimei 2017-07-11 14:57:31 +02:00 committed by Eugene Sandulenko
parent 19ff9f419b
commit 800987ab95
35 changed files with 382 additions and 629 deletions

View File

@ -158,7 +158,7 @@ void blur_loadSettings(Common::SeekableReadStream *stream) {
bool blur_createSettings(int numParams, variableStack *&stack) {
bool createNullThing = true;
const char *error = NULL;
Common::String error = "";
if (numParams >= 3) {
// PARAMETERS: base, divide, stack (, stack (, stack...))
@ -187,18 +187,18 @@ bool blur_createSettings(int numParams, variableStack *&stack) {
}
}
if (width == 0 && !error) {
if (width == 0 && error.empty()) {
error = "Empty arrays found in setBackgroundEffect parameters";
}
if (!error) {
if (error.empty()) {
s_matrixEffectWidth = width;
s_matrixEffectHeight = height;
if (blur_allocateMemoryForEffect()) {
for (int y = height - 1; y >= 0; y--) {
variableStack *eachNumber = stack->thisVar.varData.theStack->first;
if (!error) {
if (error.empty()) {
for (int x = 0; x < width; x++) {
int arraySlot = x + (y * width);
// s_matrixEffectData[arraySlot] = (rand() % 4);
@ -211,13 +211,13 @@ bool blur_createSettings(int numParams, variableStack *&stack) {
trimStack(stack);
}
}
if (!error && !getValueType(s_matrixEffectDivide, SVT_INT, stack->thisVar))
if (error.empty() && !getValueType(s_matrixEffectDivide, SVT_INT, stack->thisVar))
error = "";
trimStack(stack);
if (!error && !getValueType(s_matrixEffectBase, SVT_INT, stack->thisVar))
if (error.empty() && !getValueType(s_matrixEffectBase, SVT_INT, stack->thisVar))
error = "";
trimStack(stack);
if (!error) {
if (error.empty()) {
if (s_matrixEffectDivide) {
createNullThing = false;
} else {
@ -243,7 +243,7 @@ bool blur_createSettings(int numParams, variableStack *&stack) {
s_matrixEffectData = NULL;
}
if (error && error[0]) {
if (!error.empty()) {
fatal(error);
}

View File

@ -25,7 +25,6 @@
#include "sludge/allfiles.h"
#include "sludge/sludger.h"
#include "sludge/builtin.h"
#include "sludge/stringy.h"
#include "sludge/newfatal.h"
#include "sludge/cursors.h"
#include "sludge/statusba.h"
@ -55,14 +54,14 @@
namespace Sludge {
extern char *gamePath;
extern Common::String gamePath;
int speechMode = 0;
int cameraX, cameraY;
float cameraZoom = 1.0;
spritePalette pastePalette;
char *launchMe = NULL;
Common::String launchMe = NULL;
variable *launchResult = NULL;
extern int lastFramesPerSecond, thumbWidth, thumbHeight;
@ -78,10 +77,10 @@ extern uint sceneWidth, sceneHeight;
extern int numBIFNames, numUserFunc;
extern char builtInFunctionNames[][25];
extern char **allUserFunc;
extern char **allBIFNames;
extern Common::String *allUserFunc;
extern Common::String *allBIFNames;
extern inputType input;
extern char *loadNow;
extern Common::String loadNow;
#if 0
extern GLuint backdropTextureName;
@ -121,14 +120,12 @@ int paramNum[] = { -1, 0, 1, 1, -1, -1, 1, 3, 4, 1, 0, 0, 8, -1, // SAY->MOVE
1, 0, 0 // playMovie, stopMovie, pauseMovie
};
bool failSecurityCheck(char *fn) {
if (fn == NULL)
bool failSecurityCheck(const Common::String &fn) {
if (fn.empty())
return true;
int a = 0;
while (fn[a]) {
switch (fn[a]) {
for (int i = 0; i < fn.size(); ++i) {
switch (fn[i]) {
case ':':
case '\\':
case '/':
@ -141,7 +138,6 @@ bool failSecurityCheck(char *fn) {
fatal("Filenames may not contain the following characters: \n\n\\ / : \" < > | ? *\n\nConsequently, the following filename is not allowed:", fn);
return true;
}
a++;
}
return false;
}
@ -158,7 +154,7 @@ struct builtInFunctionData {
static builtReturn sayCore(int numParams, loadedFunction *fun, bool sayIt) {
int fileNum = -1;
char *newText;
Common::String newText;
int objT, p;
killSpeechTimers();
@ -171,8 +167,6 @@ static builtReturn sayCore(int numParams, loadedFunction *fun, bool sayIt) {
case 2:
newText = getTextFromAnyVar(fun->stack->thisVar);
if (!newText)
return BR_ERROR;
trimStack(fun->stack);
if (!getValueType(objT, SVT_OBJTYPE, fun->stack->thisVar))
return BR_ERROR;
@ -181,8 +175,6 @@ static builtReturn sayCore(int numParams, loadedFunction *fun, bool sayIt) {
fun->timeLeft = p;
//debugOut ("BUILTIN: sayCore: %s (%i)\n", newText, p);
fun->isSpeech = true;
delete[] newText;
newText = NULL;
return BR_KEEP_AND_PAUSE;
}
@ -264,9 +256,7 @@ builtIn(getStatusText) {
builtIn(getMatchingFiles) {
UNUSEDALL
char *newText = getTextFromAnyVar(fun->stack->thisVar);
if (!newText)
return BR_ERROR;
Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
unlinkVar(fun->reg);
@ -280,8 +270,6 @@ builtIn(getMatchingFiles) {
fun->reg.varData.theStack->timesUsed = 1;
if (!getSavedGamesStack(fun->reg.varData.theStack, newText))
return BR_ERROR;
delete newText;
newText = NULL;
return BR_CONTINUE;
}
@ -295,13 +283,12 @@ builtIn(saveGame) {
loadNow = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
char *aaaaa = encodeFilename(loadNow);
delete[] loadNow;
Common::String aaaaa = encodeFilename(loadNow);
loadNow.clear();
if (failSecurityCheck(aaaaa))
return BR_ERROR; // Won't fail if encoded, how cool is that? OK, not very.
loadNow = joinStrings(":", aaaaa);
delete[] aaaaa;
loadNow = ":" + aaaaa;
setVariable(fun->reg, SVT_INT, 0);
saverFunc = fun;
@ -312,8 +299,8 @@ builtIn(fileExists) {
UNUSEDALL
loadNow = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
char *aaaaa = encodeFilename(loadNow);
delete loadNow;
Common::String aaaaa = encodeFilename(loadNow);
loadNow.clear();
if (failSecurityCheck(aaaaa))
return BR_ERROR;
#if 0
@ -345,28 +332,24 @@ builtIn(fileExists) {
builtIn(loadGame) {
UNUSEDALL
char *aaaaa = getTextFromAnyVar(fun->stack->thisVar);
Common::String aaaaa = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
loadNow.clear();
loadNow = encodeFilename(aaaaa);
delete []aaaaa;
if (frozenStuff) {
fatal("Can't load a saved game while the engine is frozen");
}
if (failSecurityCheck(loadNow))
return BR_ERROR;
Common::File fd;
if (fd.open(loadNow)) {
fd.close();
Common::InSaveFile *fp = g_system->getSavefileManager()->openForLoading(loadNow);
if (fp) {
delete fp;
return BR_KEEP_AND_PAUSE;
}
delete []loadNow;
loadNow = NULL;
debug("not find sav file");
loadNow.clear();
return BR_CONTINUE;
}
@ -547,8 +530,7 @@ builtIn(pickOne) {
builtIn(substring) {
UNUSEDALL
char *wholeString;
char *newString;
Common::String wholeString;
int start, length;
//debugOut ("BUILTIN: substring\n");
@ -562,12 +544,13 @@ builtIn(substring) {
wholeString = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
UTF8Converter convert(wholeString);
UTF8Converter convert;
convert.setUTF8String(wholeString);
Common::U32String str32 = convert.getU32String();
if (str32.size() < start + length) {
if ((int)str32.size() < start + length) {
length = str32.size() - start;
if (str32.size() < start) {
if ((int)str32.size() < start) {
start = 0;
}
}
@ -578,25 +561,17 @@ builtIn(substring) {
int startoffset = convert.getOriginOffset(start);
int endoffset = convert.getOriginOffset(start + length);
newString = new char[endoffset - startoffset + 1];
if (!checkNew(newString)) {
return BR_ERROR;
}
memcpy(newString, wholeString + startoffset, endoffset - startoffset);
newString[endoffset - startoffset] = 0;
Common::String newString(wholeString.begin() + startoffset, wholeString.begin() + endoffset);
makeTextVar(fun->reg, newString);
delete []newString;
return BR_CONTINUE;
}
builtIn(stringLength) {
UNUSEDALL
char *newText = getTextFromAnyVar(fun->stack->thisVar);
Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
setVariable(fun->reg, SVT_INT, stringLength(newText));
delete[] newText;
return BR_CONTINUE;
}
@ -883,9 +858,7 @@ builtIn(setFont) {
return BR_ERROR;
// newDebug (" Height:", newHeight);
trimStack(fun->stack);
char *newText = getTextFromAnyVar(fun->stack->thisVar);
if (!newText)
return BR_ERROR;
Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
// newDebug (" Character supported:", newText);
trimStack(fun->stack);
if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar))
@ -895,27 +868,22 @@ builtIn(setFont) {
if (!loadFont(fileNumber, newText, newHeight))
return BR_ERROR;
// newDebug (" Done!");
delete[] newText;
return BR_CONTINUE;
}
builtIn(inFont) {
UNUSEDALL
char *newText = getTextFromAnyVar(fun->stack->thisVar);
if (!newText)
return BR_ERROR;
Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
// Return value
setVariable(fun->reg, SVT_INT, isInFont(newText));
return BR_CONTINUE;
}
builtIn(pasteString) {
UNUSEDALL
char *newText = getTextFromAnyVar(fun->stack->thisVar);
Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
int y, x;
if (!getValueType(y, SVT_INT, fun->stack->thisVar))
@ -928,7 +896,6 @@ builtIn(pasteString) {
x = (winWidth - stringWidth(newText)) >> 1;
fixFont(pastePalette);
pasteStringToBackdrop(newText, x, y, pastePalette);
delete[] newText;
return BR_CONTINUE;
}
@ -986,26 +953,24 @@ builtIn(costume) {
builtIn(launch) {
UNUSEDALL
char *newTextA = getTextFromAnyVar(fun->stack->thisVar);
if (!newTextA)
return BR_ERROR;
Common::String newTextA = getTextFromAnyVar(fun->stack->thisVar);
char *newText = encodeFilename(newTextA);
Common::String newText = encodeFilename(newTextA);
trimStack(fun->stack);
if (newTextA[0] == 'h' && newTextA[1] == 't' && newTextA[2] == 't' && newTextA[3] == 'p' && (newTextA[4] == ':' || (newTextA[4] == 's' && newTextA[5] == ':'))) {
// IT'S A WEBSITE!
launchMe = copyString(newTextA);
launchMe.clear();
launchMe = newTextA;
} else {
char *gameDir;
gameDir = joinStrings(gamePath, "/");
launchMe = joinStrings(gameDir, newText);
delete newText;
if (!launchMe)
Common::String gameDir = gamePath;
gameDir += "/";
launchMe.clear();
launchMe = gameDir + newText;
if (launchMe.empty())
return BR_ERROR;
}
delete newTextA;
setGraphicsWindow(false);
setVariable(fun->reg, SVT_INT, 1);
launchResult = &fun->reg;
@ -1421,16 +1386,14 @@ builtIn(getOverObject) {
builtIn(rename) {
UNUSEDALL
char *newText = getTextFromAnyVar(fun->stack->thisVar);
Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
int objT;
if (!newText)
return BR_ERROR;
trimStack(fun->stack);
if (!getValueType(objT, SVT_OBJTYPE, fun->stack->thisVar))
return BR_ERROR;
trimStack(fun->stack);
objectType *o = findObjectType(objT);
delete o->screenName;
o->screenName.clear();
o->screenName = newText;
return BR_CONTINUE;
}
@ -1865,12 +1828,9 @@ builtIn(addStatus) {
builtIn(statusText) {
UNUSEDALL
char *newText = getTextFromAnyVar(fun->stack->thisVar);
if (!newText)
return BR_ERROR;
Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
setStatusBar(newText);
delete[] newText;
return BR_CONTINUE;
}
@ -2024,14 +1984,11 @@ builtIn(cancelSub) {
builtIn(stringWidth) {
UNUSEDALL
char *theText = getTextFromAnyVar(fun->stack->thisVar);
if (!theText)
return BR_ERROR;
Common::String theText = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
// Return value
setVariable(fun->reg, SVT_INT, stringWidth(theText));
delete theText;
return BR_CONTINUE;
}
@ -2207,39 +2164,36 @@ builtIn(fetchEvent) {
builtIn(deleteFile) {
UNUSEDALL
char *namNormal = getTextFromAnyVar(fun->stack->thisVar);
Common::String namNormal = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
char *nam = encodeFilename(namNormal);
delete namNormal;
Common::String nam = encodeFilename(namNormal);
namNormal.clear();
if (failSecurityCheck(nam))
return BR_ERROR;
setVariable(fun->reg, SVT_INT, remove(nam));
delete nam;
setVariable(fun->reg, SVT_INT, remove(nam.c_str()));
return BR_CONTINUE;
}
builtIn(renameFile) {
UNUSEDALL
char *temp;
Common::String temp;
temp.clear();
temp = getTextFromAnyVar(fun->stack->thisVar);
char *newnam = encodeFilename(temp);
Common::String newnam = encodeFilename(temp);
trimStack(fun->stack);
if (failSecurityCheck(newnam))
return BR_ERROR;
delete temp;
temp.clear();
temp = getTextFromAnyVar(fun->stack->thisVar);
char *nam = encodeFilename(temp);
Common::String nam = encodeFilename(temp);
trimStack(fun->stack);
if (failSecurityCheck(nam))
return BR_ERROR;
delete temp;
setVariable(fun->reg, SVT_INT, rename(nam, newnam));
delete nam;
delete newnam;
setVariable(fun->reg, SVT_INT, rename(nam.c_str(), newnam.c_str()));
return BR_CONTINUE;
}
@ -2257,7 +2211,7 @@ builtIn(cacheSound) {
builtIn(burnString) {
UNUSEDALL
char *newText = getTextFromAnyVar(fun->stack->thisVar);
Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
int y, x;
if (!getValueType(y, SVT_INT, fun->stack->thisVar))
@ -2270,7 +2224,6 @@ builtIn(burnString) {
x = (winWidth - stringWidth(newText)) >> 1;
fixFont(pastePalette);
burnStringToBackdrop(newText, x, y, pastePalette);
delete[] newText;
return BR_CONTINUE;
}
@ -2352,12 +2305,9 @@ builtIn(getSoundCache) {
builtIn(saveCustomData) {
UNUSEDALL
// saveCustomData (thisStack, fileName);
char *fileNameB = getTextFromAnyVar(fun->stack->thisVar);
if (!checkNew(fileNameB))
return BR_ERROR;
Common::String fileNameB = getTextFromAnyVar(fun->stack->thisVar);
char *fileName = encodeFilename(fileNameB);
delete fileNameB;
Common::String fileName = encodeFilename(fileNameB);
if (failSecurityCheck(fileName))
return BR_ERROR;
@ -2370,19 +2320,15 @@ builtIn(saveCustomData) {
if (!stackToFile(fileName, fun->stack->thisVar))
return BR_ERROR;
trimStack(fun->stack);
delete fileName;
return BR_CONTINUE;
}
builtIn(loadCustomData) {
UNUSEDALL
char *newTextA = getTextFromAnyVar(fun->stack->thisVar);
if (!checkNew(newTextA))
return BR_ERROR;
Common::String newTextA = getTextFromAnyVar(fun->stack->thisVar);
char *newText = encodeFilename(newTextA);
delete newTextA;
Common::String newText = encodeFilename(newTextA);
if (failSecurityCheck(newText))
return BR_ERROR;
@ -2398,7 +2344,6 @@ builtIn(loadCustomData) {
fun->reg.varData.theStack->timesUsed = 1;
if (!fileToStack(newText, fun->reg.varData.theStack))
return BR_ERROR;
delete newText;
return BR_CONTINUE;
}
@ -2553,17 +2498,10 @@ builtIn(showThumbnail) {
trimStack(fun->stack);
// Encode the name!Encode the name!
char *aaaaa = getTextFromAnyVar(fun->stack->thisVar);
// deb ("Got name:", aaaaa;)
Common::String aaaaa = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
// deb ("About to encode", aaaaa);
char *file = encodeFilename(aaaaa);
// deb ("Made new name", file);
// deb ("aaaaa is still ", aaaaa);
delete[] aaaaa;
// deb ("Deleted", "aaaaa");
Common::String file = encodeFilename(aaaaa);
showThumbnail(file, x, y);
delete[] file;
return BR_CONTINUE;
}
@ -2631,7 +2569,7 @@ builtIn(_rem_registryGetString) {
builtIn(quitWithFatalError) {
UNUSEDALL
char *mess = getTextFromAnyVar(fun->stack->thisVar);
Common::String mess = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
fatal(mess);
return BR_ERROR;
@ -2693,12 +2631,7 @@ char builtInFunctionNames[][25] = {
#define NUM_FUNCS (sizeof (builtInFunctionArray) / sizeof (builtInFunctionArray[0]))
builtReturn callBuiltIn(int whichFunc, int numParams, loadedFunction *fun) {
// fprintf (stderr, "Calling function %d: %s\n", whichFunc, builtInFunctionNames[whichFunc]); fflush (stderr);
if (numBIFNames) {
// deb ("IN:", (fun->originalNumber < numUserFunc) ? allUserFunc[fun->originalNumber] : "Unknown user function");
// deb ("GO:", (whichFunc < numBIFNames) ? allBIFNames[whichFunc] : "Unknown built-in function");
setFatalInfo((fun->originalNumber < numUserFunc) ? allUserFunc[fun->originalNumber] : "Unknown user function",
(whichFunc < numBIFNames) ? allBIFNames[whichFunc] : "Unknown built-in function");
}
@ -2708,8 +2641,8 @@ builtReturn callBuiltIn(int whichFunc, int numParams, loadedFunction *fun) {
if (paramNum[whichFunc] != numParams) {
char buff[100];
sprintf(buff, "Built in function must have %i parameter%s", paramNum[whichFunc], (paramNum[whichFunc] == 1) ? "" : "s");
fatal(copyString(buff));
Common::String msg = buff;
fatal(msg);
return BR_ERROR;
}
}

View File

@ -34,7 +34,7 @@ enum builtReturn {
BR_ALREADY_GONE
};
bool failSecurityCheck(char *fn);
bool failSecurityCheck(const Common::String &fn);
builtReturn callBuiltIn(int whichFunc, int numParams, loadedFunction *fun);
} // End of namespace Sludge

View File

@ -23,7 +23,6 @@
#include "common/file.h"
#include "common/debug.h"
#include "sludge/stringy.h"
#include "sludge/allfiles.h"
#include "sludge/moreio.h"
#include "sludge/newfatal.h"
@ -95,7 +94,7 @@ uint openFileFromNum(int num) {
// Converts a string from Windows CP-1252 to UTF-8.
// This is needed for old games.
char *convertString(char *s) {
Common::String convertString(const Common::String &s) {
#if 0
static char *buf = NULL;
@ -158,7 +157,7 @@ char *convertString(char *s) {
return s; //TODO: false value
}
char *getNumberedString(int value) {
Common::String getNumberedString(int value) {
if (sliceBusy) {
fatal("Can't read from data file", "I'm already reading something");
@ -169,7 +168,7 @@ char *getNumberedString(int value) {
value = bigDataFile->readUint32LE();
bigDataFile->seek(value, 0);
char *s = readString(bigDataFile);
Common::String s = readString(bigDataFile);
if (gameVersion < VERSION(2, 2)) {
// This is an older game - We need to convert the string to UTF-8

View File

@ -33,7 +33,7 @@ void setFileIndices(Common::File *fp, int, uint);
uint openFileFromNum(int num);
bool openSubSlice(int num);
bool openObjectSlice(int num);
char *getNumberedString(int value);
Common::String getNumberedString(int value);
bool startAccess();
void finishAccess();

View File

@ -21,7 +21,6 @@
*/
#include "sludge/allfiles.h"
#include "sludge/stringy.h"
#include "sludge/sprites.h"
#include "sludge/fonttext.h"
#include "sludge/newfatal.h"
@ -42,10 +41,10 @@ uint fontTableSize = 0;
extern float cameraZoom;
bool isInFont(char *theText) {
bool isInFont(const Common::String &theText) {
if (!fontTableSize)
return 0;
if (!theText[0])
if (theText.empty())
return 0;
Common::U32String str32 = UTF8Converter::convertUtf8ToUtf32(theText);
@ -60,12 +59,12 @@ bool isInFont(char *theText) {
return fontOrder.getU32String().contains(c);
}
int stringLength(char *theText) {
int stringLength(const Common::String &theText) {
Common::U32String str32 = UTF8Converter::convertUtf8ToUtf32(theText);
return str32.size();
}
int stringWidth(char *theText) {
int stringWidth(const Common::String &theText) {
int xOff = 0;
if (!fontTableSize)
@ -81,7 +80,7 @@ int stringWidth(char *theText) {
return xOff;
}
void pasteString(char *theText, int xOff, int y, spritePalette &thePal) {
void pasteString(const Common::String &theText, int xOff, int y, spritePalette &thePal) {
if (!fontTableSize)
return;
@ -97,7 +96,7 @@ void pasteString(char *theText, int xOff, int y, spritePalette &thePal) {
}
}
void pasteStringToBackdrop(char *theText, int xOff, int y, spritePalette &thePal) {
void pasteStringToBackdrop(const Common::String &theText, int xOff, int y, spritePalette &thePal) {
if (!fontTableSize)
return;
@ -112,7 +111,7 @@ void pasteStringToBackdrop(char *theText, int xOff, int y, spritePalette &thePal
}
}
void burnStringToBackdrop(char *theText, int xOff, int y, spritePalette &thePal) {
void burnStringToBackdrop(const Common::String &theText, int xOff, int y, spritePalette &thePal) {
if (!fontTableSize)
return;
@ -160,7 +159,7 @@ void setFontColour(spritePalette &sP, byte r, byte g, byte b) {
sP.originalBlue = b;
}
bool loadFont(int filenum, const char *charOrder, int h) {
bool loadFont(int filenum, const Common::String &charOrder, int h) {
fontOrder.setUTF8String(charOrder);
forgetSpriteBank(theFont);

View File

@ -26,15 +26,15 @@
namespace Sludge {
bool loadFont(int filenum, const char *charOrder, int);
void pasteString(char *theText, int, int, spritePalette &);
bool loadFont(int filenum, const Common::String &charOrder, int);
void pasteString(const Common::String &theText, int, int, spritePalette &);
void fixFont(spritePalette &spal);
void setFontColour(spritePalette &sP, byte r, byte g, byte b);
int stringWidth(char *theText);
int stringLength(char *theText);
void pasteStringToBackdrop(char *theText, int xOff, int y, spritePalette &thePal);
void burnStringToBackdrop(char *theText, int xOff, int y, spritePalette &thePal);
bool isInFont(char *theText);
int stringWidth(const Common::String &theText);
int stringLength(const Common::String &theText);
void pasteStringToBackdrop(const Common::String &theText, int xOff, int y, spritePalette &thePal);
void burnStringToBackdrop(const Common::String &theText, int xOff, int y, spritePalette &thePal);
bool isInFont(const Common::String &theText);
} // End of namespace Sludge

View File

@ -28,7 +28,6 @@
#include "sludge/zbuffer.h"
#include "sludge/backdrop.h"
#include "sludge/movie.h"
#include "sludge/stringy.h"
#include "sludge/CommonCode/specialsettings.h"
namespace Sludge {

View File

@ -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());
}
}
}

View File

@ -41,8 +41,8 @@ struct settingsStruct {
extern settingsStruct gameSettings;
void readIniFile(const char *filename);
void saveIniFile(const char *filename);
void readIniFile(const Common::String &filename);
void saveIniFile(const Common::String &filename);
int getLanguageForFileB();
void makeLanguageTable(Common::File *table);

View File

@ -281,7 +281,7 @@ bool loadVariable(variable *to, Common::SeekableReadStream *stream) {
return true;
case SVT_STRING:
to->varData.theString = readString(stream);
to->varData.theString = createCString(readString(stream));
return true;
case SVT_STACK:
@ -384,7 +384,7 @@ loadedFunction *loadFunction(Common::SeekableReadStream *stream) {
// Save everything
//----------------------------------------------------------------------
bool saveGame(char *fname) {
bool saveGame(const Common::String &fname) {
Common::OutSaveFile *fp = g_system->getSavefileManager()->openForSaving(fname);
if (fp == NULL)
@ -511,7 +511,7 @@ bool saveGame(char *fname) {
int ssgVersion;
bool loadGame(char *fname) {
bool loadGame(const Common::String &fname) {
Common::InSaveFile *fp = g_system->getSavefileManager()->openForLoading(fname);
FILETIME savedGameTime;
@ -572,28 +572,25 @@ bool loadGame(char *fname) {
bool fontLoaded = fp->readByte();
int fontNum;
char *charOrder;
Common::String charOrder = "";
if (fontLoaded) {
fontNum = fp->readUint16BE();
fontHeight = fp->readUint16BE();
if (ssgVersion < VERSION(2, 2)) {
int x;
charOrder = new char[257];
if (!checkNew(charOrder))
return false;
char *tmp = new char[257];
for (int a = 0; a < 256; a++) {
x = fp->readByte();
charOrder[x] = a;
int x = fp->readByte();
tmp[x] = a;
}
charOrder[256] = 0;
tmp[256] = 0;
charOrder = tmp;
delete []tmp;
} else {
charOrder = readString(fp);
}
}
loadFont(fontNum, charOrder, fontHeight);
delete []charOrder;
fontSpace = fp->readSint16LE();

View File

@ -24,8 +24,8 @@
namespace Sludge {
bool saveGame(char *fname);
bool loadGame(char *fname);
bool saveGame(const Common::String &fname);
bool loadGame(const Common::String &fname);
bool saveVariable(variable *from, Common::WriteStream *stream);
bool loadVariable(variable *to, Common::SeekableReadStream *stream);

View File

@ -30,7 +30,6 @@
#include "sludge/allfiles.h"
#include "sludge/language.h"
#include "sludge/stringy.h"
#include "sludge/sludger.h"
#include "sludge/backdrop.h"
#include "sludge/language.h"
@ -71,9 +70,9 @@ Graphics::Surface renderSurface;
int dialogValue = 0;
char *gameName = NULL;
char *gamePath = NULL;
char *bundleFolder;
Common::String gameName = "";
Common::String gamePath = "";
Common::String bundleFolder = "";
void setGameFilePath(char *f) {
char currentDir[1000];
@ -329,8 +328,6 @@ int main_loop(const char *filename)
Wait_Frame();
}
delete[] gamePath;
killSoundStuff();
#if 0

View File

@ -32,7 +32,6 @@ MODULE_OBJS := \
sprbanks.o \
sprites.o \
statusba.o \
stringy.o \
talk.o \
thumbnail.o \
timing.o \

View File

@ -26,7 +26,6 @@
#include "sludge/allfiles.h"
#include "sludge/moreio.h"
#include "sludge/newfatal.h"
#include "sludge/stringy.h"
#include "sludge/sludge.h"
namespace Sludge {
@ -41,157 +40,132 @@ void writeString(Common::String s, Common::WriteStream *stream) {
}
}
char *readString(Common::SeekableReadStream *stream) {
int a, len = stream->readUint16BE();
char *s = new char[len + 1];
if (!checkNew(s)) {
return NULL;
Common::String readString(Common::SeekableReadStream *stream) {
int len = stream->readUint16BE();
Common::String res = "";
for (int a = 0; a < len; a++) {
res += (char)(stream->readByte() - 1);
}
for (a = 0; a < len; a++) {
s[a] = (char)(stream->readByte() - 1);
}
s[len] = 0;
debug(kSludgeDebugDataLoad, "Read string of length %i: %s", len, s);
return s;
debug(kSludgeDebugDataLoad, "Read string of length %i: %s", len, res.c_str());
return res;
}
char *encodeFilename(char *nameIn) {
if (!nameIn)
return NULL;
Common::String encodeFilename(const Common::String &nameIn) {
Common::String newName = "";
if (nameIn.empty())
return newName;
if (allowAnyFilename) {
char *newName = new char[strlen(nameIn) * 2 + 1];
if (!checkNew(newName))
return NULL;
int i = 0;
while (*nameIn) {
switch (*nameIn) {
for (uint i = 0; i < nameIn.size(); ++i) {
switch (nameIn[i]) {
case '<':
newName[i++] = '_';
newName[i++] = 'L';
newName += '_';
newName += 'L';
break;
case '>':
newName[i++] = '_';
newName[i++] = 'G';
newName += '_';
newName += 'G';
break;
case '|':
newName[i++] = '_';
newName[i++] = 'P';
newName += '_';
newName += 'P';
break;
case '_':
newName[i++] = '_';
newName[i++] = 'U';
newName += '_';
newName += 'U';
break;
case '\"':
newName[i++] = '_';
newName[i++] = 'S';
newName += '_';
newName += 'S';
break;
case '\\':
newName[i++] = '_';
newName[i++] = 'B';
newName += '_';
newName += 'B';
break;
case '/':
newName[i++] = '_';
newName[i++] = 'F';
newName += '_';
newName += 'F';
break;
case ':':
newName[i++] = '_';
newName[i++] = 'C';
newName += '_';
newName += 'C';
break;
case '*':
newName[i++] = '_';
newName[i++] = 'A';
newName += '_';
newName += 'A';
break;
case '?':
newName[i++] = '_';
newName[i++] = 'Q';
newName += '_';
newName += 'Q';
break;
default:
newName[i++] = *nameIn;
newName += nameIn[i];
break;
}
newName[i] = 0;
nameIn++;
}
return newName;
} else {
int a;
for (a = 0; nameIn[a]; a++) {
if (nameIn[a] == '\\')
nameIn[a] = '/';
newName.clear();
newName = nameIn;
for (uint i = 0; i < newName.size(); ++i) {
if (newName[i] == '\\')
newName.setChar('/', i);
}
return copyString(nameIn);
}
return newName;
}
char *decodeFilename(char *nameIn) {
Common::String decodeFilename(const Common::String &nameIn) {
Common::String newName ="";
if (allowAnyFilename) {
char *newName = new char[strlen(nameIn) + 1];
if (!checkNew(newName))
return NULL;
int i = 0;
while (*nameIn) {
if (*nameIn == '_') {
nameIn++;
switch (*nameIn) {
for (uint i = 0; i < nameIn.size(); ++i) {
if (nameIn[i] == '_') {
++i;
switch (nameIn[i]) {
case 'L':
newName[i] = '<';
nameIn++;
newName += '<';
break;
case 'G':
newName[i] = '>';
nameIn++;
newName += '>';
break;
case 'P':
newName[i] = '|';
nameIn++;
newName += '|';
break;
case 'U':
newName[i] = '_';
nameIn++;
newName += '_';
break;
case 'S':
newName[i] = '\"';
nameIn++;
newName += '\"';
break;
case 'B':
newName[i] = '\\';
nameIn++;
newName += '\\';
break;
case 'F':
newName[i] = '/';
nameIn++;
newName += '/';
break;
case 'C':
newName[i] = ':';
nameIn++;
newName += ':';
break;
case 'A':
newName[i] = '*';
nameIn++;
newName += '*';
break;
case 'Q':
newName[i] = '?';
nameIn++;
newName += '?';
break;
default:
newName[i] = '_';
newName += '_';
--i;
break;
}
} else {
newName[i] = *nameIn;
nameIn++;
newName += nameIn[i];
}
i++;
}
newName[i] = 0;
return newName;
} else {
return copyString(nameIn);
newName.clear();
newName = nameIn;
}
return newName;
}
} // End of namespace Sludge

View File

@ -25,11 +25,11 @@
namespace Sludge {
// Read & Write
char *readString(Common::SeekableReadStream *stream);
Common::String readString(Common::SeekableReadStream *stream);
void writeString(Common::String s, Common::WriteStream *stream);
char *encodeFilename(char *nameIn);
char *decodeFilename(char *nameIn);
Common::String encodeFilename(const Common::String &nameIn);
Common::String decodeFilename(const Common::String &nameIn);
} // End of namespace Sludge

View File

@ -24,7 +24,6 @@
#include "sludge/allfiles.h"
#include "sludge/sound.h"
#include "sludge/stringy.h"
#include "sludge/errors.h"
#include "sludge/graphics.h"
#include "sludge/sludge.h"
@ -38,11 +37,11 @@ static Common::String fatalMessage;
static Common::String fatalInfo = "Initialisation error! Something went wrong before we even got started!";
extern int numResourceNames /* = 0*/;
extern char **allResourceNames /*= NULL*/;
extern Common::String *allResourceNames /*= ""*/;
int resourceForFatal = -1;
const char *resourceNameFromNum(int i) {
const Common::String &resourceNameFromNum(int i) {
if (i == -1)
return NULL;
if (numResourceNames == 0)

View File

@ -37,7 +37,7 @@ void displayFatal();
void registerWindowForFatal();
void setFatalInfo(const Common::String &userFunc, const Common::String &BIF);
void setResourceForFatal(int n);
const char *resourceNameFromNum(int i);
const Common::String &resourceNameFromNum(int i);
} // End of namespace Sludge

View File

@ -118,7 +118,7 @@ objectType *loadObjectType(int i) {
objectType *loadObjectRef(Common::SeekableReadStream *stream) {
objectType *r = loadObjectType(stream->readUint16BE());
delete r->screenName;
r->screenName.clear();
r->screenName = readString(stream);
return r;
}
@ -161,13 +161,8 @@ void removeObjectType(objectType *oT) {
while (*huntRegion) {
if ((*huntRegion) == oT) {
// FILE * debuggy2 = fopen ("debug.txt", "at");
// fprintf (debuggy2, "DELETING OBJECT TYPE: %p %s\n", oT, oT -> screenName);
// fclose (debuggy2);
*huntRegion = oT->next;
delete []oT->allCombis;
delete []oT->screenName;
delete oT;
return;
} else {

View File

@ -29,7 +29,7 @@ struct combination {
};
struct objectType {
char *screenName;
Common::String screenName;
int objectNum;
objectType *next;
byte r, g, b;

View File

@ -480,7 +480,7 @@ void drawPeople() {
bool r = false;
r = scaleSprite(myAnim->theSprites->bank.sprites[fNum], myAnim->theSprites->bank.myPalette, thisPerson, m);
if (r) {
if (thisPerson->thisType->screenName[0]) {
if (!thisPerson->thisType->screenName.empty()) {
if (personRegion.thisType != thisPerson->thisType)
lastRegion = NULL;
personRegion.thisType = thisPerson->thisType;

View File

@ -35,7 +35,7 @@ uint16 saveEncoding = false;
char encode1 = 0;
char encode2 = 0;
extern char *gamePath;
extern Common::String gamePath;
/*
void loadSaveDebug (char * com) {
@ -56,28 +56,25 @@ extern char *gamePath;
fclose (ffpp);
}
*/
void writeStringEncoded(const char *s, Common::WriteStream *stream) {
int a, len = strlen(s);
void writeStringEncoded(const Common::String &s, Common::WriteStream *stream) {
int len = s.size();
stream->writeUint16BE(len);
for (a = 0; a < len; a++) {
for (int a = 0; a < len; a++) {
stream->writeByte(s[a] ^ encode1);
encode1 += encode2;
}
}
char *readStringEncoded(Common::File *fp) {
int a, len = fp->readUint16BE();
char *s = new char[len + 1];
if (!checkNew(s))
return NULL;
for (a = 0; a < len; a++) {
s[a] = (char)(fp->readByte() ^ encode1);
Common::String readStringEncoded(Common::File *fp) {
int len = fp->readUint16BE();
Common::String res = "";
for (int a = 0; a < len; a++) {
res += (char)(fp->readByte() ^ encode1);
encode1 += encode2;
}
s[len] = 0;
return s;
return res;
}
char *readTextPlain(Common::File *fp) {
@ -117,11 +114,11 @@ char *readTextPlain(Common::File *fp) {
return reply;
}
bool fileToStack(char *filename, stackHandler *sH) {
bool fileToStack(const Common::String &filename, stackHandler *sH) {
variable stringVar;
stringVar.varType = SVT_NULL;
const char *checker = saveEncoding ? "[Custom data (encoded)]\r\n" : "[Custom data (ASCII)]\n";
Common::String checker = saveEncoding ? "[Custom data (encoded)]\r\n" : "[Custom data (ASCII)]\n";
Common::File fd;
@ -150,23 +147,20 @@ bool fileToStack(char *filename, stackHandler *sH) {
encode1 = (byte)saveEncoding & 255;
encode2 = (byte)(saveEncoding >> 8);
while (*checker) {
if (fd.readByte() != *checker) {
for (uint i = 0; i < checker.size(); ++i) {
if (fd.readByte() != checker[i]) {
fd.close();
return fatal(LOAD_ERROR "This isn't a SLUDGE custom data file:", filename);
}
checker++;
}
if (saveEncoding) {
char *checker = readStringEncoded(&fd);
if (strcmp(checker, "UN<EFBFBD>LO<EFBFBD>CKED")) {
checker = readStringEncoded(&fd);
if (checker == "UN<EFBFBD>LO<EFBFBD>CKED") {
fd.close();
return fatal(
LOAD_ERROR "The current file encoding setting does not match the encoding setting used when this file was created:", filename);
}
delete checker;
checker = NULL;
}
for (;;) {
@ -177,9 +171,8 @@ bool fileToStack(char *filename, stackHandler *sH) {
break;
switch (i) {
case 0: {
char *g = readStringEncoded(&fd);
Common::String g = readStringEncoded(&fd);
makeTextVar(stringVar, g);
delete g;
}
break;
@ -220,7 +213,7 @@ bool fileToStack(char *filename, stackHandler *sH) {
return true;
}
bool stackToFile(char *filename, const variable &from) {
bool stackToFile(const Common::String &filename, const variable &from) {
#if 0
FILE *fp = fopen(filename, saveEncoding ? "wb" : "wt");
if (!fp) return fatal("Can't create file", filename);

View File

@ -24,8 +24,8 @@
namespace Sludge {
bool fileToStack(char *filename, stackHandler *sH);
bool stackToFile(char *filename, const variable &from);
bool fileToStack(const Common::String &filename, stackHandler *sH);
bool stackToFile(const Common::String &filename, const variable &from);
} // End of namespace Sludge

View File

@ -33,7 +33,6 @@
#include "sludge/people.h"
#include "sludge/talk.h"
#include "sludge/newfatal.h"
#include "sludge/stringy.h"
#include "sludge/moreio.h"
#include "sludge/statusba.h"
#include "sludge/builtin.h"
@ -58,18 +57,18 @@ extern personaAnimation *mouseCursorAnim;
extern spritePalette pastePalette;
extern int dialogValue;
extern uint sceneWidth, sceneHeight;
extern char *launchMe;
extern Common::String launchMe;
extern variable *launchResult;
extern bool reallyWantToQuit;
extern Graphics::Surface renderSurface;
int numBIFNames = 0;
char **allBIFNames = NULL;
Common::String *allBIFNames;
int numUserFunc = 0;
char **allUserFunc = NULL;
Common::String *allUserFunc = NULL;
int numResourceNames = 0;
char **allResourceNames = NULL;
Common::String *allResourceNames = NULL;
int selectedLanguage = 0;
int languageNum = -1;
@ -99,7 +98,7 @@ extern loadedFunction *saverFunc;
loadedFunction *allRunningFunctions = NULL;
screenRegion *lastRegion = NULL;
variableStack *noStack = NULL;
char *loadNow = NULL;
Common::String loadNow;
inputType input;
variable *globalVars;
int numGlobals;
@ -133,7 +132,7 @@ void saveHandlers(Common::WriteStream *stream) {
stream->writeUint16BE(currentEvents->spaceFunction);
}
Common::File *openAndVerify(const char *filename, char extra1, char extra2,
Common::File *openAndVerify(const Common::String &filename, char extra1, char extra2,
const char *er, int &fileVersion) {
Common::File *fp = new Common::File();
if (!fp->open(filename)) {
@ -184,12 +183,11 @@ Common::File *openAndVerify(const char *filename, char extra1, char extra2,
return fp;
}
bool initSludge(const char *filename) {
bool initSludge(const Common::String &filename) {
int a = 0;
mouseCursorAnim = makeNullAnim();
Common::File *fp = openAndVerify(filename, 'G', 'E', ERROR_BAD_HEADER,
gameVersion);
Common::File *fp = openAndVerify(filename, 'G', 'E', ERROR_BAD_HEADER, gameVersion);
if (!fp)
return false;
@ -197,31 +195,34 @@ bool initSludge(const char *filename) {
if (c) {
numBIFNames = fp->readUint16BE();
debug(kSludgeDebugDataLoad, "numBIFNames %i", numBIFNames);
allBIFNames = new char *[numBIFNames];
allBIFNames = new Common::String[numBIFNames];
if (!checkNew(allBIFNames))
return false;
for (int fn = 0; fn < numBIFNames; fn++) {
allBIFNames[fn].clear();
allBIFNames[fn] = readString(fp);
}
numUserFunc = fp->readUint16BE();
debug(kSludgeDebugDataLoad, "numUserFunc %i", numUserFunc);
allUserFunc = new char *[numUserFunc];
allUserFunc = new Common::String[numUserFunc];
if (!checkNew(allUserFunc))
return false;
for (int fn = 0; fn < numUserFunc; fn++) {
allUserFunc[fn].clear();
allUserFunc[fn] = readString(fp);
}
if (gameVersion >= VERSION(1, 3)) {
numResourceNames = fp->readUint16BE();
debug(kSludgeDebugDataLoad, "numResourceNames %i",
numResourceNames);
allResourceNames = new char *[numResourceNames];
allResourceNames = new Common::String[numResourceNames];
if (!checkNew(allResourceNames))
return false;
for (int fn = 0; fn < numResourceNames; fn++) {
allResourceNames[fn].clear();
allResourceNames[fn] = readString(fp);
}
}
@ -235,17 +236,15 @@ bool initSludge(const char *filename) {
debug(kSludgeDebugDataLoad, "specialSettings : %i", specialSettings);
desiredfps = 1000 / fp->readByte();
delete[] readString(fp); // Unused - was used for registration purposes.
readString(fp); // Unused - was used for registration purposes.
uint bytes_read = fp->read(&fileTime, sizeof(FILETIME));
if (bytes_read != sizeof(FILETIME) && fp->err()) {
debug("Reading error in initSludge.");
}
char *dataFol =
(gameVersion >= VERSION(1, 3)) ?
readString(fp) : joinStrings("", "");
debug(kSludgeDebugDataLoad, "dataFol : %s", dataFol);
Common::String dataFol = (gameVersion >= VERSION(1, 3)) ? readString(fp) : "";
debug(kSludgeDebugDataLoad, "dataFol : %s", dataFol.c_str());
gameSettings.numLanguages =
(gameVersion >= VERSION(1, 3)) ? (fp->readByte()) : 0;
@ -260,13 +259,11 @@ bool initSludge(const char *filename) {
fp->readFloatLE();
}
char *checker = readString(fp);
debug(kSludgeDebugDataLoad, "checker : %s", checker);
Common::String checker = readString(fp);
debug(kSludgeDebugDataLoad, "checker : %s", checker.c_str());
if (strcmp(checker, "okSoFar"))
if (checker != "okSoFar")
return fatal(ERROR_BAD_HEADER, filename);
delete[] checker;
checker = NULL;
byte customIconLogo = fp->readByte();
debug(kSludgeDebugDataLoad, "Game icon type: %i", customIconLogo);
@ -504,11 +501,9 @@ bool initSludge(const char *filename) {
// Get the original (untranslated) name of the game and convert it to Unicode.
// We use this to find saved preferences and saved games.
setFileIndices(fp, gameSettings.numLanguages, 0);
char *gameNameOrig = getNumberedString(1);
Common::String gameNameOrig = getNumberedString(1);
char *gameName = encodeFilename(gameNameOrig);
delete[] gameNameOrig;
Common::String gameName = encodeFilename(gameNameOrig);
#if 0
changeToUserDir();
@ -517,7 +512,6 @@ bool initSludge(const char *filename) {
if (chdir(gameName)) return fatal("This game's preference folder is inaccessible!\nI can't access the following directory (maybe there's a file with the same name, or maybe it's read-protected):", gameName);
#endif
delete[] gameName;
// Get user settings
readIniFile(filename);
@ -533,14 +527,13 @@ bool initSludge(const char *filename) {
return fatal("Can't find the translation data specified!");
setFileIndices(NULL, gameSettings.numLanguages, languageNum);
if (dataFol[0]) {
char *dataFolder = encodeFilename(dataFol);
if (!dataFol.empty()) {
Common::String dataFolder = encodeFilename(dataFol);
#if 0
mkdir(dataFolder, 0000777);
if (chdir(dataFolder)) return fatal("This game's data folder is inaccessible!\nI can't access the following directory (maybe there's a file with the same name, or maybe it's read-protected):", dataFolder);
#endif
delete []dataFolder;
}
positionStatus(10, winHeight - 15);
@ -647,10 +640,10 @@ void abortFunction(loadedFunction *fun) {
pauseFunction(fun);
while (fun->stack)
trimStack(fun->stack);
delete fun->compiledLines;
delete []fun->compiledLines;
for (a = 0; a < fun->numLocals; a++)
unlinkVar(fun->localVars[a]);
delete[] fun->localVars;
delete []fun->localVars;
unlinkVar(fun->reg);
if (fun->calledBy)
abortFunction(fun->calledBy);
@ -1201,16 +1194,15 @@ bool runSludge() {
thisFunction = nextFunction;
}
if (loadNow) {
if (!loadNow.empty()) {
if (loadNow[0] == ':') {
saveGame(loadNow + 1);
saveGame(loadNow.c_str() + 1);
setVariable(saverFunc->reg, SVT_INT, 1);
} else {
if (!loadGame(loadNow))
return false;
}
delete loadNow;
loadNow = NULL;
loadNow.clear();
}
return true;
@ -1315,14 +1307,14 @@ bool handleInput() {
}
// lastFramesPerSecond = theTime.wSecond;
#endif
if (launchMe) {
if (!launchMe.empty()) {
if (l) {
// Still paused because of spawned thingy...
} else {
l = 1;
setVariable(*launchResult, SVT_INT, 0/*launch(launchMe) > 31*/); //TODO:false value
launchMe = NULL;
launchMe.clear();
launchResult = NULL;
}
return true;
@ -1379,19 +1371,19 @@ bool handleInput() {
return false;
}
if (input.keyPressed && currentEvents->spaceFunction) {
char *tempString = NULL;
Common::String tempString = "";
switch (input.keyPressed) {
case 127:
tempString = copyString("BACKSPACE");
tempString = "BACKSPACE";
break;
case 9:
tempString = copyString("TAB");
tempString = "TAB";
break;
case 13:
tempString = copyString("ENTER");
tempString = "ENTER";
break;
case 27:
tempString = copyString("ESCAPE");
tempString = "ESCAPE";
break;
/*
case 1112: tempString = copyString ("ALT+F1"); break;
@ -1410,90 +1402,89 @@ bool handleInput() {
case 2019: tempString = copyString ("PAUSE"); break;
*/
case 63276:
tempString = copyString("PAGE UP");
tempString = "PAGE UP";
break;
case 63277:
tempString = copyString("PAGE DOWN");
tempString = "PAGE DOWN";
break;
case 63275:
tempString = copyString("END");
tempString = "END";
break;
case 63273:
tempString = copyString("HOME");
tempString = "HOME";
break;
case 63234:
tempString = copyString("LEFT");
tempString = "LEFT";
break;
case 63232:
tempString = copyString("UP");
tempString = "UP";
break;
case 63235:
tempString = copyString("RIGHT");
tempString = "RIGHT";
break;
case 63233:
tempString = copyString("DOWN");
tempString = "DOWN";
break;
/*
case 2045: tempString = copyString ("INSERT"); break;
case 2046: tempString = copyString ("DELETE"); break;
*/
case 63236:
tempString = copyString("F1");
tempString = "F1";
break;
case 63237:
tempString = copyString("F2");
tempString = "F2";
break;
case 63238:
tempString = copyString("F3");
tempString = "F3";
break;
case 63239:
tempString = copyString("F4");
tempString = "F4";
break;
case 63240:
tempString = copyString("F5");
tempString = "F5";
break;
case 63241:
tempString = copyString("F6");
tempString = "F6";
break;
case 63242:
tempString = copyString("F7");
tempString = "F7";
break;
case 63243:
tempString = copyString("F8");
tempString = "F8";
break;
case 63244:
tempString = copyString("F9");
tempString = "F9";
break;
case 63245:
tempString = copyString("F10");
tempString = "F10";
break;
case 63246:
tempString = copyString("F11");
tempString = "F11";
break;
case 63247:
tempString = copyString("F12");
tempString = "F12";
break;
default:
if (input.keyPressed >= 256) {
//if (captureAllKeys) {
tempString = copyString("ABCDEF");
sprintf(tempString, "%i", input.keyPressed);
char tmp[7] = "ABCDEF";
sprintf(tmp, "%i", input.keyPressed);
tempString = tmp;
//}
} else {
tempString = copyString(" ");
tempString[0] = input.keyPressed;
char tmp[2] = " ";
tmp[0] = input.keyPressed;
tempString = tmp;
}
}
if (tempString) {
if (!tempString.empty()) {
variableStack *tempStack = new variableStack;
if (!checkNew(tempStack))
return false;
initVarNew(tempStack->thisVar);
makeTextVar(tempStack->thisVar, tempString);
delete tempString;
tempString = NULL;
tempStack->next = NULL;
if (!startNewFunctionNum(currentEvents->spaceFunction, 1, NULL, tempStack))
return false;

View File

@ -76,7 +76,7 @@ struct inputType {
extern byte *gameIcon;
extern int iconW, iconH;
bool initSludge(const char *);
bool initSludge(const Common::String &);
void displayBase();
void sludgeDisplay();
int startNewFunctionNum(uint, uint, loadedFunction *, variableStack*&, bool = true);
@ -88,7 +88,7 @@ void saveHandlers(Common::WriteStream *stream);
void finishFunction(loadedFunction *fun);
void abortFunction(loadedFunction *fun);
Common::File *openAndVerify(const char *filename, char extra1, char extra2, const char *er, int &fileVersion);
Common::File *openAndVerify(const Common::String &filename, char extra1, char extra2, const char *er, int &fileVersion);
void freezeSubs();
void unfreezeSubs();

View File

@ -27,7 +27,6 @@
#include "sludge/sprites.h"
#include "sludge/fonttext.h"
#include "sludge/moreio.h"
#include "sludge/stringy.h"
#include "sludge/newfatal.h"
#include "sludge/statusba.h"
@ -49,7 +48,6 @@ void killLastStatus() {
if (nowStatus->firstStatusBar) {
statusBar *kill = nowStatus->firstStatusBar;
nowStatus->firstStatusBar = kill->next;
delete kill->text;
delete kill;
}
}
@ -61,7 +59,6 @@ void clearStatusBar() {
while (stat) {
kill = stat;
stat = stat->next;
delete kill->text;
delete kill;
}
nowStatus->firstStatusBar = NULL;
@ -71,15 +68,15 @@ void addStatusBar() {
statusBar *newStat = new statusBar;
if (checkNew(newStat)) {
newStat->next = nowStatus->firstStatusBar;
newStat->text = copyString("");
newStat->text.clear();
nowStatus->firstStatusBar = newStat;
}
}
void setStatusBar(char *txt) {
void setStatusBar(Common::String &txt) {
if (nowStatus->firstStatusBar) {
delete[] nowStatus->firstStatusBar->text;
nowStatus->firstStatusBar->text = copyString(txt);
nowStatus->firstStatusBar->text.clear();
nowStatus->firstStatusBar->text = txt;
}
}
@ -166,7 +163,7 @@ void initStatusBar() {
statusBarLitColour(255, 255, 128);
}
const char *statusBarText() {
const Common::String &statusBarText() {
if (nowStatus->firstStatusBar) {
return nowStatus->firstStatusBar->text;
} else {

View File

@ -22,10 +22,12 @@
#ifndef SLUDGE_STATUSBA_H
#define SLUDGE_STATUSBA_H
#include "common/str.h"
namespace Sludge {
struct statusBar {
char *text;
Common::String text;
statusBar *next;
};
@ -40,14 +42,14 @@ struct statusStuff {
void initStatusBar();
void setStatusBar(char *txt);
void setStatusBar(Common::String &txt);
void clearStatusBar();
void addStatusBar();
void killLastStatus();
void statusBarColour(byte r, byte g, byte b);
void statusBarLitColour(byte r, byte g, byte b);
void setLitStatus(int i);
const char *statusBarText();
const Common::String &statusBarText();
void positionStatus(int, int);
void drawStatusBar();

View File

@ -1,48 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "sludge/allfiles.h"
#include "sludge/newfatal.h"
#ifndef SLUDGE_STRINGY_H
#define SLUDGE_STRINGY_H
namespace Sludge {
char *copyString(const char *copyMe) {
char *newString = new char[strlen(copyMe) + 1];
if (!checkNew(newString))
return NULL;
strcpy(newString, copyMe);
return newString;
}
char *joinStrings(const char *s1, const char *s2) {
char *newString = new char[strlen(s1) + strlen(s2) + 1];
if (!checkNew(newString))
return NULL;
sprintf(newString, "%s%s", s1, s2);
return newString;
}
} // End of namespace Sludge
#endif

View File

@ -1,32 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef SLUDGE_STRINGY_H
#define SLUDGE_STRINGY_H
namespace Sludge {
char *copyString(const char *copyMe);
char *joinStrings(const char *s1, const char *s2);
} // End of namespace Sludge
#endif

View File

@ -32,7 +32,6 @@
#include "sludge/sound.h"
#include "sludge/fonttext.h"
#include "sludge/newfatal.h"
#include "sludge/stringy.h"
#include "sludge/moreio.h"
namespace Sludge {
@ -70,7 +69,6 @@ void killAllSpeech() {
while (speech->allSpeech) {
killMe = speech->allSpeech;
speech->allSpeech = speech->allSpeech->next;
delete[] killMe->textLine;
delete killMe;
}
}
@ -79,7 +77,7 @@ inline void setObjFontColour(objectType *t) {
setFontColour(speech->talkCol, t->r, t->g, t->b);
}
void addSpeechLine(char *theLine, int x, int &offset) {
void addSpeechLine(const Common::String &theLine, int x, int &offset) {
int halfWidth = (stringWidth(theLine) >> 1) / cameraZoom;
int xx1 = x - (halfWidth);
int xx2 = x + (halfWidth);
@ -87,7 +85,8 @@ void addSpeechLine(char *theLine, int x, int &offset) {
checkNew(newLine);
newLine->next = speech->allSpeech;
newLine->textLine = copyString(theLine);
newLine->textLine.clear();
newLine->textLine = theLine;
newLine->x = xx1;
speech->allSpeech = newLine;
if ((xx1 < 5) && (offset < (5 - xx1))) {
@ -102,12 +101,12 @@ int isThereAnySpeechGoingOn() {
return speech->allSpeech ? speech->lookWhosTalking : -1;
}
int wrapSpeechXY(char *theText, int x, int y, int wrap, int sampleFile) {
int wrapSpeechXY(const Common::String &theText, int x, int y, int wrap, int sampleFile) {
int a, offset = 0;
killAllSpeech();
int speechTime = (strlen(theText) + 20) * speechSpeed;
int speechTime = (theText.size() + 20) * speechSpeed;
if (speechTime < 1)
speechTime = 1;
if (sampleFile != -1) {
@ -123,23 +122,26 @@ int wrapSpeechXY(char *theText, int x, int y, int wrap, int sampleFile) {
}
speech->speechY = y;
while (strlen(theText) > wrap) {
char *tmp, *txt;
tmp = txt = createCString(theText);
while ((int)strlen(txt) > wrap) {
a = wrap;
while (theText[a] != ' ') {
while (txt[a] != ' ') {
a--;
if (a == 0) {
a = wrap;
break;
}
}
theText[a] = 0;
addSpeechLine(theText, x, offset);
theText[a] = ' ';
theText += a + 1;
txt[a] = 0;
addSpeechLine(txt, x, offset);
txt[a] = ' ';
txt += a + 1;
y -= fontHeight / cameraZoom;
}
addSpeechLine(theText, x, offset);
addSpeechLine(txt, x, offset);
y -= fontHeight / cameraZoom;
delete []tmp;
if (y < 0)
speech->speechY -= y;
@ -158,7 +160,7 @@ int wrapSpeechXY(char *theText, int x, int y, int wrap, int sampleFile) {
return speechTime;
}
int wrapSpeechPerson(char *theText, onScreenPerson &thePerson, int sampleFile,
int wrapSpeechPerson(const Common::String &theText, onScreenPerson &thePerson, int sampleFile,
bool animPerson) {
int i = wrapSpeechXY(theText, thePerson.x - cameraX,
thePerson.y - cameraY
@ -172,7 +174,7 @@ int wrapSpeechPerson(char *theText, onScreenPerson &thePerson, int sampleFile,
return i;
}
int wrapSpeech(char *theText, int objT, int sampleFile, bool animPerson) {
int wrapSpeech(const Common::String &theText, int objT, int sampleFile, bool animPerson) {
int i;
speech->lookWhosTalking = objT;

View File

@ -27,7 +27,7 @@
namespace Sludge {
struct speechLine {
char *textLine;
Common::String textLine;
speechLine *next;
int x;
};
@ -39,7 +39,7 @@ struct speechStruct {
spritePalette talkCol;
};
int wrapSpeech(char *theText, int objT, int sampleFile, bool);
int wrapSpeech(const Common::String &theText, int objT, int sampleFile, bool);
void viewSpeech();
void killAllSpeech();
int isThereAnySpeechGoingOn();

View File

@ -129,7 +129,7 @@ bool saveThumbnail(Common::WriteStream *stream) {
return true;
}
void showThumbnail(char *filename, int atX, int atY) {
void showThumbnail(const Common::String &filename, int atX, int atY) {
#if 0
GLubyte *thumbnailTexture = NULL;
GLuint thumbnailTextureName = 0;

View File

@ -27,7 +27,7 @@ namespace Sludge {
bool saveThumbnail(Common::WriteStream *stream);
bool skipThumbnail(Common::SeekableReadStream *stream);
void showThumbnail(char *filename, int x, int y);
void showThumbnail(const Common::String &filename, int x, int y);
} // End of namespace Sludge

View File

@ -26,7 +26,6 @@
#include "sludge/variable.h"
#include "sludge/moreio.h"
#include "sludge/newfatal.h"
#include "sludge/stringy.h"
#include "sludge/objtypes.h"
#include "sludge/people.h"
#include "sludge/fileset.h"
@ -43,7 +42,7 @@ extern char *outputDir;
void unlinkVar(variable &thisVar) {
switch (thisVar.varType) {
case SVT_STRING:
delete[] thisVar.varData.theString;
delete []thisVar.varData.theString;
thisVar.varData.theString = NULL;
break;
@ -143,10 +142,9 @@ int stackSize(const stackHandler *me) {
return r;
}
bool getSavedGamesStack(stackHandler *sH, char *ext) {
char *pattern = joinStrings("*", ext);
if (!pattern)
return false;
bool getSavedGamesStack(stackHandler *sH, const Common::String &ext) {
Common::String pattern = "*";
pattern += ext;
variable newName;
newName.varType = SVT_NULL;
@ -173,8 +171,6 @@ bool getSavedGamesStack(stackHandler *sH, char *ext) {
closedir(dir);
#endif
delete[] pattern;
pattern = NULL;
return true;
}
@ -238,14 +234,12 @@ void addVariablesInSecond(variable &var1, variable &var2) {
if (var1.varType == SVT_INT && var2.varType == SVT_INT) {
var2.varData.intValue += var1.varData.intValue;
} else {
char *string1 = getTextFromAnyVar(var1);
char *string2 = getTextFromAnyVar(var2);
Common::String string1 = getTextFromAnyVar(var1);
Common::String string2 = getTextFromAnyVar(var2);
unlinkVar(var2);
var2.varData.theString = joinStrings(string1, string2);
var2.varData.theString = createCString(string1 + string2);
var2.varType = SVT_STRING;
delete[] string1;
delete[] string2;
}
}
@ -285,65 +279,59 @@ void compareVariablesInSecond(const variable &var1, variable &var2) {
setVariable(var2, SVT_INT, compareVars(var1, var2));
}
void makeTextVar(variable &thisVar, const char *txt) {
char *createCString(const Common::String &s) {
uint n = s.size() + 1;
char *res = new char[n];
if (!checkNew(res)) {
fatal("createCString : Unable to copy String");
return NULL;
}
memcpy(res, s.c_str(), n);
return res;
}
void makeTextVar(variable &thisVar, const Common::String &txt) {
unlinkVar(thisVar);
thisVar.varType = SVT_STRING;
thisVar.varData.theString = copyString(txt);
thisVar.varData.theString = createCString(txt);
}
bool loadStringToVar(variable &thisVar, int value) {
makeTextVar(thisVar, getNumberedString(value));
return (bool)(thisVar.varData.theString != NULL);
}
char *getTextFromAnyVar(const variable &from) {
Common::String getTextFromAnyVar(const variable &from) {
switch (from.varType) {
case SVT_STRING:
return copyString(from.varData.theString);
return from.varData.theString;
case SVT_FASTARRAY: {
char *builder = copyString("FAST:");
char *builder2;
char *grabText;
Common::String builder = "FAST:";
Common::String builder2 = "";
Common::String grabText = "";
for (int i = 0; i < from.varData.fastArray->size; i++) {
builder2 = joinStrings(builder, " ");
if (!builder2)
return NULL;
delete builder;
builder2 = builder + " ";
grabText = getTextFromAnyVar(from.varData.fastArray->fastVariables[i]);
builder = joinStrings(builder2, grabText);
if (!builder)
return NULL;
delete grabText;
grabText = NULL;
delete builder2;
builder2 = NULL;
builder.clear();
builder = builder2 + grabText;
}
return builder;
}
case SVT_STACK: {
char *builder = copyString("ARRAY:");
char *builder2;
char *grabText;
Common::String builder = "ARRAY:";
Common::String builder2 = "";
Common::String grabText = "";
variableStack *stacky = from.varData.theStack->first;
while (stacky) {
builder2 = joinStrings(builder, " ");
if (!builder2)
return NULL;
delete[] builder;
builder2 = builder + " ";
grabText = getTextFromAnyVar(stacky->thisVar);
builder = joinStrings(builder2, grabText);
if (!builder)
return NULL;
delete[] grabText;
grabText = NULL;
delete[] builder2;
builder2 = NULL;
builder.clear();
builder = builder2 + grabText;
stacky = stacky->next;
}
return builder;
@ -351,17 +339,14 @@ char *getTextFromAnyVar(const variable &from) {
case SVT_INT: {
char *buff = new char[10];
if (!checkNew(buff))
return NULL;
sprintf(buff, "%i", from.varData.intValue);
return buff;
Common::String res = buff;
delete []buff;
return res;
}
case SVT_FILE: {
// char * buff = new char[15];
// if (! checkNew (buff)) return NULL;
// sprintf (buff, "FILE %i", from.varData.intValue);
return joinStrings("", resourceNameFromNum(from.varData.intValue));
return resourceNameFromNum(from.varData.intValue);
}
/* case SVT_ANIM:
@ -375,14 +360,15 @@ char *getTextFromAnyVar(const variable &from) {
case SVT_OBJTYPE: {
objectType *thisType = findObjectType(from.varData.intValue);
if (thisType)
return copyString(thisType->screenName);
return thisType->screenName;
break;
}
default:
break;
}
return copyString(typeName[from.varType]);
return typeName[from.varType];
}
bool getBoolean(const variable &from) {
@ -425,7 +411,7 @@ bool copyMain(const variable &from, variable &to) {
return true;
case SVT_STRING:
to.varData.theString = copyString(from.varData.theString);
to.varData.theString = createCString(from.varData.theString);
return to.varData.theString ? true : false;
case SVT_STACK:

View File

@ -56,7 +56,7 @@ struct stackHandler {
union variableData {
signed int intValue;
char *theString;
const char *theString;
stackHandler *theStack;
struct personaAnimation *animHandler;
struct persona *costumeHandler;
@ -84,15 +84,16 @@ bool copyVariable(const variable &from, variable &to);
bool loadStringToVar(variable &thisVar, int value);
void newAnimationVariable(variable &thisVar, struct personaAnimation *i);
void newCostumeVariable(variable &thisVar, struct persona *i);
void makeTextVar(variable &thisVar, const char *txt);
void makeTextVar(variable &thisVar, const Common::String &txt);
void addVariablesInSecond(variable &var1, variable &var2);
void compareVariablesInSecond(const variable &var1, variable &var2);
char *createCString(const Common::String &s);
// Misc.
void unlinkVar(variable &thisVar);
char *getNumberedString(int value);
char *getTextFromAnyVar(const variable &from);
Common::String getNumberedString(int value);
Common::String getTextFromAnyVar(const variable &from);
struct persona *getCostumeFromVar(variable &thisVar);
struct personaAnimation *getAnimationFromVar(variable &thisVar);
bool getBoolean(const variable &from);
@ -110,7 +111,7 @@ bool copyStack(const variable &from, variable &to);
int stackSize(const stackHandler *me);
bool stackSetByIndex(variableStack *, uint, const variable &);
variable *stackGetByIndex(variableStack *, uint);
bool getSavedGamesStack(stackHandler *sH, char *ext);
bool getSavedGamesStack(stackHandler *sH, const Common::String &ext);
bool makeFastArrayFromStack(variable &to, const stackHandler *stacky);
bool makeFastArraySize(variable &to, int size);