[Scummvm-cvs-logs] SF.net SVN: scummvm:[41364] scummvm/trunk/engines/sci

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Mon Jun 8 10:38:10 CEST 2009


Revision: 41364
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41364&view=rev
Author:   thebluegr
Date:     2009-06-08 08:38:10 +0000 (Mon, 08 Jun 2009)

Log Message:
-----------
Moved some more debug commands to ScummVM's console

Modified Paths:
--------------
    scummvm/trunk/engines/sci/console.cpp
    scummvm/trunk/engines/sci/console.h
    scummvm/trunk/engines/sci/engine/scriptdebug.cpp

Modified: scummvm/trunk/engines/sci/console.cpp
===================================================================
--- scummvm/trunk/engines/sci/console.cpp	2009-06-08 08:21:18 UTC (rev 41363)
+++ scummvm/trunk/engines/sci/console.cpp	2009-06-08 08:38:10 UTC (rev 41364)
@@ -159,6 +159,8 @@
 	DCmd_Register("step_callk",			WRAP_METHOD(Console, cmdStepCallk));
 	DCmd_Register("disasm",				WRAP_METHOD(Console, cmdDissassemble));
 	DCmd_Register("disasm_addr",		WRAP_METHOD(Console, cmdDissassembleAddress));
+	DCmd_Register("send",				WRAP_METHOD(Console, cmdSend));
+	DCmd_Register("go",					WRAP_METHOD(Console, cmdGo));
 	// Breakpoints
 	DCmd_Register("bp_list",			WRAP_METHOD(Console, cmdBreakpointList));
 	DCmd_Register("bp_del",				WRAP_METHOD(Console, cmdBreakpointDelete));
@@ -316,6 +318,8 @@
 	DebugPrintf(" step_callk - Steps forward until it hits the next callk operation, or a specific callk (specified as a parameter)\n");
 	DebugPrintf(" disasm - Disassembles a method by name\n");
 	DebugPrintf(" disasm_addr - Disassembles one or more commands\n");
+	DebugPrintf(" send - Sends a message to an object\n");
+	DebugPrintf(" go - Executes the script\n");
 	DebugPrintf("\n");
 	DebugPrintf("Breakpoints:\n");
 	DebugPrintf(" bp_list - Lists the current breakpoints\n");
@@ -2260,6 +2264,87 @@
 	return true;
 }
 
