[Scummvm-cvs-logs] CVS: scummvm/scumm debugger.h,1.6,1.7 debugger.cpp,1.6,1.7

Max Horn fingolfin at users.sourceforge.net
Sun Dec 29 17:28:05 CET 2002


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv23157

Modified Files:
	debugger.h debugger.cpp 
Log Message:
added two debugger commands

Index: debugger.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/debugger.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- debugger.h	28 Dec 2002 05:17:46 -0000	1.6
+++ debugger.h	30 Dec 2002 01:27:33 -0000	1.7
@@ -26,7 +26,7 @@
 class Scumm;
 class ScummDebugger;
 
-typedef bool (ScummDebugger::*DebugProc)(char parm[255][255]);
+typedef bool (ScummDebugger::*DebugProc)(int argc, const char **argv);
 
 enum {
 	DVAR_INT,
@@ -68,10 +68,15 @@
 	bool RunCommand(char *input);
 
 	// Commands
-	bool Cmd_Exit(char _parameter[255][255]);
-	bool Cmd_Room(char _parameter[255][255]);
-	bool Cmd_LoadGame(char _parameter[255][255]);
-	bool Cmd_SaveGame(char _parameter[255][255]);
+	bool Cmd_Exit(int argc, const char **argv);
+	bool Cmd_Room(int argc, const char **argv);
+	bool Cmd_LoadGame(int argc, const char **argv);
+	bool Cmd_SaveGame(int argc, const char **argv);
+
+	bool Cmd_PrintActor(int argc, const char **argv);
+	bool Cmd_PrintBox(int argc, const char **argv);
+	
+	void printBox(int box);
 	
 #ifdef USE_CONSOLE
 	static bool debuggerInputCallback(ConsoleDialog *console, const char *input, void *refCon);

Index: debugger.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/debugger.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- debugger.cpp	28 Dec 2002 05:17:46 -0000	1.6
+++ debugger.cpp	30 Dec 2002 01:27:33 -0000	1.7
@@ -51,8 +51,12 @@
 	}
 
 	if (_dcmd_count < 1) {	// We need to register our commands
+		DCmd_Register("continue", &ScummDebugger::Cmd_Exit);
 		DCmd_Register("exit", &ScummDebugger::Cmd_Exit);
 		DCmd_Register("quit", &ScummDebugger::Cmd_Exit);
+
+		DCmd_Register("actor", &ScummDebugger::Cmd_PrintActor);
+		DCmd_Register("box", &ScummDebugger::Cmd_PrintBox);
 		DCmd_Register("room", &ScummDebugger::Cmd_Room);
 
 		DCmd_Register("loadgame", &ScummDebugger::Cmd_LoadGame);
@@ -147,52 +151,50 @@
 
 // Command execution loop
 bool ScummDebugger::RunCommand(char *input) {
-	int i = 0, num_parms = 0;
-	char parm[255][255];
+	int i = 0, num_params = 0;
+	const char *param[256];
 
 	// Parse out any params
 	char *tok = strtok(input, " ");
 	if (tok) {
 		do {
-			strcpy(parm[num_parms++], tok);
+			param[num_params++] = tok;
 		} while ((tok = strtok(NULL, " ")) != NULL);
-	} else
-		strcpy(parm[0], input);
+	} else {
+		param[num_params++] = input;
+	}
 
 	for(i=0; i < _dcmd_count; i++) {
-		if (!strcmp(_dcmds[i].name, parm[0])) {
-			DebugProc cmd;
-
-			cmd = _dcmds[i].function;
-			return (this->*cmd)(parm);
+		if (!strcmp(_dcmds[i].name, param[0])) {
+			return (this->*_dcmds[i].function)(num_params, param);
 		}
 	}
 
 	// It's not a command, so things get a little tricky for variables. Do fuzzy matching to ignore things like subscripts.
 	for(i = 0; i < _dvar_count; i++) {
-		if (!strncmp(_dvars[i].name, parm[0], strlen(_dvars[i].name))) {
-			if (num_parms > 1) {
+		if (!strncmp(_dvars[i].name, param[0], strlen(_dvars[i].name))) {
+			if (num_params > 1) {
 				// 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) {
 					// Integer
 					case DVAR_INT:
-						*(int *)_dvars[i].variable = atoi(parm[1]);
-						Debug_Printf("(int)%s = %d\n", parm[0], *(int *)_dvars[i].variable);
+						*(int *)_dvars[i].variable = atoi(param[1]);
+						Debug_Printf("(int)%s = %d\n", param[0], *(int *)_dvars[i].variable);
 					break;
 
 					// Integer Array
 					case DVAR_INTARRAY: {
-						char *chr = strchr(parm[0], '[');
+						char *chr = strchr(param[0], '[');
 						if (!chr) {
-							Debug_Printf("You must access this array as %s[element]\n", parm[0]);
+							Debug_Printf("You must access this array as %s[element]\n", param[0]);
 						} else {
 							int element = atoi(chr+1);
 							int16 *var = *(int16 **)_dvars[i].variable;
 							if (element > _dvars[i].optional) {
-								Debug_Printf("%s is out of range (array is %d elements big)\n", parm[0], _dvars[i].optional);
+								Debug_Printf("%s is out of range (array is %d elements big)\n", param[0], _dvars[i].optional);
 							} else {
-								var[element] = atoi(parm[1]);
-								Debug_Printf("(int)%s = %d\n", parm[0], var[element]);
+								var[element] = atoi(param[1]);
+								Debug_Printf("(int)%s = %d\n", param[0], var[element]);
 								
 							}
 						}
@@ -200,7 +202,7 @@
 					break;
 
 					default:
-						Debug_Printf("Failed to set variable %s to %s - unknown type\n", _dvars[i].name, parm[1]);
+						Debug_Printf("Failed to set variable %s to %s - unknown type\n", _dvars[i].name, param[1]);
 					break;
 				}
 			} else {
@@ -208,21 +210,21 @@
 				switch(_dvars[i].type) {
 					// Integer
 					case DVAR_INT:
-						Debug_Printf("(int)%s = %d\n", parm[0], *(int *)_dvars[i].variable);
+						Debug_Printf("(int)%s = %d\n", param[0], *(int *)_dvars[i].variable);
 					break;
 
 					// Integer array
 					case DVAR_INTARRAY: {
-						char *chr = strchr(parm[0], '[');
+						char *chr = strchr(param[0], '[');
 						if (!chr) {
-							Debug_Printf("You must access this array as %s[element]\n", parm[0]);
+							Debug_Printf("You must access this array as %s[element]\n", param[0]);
 						} else {
 							int element = atoi(chr+1);
 							int16 *var = *(int16 **)_dvars[i].variable;
 							if (element > _dvars[i].optional) {
-								Debug_Printf("%s is out of range (array is %d elements big)\n", parm[0], _dvars[i].optional);
+								Debug_Printf("%s is out of range (array is %d elements big)\n", param[0], _dvars[i].optional);
 							} else {
-								Debug_Printf("(int)%s = %d\n", parm[0], var[element]);
+								Debug_Printf("(int)%s = %d\n", param[0], var[element]);
 								
 							}
 						}
@@ -231,11 +233,11 @@
 
 					// String
 					case DVAR_STRING:
-						Debug_Printf("(string)%s = %s\n", parm[0], *(char **)_dvars[i].variable);
+						Debug_Printf("(string)%s = %s\n", param[0], *(char **)_dvars[i].variable);
 					break;
 
 					default:
-						Debug_Printf("%s = (unknown type)\n", parm[0]);
+						Debug_Printf("%s = (unknown type)\n", param[0]);
 					break;
 				}
 			}
@@ -249,38 +251,104 @@
 }
 
 // Commands
-bool ScummDebugger::Cmd_Exit(char _parameter[255][255]) {
+bool ScummDebugger::Cmd_Exit(int argc, const char **argv) {
 	_detach_now = true;
 	return false;
 }
 
-bool ScummDebugger::Cmd_Room(char _parameter[255][255]) {
-        int room = atoi(_parameter[1]);
-        _s->_actors[_s->_vars[_s->VAR_EGO]].room = room;
-        _s->startScene(room, 0, 0);
-        _s->_fullRedraw = 1;
+bool ScummDebugger::Cmd_Room(int argc, const char **argv) {
+	if (argc > 1) {
+		int room = atoi(argv[1]);
+		_s->_actors[_s->_vars[_s->VAR_EGO]].room = room;
+		_s->startScene(room, 0, 0);
+		_s->_fullRedraw = 1;
+		return false;
+	} else {
+		Debug_Printf("Current room: %d [%d]\n", _s->_currentRoom, _s->_roomResource);
+		return true;
+	}
+}
+	
+bool ScummDebugger::Cmd_LoadGame(int argc, const char **argv) {
+	if (argc > 1) {
+		int slot = atoi(argv[1]);
+		
+		_s->_saveLoadSlot = slot;
+		_s->_saveLoadFlag = 2;
+		_s->_saveLoadCompatible = false;
+		
+		_detach_now = true;
+	}
+	return false;
+}
+	
+bool ScummDebugger::Cmd_SaveGame(int argc, const char **argv) {
+	if (argc > 1) {
+		int slot = atoi(argv[1]);
+		
+		_s->_saveLoadSlot = slot;
+		_s->_saveLoadFlag = 1;
+		_s->_saveLoadCompatible = false;
+		
+		_detach_now = true;
+	}
+	return false;
+}
+
+bool ScummDebugger::Cmd_PrintActor(int argc, const char **argv) {
+	int i;
+	Actor *a;
 
+	Debug_Printf("+--------------------------------------------------------------------+\n");
+	Debug_Printf("|# |room|  x |  y |elev|cos|width|box|mov| zp|frame|scale|spd|dir|cls|\n");
+	Debug_Printf("+--+----+----+----+----+---+-----+---+---+---+-----+-----+---+---+---+\n");
+	for (i = 1; i < _s->NUM_ACTORS; i++) {
+		a = &_s->_actors[i];
+		if (a->visible)
+			Debug_Printf("|%2d|%4d|%4d|%4d|%4d|%3d|%5d|%3d|%3d|%3d|%5d|%5d|%3d|%3d|$%02x|\n",
+						 a->number, a->room, a->x, a->y, a->elevation, a->costume,
+						 a->width, a->walkbox, a->moving, a->forceClip, a->frame,
+						 a->scalex, a->speedx, a->facing, int(_s->_classData[a->number]&0xFF));
+	}
+	Debug_Printf("+--------------------------------------------------------------------+\n");
 	return true;
 }
 
-bool ScummDebugger::Cmd_LoadGame(char _parameter[255][255]) {
-        int slot = atoi(_parameter[1]);
-
-        _s->_saveLoadSlot = slot;
-        _s->_saveLoadFlag = 2;
-        _s->_saveLoadCompatible = false;
+bool ScummDebugger::Cmd_PrintBox(int argc, const char **argv) {
+	int num, i = 0;
+	num = _s->getNumBoxes();
+/*
+	byte *boxm = _s->getBoxMatrixBaseAddr();
 
-	_detach_now = true;
-	return false;
+	Debug_Printf("Walk matrix:\n");
+	for (i = 0; i < num; i++) {
+		while (*boxm != 0xFF) {
+			Debug_Printf("[%d] ", *boxm);
+			boxm++;
+		}
+		boxm++;
+		Debug_Printf("\n");
+	}
+*/
+	Debug_Printf("\nWalk boxes:\n");
+	for (i = 0; i < num; i++)
+		printBox(i);
+	return true;
 }
 
-bool ScummDebugger::Cmd_SaveGame(char _parameter[255][255]) {
-        int slot = atoi(_parameter[1]);
-
-        _s->_saveLoadSlot = slot;
-        _s->_saveLoadFlag = 1;
-        _s->_saveLoadCompatible = false;
+void ScummDebugger::printBox(int box)
+{
+	BoxCoords coords;
+	int flags = _s->getBoxFlags(box);
+	int mask = _s->getMaskFromBox(box);
+	int scale = _s->getBoxScale(box);
 
-	_detach_now = true;
-	return false;
+	_s->getBoxCoordinates(box, &coords);
+	
+	// Print out coords, flags, zbuffer mask
+	Debug_Printf("%d: [%d x %d] [%d x %d] [%d x %d] [%d x %d], flags=0x%02x, mask=%d, scale=%d\n",
+	              box,
+	              coords.ul.x, coords.ul.y, coords.ll.x, coords.ll.y,
+	              coords.ur.x, coords.ur.y, coords.lr.x, coords.lr.y,
+	              flags, mask, scale);
 }





More information about the Scummvm-git-logs mailing list