scummvm/engines/sludge/variable.h
2017-07-13 18:27:45 +02:00

135 lines
3.9 KiB
C++

/* 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_VARIABLE_H
#define SLUDGE_VARIABLE_H
namespace Sludge {
struct variable;
struct variableStack;
enum variableType {
SVT_NULL,
SVT_INT,
SVT_FUNC,
SVT_STRING,
SVT_BUILT,
SVT_FILE,
SVT_STACK,
SVT_OBJTYPE,
SVT_ANIM,
SVT_COSTUME,
SVT_FASTARRAY,
SVT_NUM_TYPES
};
struct fastArrayHandler {
struct variable *fastVariables;
int size;
int timesUsed;
};
struct stackHandler {
struct variableStack *first;
struct variableStack *last;
int timesUsed;
};
union variableData {
signed int intValue;
char *theString;
stackHandler *theStack;
struct personaAnimation *animHandler;
struct persona *costumeHandler;
fastArrayHandler *fastArray;
};
struct variable {
variableType varType;
variableData varData;
};
struct variableStack {
variable thisVar;
variableStack *next;
};
// Initialisation
#define initVarNew(thisVar) thisVar.varType = SVT_NULL
// Setting variables
void setVariable(variable &thisVar, variableType vT, int value);
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 addVariablesInSecond(variable &var1, variable &var2);
void compareVariablesInSecond(const variable &var1, variable &var2);
// Misc.
void unlinkVar(variable &thisVar);
char *getNumberedString(int value);
char *getTextFromAnyVar(const variable &from);
struct persona *getCostumeFromVar(variable &thisVar);
struct personaAnimation *getAnimationFromVar(variable &thisVar);
bool getBoolean(const variable &from);
bool getValueType(int &toHere, variableType vT, const variable &v);
// Stacky stuff
bool addVarToStack(const variable &va, variableStack *&thisStack);
bool addVarToStackQuick(variable &va, variableStack *&thisStack);
void trimStack(variableStack *&stack);
int deleteVarFromStack(const variable &va, variableStack *&thisStack,
bool allOfEm = false);
variableStack *stackFindLast(variableStack *hunt);
bool copyStack(const variable &from, variable &to);
int stackSize(const stackHandler *me);
bool stackSetByIndex(variableStack *, unsigned int, const variable &);
variable *stackGetByIndex(variableStack *, unsigned int);
bool getSavedGamesStack(stackHandler *sH, char *ext);
bool makeFastArrayFromStack(variable &to, const stackHandler *stacky);
bool makeFastArraySize(variable &to, int size);
variable *fastArrayGetByIndex(fastArrayHandler *vS, unsigned int theIndex);
#define DEBUG_STACKINESS 0
#if DEBUG_STACKINESS
#define stackDebug(params) { \
FILE * stackfp = fopen ("stackout.txt", "at"); \
fprintf params; \
fclose (stackfp); \
}
#else
#define stackDebug(a) {}
#endif
} // End of namespace Sludge
#endif