diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-03-10 00:48:45 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-03-10 00:48:45 +0000 |
| commit | 89eea17ead1ce1e777f7fc87c4869b3547f86867 (patch) | |
| tree | 41e2c7154d25ef8e0ffa052db617081a2f1252cd | |
| parent | 78155fa6d766d4529e8f602cb36457bce55cb17d (diff) | |
| download | zcatch-89eea17ead1ce1e777f7fc87c4869b3547f86867.tar.gz zcatch-89eea17ead1ce1e777f7fc87c4869b3547f86867.zip | |
added option to log to file
| -rw-r--r-- | src/engine/e_config_variables.h | 2 | ||||
| -rw-r--r-- | src/engine/e_engine.c | 12 | ||||
| -rw-r--r-- | src/engine/e_system.c | 91 | ||||
| -rw-r--r-- | src/engine/e_system.h | 19 |
4 files changed, 88 insertions, 36 deletions
diff --git a/src/engine/e_config_variables.h b/src/engine/e_config_variables.h index 66684f86..c5624444 100644 --- a/src/engine/e_config_variables.h +++ b/src/engine/e_config_variables.h @@ -6,6 +6,8 @@ MACRO_CONFIG_STR(player_name, 32, "nameless tee") MACRO_CONFIG_STR(clan_name, 32, "") MACRO_CONFIG_STR(password, 32, "") +MACRO_CONFIG_STR(logfile, 128, "") + MACRO_CONFIG_INT(cl_cpu_throttle, 0, 0, 1) /*MACRO_CONFIG_STR(cl_connect, 32, "")*/ MACRO_CONFIG_INT(cl_editor, 0, 0, 1) diff --git a/src/engine/e_engine.c b/src/engine/e_engine.c index 04094573..0f6fad06 100644 --- a/src/engine/e_engine.c +++ b/src/engine/e_engine.c @@ -37,6 +37,10 @@ int engine_stress(float probability) void engine_init(const char *appname) { + dbg_logger_stdout(); + dbg_logger_debugger(); + + /* */ dbg_msg("engine", "running on %s-%s-%s", CONF_FAMILY_STRING, CONF_PLATFORM_STRING, CONF_ARCH_STRING); #ifdef CONF_ARCH_ENDIAN_LITTLE dbg_msg("engine", "arch is little endian"); @@ -63,12 +67,12 @@ void engine_init(const char *appname) } } - /* init console */ + /* init console and add the console logger */ console_init(); + dbg_logger(console_print); MACRO_REGISTER_COMMAND("dbg_dumpmem", "", con_dbg_dumpmem, 0x0); - /* reset the config */ config_reset(); } @@ -102,6 +106,10 @@ void engine_parse_arguments(int argc, char **argv) console_execute_line(argv[i]); } + /* open logfile if needed */ + if(config.logfile[0]) + dbg_logger_file(config.logfile); + /* set default servers and load from disk*/ mastersrv_default(); mastersrv_load(); diff --git a/src/engine/e_system.c b/src/engine/e_system.c index 044b48a2..72d131cb 100644 --- a/src/engine/e_system.c +++ b/src/engine/e_system.c @@ -51,7 +51,13 @@ IOHANDLE io_stdin() { return (IOHANDLE)stdin; } IOHANDLE io_stdout() { return (IOHANDLE)stdout; } IOHANDLE io_stderr() { return (IOHANDLE)stderr; } -IOHANDLE logfile = 0; +static DBG_LOGGER loggers[16]; +static int num_loggers = 0; + +void dbg_logger(DBG_LOGGER logger) +{ + loggers[num_loggers++] = logger; +} void dbg_assert_imp(const char *filename, int line, int test, const char *msg) { @@ -67,52 +73,65 @@ void dbg_break() *((unsigned*)0) = 0x0; } -int dbg_log_to_file(const char *filename) -{ - logfile = io_open(filename, IOFLAG_WRITE); - if(logfile) - return 1; - return 0; -} - void dbg_msg(const char *sys, const char *fmt, ...) { va_list args; -#if defined(CONF_FAMILY_WINDOWS) char str[1024]; + char *msg; + int i, len; + + str_format(str, sizeof(str), "[%08x][%s]: ", (int)time(0), sys); + len = strlen(str); + msg = (char *)str + len; + va_start(args, fmt); - _vnsprintf(str, sizeof(str), fmt, args); - va_end(args); - OutputDebugString(str); - OutputDebugString("\n"); +#if defined(CONF_FAMILY_WINDOWS) + _vnsprintf(msg, sizeof(str)-len, fmt, args); +#else + vsnprintf(msg, sizeof(str)-len, fmt, args); #endif - - va_start(args, fmt); - printf("[%08x][%s]: ", (int)time(0), sys); - vprintf(fmt, args); va_end(args); - printf("\n"); - fflush(stdout); - - { - char str[2048]; - int len; + + for(i = 0; i < num_loggers; i++) + loggers[i](str); +} - str_format(str, sizeof(str), "[%s]: ", sys); +static void logger_stdout(const char *line) +{ + printf("%s\n", line); +} - va_start(args, fmt); - len = strlen(str); +static void logger_debugger(const char *line) +{ #if defined(CONF_FAMILY_WINDOWS) - _vsnprintf(str+len, sizeof(str)-len, fmt, args); -#else - vsnprintf(str+len, sizeof(str)-len, fmt, args); + OutputDebugString(line); + OutputDebugString("\n"); #endif - va_end(args); +} - console_print(str); - } + +IOHANDLE logfile = 0; +static void logger_file(const char *line) +{ + io_write(logfile, line, strlen(line)); + io_write(logfile, "\n", 1); + io_flush(logfile); } +void dbg_logger_stdout() { dbg_logger(logger_stdout); } +void dbg_logger_debugger() { dbg_logger(logger_debugger); } +void dbg_logger_file(const char *filename) +{ + logfile = io_open(filename, IOFLAG_WRITE); + if(logfile) + dbg_logger(logger_file); + else + dbg_msg("dbg/logger", "failed to open '%s' for logging", filename); + +} + +/* */ + int memory_alloced = 0; struct memheader @@ -278,6 +297,12 @@ int io_close(IOHANDLE io) return 1; } +int io_flush(IOHANDLE io) +{ + fflush((FILE*)io); + return 0; +} + void *thread_create(void (*threadfunc)(void *), void *u) { #if defined(CONF_FAMILY_UNIX) diff --git a/src/engine/e_system.h b/src/engine/e_system.h index d524382b..0f79908d 100644 --- a/src/engine/e_system.h +++ b/src/engine/e_system.h @@ -9,7 +9,6 @@ extern "C" { #endif /* Group: Debug */ - /********** Function: dbg_assert @@ -266,6 +265,18 @@ long int io_length(IOHANDLE io); *****/ int io_close(IOHANDLE io); +/***** + Function: io_flush + Empties all buffers and writes all pending data. + + Parameters: + io - Handle to the file. + + Returns: + Returns 0 on success. +*****/ +int io_flush(IOHANDLE io); + /**** Group: Threads ****/ /***** @@ -529,6 +540,12 @@ void str_format(char *buffer, int buffer_size, const char *format, ...); void str_sanitize_strong(char *str); void str_sanitize(char *str); +typedef void (*DBG_LOGGER)(const char *line); +void dbg_logger(DBG_LOGGER logger); +void dbg_logger_stdout(); +void dbg_logger_debugger(); +void dbg_logger_file(const char *filename); + IOHANDLE io_stdin(); IOHANDLE io_stdout(); IOHANDLE io_stderr(); |