Added $regs as a variable for displaying all registers.
diff --git a/debugger/info.c b/debugger/info.c index 8013d99..7a450ad 100644 --- a/debugger/info.c +++ b/debugger/info.c
@@ -86,56 +86,63 @@ case 'b': DEBUG_Printf(DBG_CHN_MESG, "Format specifier '%c' is meaningless in 'print' command\n", format); case 0: - if (default_format != NULL) - { - if (strstr(default_format, "%S") != NULL) - { - char* ptr; - int state = 0; + if (default_format == NULL) break; - /* FIXME: simplistic implementation for default_format being - * foo%Sbar => will print foo, then string then bar - */ - for (ptr = default_format; *ptr; ptr++) - { - if (*ptr == '%') - { - state++; - } - else if (state == 1) - { - if (*ptr == 'S') - { - DBG_ADDR addr; + if (strstr(default_format, "%S") != NULL) + { + char* ptr; + int state = 0; - addr.seg = 0; - addr.off = (long)res; - DEBUG_nchar += DEBUG_PrintStringA(DBG_CHN_MESG, &addr, -1); - } - else - { - /* shouldn't happen */ - DEBUG_Printf(DBG_CHN_MESG, "%%%c", *ptr); - DEBUG_nchar += 2; - } - state = 0; - } - else - { - DEBUG_OutputA(DBG_CHN_MESG, ptr, 1); - DEBUG_nchar++; - } - } - } - else if (strcmp(default_format, "%B") == 0) + /* FIXME: simplistic implementation for default_format being + * foo%Sbar => will print foo, then string then bar + */ + for (ptr = default_format; *ptr; ptr++) { - DEBUG_nchar += DEBUG_Printf(DBG_CHN_MESG, "%s", res ? "true" : "false"); + if (*ptr == '%') + { + state++; + } + else if (state == 1) + { + if (*ptr == 'S') + { + DBG_ADDR addr; + + addr.seg = 0; + addr.off = (long)res; + DEBUG_nchar += DEBUG_PrintStringA(DBG_CHN_MESG, &addr, -1); + } + else + { + /* shouldn't happen */ + DEBUG_Printf(DBG_CHN_MESG, "%%%c", *ptr); + DEBUG_nchar += 2; + } + state = 0; + } + else + { + DEBUG_OutputA(DBG_CHN_MESG, ptr, 1); + DEBUG_nchar++; + } } + } + else if (strcmp(default_format, "%B") == 0) + { + DEBUG_nchar += DEBUG_Printf(DBG_CHN_MESG, "%s", res ? "true" : "false"); + } + else if (strcmp(default_format, "%R") == 0) + { + if (value->cookie == DV_HOST) + DEBUG_InfoRegisters((CONTEXT*)value->addr.off); else - { - DEBUG_nchar += DEBUG_Printf(DBG_CHN_MESG, default_format, res); - } - } + DEBUG_Printf(DBG_CHN_MESG, "NIY: info on register struct in debuggee address space\n"); + DEBUG_nchar = 0; + } + else + { + DEBUG_nchar += DEBUG_Printf(DBG_CHN_MESG, default_format, res); + } break; } } @@ -661,7 +668,7 @@ else if (!strcmp(chnl, "warn")) mask = 4; else if (!strcmp(chnl, "trace")) mask = 8; else { DEBUG_Printf(DBG_CHN_MESG, "Unknown channel %s\n", chnl); return; } - + bAll = !strcmp("all", name); while (addr && DEBUG_READ_MEM(addr, &dol, sizeof(dol))) { @@ -670,7 +677,7 @@ if (DEBUG_READ_MEM((void*)(dol.channels + i), &str, sizeof(str)) && DEBUG_READ_MEM(str, buffer, sizeof(buffer)) && (!strcmp(buffer + 1, name) || bAll)) - { + { if (turn_on) buffer[0] |= mask; else buffer[0] &= ~mask; if (DEBUG_WRITE_MEM(str, buffer, 1)) done++; } @@ -680,4 +687,3 @@ if (!done) DEBUG_Printf(DBG_CHN_MESG, "Unable to find debug channel %s\n", name); else DEBUG_Printf(DBG_CHN_TRACE, "Changed %d channel instances\n", done); } -