Fixed variable access in the debugger
svn-id: r14523
This commit is contained in:
parent
312e4047dc
commit
809c3bd943
3 changed files with 18 additions and 10 deletions
|
@ -186,6 +186,10 @@ bool Debugger<T>::RunCommand(const char *inputOrig) {
|
||||||
// Alright, we need to check the TYPE of the variable to deref and stuff... the array stuff is a bit ugly :)
|
// Alright, we need to check the TYPE of the variable to deref and stuff... the array stuff is a bit ugly :)
|
||||||
switch(_dvars[i].type) {
|
switch(_dvars[i].type) {
|
||||||
// Integer
|
// Integer
|
||||||
|
case DVAR_BYTE:
|
||||||
|
*(byte *)_dvars[i].variable = atoi(param[1]);
|
||||||
|
DebugPrintf("byte%s = %d\n", param[0], *(byte *)_dvars[i].variable);
|
||||||
|
break;
|
||||||
case DVAR_INT:
|
case DVAR_INT:
|
||||||
*(int *)_dvars[i].variable = atoi(param[1]);
|
*(int *)_dvars[i].variable = atoi(param[1]);
|
||||||
DebugPrintf("(int)%s = %d\n", param[0], *(int *)_dvars[i].variable);
|
DebugPrintf("(int)%s = %d\n", param[0], *(int *)_dvars[i].variable);
|
||||||
|
@ -198,7 +202,7 @@ bool Debugger<T>::RunCommand(const char *inputOrig) {
|
||||||
} else {
|
} else {
|
||||||
int element = atoi(chr+1);
|
int element = atoi(chr+1);
|
||||||
int32 *var = *(int32 **)_dvars[i].variable;
|
int32 *var = *(int32 **)_dvars[i].variable;
|
||||||
if (element > _dvars[i].optional) {
|
if (element >= _dvars[i].optional) {
|
||||||
DebugPrintf("%s is out of range (array is %d elements big)\n", param[0], _dvars[i].optional);
|
DebugPrintf("%s is out of range (array is %d elements big)\n", param[0], _dvars[i].optional);
|
||||||
} else {
|
} else {
|
||||||
var[element] = atoi(param[1]);
|
var[element] = atoi(param[1]);
|
||||||
|
@ -215,6 +219,9 @@ bool Debugger<T>::RunCommand(const char *inputOrig) {
|
||||||
// And again, type-dependent prints/defrefs. The array one is still ugly.
|
// And again, type-dependent prints/defrefs. The array one is still ugly.
|
||||||
switch(_dvars[i].type) {
|
switch(_dvars[i].type) {
|
||||||
// Integer
|
// Integer
|
||||||
|
case DVAR_BYTE:
|
||||||
|
DebugPrintf("(byte)%s = %d\n", param[0], *(byte *)_dvars[i].variable);
|
||||||
|
break;
|
||||||
case DVAR_INT:
|
case DVAR_INT:
|
||||||
DebugPrintf("(int)%s = %d\n", param[0], *(int *)_dvars[i].variable);
|
DebugPrintf("(int)%s = %d\n", param[0], *(int *)_dvars[i].variable);
|
||||||
break;
|
break;
|
||||||
|
@ -225,8 +232,8 @@ bool Debugger<T>::RunCommand(const char *inputOrig) {
|
||||||
DebugPrintf("You must access this array as %s[element]\n", param[0]);
|
DebugPrintf("You must access this array as %s[element]\n", param[0]);
|
||||||
} else {
|
} else {
|
||||||
int element = atoi(chr+1);
|
int element = atoi(chr+1);
|
||||||
int16 *var = *(int16 **)_dvars[i].variable;
|
int32 *var = *(int32 **)_dvars[i].variable;
|
||||||
if (element > _dvars[i].optional) {
|
if (element >= _dvars[i].optional) {
|
||||||
DebugPrintf("%s is out of range (array is %d elements big)\n", param[0], _dvars[i].optional);
|
DebugPrintf("%s is out of range (array is %d elements big)\n", param[0], _dvars[i].optional);
|
||||||
} else {
|
} else {
|
||||||
DebugPrintf("(int)%s = %d\n", param[0], var[element]);
|
DebugPrintf("(int)%s = %d\n", param[0], var[element]);
|
||||||
|
|
|
@ -47,6 +47,7 @@ protected:
|
||||||
typedef bool (T::*DebugProc)(int argc, const char **argv);
|
typedef bool (T::*DebugProc)(int argc, const char **argv);
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
DVAR_BYTE,
|
||||||
DVAR_INT,
|
DVAR_INT,
|
||||||
DVAR_BOOL,
|
DVAR_BOOL,
|
||||||
DVAR_INTARRAY,
|
DVAR_INTARRAY,
|
||||||
|
|
|
@ -66,14 +66,14 @@ ScummDebugger::ScummDebugger(ScummEngine *s)
|
||||||
// Register variables
|
// Register variables
|
||||||
DVar_Register("debug_countdown", &_frame_countdown, DVAR_INT, 0);
|
DVar_Register("debug_countdown", &_frame_countdown, DVAR_INT, 0);
|
||||||
|
|
||||||
DVar_Register("scumm_speed", &_vm->_fastMode, DVAR_INT, 0);
|
DVar_Register("scumm_speed", &_vm->_fastMode, DVAR_BYTE, 0);
|
||||||
DVar_Register("scumm_room", &_vm->_currentRoom, DVAR_INT, 0);
|
DVar_Register("scumm_room", &_vm->_currentRoom, DVAR_BYTE, 0);
|
||||||
DVar_Register("scumm_roomresource", &_vm->_roomResource, DVAR_INT, 0);
|
DVar_Register("scumm_roomresource", &_vm->_roomResource, DVAR_INT, 0);
|
||||||
DVar_Register("scumm_vars", &_vm->_scummVars, DVAR_INTARRAY, _vm->_numVariables);
|
DVar_Register("scumm_vars", &_vm->_scummVars, DVAR_INTARRAY, _vm->_numVariables);
|
||||||
|
|
||||||
DVar_Register("scumm_gamename", &_vm->_targetName, DVAR_STRING, 0);
|
DVar_Register("scumm_gamename", &_vm->_targetName, DVAR_STRING, 0);
|
||||||
DVar_Register("scumm_exename", &_vm->_gameName, DVAR_STRING, 0);
|
DVar_Register("scumm_exename", &_vm->_gameName, DVAR_STRING, 0);
|
||||||
DVar_Register("scumm_gameid", &_vm->_gameId, DVAR_INT, 0);
|
DVar_Register("scumm_gameid", &_vm->_gameId, DVAR_BYTE, 0);
|
||||||
|
|
||||||
// Register commands
|
// Register commands
|
||||||
DCmd_Register("continue", &ScummDebugger::Cmd_Exit);
|
DCmd_Register("continue", &ScummDebugger::Cmd_Exit);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue