Skip to content

Commit

Permalink
ALL: Introduce typesafe Debugger::registerVar functions.
Browse files Browse the repository at this point in the history
This also adds a FIXME to SCI which registered an enum type as int...
  • Loading branch information
Johannes Schickel committed May 27, 2014
1 parent 96a901d commit 8b7672b
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 12 deletions.
13 changes: 8 additions & 5 deletions engines/sci/console.cpp
Expand Up @@ -79,11 +79,14 @@ Console::Console(SciEngine *engine) : GUI::Debugger(),
assert(_engine->_gamestate);

// Variables
registerVar("sleeptime_factor", &g_debug_sleeptime_factor, DVAR_INT, 0);
registerVar("gc_interval", &engine->_gamestate->scriptGCInterval, DVAR_INT, 0);
registerVar("simulated_key", &g_debug_simulated_key, DVAR_INT, 0);
registerVar("track_mouse_clicks", &g_debug_track_mouse_clicks, DVAR_BOOL, 0);
registerVar("script_abort_flag", &_engine->_gamestate->abortScriptProcessing, DVAR_INT, 0);
registerVar("sleeptime_factor", &g_debug_sleeptime_factor);
registerVar("gc_interval", &engine->_gamestate->scriptGCInterval);
registerVar("simulated_key", &g_debug_simulated_key);
registerVar("track_mouse_clicks", &g_debug_track_mouse_clicks);
// FIXME: This actually passes an enum type instead of an integer but no
// precaution is taken to assure that all assigned values are in the range
// of the enum type. We should handle this more carefully...
registerVar("script_abort_flag", (int *)&_engine->_gamestate->abortScriptProcessing);

// General
registerCmd("help", WRAP_METHOD(Console, cmdHelp));
Expand Down
8 changes: 4 additions & 4 deletions engines/scumm/debugger.cpp
Expand Up @@ -58,10 +58,10 @@ ScummDebugger::ScummDebugger(ScummEngine *s)
_vm = s;

// Register variables
registerVar("scumm_speed", &_vm->_fastMode, DVAR_BYTE, 0);
registerVar("scumm_room", &_vm->_currentRoom, DVAR_BYTE, 0);
registerVar("scumm_roomresource", &_vm->_roomResource, DVAR_INT, 0);
registerVar("scumm_vars", &_vm->_scummVars, DVAR_INTARRAY, _vm->_numVariables);
registerVar("scumm_speed", &_vm->_fastMode);
registerVar("scumm_room", &_vm->_currentRoom);
registerVar("scumm_roomresource", &_vm->_roomResource);
registerVar("scumm_vars", &_vm->_scummVars, _vm->_numVariables);

// Register commands
registerCmd("continue", WRAP_METHOD(ScummDebugger, cmdExit));
Expand Down
26 changes: 23 additions & 3 deletions gui/debugger.h
Expand Up @@ -96,18 +96,38 @@ class Debugger {
int arraySize;
};


private:
/**
* Register a variable with the debugger. This allows the user to read and modify
* this variable.
* @param varname the identifier with which the user may access the variable
* @param variable pointer to the actual storage of the variable
* @param type the type of the variable (byte, int, bool, ...)
* @paral arraySize for type DVAR_INTARRAY this specifies the size of the array
*
* @todo replace this single method by type safe variants.
*/
void registerVar(const Common::String &varname, void *variable, VarType type, int arraySize);

protected:
void registerVar(const Common::String &varname, byte *variable) {
registerVar(varname, variable, DVAR_BYTE, 0);
}

void registerVar(const Common::String &varname, int *variable) {
registerVar(varname, variable, DVAR_INT, 0);
}

void registerVar(const Common::String &varname, bool *variable) {
registerVar(varname, variable, DVAR_BOOL, 0);
}

void registerVar(const Common::String &varname, int32 **variable, int arraySize) {
registerVar(varname, variable, DVAR_INTARRAY, arraySize);
}

void registerVar(const Common::String &varname, Common::String *variable) {
registerVar(varname, variable, DVAR_STRING, 0);
}

void registerCmd(const Common::String &cmdname, Debuglet *debuglet);


Expand Down

0 comments on commit 8b7672b

Please sign in to comment.