mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-17 21:25:40 +00:00
eb28e8b322
again.. kind of anyway. Still needs work for the extra chunks TTDPatch provides, and which we use too, but not in the same way.. - Also, no longer BE is a problem, reading is BE/LE safe. - Tnx to Bjarni for the BE testing, Tron for the help on the BE, Darkvater for helping out, and Mek for providing me with the correct information regarding TTDPatch savegames
97 lines
1.7 KiB
C
97 lines
1.7 KiB
C
#include "stdafx.h"
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include "ttd.h"
|
|
#include "console.h"
|
|
#include "debug.h"
|
|
|
|
int _debug_ai_level;
|
|
int _debug_grf_level;
|
|
int _debug_map_level;
|
|
int _debug_misc_level;
|
|
int _debug_ms_level;
|
|
int _debug_net_level;
|
|
int _debug_spritecache_level;
|
|
int _debug_oldloader_level;
|
|
|
|
|
|
void CDECL debug(const char *s, ...)
|
|
{
|
|
va_list va;
|
|
char buf[1024];
|
|
|
|
va_start(va, s);
|
|
vsnprintf(buf, lengthof(buf), s, va);
|
|
va_end(va);
|
|
fprintf(stderr, "dbg: %s\n", buf);
|
|
IConsoleDebug(buf);
|
|
}
|
|
|
|
|
|
void SetDebugString(const char *s)
|
|
{
|
|
int v;
|
|
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)
|
|
};
|
|
#undef DEBUG_LEVEL
|
|
|
|
// global debugging level?
|
|
if (*s >= '0' && *s <= '9') {
|
|
const DebugLevel *i;
|
|
|
|
v = strtoul(s, &end, 0);
|
|
s = end;
|
|
|
|
for (i = debug_level; i != endof(debug_level); ++i)
|
|
*i->level = v;
|
|
}
|
|
|
|
// individual levels
|
|
for(;;) {
|
|
const DebugLevel *i;
|
|
int *p;
|
|
|
|
// skip delimiters
|
|
while (*s == ' ' || *s == ',' || *s == '\t') s++;
|
|
if (*s == '\0') break;
|
|
|
|
t = s;
|
|
while (*s >= 'a' && *s <= 'z') s++;
|
|
|
|
// check debugging levels
|
|
p = NULL;
|
|
for (i = debug_level; i != endof(debug_level); ++i)
|
|
if (s == t + strlen(i->name) && strncmp(t, i->name, s - t) == 0) {
|
|
p = i->level;
|
|
break;
|
|
}
|
|
|
|
if (*s == '=') s++;
|
|
v = strtoul(s, &end, 0);
|
|
s = end;
|
|
if (p != NULL)
|
|
*p = v;
|
|
else {
|
|
ShowInfoF("Unknown debug level '%.*s'", s - t, t);
|
|
return;
|
|
}
|
|
}
|
|
}
|