[Scummvm-cvs-logs] CVS: scummvm/bs2 console.cpp,1.22,1.23 console.h,1.9,1.10 sword2.h,1.24,1.25

Max Horn fingolfin at users.sourceforge.net
Sun Oct 26 14:06:27 CET 2003


Update of /cvsroot/scummvm/scummvm/bs2
In directory sc8-pr-cvs1:/tmp/cvs-serv11180/bs2

Modified Files:
	console.cpp console.h sword2.h 
Log Message:
factor out common debugger code

Index: console.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/console.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- console.cpp	26 Oct 2003 19:16:59 -0000	1.22
+++ console.cpp	26 Oct 2003 21:30:43 -0000	1.23
@@ -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 @@
 	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 @@
 	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::detach() {
-#if USE_CONSOLE
-	if (_debuggerDialog) {
-		_debuggerDialog->setInputCallback(0, 0);
-		_debuggerDialog->setCompletionCallback(0, 0);
-	}
-#endif
-
-#ifdef _WIN32_WCE
-	force_keyboard(false);
-#endif
-
-	_detach_now = false;
-	_isAttached = false;
+void Debugger::preEnter() {
+	// Pause sound output
+	g_sound->pauseFx();
+	g_sound->pauseSpeech();
+	g_sound->pauseMusic();
 }
 
-// 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();
-	}
-}
+void Debugger::postEnter() {
+	// Resume previous sound state
+	g_sound->unpauseFx();
+	g_sound->unpauseSpeech();
+	g_sound->unpauseMusic();
 
-// Console handler
-#if USE_CONSOLE
-bool Debugger::debuggerInputCallback(ConsoleDialog *console, const char *input, void *refCon) {
-	Debugger *debugger = (Debugger *) refCon;
+	// Restore old mouse cursor
+	g_display->drawMouse();
 
-	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 @@
 	// 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_Tony(int argc, const char **argv) {
-	Debug_Printf("What about him?\n");
+	DebugPrintf("What about him?\n");
 	return true;
 }
 
@@ -334,7 +178,7 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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_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 @@
 		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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 
 	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_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 @@
 	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 @@
 	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 @@
 	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 @@
 		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 @@
 	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 @@
 	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 @@
 	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 @@
 	// 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 @@
 
 	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 @@
 
 	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 @@
 	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;
 }
 

Index: console.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/console.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- console.h	26 Oct 2003 19:16:59 -0000	1.9
+++ console.h	26 Oct 2003 21:30:49 -0000	1.10
@@ -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 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 @@
 	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

Index: sword2.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/sword2.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- sword2.h	26 Oct 2003 19:16:59 -0000	1.24
+++ sword2.h	26 Oct 2003 21:30:49 -0000	1.25
@@ -34,6 +34,8 @@
 	GID_SWORD2_DEMO
 };
 
+class NewGui;
+
 namespace Sword2 {
 
 // Bodge for PCF76 version so that their demo CD can be labelled "PCF76"





More information about the Scummvm-git-logs mailing list