diff --git a/console_cmds.c b/console_cmds.c index d10c36ebf4..fb68c01b5d 100644 --- a/console_cmds.c +++ b/console_cmds.c @@ -833,13 +833,17 @@ DEF_CONSOLE_CMD(ConInfoCmd) DEF_CONSOLE_CMD(ConDebugLevel) { if (argc == 0) { - IConsoleHelp("Set the default debugging level for the game. Usage: 'debug_level '"); + IConsoleHelp("Get/set the default debugging level for the game. Usage: 'debug_level []'"); IConsoleHelp("Level can be any combination of names, levels. Eg 'net=5 ms=4'. Remember to enclose it in \"'s"); return true; } - if (argc < 2) return false; - SetDebugString(argv[1]); + if (argc > 2) return false; + + if (argc == 1) { + IConsolePrintF(_icolour_def, "Current debug-level: '%s'", GetDebugString()); + } else SetDebugString(argv[1]); + return true; } diff --git a/debug.c b/debug.c index 025a182eaf..2ac39fde46 100644 --- a/debug.c +++ b/debug.c @@ -4,6 +4,7 @@ #include "ttd.h" #include "console.h" #include "debug.h" +#include "string.h" int _debug_ai_level; int _debug_grf_level; @@ -28,6 +29,24 @@ void CDECL debug(const char *s, ...) IConsoleDebug(buf); } +typedef struct DebugLevel { + const char *name; + int *level; +} DebugLevel; + +#define DEBUG_LEVEL(x) { #x, &_debug_##x##_level } + static const DebugLevel debug_level[] = { + DEBUG_LEVEL(ai), + DEBUG_LEVEL(grf), + DEBUG_LEVEL(map), + DEBUG_LEVEL(misc), + DEBUG_LEVEL(ms), + DEBUG_LEVEL(net), + DEBUG_LEVEL(spritecache), + DEBUG_LEVEL(oldloader), + DEBUG_LEVEL(npf) + }; +#undef DEBUG_LEVEL void SetDebugString(const char *s) { @@ -35,25 +54,6 @@ void SetDebugString(const char *s) char *end; const char *t; - typedef struct DebugLevel { - const char* name; - int* level; - } DebugLevel; - - #define DEBUG_LEVEL(x) { #x, &_debug_##x##_level } - static const DebugLevel debug_level[] = { - DEBUG_LEVEL(ai), - DEBUG_LEVEL(grf), - DEBUG_LEVEL(map), - DEBUG_LEVEL(misc), - DEBUG_LEVEL(ms), - DEBUG_LEVEL(net), - DEBUG_LEVEL(spritecache), - DEBUG_LEVEL(oldloader), - DEBUG_LEVEL(npf) - }; - #undef DEBUG_LEVEL - // global debugging level? if (*s >= '0' && *s <= '9') { const DebugLevel *i; @@ -96,3 +96,25 @@ void SetDebugString(const char *s) } } } + +/** Print out the current debug-level + * Just return a string with the values of all the debug categorites + * @return string with debug-levels + */ +const char *GetDebugString(void) +{ + const DebugLevel *i; + static char dbgstr[100]; + char dbgval[20]; + + memset(dbgstr, 0, sizeof(dbgstr)); + i = debug_level; + snprintf(dbgstr, sizeof(dbgstr), "%s=%d", i->name, *i->level); + + for (i++; i != endof(debug_level); i++) { + snprintf(dbgval, sizeof(dbgval), ", %s=%d", i->name, *i->level); + ttd_strlcat(dbgstr, dbgval, sizeof(dbgstr)); + } + + return dbgstr; +} diff --git a/debug.h b/debug.h index b11b3afa82..44237fecaa 100644 --- a/debug.h +++ b/debug.h @@ -20,5 +20,6 @@ void CDECL debug(const char *s, ...); void SetDebugString(const char *s); +const char *GetDebugString(void); #endif