mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-14 05:38:56 +00:00
Moved some more debug commands to ScummVM's coneole and removed some unused code
svn-id: r41198
This commit is contained in:
parent
24cb130b26
commit
7c84cca81d
@ -63,6 +63,7 @@ Console::Console(SciEngine *vm) : GUI::Debugger() {
|
||||
DVar_Register("simulated_key", &g_debug_simulated_key, DVAR_INT, 0);
|
||||
DVar_Register("track_mouse_clicks", &g_debug_track_mouse_clicks, DVAR_BOOL, 0);
|
||||
DVar_Register("weak_validations", &g_debug_weak_validations, DVAR_BOOL, 0);
|
||||
DVar_Register("script_abort_flag", &script_abort_flag, DVAR_INT, 0);
|
||||
|
||||
// General
|
||||
DCmd_Register("help", WRAP_METHOD(Console, cmdHelp));
|
||||
@ -115,6 +116,9 @@ Console::Console(SciEngine *vm) : GUI::Debugger() {
|
||||
DCmd_Register("dynamic_views", WRAP_METHOD(Console, cmdDynamicViews));
|
||||
DCmd_Register("dropped_views", WRAP_METHOD(Console, cmdDroppedViews));
|
||||
DCmd_Register("status_bar", WRAP_METHOD(Console, cmdStatusBarColors));
|
||||
#ifdef GFXW_DEBUG_WIDGETS
|
||||
DCmd_Register("print_widget", WRAP_METHOD(Console, cmdPrintWidget));
|
||||
#endif
|
||||
// Segments
|
||||
DCmd_Register("segment_table", WRAP_METHOD(Console, cmdPrintSegmentTable));
|
||||
DCmd_Register("segment_info", WRAP_METHOD(Console, cmdSegmentInfo));
|
||||
@ -182,6 +186,14 @@ void Console::postEnter() {
|
||||
_vm->_mixer->pauseAll(false);
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
// Unused
|
||||
#define LOOKUP_SPECIES(species) (\
|
||||
(species >= 1000) ? species : *(s->_classtable[species].scriptposp) \
|
||||
+ s->_classtable[species].class_offset)
|
||||
#endif
|
||||
|
||||
bool Console::cmdHelp(int argc, const char **argv) {
|
||||
DebugPrintf("\n");
|
||||
DebugPrintf("Variables\n");
|
||||
@ -191,6 +203,7 @@ bool Console::cmdHelp(int argc, const char **argv) {
|
||||
DebugPrintf("simulated_key: Add a key with the specified scan code to the event list\n");
|
||||
DebugPrintf("track_mouse_clicks: Toggles mouse click tracking to the console\n");
|
||||
DebugPrintf("weak_validations: Turns some validation errors into warnings\n");
|
||||
DebugPrintf("script_abort_flag: Set to 1 to abort script execution. Set to 2 to force a replay afterwards\n");
|
||||
DebugPrintf("\n");
|
||||
DebugPrintf("Commands\n");
|
||||
DebugPrintf("--------\n");
|
||||
@ -248,6 +261,9 @@ bool Console::cmdHelp(int argc, const char **argv) {
|
||||
DebugPrintf(" dynamic_views - Lists active dynamic views\n");
|
||||
DebugPrintf(" dropped_views - Lists dropped dynamic views\n");
|
||||
DebugPrintf(" status_bar - Sets the colors of the status bar\n");
|
||||
#ifdef GFXW_DEBUG_WIDGETS
|
||||
DebugPrintf(" print_widget - Shows active widgets (no params) or information on the specified widget indices\n");
|
||||
#endif
|
||||
DebugPrintf("\n");
|
||||
DebugPrintf("Segments:\n");
|
||||
DebugPrintf(" segment_table - Lists all segments\n");
|
||||
@ -667,7 +683,7 @@ bool Console::cmdRestoreGame(int argc, const char **argv) {
|
||||
if (newstate) {
|
||||
g_EngineState->successor = newstate; // Set successor
|
||||
|
||||
script_abort_flag = SCRIPT_ABORT_WITH_REPLAY; // Abort current game
|
||||
script_abort_flag = 2; // Abort current game with replay
|
||||
g_debugstate_valid = 0;
|
||||
|
||||
shrink_execution_stack(g_EngineState, g_EngineState->execution_stack_base + 1);
|
||||
@ -2678,4 +2694,225 @@ int printObject(EngineState *s, reg_t pos) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define GETRECT(ll, rr, tt, bb) \
|
||||
ll = GET_SELECTOR(pos, ll); \
|
||||
rr = GET_SELECTOR(pos, rr); \
|
||||
tt = GET_SELECTOR(pos, tt); \
|
||||
bb = GET_SELECTOR(pos, bb);
|
||||
|
||||
#if 0
|
||||
// TODO Re-implement this
|
||||
static void viewobjinfo(EngineState *s, HeapPtr pos) {
|
||||
char *signals[16] = {
|
||||
"stop_update",
|
||||
"updated",
|
||||
"no_update",
|
||||
"hidden",
|
||||
"fixed_priority",
|
||||
"always_update",
|
||||
"force_update",
|
||||
"remove",
|
||||
"frozen",
|
||||
"is_extra",
|
||||
"hit_obstacle",
|
||||
"doesnt_turn",
|
||||
"no_cycler",
|
||||
"ignore_horizon",
|
||||
"ignore_actor",
|
||||
"dispose!"
|
||||
};
|
||||
|
||||
int x, y, z, priority;
|
||||
int cel, loop, view, signal;
|
||||
int nsLeft, nsRight, nsBottom, nsTop;
|
||||
int lsLeft, lsRight, lsBottom, lsTop;
|
||||
int brLeft, brRight, brBottom, brTop;
|
||||
int i;
|
||||
int have_rects = 0;
|
||||
Common::Rect nsrect, nsrect_clipped, brrect;
|
||||
|
||||
if (lookup_selector(s, pos, s->_kernel->_selectorMap.nsBottom, NULL) == kSelectorVariable) {
|
||||
GETRECT(nsLeft, nsRight, nsBottom, nsTop);
|
||||
GETRECT(lsLeft, lsRight, lsBottom, lsTop);
|
||||
GETRECT(brLeft, brRight, brBottom, brTop);
|
||||
have_rects = 1;
|
||||
}
|
||||
|
||||
GETRECT(view, loop, signal, cel);
|
||||
|
||||
sciprintf("\n-- View information:\ncel %d/%d/%d at ", view, loop, cel);
|
||||
|
||||
x = GET_SELECTOR(pos, x);
|
||||
y = GET_SELECTOR(pos, y);
|
||||
priority = GET_SELECTOR(pos, priority);
|
||||
if (s->_kernel->_selectorMap.z > 0) {
|
||||
z = GET_SELECTOR(pos, z);
|
||||
sciprintf("(%d,%d,%d)\n", x, y, z);
|
||||
} else
|
||||
sciprintf("(%d,%d)\n", x, y);
|
||||
|
||||
if (priority == -1)
|
||||
sciprintf("No priority.\n\n");
|
||||
else
|
||||
sciprintf("Priority = %d (band starts at %d)\n\n", priority, PRIORITY_BAND_FIRST(priority));
|
||||
|
||||
if (have_rects) {
|
||||
sciprintf("nsRect: [%d..%d]x[%d..%d]\n", nsLeft, nsRight, nsTop, nsBottom);
|
||||
sciprintf("lsRect: [%d..%d]x[%d..%d]\n", lsLeft, lsRight, lsTop, lsBottom);
|
||||
sciprintf("brRect: [%d..%d]x[%d..%d]\n", brLeft, brRight, brTop, brBottom);
|
||||
}
|
||||
|
||||
nsrect = get_nsrect(s, pos, 0);
|
||||
nsrect_clipped = get_nsrect(s, pos, 1);
|
||||
brrect = set_base(s, pos);
|
||||
sciprintf("new nsRect: [%d..%d]x[%d..%d]\n", nsrect.x, nsrect.xend, nsrect.y, nsrect.yend);
|
||||
sciprintf("new clipped nsRect: [%d..%d]x[%d..%d]\n", nsrect_clipped.x, nsrect_clipped.xend, nsrect_clipped.y, nsrect_clipped.yend);
|
||||
sciprintf("new brRect: [%d..%d]x[%d..%d]\n", brrect.x, brrect.xend, brrect.y, brrect.yend);
|
||||
sciprintf("\n signals = %04x:\n", signal);
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
if (signal & (1 << i))
|
||||
sciprintf(" %04x: %s\n", 1 << i, signals[i]);
|
||||
}
|
||||
#endif
|
||||
#undef GETRECT
|
||||
|
||||
#define GETRECT(ll, rr, tt, bb) \
|
||||
ll = GET_SELECTOR(pos, ll); \
|
||||
rr = GET_SELECTOR(pos, rr); \
|
||||
tt = GET_SELECTOR(pos, tt); \
|
||||
bb = GET_SELECTOR(pos, bb);
|
||||
|
||||
#if 0
|
||||
// Draws the nsRect and brRect of a dynview object. nsRect is green, brRect is blue.
|
||||
// TODO: Re-implement this
|
||||
static int c_gfx_draw_viewobj(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||
HeapPtr pos = (HeapPtr)(cmdParams[0].val);
|
||||
int is_view;
|
||||
int x, y, priority;
|
||||
int nsLeft, nsRight, nsBottom, nsTop;
|
||||
int brLeft, brRight, brBottom, brTop;
|
||||
|
||||
if (!s) {
|
||||
sciprintf("Not in debug state!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((pos < 4) || (pos > 0xfff0)) {
|
||||
sciprintf("Invalid address.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (((int16)READ_LE_UINT16(s->heap + pos + SCRIPT_OBJECT_MAGIC_OFFSET)) != SCRIPT_OBJECT_MAGIC_NUMBER) {
|
||||
sciprintf("Not an object.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
is_view = (lookup_selector(s, pos, s->_kernel->_selectorMap.x, NULL) == kSelectorVariable) &&
|
||||
(lookup_selector(s, pos, s->_kernel->_selectorMap.brLeft, NULL) == kSelectorVariable) &&
|
||||
(lookup_selector(s, pos, s->_kernel->_selectorMap.signal, NULL) == kSelectorVariable) &&
|
||||
(lookup_selector(s, pos, s->_kernel->_selectorMap.nsTop, NULL) == kSelectorVariable);
|
||||
|
||||
if (!is_view) {
|
||||
sciprintf("Not a dynamic View object.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
x = GET_SELECTOR(pos, x);
|
||||
y = GET_SELECTOR(pos, y);
|
||||
priority = GET_SELECTOR(pos, priority);
|
||||
GETRECT(brLeft, brRight, brBottom, brTop);
|
||||
GETRECT(nsLeft, nsRight, nsBottom, nsTop);
|
||||
gfxop_set_clip_zone(s->gfx_state, gfx_rect_fullscreen);
|
||||
|
||||
brTop += 10;
|
||||
brBottom += 10;
|
||||
nsTop += 10;
|
||||
nsBottom += 10;
|
||||
|
||||
gfxop_fill_box(s->gfx_state, gfx_rect(nsLeft, nsTop, nsRight - nsLeft + 1, nsBottom - nsTop + 1), s->ega_colors[2]);
|
||||
gfxop_fill_box(s->gfx_state, gfx_rect(brLeft, brTop, brRight - brLeft + 1, brBottom - brTop + 1), s->ega_colors[1]);
|
||||
gfxop_fill_box(s->gfx_state, gfx_rect(x - 1, y - 1, 3, 3), s->ega_colors[0]);
|
||||
gfxop_fill_box(s->gfx_state, gfx_rect(x - 1, y, 3, 1), s->ega_colors[priority]);
|
||||
gfxop_fill_box(s->gfx_state, gfx_rect(x, y - 1, 1, 3), s->ega_colors[priority]);
|
||||
gfxop_update(s->gfx_state);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#undef GETRECT
|
||||
|
||||
#if 0
|
||||
// Executes one operation skipping over sends
|
||||
// TODO Re-implement this
|
||||
int c_stepover(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||
int opcode, opnumber;
|
||||
|
||||
if (!g_debugstate_valid) {
|
||||
sciprintf("Not in debug state\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
g_debugstate_valid = 0;
|
||||
opcode = s->_heap[*p_pc];
|
||||
opnumber = opcode >> 1;
|
||||
if (opnumber == 0x22 /* callb */ || opnumber == 0x23 /* calle */ ||
|
||||
opnumber == 0x25 /* send */ || opnumber == 0x2a /* self */ || opnumber == 0x2b /* super */) {
|
||||
g_debug_seeking = _DEBUG_SEEK_SO;
|
||||
s_debug_seek_level = s->_executionStack.size()-1;
|
||||
// Store in s_debug_seek_special the offset of the next command after send
|
||||
switch (opcode) {
|
||||
case 0x46: // calle W
|
||||
s_debug_seek_special = *p_pc + 5;
|
||||
break;
|
||||
|
||||
case 0x44: // callb W
|
||||
case 0x47: // calle B
|
||||
case 0x56: // super W
|
||||
s_debug_seek_special = *p_pc + 4;
|
||||
break;
|
||||
|
||||
case 0x45: // callb B
|
||||
case 0x57: // super B
|
||||
case 0x4A: // send W
|
||||
case 0x54: // self W
|
||||
s_debug_seek_special = *p_pc + 3;
|
||||
break;
|
||||
|
||||
default:
|
||||
s_debug_seek_special = *p_pc + 2;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef GFXW_DEBUG_WIDGETS
|
||||
extern GfxWidget *debug_widgets[];
|
||||
extern int debug_widget_pos;
|
||||
|
||||
// If called with no parameters, it shows which widgets are active
|
||||
// With parameters, it lists the widget corresponding to the numerical index specified (for each parameter).
|
||||
bool Console::cmdPrintWidget(int argc, const char **argv) {
|
||||
if (argc > 1) {
|
||||
for (int i = 0; i < argc; i++) {
|
||||
int widget_nr = atoi(argv[1]);
|
||||
|
||||
DebugPrintf("===== Widget #%d:\n", widget_nr);
|
||||
debug_widgets[widget_nr]->print(0);
|
||||
}
|
||||
} else if (debug_widget_pos > 1) {
|
||||
DebugPrintf("Widgets 0-%d are active\n", debug_widget_pos - 1);
|
||||
} else if (debug_widget_pos == 1) {
|
||||
DebugPrintf("Widget 0 is active\n");
|
||||
} else {
|
||||
DebugPrintf("No widgets are active\n");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
} // End of namespace Sci
|
||||
|
@ -98,6 +98,7 @@ private:
|
||||
bool cmdDynamicViews(int argc, const char **argv);
|
||||
bool cmdDroppedViews(int argc, const char **argv);
|
||||
bool cmdStatusBarColors(int argc, const char **argv);
|
||||
bool cmdPrintWidget(int argc, const char **argv);
|
||||
// Segments
|
||||
bool cmdPrintSegmentTable(int argc, const char **argv);
|
||||
bool cmdSegmentInfo(int argc, const char **argv);
|
||||
|
@ -654,7 +654,7 @@ reg_t kRestoreGame(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||
|
||||
if (newstate) {
|
||||
s->successor = newstate;
|
||||
script_abort_flag = SCRIPT_ABORT_WITH_REPLAY; // Abort current game
|
||||
script_abort_flag = 2; // Abort current game with replay
|
||||
shrink_execution_stack(s, s->execution_stack_base + 1);
|
||||
} else {
|
||||
s->r_acc = make_reg(0, 1);
|
||||
|
@ -53,7 +53,6 @@ static bool s_debug_commands_hooked = false; // Commands hooked to the console y
|
||||
int g_debug_seeking = 0; // Stepping forward until some special condition is met
|
||||
static int s_debug_seek_level = 0; // Used for seekers that want to check their exec stack depth
|
||||
static int s_debug_seek_special = 0; // Used for special seeks(1)
|
||||
static reg_t s_debug_seek_reg = NULL_REG; // Used for special seeks(2)
|
||||
|
||||
#define _DEBUG_SEEK_NOTHING 0
|
||||
#define _DEBUG_SEEK_CALLK 1 // Step forward until callk is found
|
||||
@ -92,35 +91,12 @@ struct cmd_command_t : public cmd_mm_entry_t {
|
||||
const char *param;
|
||||
};
|
||||
|
||||
#if 0
|
||||
// Unused
|
||||
#define LOOKUP_SPECIES(species) (\
|
||||
(species >= 1000) ? species : *(s->_classtable[species].scriptposp) \
|
||||
+ s->_classtable[species].class_offset)
|
||||
#endif
|
||||
|
||||
// Dummy function, so that it compiles
|
||||
int con_hook_command(ConCommand command, const char *name, const char *param, const char *description) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char *_debug_get_input() {
|
||||
char newinpbuf[256];
|
||||
|
||||
printf("> ");
|
||||
if (!fgets(newinpbuf, 254, stdin))
|
||||
return NULL;
|
||||
|
||||
size_t l = strlen(newinpbuf);
|
||||
if (l > 0 && newinpbuf[0] != '\n') {
|
||||
if (newinpbuf[l-1] == '\n') newinpbuf[l-1] = 0;
|
||||
memcpy(inputbuf, newinpbuf, 256);
|
||||
}
|
||||
|
||||
return inputbuf;
|
||||
}
|
||||
|
||||
int c_step(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||
g_debugstate_valid = 0;
|
||||
if (cmdParams.size() && (cmdParams[0].val > 0))
|
||||
@ -129,51 +105,6 @@ int c_step(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
// TODO Re-implement con:so
|
||||
int c_stepover(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||
int opcode, opnumber;
|
||||
|
||||
if (!g_debugstate_valid) {
|
||||
sciprintf("Not in debug state\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
g_debugstate_valid = 0;
|
||||
opcode = s->_heap[*p_pc];
|
||||
opnumber = opcode >> 1;
|
||||
if (opnumber == 0x22 /* callb */ || opnumber == 0x23 /* calle */ ||
|
||||
opnumber == 0x25 /* send */ || opnumber == 0x2a /* self */ || opnumber == 0x2b /* super */) {
|
||||
g_debug_seeking = _DEBUG_SEEK_SO;
|
||||
s_debug_seek_level = s->_executionStack.size()-1;
|
||||
// Store in s_debug_seek_special the offset of the next command after send
|
||||
switch (opcode) {
|
||||
case 0x46: // calle W
|
||||
s_debug_seek_special = *p_pc + 5;
|
||||
break;
|
||||
|
||||
case 0x44: // callb W
|
||||
case 0x47: // calle B
|
||||
case 0x56: // super W
|
||||
s_debug_seek_special = *p_pc + 4;
|
||||
break;
|
||||
|
||||
case 0x45: // callb B
|
||||
case 0x57: // super B
|
||||
case 0x4A: // send W
|
||||
case 0x54: // self W
|
||||
s_debug_seek_special = *p_pc + 3;
|
||||
break;
|
||||
|
||||
default:
|
||||
s_debug_seek_special = *p_pc + 2;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
enum {
|
||||
_parse_eoi,
|
||||
_parse_token_pareno,
|
||||
@ -536,103 +467,6 @@ reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecod
|
||||
return retval;
|
||||
}
|
||||
|
||||
#ifdef GFXW_DEBUG_WIDGETS
|
||||
extern GfxWidget *debug_widgets[];
|
||||
extern int debug_widget_pos;
|
||||
|
||||
static int c_gfx_print_widget(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||
if (!g_debugstate_valid) {
|
||||
sciprintf("Not in debug state\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (cmdParams.size()) {
|
||||
unsigned int i;
|
||||
for (i = 0; i < cmdParams.size() ; i++) {
|
||||
int widget_nr = cmdParams[i].val;
|
||||
|
||||
sciprintf("===== Widget #%d:\n", widget_nr);
|
||||
debug_widgets[widget_nr]->print(0);
|
||||
}
|
||||
|
||||
} else if (debug_widget_pos > 1)
|
||||
sciprintf("Widgets 0-%d are active\n", debug_widget_pos - 1);
|
||||
else if (debug_widget_pos == 1)
|
||||
sciprintf("Widget 0 is active\n");
|
||||
else
|
||||
sciprintf("No widgets are active\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#define GETRECT(ll, rr, tt, bb) \
|
||||
ll = GET_SELECTOR(pos, ll); \
|
||||
rr = GET_SELECTOR(pos, rr); \
|
||||
tt = GET_SELECTOR(pos, tt); \
|
||||
bb = GET_SELECTOR(pos, bb);
|
||||
|
||||
#if 0
|
||||
// Unreferenced - removed
|
||||
static int c_gfx_draw_viewobj(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||
// TODO: Re-implement gfx_draw_viewobj
|
||||
#if 0
|
||||
HeapPtr pos = (HeapPtr)(cmdParams[0].val);
|
||||
int is_view;
|
||||
int x, y, priority;
|
||||
int nsLeft, nsRight, nsBottom, nsTop;
|
||||
int brLeft, brRight, brBottom, brTop;
|
||||
|
||||
if (!s) {
|
||||
sciprintf("Not in debug state!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((pos < 4) || (pos > 0xfff0)) {
|
||||
sciprintf("Invalid address.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (((int16)READ_LE_UINT16(s->heap + pos + SCRIPT_OBJECT_MAGIC_OFFSET)) != SCRIPT_OBJECT_MAGIC_NUMBER) {
|
||||
sciprintf("Not an object.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
is_view = (lookup_selector(s, pos, s->_kernel->_selectorMap.x, NULL) == kSelectorVariable) &&
|
||||
(lookup_selector(s, pos, s->_kernel->_selectorMap.brLeft, NULL) == kSelectorVariable) &&
|
||||
(lookup_selector(s, pos, s->_kernel->_selectorMap.signal, NULL) == kSelectorVariable) &&
|
||||
(lookup_selector(s, pos, s->_kernel->_selectorMap.nsTop, NULL) == kSelectorVariable);
|
||||
|
||||
if (!is_view) {
|
||||
sciprintf("Not a dynamic View object.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
x = GET_SELECTOR(pos, x);
|
||||
y = GET_SELECTOR(pos, y);
|
||||
priority = GET_SELECTOR(pos, priority);
|
||||
GETRECT(brLeft, brRight, brBottom, brTop);
|
||||
GETRECT(nsLeft, nsRight, nsBottom, nsTop);
|
||||
gfxop_set_clip_zone(s->gfx_state, gfx_rect_fullscreen);
|
||||
|
||||
brTop += 10;
|
||||
brBottom += 10;
|
||||
nsTop += 10;
|
||||
nsBottom += 10;
|
||||
|
||||
gfxop_fill_box(s->gfx_state, gfx_rect(nsLeft, nsTop, nsRight - nsLeft + 1, nsBottom - nsTop + 1), s->ega_colors[2]);
|
||||
gfxop_fill_box(s->gfx_state, gfx_rect(brLeft, brTop, brRight - brLeft + 1, brBottom - brTop + 1), s->ega_colors[1]);
|
||||
gfxop_fill_box(s->gfx_state, gfx_rect(x - 1, y - 1, 3, 3), s->ega_colors[0]);
|
||||
gfxop_fill_box(s->gfx_state, gfx_rect(x - 1, y, 3, 1), s->ega_colors[priority]);
|
||||
gfxop_fill_box(s->gfx_state, gfx_rect(x, y - 1, 1, 3), s->ega_colors[priority]);
|
||||
gfxop_update(s->gfx_state);
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
static int c_disasm_addr(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||
reg_t vpc = cmdParams[0].reg;
|
||||
int op_count = 1;
|
||||
@ -811,92 +645,6 @@ static int c_send(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#define GETRECT(ll, rr, tt, bb) \
|
||||
ll = GET_SELECTOR(pos, ll); \
|
||||
rr = GET_SELECTOR(pos, rr); \
|
||||
tt = GET_SELECTOR(pos, tt); \
|
||||
bb = GET_SELECTOR(pos, bb);
|
||||
|
||||
#if 0
|
||||
#ifdef __GNUC__
|
||||
#warning "Re-implement viewobjinfo"
|
||||
#endif
|
||||
static void viewobjinfo(EngineState *s, HeapPtr pos) {
|
||||
char *signals[16] = {
|
||||
"stop_update",
|
||||
"updated",
|
||||
"no_update",
|
||||
"hidden",
|
||||
"fixed_priority",
|
||||
"always_update",
|
||||
"force_update",
|
||||
"remove",
|
||||
"frozen",
|
||||
"is_extra",
|
||||
"hit_obstacle",
|
||||
"doesnt_turn",
|
||||
"no_cycler",
|
||||
"ignore_horizon",
|
||||
"ignore_actor",
|
||||
"dispose!"
|
||||
};
|
||||
|
||||
int x, y, z, priority;
|
||||
int cel, loop, view, signal;
|
||||
int nsLeft, nsRight, nsBottom, nsTop;
|
||||
int lsLeft, lsRight, lsBottom, lsTop;
|
||||
int brLeft, brRight, brBottom, brTop;
|
||||
int i;
|
||||
int have_rects = 0;
|
||||
Common::Rect nsrect, nsrect_clipped, brrect;
|
||||
|
||||
if (lookup_selector(s, pos, s->_kernel->_selectorMap.nsBottom, NULL) == kSelectorVariable) {
|
||||
GETRECT(nsLeft, nsRight, nsBottom, nsTop);
|
||||
GETRECT(lsLeft, lsRight, lsBottom, lsTop);
|
||||
GETRECT(brLeft, brRight, brBottom, brTop);
|
||||
have_rects = 1;
|
||||
}
|
||||
|
||||
GETRECT(view, loop, signal, cel);
|
||||
|
||||
sciprintf("\n-- View information:\ncel %d/%d/%d at ", view, loop, cel);
|
||||
|
||||
x = GET_SELECTOR(pos, x);
|
||||
y = GET_SELECTOR(pos, y);
|
||||
priority = GET_SELECTOR(pos, priority);
|
||||
if (s->_kernel->_selectorMap.z > 0) {
|
||||
z = GET_SELECTOR(pos, z);
|
||||
sciprintf("(%d,%d,%d)\n", x, y, z);
|
||||
} else
|
||||
sciprintf("(%d,%d)\n", x, y);
|
||||
|
||||
if (priority == -1)
|
||||
sciprintf("No priority.\n\n");
|
||||
else
|
||||
sciprintf("Priority = %d (band starts at %d)\n\n", priority, PRIORITY_BAND_FIRST(priority));
|
||||
|
||||
if (have_rects) {
|
||||
sciprintf("nsRect: [%d..%d]x[%d..%d]\n", nsLeft, nsRight, nsTop, nsBottom);
|
||||
sciprintf("lsRect: [%d..%d]x[%d..%d]\n", lsLeft, lsRight, lsTop, lsBottom);
|
||||
sciprintf("brRect: [%d..%d]x[%d..%d]\n", brLeft, brRight, brTop, brBottom);
|
||||
}
|
||||
|
||||
nsrect = get_nsrect(s, pos, 0);
|
||||
nsrect_clipped = get_nsrect(s, pos, 1);
|
||||
brrect = set_base(s, pos);
|
||||
sciprintf("new nsRect: [%d..%d]x[%d..%d]\n", nsrect.x, nsrect.xend, nsrect.y, nsrect.yend);
|
||||
sciprintf("new clipped nsRect: [%d..%d]x[%d..%d]\n", nsrect_clipped.x, nsrect_clipped.xend, nsrect_clipped.y, nsrect_clipped.yend);
|
||||
sciprintf("new brRect: [%d..%d]x[%d..%d]\n", brrect.x, brrect.xend, brrect.y, brrect.yend);
|
||||
sciprintf("\n signals = %04x:\n", signal);
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
if (signal & (1 << i))
|
||||
sciprintf(" %04x: %s\n", 1 << i, signals[i]);
|
||||
}
|
||||
#endif
|
||||
#undef GETRECT
|
||||
|
||||
// Breakpoint commands
|
||||
|
||||
int c_se(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||
@ -959,13 +707,7 @@ void script_debug(EngineState *s, reg_t *pc, StackPtr *sp, StackPtr *pp, reg_t *
|
||||
break;
|
||||
}
|
||||
|
||||
case _DEBUG_SEEK_SO:
|
||||
if ((*pc != s_debug_seek_reg) || (int)s->_executionStack.size()-1 != s_debug_seek_level)
|
||||
return;
|
||||
break;
|
||||
|
||||
case _DEBUG_SEEK_GLOBAL:
|
||||
|
||||
if (op < op_sag)
|
||||
return;
|
||||
if ((op & 0x3) > 1)
|
||||
@ -1004,10 +746,6 @@ void script_debug(EngineState *s, reg_t *pc, StackPtr *sp, StackPtr *pp, reg_t *
|
||||
|
||||
con_hook_command(c_step, "s", "i*", "Executes one or several operations\n\nEXAMPLES\n\n"
|
||||
" s 4\n\n Execute 4 commands\n\n s\n\n Execute next command");
|
||||
#if 0
|
||||
// TODO Re-implement con:so
|
||||
con_hook_command(c_stepover, "so", "", "Executes one operation skipping over sends");
|
||||
#endif
|
||||
con_hook_command(c_disasm_addr, "disasm-addr", "!as*", "Disassembles one or more commands\n\n"
|
||||
"USAGE\n\n disasm-addr [startaddr] <options>\n\n"
|
||||
" Valid options are:\n"
|
||||
@ -1023,50 +761,15 @@ void script_debug(EngineState *s, reg_t *pc, StackPtr *sp, StackPtr *pp, reg_t *
|
||||
con_hook_command(c_go, "go", "", "Executes the script.\n");
|
||||
con_hook_command(c_set_parse_nodes, "set_parse_nodes", "s*", "Sets the contents of all parse nodes.\n"
|
||||
" Input token must be separated by\n blanks.");
|
||||
|
||||
#ifdef GFXW_DEBUG_WIDGETS
|
||||
con_hook_command(c_gfx_print_widget, "gfx_print_widget", "i*", "If called with no parameters, it\n shows which widgets are active.\n"
|
||||
" With parameters, it lists the\n widget corresponding to the\n numerical index specified (for\n each parameter).");
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
// TODO: Re-enable con:draw_viewobj
|
||||
con_hook_command(c_gfx_draw_viewobj, "draw_viewobj", "i", "Draws the nsRect and brRect of a\n dynview object.\n\n nsRect is green, brRect\n"
|
||||
" is blue.\n");
|
||||
#endif
|
||||
con_hook_command(c_sg, "sg", "!i",
|
||||
"Steps until the global variable with the\n"
|
||||
"specified index is modified.\n\nSEE ALSO\n\n"
|
||||
" s.1, snk.1, so.1, bpx.1");
|
||||
/*
|
||||
con_hook_int(&script_abort_flag, "script_abort_flag", "Set != 0 to abort execution\n");
|
||||
*/
|
||||
} // If commands were not hooked up
|
||||
}
|
||||
|
||||
if (g_debug_step_running)
|
||||
g_debug_step_running--;
|
||||
|
||||
while (g_debugstate_valid) {
|
||||
int skipfirst = 0;
|
||||
const char *commandstring;
|
||||
|
||||
// Suspend music playing
|
||||
s->_sound.sfx_suspend(true);
|
||||
|
||||
commandstring = _debug_get_input();
|
||||
|
||||
// Check if a specific destination has been given
|
||||
if (commandstring && (commandstring[0] == '.' || commandstring[0] == ':'))
|
||||
skipfirst = 1;
|
||||
|
||||
//if (commandstring && commandstring[0] != ':')
|
||||
// con_parse(s, commandstring + skipfirst);
|
||||
sciprintf("\n");
|
||||
|
||||
// Resume music playing
|
||||
s->_sound.sfx_suspend(false);
|
||||
}
|
||||
}
|
||||
|
||||
} // End of namespace Sci
|
||||
|
@ -46,7 +46,7 @@ reg_t NULL_REG = {0, 0};
|
||||
#undef STRICT_READ // Disallows reading from out-of-bounds parameters and locals
|
||||
|
||||
|
||||
int script_abort_flag = 0; // Set to 1 to abort execution // FIXME: Avoid non-const global vars
|
||||
int script_abort_flag = 0; // Set to 1 to abort execution. Set to 2 to force a replay afterwards // FIXME: Avoid non-const global vars
|
||||
int script_step_counter = 0; // Counts the number of steps executed // FIXME: Avoid non-const global vars
|
||||
int script_gc_interval = GC_INTERVAL; // Number of steps in between gcs // FIXME: Avoid non-const global vars
|
||||
|
||||
@ -1978,7 +1978,7 @@ static EngineState *_game_run(EngineState *s, int restoring) {
|
||||
s = successor;
|
||||
g_EngineState = s;
|
||||
|
||||
if (script_abort_flag == SCRIPT_ABORT_WITH_REPLAY) {
|
||||
if (script_abort_flag == 2) {
|
||||
sciprintf("Restarting with replay()\n");
|
||||
s->_executionStack.clear(); // Restart with replay
|
||||
|
||||
|
@ -272,12 +272,10 @@ struct Breakpoint {
|
||||
Breakpoint *next;
|
||||
};
|
||||
|
||||
#define SCRIPT_ABORT_WITH_REPLAY 1025
|
||||
|
||||
/**
|
||||
* Set this to 1 to abort script execution immediately. Aborting will leave the
|
||||
* debug exec stack intact.
|
||||
* Set it to SCRIPT_ABORT_WITH_REPLAY to force a replay afterwards.
|
||||
* Set it to 2 to force a replay afterwards.
|
||||
*/
|
||||
extern int script_abort_flag;
|
||||
|
||||
|
@ -49,10 +49,8 @@ GfxWidget *debug_widgets[GFXW_DEBUG_WIDGETS];
|
||||
int debug_widget_pos = 0;
|
||||
|
||||
static void _gfxw_debug_add_widget(GfxWidget *widget) {
|
||||
if (debug_widget_pos == GFXW_DEBUG_WIDGETS) {
|
||||
GFXERROR("WIDGET DEBUG: Allocated the maximum number of %d widgets- Aborting!\n", GFXW_DEBUG_WIDGETS);
|
||||
BREAKPOINT();
|
||||
}
|
||||
if (debug_widget_pos == GFXW_DEBUG_WIDGETS)
|
||||
error("WIDGET DEBUG: Allocated the maximum number of %d widgets- Aborting!\n", GFXW_DEBUG_WIDGETS);
|
||||
debug_widgets[debug_widget_pos++] = widget;
|
||||
}
|
||||
|
||||
@ -68,13 +66,11 @@ static void _gfxw_debug_remove_widget(GfxWidget *widget) {
|
||||
}
|
||||
|
||||
if (found > 1) {
|
||||
GFXERROR("While removing widget: Found it %d times!\n", found);
|
||||
BREAKPOINT();
|
||||
error("While removing widget: Found it %d times!\n", found);
|
||||
}
|
||||
|
||||
if (found == 0) {
|
||||
GFXERROR("Attempted removal of unregistered widget!\n");
|
||||
BREAKPOINT();
|
||||
error("Attempted removal of unregistered widget!\n");
|
||||
}
|
||||
}
|
||||
#else // !GFXW_DEBUG_WIDGETS
|
||||
|
@ -51,7 +51,7 @@ struct GfxWidget;
|
||||
|
||||
/* Enable the next line to keep a list of pointers to all widgets, with up to the specified amount
|
||||
** of members (/SLOW/) */
|
||||
/* #define GFXW_DEBUG_WIDGETS 2048 */
|
||||
//#define GFXW_DEBUG_WIDGETS 2048
|
||||
|
||||
/* Our strategy for dirty rectangle management */
|
||||
#define GFXW_DIRTY_STRATEGY GFXOP_DIRTY_FRAMES_CLUSTERS
|
||||
|
Loading…
Reference in New Issue
Block a user