+bool Console::cmdSend(int argc, const char **argv) {
+	if (argc < 3) {
+		DebugPrintf("Sends a message to an object.\n");
+		DebugPrintf("Usage: %s <object> <selector name> <param1> <param2> ... <paramn>\n", argv[0]);
+		DebugPrintf("Example: send ?fooScript cue\n");
+		return true;
+	}
+
+	reg_t object;
+	
+	if (parse_reg_t(_vm->_gamestate, argv[1], &object)) {
+		DebugPrintf("Invalid address passed for parameter 1.\n");
+		DebugPrintf("Check the \"addresses\" command on how to use addresses\n");
+		return true;
+	}
+	
+	const char *selector_name = argv[2];
+	StackPtr stackframe = _vm->_gamestate->_executionStack.front().sp;
+	int selector_id;
+	int i;
+	ExecStack *xstack;
+	Object *o;
+	reg_t fptr;
+
+	selector_id = _vm->_gamestate->_kernel->findSelector(selector_name);
+
+	if (selector_id < 0) {
+		sciprintf("Unknown selector: \"%s\"\n", selector_name);
+		return 1;
+	}
+
+	o = obj_get(_vm->_gamestate, object);
+	if (o == NULL) {
+		sciprintf("Address \"%04x:%04x\" is not an object\n", PRINT_REG(object));
+		return 1;
+	}
+
+	SelectorType selector_type = lookup_selector(_vm->_gamestate, object, selector_id, 0, &fptr);
+
+	if (selector_type == kSelectorNone) {
+		sciprintf("Object does not support selector: \"%s\"\n", selector_name);
+		return 1;
+	}
+
+	stackframe[0] = make_reg(0, selector_id);
+	stackframe[1] = make_reg(0, argc - 3);	// -object -selector name -command name
+
+	for (i = 3; i < argc; i++) {
+		if (parse_reg_t(_vm->_gamestate, argv[i], &stackframe[i])) {
+			DebugPrintf("Invalid address passed for parameter %d.\n", i);
+			DebugPrintf("Check the \"addresses\" command on how to use addresses\n");
+			return true;
+		}
+	}
+
+	xstack = add_exec_stack_entry(_vm->_gamestate, fptr,
+	                 _vm->_gamestate->_executionStack.front().sp + argc,
+	                 object, argc - 3,
+	                 _vm->_gamestate->_executionStack.front().sp - 1, 0, object,
+	                 _vm->_gamestate->_executionStack.size()-1, SCI_XS_CALLEE_LOCALS);
+	xstack->selector = selector_id;
+	xstack->type = selector_type == kSelectorVariable ? EXEC_STACK_TYPE_VARSELECTOR : EXEC_STACK_TYPE_CALL;
+
+	// Now commit the actual function:
+	xstack = send_selector(_vm->_gamestate, object, object, stackframe, argc - 3, stackframe);
+
+	xstack->sp += argc;
+	xstack->fp += argc;
+
+	_vm->_gamestate->_executionStackPosChanged = true;
+
+	return true;
+}
+
+bool Console::cmdGo(int argc, const char **argv) {
+	g_debug_seeking = 0;
+	g_debugstate_valid = 0;
+
+	return true;
+}
+
 bool Console::cmdBreakpointList(int argc, const char **argv) {
 	Breakpoint *bp = _vm->_gamestate->bp_list;
 	int i = 0;

Modified: scummvm/trunk/engines/sci/console.h
===================================================================
--- scummvm/trunk/engines/sci/console.h	2009-06-08 08:21:18 UTC (rev 41363)
+++ scummvm/trunk/engines/sci/console.h	2009-06-08 08:38:10 UTC (rev 41364)
@@ -129,6 +129,8 @@
 	bool cmdStepCallk(int argc, const char **argv);
 	bool cmdDissassemble(int argc, const char **argv);
 	bool cmdDissassembleAddress(int argc, const char **argv);
+	bool cmdSend(int argc, const char **argv);
+	bool cmdGo(int argc, const char **argv);
 	// Breakpoints
 	bool cmdBreakpointList(int argc, const char **argv);
 	bool cmdBreakpointDelete(int argc, const char **argv);

Modified: scummvm/trunk/engines/sci/engine/scriptdebug.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2009-06-08 08:21:18 UTC (rev 41363)
+++ scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2009-06-08 08:38:10 UTC (rev 41364)
@@ -61,32 +61,6 @@
 static reg_t **p_var_base;
 static int *p_var_max; // May be NULL even in valid state!
 
-char inputbuf[256] = "";
-
-union cmd_param_t {
-	int32 val;
-	const char *str;
-	reg_t reg;
-};
-
-typedef int (*ConCommand)(EngineState *s, const Common::Array<cmd_param_t> &cmdParams);
-
-struct cmd_mm_entry_t {
-	const char *name;
-	const char *description;
-}; // All later structures must "extend" this
-
-struct cmd_command_t : public cmd_mm_entry_t {
-	ConCommand command;
-	const char *param;
-};
-
-// Dummy function, so that it compiles
-int con_hook_command(ConCommand command, const char *name, const char *param, const char *description) {
-
-	return 0;
-}
-
 extern const char *selector_name(EngineState *s, int selector);
 
 int prop_ofs_to_id(EngineState *s, int prop_ofs, reg_t objp) {
@@ -365,69 +339,7 @@
 	return retval;
 }
 
-static int c_go(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
-	g_debug_seeking = 0;
-	g_debugstate_valid = 0;
-	return 0;
-}
 
-static int c_send(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
-	reg_t object = cmdParams[0].reg;
-	const char *selector_name = cmdParams[1].str;
-	StackPtr stackframe = s->_executionStack.front().sp;
-	int selector_id;
-	unsigned int i;
-	ExecStack *xstack;
-	Object *o;
-	reg_t fptr;
-
-	selector_id = s->_kernel->findSelector(selector_name);
-
-	if (selector_id < 0) {
-		sciprintf("Unknown selector: \"%s\"\n", selector_name);
-		return 1;
-	}
-
-	o = obj_get(s, object);
-	if (o == NULL) {
-		sciprintf("Address \"%04x:%04x\" is not an object\n", PRINT_REG(object));
-		return 1;
-	}
-
-	SelectorType selector_type = lookup_selector(s, object, selector_id, 0, &fptr);
-
-	if (selector_type == kSelectorNone) {
-		sciprintf("Object does not support selector: \"%s\"\n", selector_name);
-		return 1;
-	}
-
-	stackframe[0] = make_reg(0, selector_id);
-	stackframe[1] = make_reg(0, cmdParams.size() - 2);
-
-	for (i = 2; i < cmdParams.size(); i++)
-		stackframe[i] = cmdParams[i].reg;
-
-	xstack = add_exec_stack_entry(s, fptr,
-	                 s->_executionStack.front().sp + cmdParams.size(),
-	                 object, cmdParams.size() - 2,
-	                 s->_executionStack.front().sp - 1, 0, object,
-	                 s->_executionStack.size()-1, SCI_XS_CALLEE_LOCALS);
-	xstack->selector = selector_id;
-	xstack->type = selector_type == kSelectorVariable ? EXEC_STACK_TYPE_VARSELECTOR : EXEC_STACK_TYPE_CALL;
-
-	// Now commit the actual function:
-	xstack = send_selector(s, object, object, stackframe, cmdParams.size() - 2, stackframe);
-
-	xstack->sp += cmdParams.size();
-	xstack->fp += cmdParams.size();
-
-	s->_executionStackPosChanged = true;
-
-	return 0;
-}
-
-// Breakpoint commands
-
 void script_debug(EngineState *s, reg_t *pc, StackPtr *sp, StackPtr *pp, reg_t *objp, int *restadjust,
 	SegmentId *segids, reg_t **variables, reg_t **variables_base, int *variables_nr, int bp) {
 // TODO: disabled till this is moved in console.cpp
@@ -517,9 +429,6 @@
 		
 		sciprintf("Step #%d\n", script_step_counter);
 		disassemble(s, *pc, 0, 1);
-
-		con_hook_command(c_send, "send", "!asa*", "Sends a message to an object\nExample: send ?fooScript cue");
-		con_hook_command(c_go, "go", "", "Executes the script.\n");
 	}
 
 }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list