aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/console.cpp13
-rw-r--r--engines/scumm/debugger.cpp8
-rw-r--r--gui/debugger.h26
3 files changed, 35 insertions, 12 deletions
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp
index 1736ac7487..1c4228eb7d 100644
--- a/engines/sci/console.cpp
+++ b/engines/sci/console.cpp
@@ -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));
diff --git a/engines/scumm/debugger.cpp b/engines/scumm/debugger.cpp
index a08fa6e3d2..2b718b2cfe 100644
--- a/engines/scumm/debugger.cpp
+++ b/engines/scumm/debugger.cpp
@@ -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));
diff --git a/gui/debugger.h b/gui/debugger.h
index 319fa68dae..8c7481b61f 100644
--- a/gui/debugger.h
+++ b/gui/debugger.h
@@ -96,7 +96,7 @@ protected:
int arraySize;
};
-
+private:
/**
* Register a variable with the debugger. This allows the user to read and modify
* this variable.
@@ -104,10 +104,30 @@ protected:
* @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);