aboutsummaryrefslogtreecommitdiff
path: root/sword2
diff options
context:
space:
mode:
authorMax Horn2003-10-26 21:30:52 +0000
committerMax Horn2003-10-26 21:30:52 +0000
commita4d2a47820ad7ce26de1f52a9a11f6d466ed9610 (patch)
tree8561421e140950ed282475a0ffb58fe0c79b5edf /sword2
parentfbd6528e365babdd9e6d59089ef210f04a7eb19e (diff)
downloadscummvm-rg350-a4d2a47820ad7ce26de1f52a9a11f6d466ed9610.tar.gz
scummvm-rg350-a4d2a47820ad7ce26de1f52a9a11f6d466ed9610.tar.bz2
scummvm-rg350-a4d2a47820ad7ce26de1f52a9a11f6d466ed9610.zip
factor out common debugger code
svn-id: r10984
Diffstat (limited to 'sword2')
-rw-r--r--sword2/console.cpp393
-rw-r--r--sword2/console.h63
-rw-r--r--sword2/sword2.h2
3 files changed, 100 insertions, 358 deletions
diff --git a/sword2/console.cpp b/sword2/console.cpp
index f75b2e628f..08dbf3b9e4 100644
--- a/sword2/console.cpp
+++ b/sword2/console.cpp
@@ -31,12 +31,7 @@
#include "bs2/save_rest.h"
#include "bs2/startup.h"
-// FIXME: Much of this is copied from scumm/debugger.cpp which is a pretty
-// lousy form of code reuse.
-
-#ifdef _WIN32_WCE
-extern void force_keyboard(bool);
-#endif
+#include "common/debugger.cpp"
namespace Sword2 {
@@ -52,14 +47,9 @@ static void Var_set(int var, int val) {
Debug_Printf("now %d\n", VAR(var));
}
-Debugger::Debugger(Sword2Engine *s) {
+Debugger::Debugger(Sword2Engine *s)
+ : Common::Debugger<Debugger>(s->_newgui) {
_vm = s;
- _frame_countdown = 0;
- _dcmd_count = 0;
- _detach_now = false;
- _isAttached = false;
- _errStr = NULL;
- _debuggerDialog = NULL;
// Register commands
@@ -113,174 +103,28 @@ Debugger::Debugger(Sword2Engine *s) {
DCmd_Register("polish", &Debugger::Cmd_Polish);
}
-void Debugger::attach(const char *entry) {
-
-#ifdef _WIN32_WCE
- force_keyboard(true);
-#endif
-
- if (entry) {
- _errStr = strdup(entry);
- }
-
- _frame_countdown = 1;
- _detach_now = false;
- _isAttached = true;
+void Debugger::preEnter() {
+ // Pause sound output
+ g_sound->pauseFx();
+ g_sound->pauseSpeech();
+ g_sound->pauseMusic();
}
-void Debugger::detach() {
-#if USE_CONSOLE
- if (_debuggerDialog) {
- _debuggerDialog->setInputCallback(0, 0);
- _debuggerDialog->setCompletionCallback(0, 0);
- }
-#endif
+void Debugger::postEnter() {
+ // Resume previous sound state
+ g_sound->unpauseFx();
+ g_sound->unpauseSpeech();
+ g_sound->unpauseMusic();
-#ifdef _WIN32_WCE
- force_keyboard(false);
-#endif
+ // Restore old mouse cursor
+ g_display->drawMouse();
- _detach_now = false;
- _isAttached = false;
}
-// Temporary execution handler
-void Debugger::onFrame() {
- if (_frame_countdown == 0)
- return;
- --_frame_countdown;
-
- if (!_frame_countdown) {
- // Pause sound output
-
- g_sound->pauseFx();
- g_sound->pauseSpeech();
- g_sound->pauseMusic();
-
- // Enter debugger
- enter();
-
- // Resume previous sound state
-
- g_sound->unpauseFx();
- g_sound->unpauseSpeech();
- g_sound->unpauseMusic();
-
- // Restore old mouse cursor
- g_display->drawMouse();
-
- // Detach if we're finished with the debugger
- if (_detach_now)
- detach();
- }
-}
-
-// Console handler
-#if USE_CONSOLE
-bool Debugger::debuggerInputCallback(ConsoleDialog *console, const char *input, void *refCon) {
- Debugger *debugger = (Debugger *) refCon;
-
- return debugger->RunCommand(input);
-}
-
-bool Debugger::debuggerCompletionCallback(ConsoleDialog *console, const char *input, char*& completion, void *refCon) {
- Debugger *debugger = (Debugger *) refCon;
-
- return debugger->TabComplete(input, completion);
-}
-#endif
///////////////////////////////////////////////////
// Now the fun stuff:
-void Debugger::DCmd_Register(const char *cmdname, DebugProc pointer) {
- assert(_dcmd_count < (int) sizeof(_dcmds));
- strcpy(_dcmds[_dcmd_count].name, cmdname);
- _dcmds[_dcmd_count].function = pointer;
-
- _dcmd_count++;
-}
-
-// Main Debugger Loop
-void Debugger::enter() {
-#if USE_CONSOLE
- if (!_debuggerDialog) {
- _debuggerDialog = new ConsoleDialog(_vm->_newgui, 1.0, 0.67F);
-
- Debug_Printf("Debugger started, type 'exit' to return to the game.\n");
- Debug_Printf("Type 'help' to see a little list of commands and variables.\n");
- }
-
- if (_errStr) {
- Debug_Printf("ERROR: %s\n\n", _errStr);
- free(_errStr);
- _errStr = NULL;
- }
-
- _debuggerDialog->setInputCallback(debuggerInputCallback, this);
- _debuggerDialog->setCompletionCallback(debuggerCompletionCallback, this);
- _debuggerDialog->runModal();
-#else
- // TODO: compared to the console input, this here is very bare bone.
- // For example, no support for tab completion and no history. At least
- // we should re-add (optional) support for the readline library.
- // Or maybe instead of choosing between a console dialog and stdio,
- // we should move that choice into the ConsoleDialog class - that is,
- // the console dialog code could be #ifdef'ed to not print to the dialog
- // but rather to stdio. This way, we could also reuse the command history
- // and tab completion of the console. It would still require a lot of
- // work, but at least no dependency on a 3rd party library...
-
- printf("Debugger entered, please switch to this console for input.\n");
-
- int i;
- char buf[256];
-
- do {
- printf("debug> ");
- if (!fgets(buf, sizeof(buf), stdin))
- return;
-
- i = strlen(buf);
- while (i > 0 && buf[i - 1] == '\n')
- buf[--i] = 0;
-
- if (i == 0)
- continue;
- } while (RunCommand(buf));
-
-#endif
-}
-
-// Command execution loop
-bool Debugger::RunCommand(const char *inputOrig) {
- int i = 0, num_params = 0;
- const char *param[256];
- char *input = strdup(inputOrig); // One of the rare occasions using strdup is OK (although avoiding strtok might be more elegant here).
-
- // Parse out any params
- char *tok = strtok(input, " ");
- if (tok) {
- do {
- param[num_params++] = tok;
- } while ((tok = strtok(NULL, " ")) != NULL);
- } else {
- param[num_params++] = input;
- }
-
- for (i = 0; i < _dcmd_count; i++) {
- if (!strcmp(_dcmds[i].name, param[0])) {
- bool result = (this->*_dcmds[i].function)(num_params, param);
- free(input);
- return result;
- }
- }
-
- Debug_Printf("Unknown command\n");
- free(input);
- return true;
-}
-
// Commands
bool Debugger::Cmd_Exit(int argc, const char **argv) {
@@ -293,20 +137,20 @@ bool Debugger::Cmd_Help(int argc, const char **argv) {
// wrap around nicely
int width = 0, size, i;
- Debug_Printf("Commands are:\n");
+ DebugPrintf("Commands are:\n");
for (i = 0 ; i < _dcmd_count ; i++) {
size = strlen(_dcmds[i].name) + 1;
if ((width + size) >= 39) {
- Debug_Printf("\n");
+ DebugPrintf("\n");
width = size;
} else
width += size;
- Debug_Printf("%s ", _dcmds[i].name);
+ DebugPrintf("%s ", _dcmds[i].name);
}
- Debug_Printf("\n");
+ DebugPrintf("\n");
return true;
}
@@ -316,7 +160,7 @@ bool Debugger::Cmd_Mem(int argc, const char **argv) {
}
bool Debugger::Cmd_Tony(int argc, const char **argv) {
- Debug_Printf("What about him?\n");
+ DebugPrintf("What about him?\n");
return true;
}
@@ -334,7 +178,7 @@ bool Debugger::Cmd_Start(int argc, const char **argv) {
uint8 pal[4] = { 255, 255, 255, 0 };
if (argc != 2) {
- Debug_Printf("Usage: %s number\n", argv[0]);
+ DebugPrintf("Usage: %s number\n", argv[0]);
return true;
}
@@ -347,9 +191,9 @@ bool Debugger::Cmd_Info(int argc, const char **argv) {
displayDebugText = !displayDebugText;
if (displayDebugText)
- Debug_Printf("Info text on\n");
+ DebugPrintf("Info text on\n");
else
- Debug_Printf("Info Text off\n");
+ DebugPrintf("Info Text off\n");
return true;
}
@@ -358,9 +202,9 @@ bool Debugger::Cmd_WalkGrid(int argc, const char **argv) {
displayWalkGrid = !displayWalkGrid;
if (displayWalkGrid)
- Debug_Printf("Walk-grid display on\n");
+ DebugPrintf("Walk-grid display on\n");
else
- Debug_Printf("Walk-grid display off\n");
+ DebugPrintf("Walk-grid display off\n");
return true;
}
@@ -369,9 +213,9 @@ bool Debugger::Cmd_Mouse(int argc, const char **argv) {
displayMouseMarker = !displayMouseMarker;
if (displayMouseMarker)
- Debug_Printf("Mouse marker on\n");
+ DebugPrintf("Mouse marker on\n");
else
- Debug_Printf("Mouse marker off\n");
+ DebugPrintf("Mouse marker off\n");
return true;
}
@@ -380,16 +224,16 @@ bool Debugger::Cmd_Player(int argc, const char **argv) {
displayPlayerMarker = !displayPlayerMarker;
if (displayPlayerMarker)
- Debug_Printf("Player feet marker on\n");
+ DebugPrintf("Player feet marker on\n");
else
- Debug_Printf("Player feet marker off\n");
+ DebugPrintf("Player feet marker off\n");
return true;
}
bool Debugger::Cmd_ResLook(int argc, const char **argv) {
if (argc != 2)
- Debug_Printf("Usage: %s number\n", argv[0]);
+ DebugPrintf("Usage: %s number\n", argv[0]);
else
res_man.examine(atoi(argv[1]));
return true;
@@ -407,14 +251,14 @@ bool Debugger::Cmd_RunList(int argc, const char **argv) {
bool Debugger::Cmd_Kill(int argc, const char **argv) {
if (argc != 2)
- Debug_Printf("Usage: %s number\n", argv[0]);
+ DebugPrintf("Usage: %s number\n", argv[0]);
else
res_man.kill(atoi(argv[1]));
return true;
}
bool Debugger::Cmd_Nuke(int argc, const char **argv) {
- Debug_Printf("Killing all resources except variable file and player object\n");
+ DebugPrintf("Killing all resources except variable file and player object\n");
res_man.killAll(true);
return true;
}
@@ -428,7 +272,7 @@ bool Debugger::Cmd_Var(int argc, const char **argv) {
Var_set(atoi(argv[1]), atoi(argv[2]));
break;
default:
- Debug_Printf("Usage: %s number value\n", argv[0]);
+ DebugPrintf("Usage: %s number value\n", argv[0]);
break;
}
@@ -439,9 +283,9 @@ bool Debugger::Cmd_Rect(int argc, const char **argv) {
definingRectangles = !definingRectangles;
if (definingRectangles)
- Debug_Printf("Mouse rectangles enabled\n");
+ DebugPrintf("Mouse rectangles enabled\n");
else
- Debug_Printf("Mouse rectangles disabled\n");
+ DebugPrintf("Mouse rectangles disabled\n");
draggingRectangle = 0;
return true;
@@ -458,7 +302,7 @@ bool Debugger::Cmd_DebugOn(int argc, const char **argv) {
displayMouseMarker = true;
displayPlayerMarker = true;
displayTextNumbers = true;
- Debug_Printf("Enabled all on-screen debug info\n");
+ DebugPrintf("Enabled all on-screen debug info\n");
return true;
}
@@ -468,7 +312,7 @@ bool Debugger::Cmd_DebugOff(int argc, const char **argv) {
displayMouseMarker = false;
displayPlayerMarker = false;
displayTextNumbers = false;
- Debug_Printf("Disabled all on-screen debug info\n");
+ DebugPrintf("Disabled all on-screen debug info\n");
return true;
}
@@ -476,22 +320,22 @@ bool Debugger::Cmd_SaveRest(int argc, const char **argv) {
testingSnR = !testingSnR;
if (testingSnR)
- Debug_Printf("Enabled S&R logic_script stability checking\n");
+ DebugPrintf("Enabled S&R logic_script stability checking\n");
else
- Debug_Printf("Disabled S&R logic_script stability checking\n");
+ DebugPrintf("Disabled S&R logic_script stability checking\n");
return true;
}
bool Debugger::Cmd_ListSaveGames(int argc, const char **argv) {
- Debug_Printf("Savegames:\n");
+ DebugPrintf("Savegames:\n");
for (int i = 0; i < 100; i++) {
uint8 description[SAVE_DESCRIPTION_LEN];
// if there is a save game print the name
if (GetSaveDescription(i, description) == SR_OK)
- Debug_Printf("%d: \"%s\"\n", i, description);
+ DebugPrintf("%d: \"%s\"\n", i, description);
}
return true;
@@ -504,13 +348,13 @@ bool Debugger::Cmd_SaveGame(int argc, const char **argv) {
uint32 rv;
if (argc < 3) {
- Debug_Printf("Usage: %s slot description\n", argv[0]);
+ DebugPrintf("Usage: %s slot description\n", argv[0]);
return true;
}
// if mouse if off, or system menu is locked off
if (mouse_status || mouse_mode_locked) {
- Debug_Printf("WARNING: Cannot save game while control menu unavailable!\n");
+ DebugPrintf("WARNING: Cannot save game while control menu unavailable!\n");
return true;
}
@@ -537,11 +381,11 @@ bool Debugger::Cmd_SaveGame(int argc, const char **argv) {
rv = SaveGame(slotNo, (uint8 *) description);
if (rv == SR_OK)
- Debug_Printf("Saved game \"%s\" to file \"savegame.%.3d\"\n", description, slotNo);
+ DebugPrintf("Saved game \"%s\" to file \"savegame.%.3d\"\n", description, slotNo);
else if (rv == SR_ERR_FILEOPEN)
- Debug_Printf("ERROR: Cannot open file \"savegame.%.3d\"\n", slotNo);
+ DebugPrintf("ERROR: Cannot open file \"savegame.%.3d\"\n", slotNo);
else // SR_ERR_WRITEFAIL
- Debug_Printf("ERROR: Write error on file \"savegame.%.3d\"\n", slotNo);
+ DebugPrintf("ERROR: Write error on file \"savegame.%.3d\"\n", slotNo);
return true;
}
@@ -552,13 +396,13 @@ bool Debugger::Cmd_RestoreGame(int argc, const char **argv) {
uint32 rv;
if (argc != 2) {
- Debug_Printf("Usage: %s slot\n", argv[0]);
+ DebugPrintf("Usage: %s slot\n", argv[0]);
return true;
}
// if mouse if off, or system menu is locked off
if (mouse_status || mouse_mode_locked) {
- Debug_Printf("WARNING: Cannot restore game while control menu unavailable!\n");
+ DebugPrintf("WARNING: Cannot restore game while control menu unavailable!\n");
return true;
}
@@ -567,13 +411,13 @@ bool Debugger::Cmd_RestoreGame(int argc, const char **argv) {
if (rv == SR_OK) {
GetSaveDescription(slotNo, description);
- Debug_Printf("Restored game \"%s\" from file \"savegame.%.3d\"\n", description, slotNo);
+ DebugPrintf("Restored game \"%s\" from file \"savegame.%.3d\"\n", description, slotNo);
} else if (rv == SR_ERR_FILEOPEN)
- Debug_Printf("ERROR: Cannot open file \"savegame.%.3d\"\n", slotNo);
+ DebugPrintf("ERROR: Cannot open file \"savegame.%.3d\"\n", slotNo);
else if (rv == SR_ERR_INCOMPATIBLE)
- Debug_Printf("ERROR: \"savegame.%.3d\" is no longer compatible with current player/variable resources\n", slotNo);
+ DebugPrintf("ERROR: \"savegame.%.3d\" is no longer compatible with current player/variable resources\n", slotNo);
else // SR_ERR_READFAIL
- Debug_Printf("ERROR: Read error on file \"savegame.%.3d\"\n", slotNo);
+ DebugPrintf("ERROR: Read error on file \"savegame.%.3d\"\n", slotNo);
return true;
}
@@ -582,15 +426,15 @@ bool Debugger::Cmd_RestoreGame(int argc, const char **argv) {
bool Debugger::Cmd_BltFxOn(int argc, const char **argv) {
// g_display->setBltFx();
- // Debug_Printf("Blit fx enabled\n");
- Debug_Printf("FIXME: The setBltFx() function no longer exists\n");
+ // DebugPrintf("Blit fx enabled\n");
+ DebugPrintf("FIXME: The setBltFx() function no longer exists\n");
return true;
}
bool Debugger::Cmd_BltFxOff(int argc, const char **argv) {
// g_display->clearBltFx();
- // Debug_Printf("Blit fx disabled\n");
- Debug_Printf("FIXME: The clearBltFx() function no longer exists\n");
+ // DebugPrintf("Blit fx disabled\n");
+ DebugPrintf("FIXME: The clearBltFx() function no longer exists\n");
return true;
}
@@ -600,13 +444,13 @@ bool Debugger::Cmd_TimeOn(int argc, const char **argv) {
else if (startTime == 0)
startTime = SVM_timeGetTime();
displayTime = true;
- Debug_Printf("Timer display on\n");
+ DebugPrintf("Timer display on\n");
return true;
}
bool Debugger::Cmd_TimeOff(int argc, const char **argv) {
displayTime = false;
- Debug_Printf("Timer display off\n");
+ DebugPrintf("Timer display off\n");
return true;
}
@@ -614,9 +458,9 @@ bool Debugger::Cmd_Text(int argc, const char **argv) {
displayTextNumbers = !displayTextNumbers;
if (displayTextNumbers)
- Debug_Printf("Text numbers on\n");
+ DebugPrintf("Text numbers on\n");
else
- Debug_Printf("Text numbers off\n");
+ DebugPrintf("Text numbers off\n");
return true;
}
@@ -626,7 +470,7 @@ bool Debugger::Cmd_ShowVar(int argc, const char **argv) {
int32 varNo;
if (argc != 2) {
- Debug_Printf("Usage: %s number\n", argv[0]);
+ DebugPrintf("Usage: %s number\n", argv[0]);
return true;
}
@@ -643,11 +487,11 @@ bool Debugger::Cmd_ShowVar(int argc, const char **argv) {
if (showVar[showVarNo] == 0) {
// empty slot - add it to the list at this slot
showVar[showVarNo] = varNo;
- Debug_Printf("var(%d) added to the watch-list\n", varNo);
+ DebugPrintf("var(%d) added to the watch-list\n", varNo);
} else
- Debug_Printf("var(%d) already in the watch-list!\n", varNo);
+ DebugPrintf("var(%d) already in the watch-list!\n", varNo);
} else
- Debug_Printf("Sorry - no more allowed - hide one or extend the system watch-list\n");
+ DebugPrintf("Sorry - no more allowed - hide one or extend the system watch-list\n");
return true;
}
@@ -657,7 +501,7 @@ bool Debugger::Cmd_HideVar(int argc, const char **argv) {
int32 varNo;
if (argc != 2) {
- Debug_Printf("Usage: %s number\n", argv[0]);
+ DebugPrintf("Usage: %s number\n", argv[0]);
return true;
}
@@ -670,9 +514,9 @@ bool Debugger::Cmd_HideVar(int argc, const char **argv) {
if (showVarNo < MAX_SHOWVARS) {
// We've found 'varNo' in the list - clear this slot
showVar[showVarNo] = 0;
- Debug_Printf("var(%d) removed from watch-list\n", varNo);
+ DebugPrintf("var(%d) removed from watch-list\n", varNo);
} else
- Debug_Printf("Sorry - can't find var(%d) in the list\n", varNo);
+ DebugPrintf("Sorry - can't find var(%d) in the list\n", varNo);
return true;
}
@@ -713,30 +557,30 @@ bool Debugger::Cmd_Version(int argc, const char **argv) {
dateStamp[24] = 0; // fudge over the newline character!
#endif
- Debug_Printf("\"Broken Sword II\" (c) Revolution Software 1997.\n");
+ DebugPrintf("\"Broken Sword II\" (c) Revolution Software 1997.\n");
#if 0
- Debug_Printf("v%s created on %s for %s\n", version, dateStamp, unencoded_name + HEAD_LEN);
+ DebugPrintf("v%s created on %s for %s\n", version, dateStamp, unencoded_name + HEAD_LEN);
#endif
#if 0
// THE FOLLOWING LINES ARE TO BE COMMENTED OUT OF THE FINAL VERSION
- Debug_Printf("This program has a personalised fingerprint encrypted into the code.\n");
- Debug_Printf("If this CD was not sent directly to you by Virgin Interactive or Revolution Software\n");
- Debug_Printf("then please contact James Long at Revolution on (+44) 1904 639698.\n");
+ DebugPrintf("This program has a personalised fingerprint encrypted into the code.\n");
+ DebugPrintf("If this CD was not sent directly to you by Virgin Interactive or Revolution Software\n");
+ DebugPrintf("then please contact James Long at Revolution on (+44) 1904 639698.\n");
#endif
return true;
}
bool Debugger::Cmd_SoftHard(int argc, const char **argv) {
- Debug_Printf("ScummVM doesn't distinguish between software and hardware rendering.\n");
+ DebugPrintf("ScummVM doesn't distinguish between software and hardware rendering.\n");
return true;
}
bool Debugger::Cmd_AnimTest(int argc, const char **argv) {
if (argc != 2) {
- Debug_Printf("Usage: %s value\n", argv[0]);
+ DebugPrintf("Usage: %s value\n", argv[0]);
return true;
}
@@ -746,13 +590,13 @@ bool Debugger::Cmd_AnimTest(int argc, const char **argv) {
// Same as typing "VAR 912 <value>" at the console
Var_set(912, atoi(argv[1]));
- Debug_Printf("Setting flag 'system_testing_anims'\n");
+ DebugPrintf("Setting flag 'system_testing_anims'\n");
return true;
}
bool Debugger::Cmd_TextTest(int argc, const char **argv) {
if (argc != 2) {
- Debug_Printf("Usage: %s value\n", argv[0]);
+ DebugPrintf("Usage: %s value\n", argv[0]);
return true;
}
@@ -764,14 +608,14 @@ bool Debugger::Cmd_TextTest(int argc, const char **argv) {
displayTextNumbers = true;
- Debug_Printf("Setting flag 'system_testing_text'\n");
- Debug_Printf("Text numbers on\n");
+ DebugPrintf("Setting flag 'system_testing_text'\n");
+ DebugPrintf("Text numbers on\n");
return true;
}
bool Debugger::Cmd_LineTest(int argc, const char **argv) {
if (argc != 3) {
- Debug_Printf("Usage: %s value1 value2\n", argv[0]);
+ DebugPrintf("Usage: %s value1 value2\n", argv[0]);
return true;
}
@@ -786,37 +630,37 @@ bool Debugger::Cmd_LineTest(int argc, const char **argv) {
displayTextNumbers = true;
- Debug_Printf("Setting flag 'system_testing_text'\n");
- Debug_Printf("Setting flag 'system_test_line_no'\n");
- Debug_Printf("Text numbers on\n");
+ DebugPrintf("Setting flag 'system_testing_text'\n");
+ DebugPrintf("Setting flag 'system_test_line_no'\n");
+ DebugPrintf("Text numbers on\n");
return true;
}
bool Debugger::Cmd_Grab(int argc, const char **argv) {
- Debug_Printf("FIXME: Continuous screen-grabbing not implemented\n");
+ DebugPrintf("FIXME: Continuous screen-grabbing not implemented\n");
#if 0
grabbingSequences = !grabbingSequences;
if (grabbingSequences)
- Debug_Printf("PCX-grabbing enabled\n");
+ DebugPrintf("PCX-grabbing enabled\n");
else
- Debug_Printf("PCX-grabbing disabled\n");
+ DebugPrintf("PCX-grabbing disabled\n");
#endif
return true;
}
bool Debugger::Cmd_Events(int argc, const char **argv) {
- Debug_Printf("EVENT LIST:\n");
+ DebugPrintf("EVENT LIST:\n");
for (uint32 i = 0; i < MAX_events; i++) {
if (event_list[i].id) {
uint32 target = event_list[i].id;
uint32 script = event_list[i].interact_id;
- Debug_Printf("slot %d: id = %s (%d)\n", i, FetchObjectName(target), target);
- Debug_Printf(" script = %s (%d) pos %d\n", FetchObjectName(script / 65536), script / 65536, script % 65536);
+ DebugPrintf("slot %d: id = %s (%d)\n", i, FetchObjectName(target), target);
+ DebugPrintf(" script = %s (%d) pos %d\n", FetchObjectName(script / 65536), script / 65536, script % 65536);
}
}
@@ -827,79 +671,28 @@ bool Debugger::Cmd_Sfx(int argc, const char **argv) {
wantSfxDebug = !wantSfxDebug;
if (wantSfxDebug)
- Debug_Printf("SFX logging activated\n");
+ DebugPrintf("SFX logging activated\n");
else
- Debug_Printf("SFX logging deactivated\n");
+ DebugPrintf("SFX logging deactivated\n");
return true;
}
bool Debugger::Cmd_English(int argc, const char **argv) {
g_sword2->initialiseFontResourceFlags(DEFAULT_TEXT);
- Debug_Printf("Default fonts selected\n");
+ DebugPrintf("Default fonts selected\n");
return true;
}
bool Debugger::Cmd_Finnish(int argc, const char **argv) {
g_sword2->initialiseFontResourceFlags(FINNISH_TEXT);
- Debug_Printf("Finnish fonts selected\n");
+ DebugPrintf("Finnish fonts selected\n");
return true;
}
bool Debugger::Cmd_Polish(int argc, const char **argv) {
g_sword2->initialiseFontResourceFlags(POLISH_TEXT);
- Debug_Printf("Polish fonts selected\n");
- return true;
-}
-
-// returns true if something has been completed
-// completion has to be delete[]-ed then
-bool Debugger::TabComplete(const char *input, char*& completion) {
- // very basic tab completion
- // for now it just supports command completions
-
- // adding completions of command parameters would be nice (but hard) :-)
- // maybe also give a list of possible command completions?
- // (but this will require changes to console)
-
- if (strchr(input, ' '))
- return false; // already finished the first word
-
- unsigned int inputlen = strlen(input);
-
- unsigned int matchlen = 0;
- char match[30]; // the max. command name is 30 chars
-
- for (int i = 0; i < _dcmd_count; i++) {
- if (!strncmp(_dcmds[i].name, input, inputlen)) {
- unsigned int commandlen = strlen(_dcmds[i].name);
- if (commandlen == inputlen) { // perfect match
- return false;
- }
- if (commandlen > inputlen) { // possible match
- // no previous match
- if (matchlen == 0) {
- strcpy(match, _dcmds[i].name + inputlen);
- matchlen = commandlen - inputlen;
- } else {
- // take common prefix of previous match and this command
- unsigned int j;
- for (j = 0; j < matchlen; j++) {
- if (match[j] != _dcmds[i].name[inputlen + j]) break;
- }
- matchlen = j;
- }
- if (matchlen == 0)
- return false;
- }
- }
- }
- if (matchlen == 0)
- return false;
-
- completion = new char[matchlen + 1];
- memcpy(completion, match, matchlen);
- completion[matchlen] = 0;
+ DebugPrintf("Polish fonts selected\n");
return true;
}
diff --git a/sword2/console.h b/sword2/console.h
index 87ef12f562..b5cc286518 100644
--- a/sword2/console.h
+++ b/sword2/console.h
@@ -20,19 +20,10 @@
#ifndef C_ONSOLE_H
#define C_ONSOLE_H
+#include "common/debugger.h"
#include "bs2/memory.h"
-// Choose between text console or graphical console
-#define USE_CONSOLE 1
-
-#if USE_CONSOLE
- #include "gui/console.h"
- #define Debug_Printf g_sword2->_debugger->_debuggerDialog->printf
-#else
- #define Debug_Printf printf
-#endif
-
-class ConsoleDialog;
+#define Debug_Printf g_sword2->_debugger->DebugPrintf
namespace Sword2 {
@@ -40,53 +31,16 @@ extern bool grabbingSequences;
extern bool wantSfxDebug; // sfx debug file enabled/disabled from console
class Sword2Engine;
-class Debugger;
-
-typedef bool (Debugger::*DebugProc)(int argc, const char **argv);
-
-enum {
- DVAR_INT,
- DVAR_BOOL,
- DVAR_INTARRAY,
- DVAR_STRING
-};
-
-struct DVar {
- char name[30];
- void *variable;
- int type, optional;
-};
-
-struct DCmd {
- char name[30];
- DebugProc function;
-};
-class Debugger {
+class Debugger : public Common::Debugger<Debugger> {
public:
Debugger(Sword2Engine *s);
- void onFrame();
- void attach(const char *entry = 0);
-
- bool isAttached() const { return _isAttached; }
-
protected:
Sword2Engine *_vm;
- int _frame_countdown, _dcmd_count;
- DCmd _dcmds[256];
- bool _detach_now;
- bool _isAttached;
- char *_errStr;
-public:
- ConsoleDialog *_debuggerDialog; // Should be protected, but is public now for Debug_Printf
-protected:
- void enter();
- void detach();
-
- void DCmd_Register(const char *cmdname, DebugProc pointer);
- bool RunCommand(const char *input);
+ virtual void preEnter();
+ virtual void postEnter();
// Commands
bool Cmd_Exit(int argc, const char **argv);
@@ -132,13 +86,6 @@ protected:
bool Cmd_English(int argc, const char **argv);
bool Cmd_Finnish(int argc, const char **argv);
bool Cmd_Polish(int argc, const char **argv);
-
-#if USE_CONSOLE
- static bool debuggerInputCallback(ConsoleDialog *console, const char *input, void *refCon);
- static bool debuggerCompletionCallback(ConsoleDialog *console, const char *input, char*& completion, void *refCon);
-#endif
-
- bool TabComplete(const char *input, char*& completion);
};
} // End of namespace Sword2
diff --git a/sword2/sword2.h b/sword2/sword2.h
index cfbe0536b9..3f0ad2d41f 100644
--- a/sword2/sword2.h
+++ b/sword2/sword2.h
@@ -34,6 +34,8 @@ enum BSGameId {
GID_SWORD2_DEMO
};
+class NewGui;
+
namespace Sword2 {
// Bodge for PCF76 version so that their demo CD can be labelled "PCF76"