diff --git a/Makefile b/Makefile index 47117f2..a5f0b3b 100644 --- a/Makefile +++ b/Makefile @@ -2080,6 +2080,7 @@ Q3CGOBJ_ = \ $(B)/$(BASEGAME)/cgame/cg_screenfx.o \ $(B)/$(BASEGAME)/cgame/cg_scoreboard.o \ $(B)/$(BASEGAME)/cgame/cg_servercmds.o \ + $(B)/$(BASEGAME)/cgame/cg_logger.o \ $(B)/$(BASEGAME)/cgame/cg_snapshot.o \ $(B)/$(BASEGAME)/cgame/cg_view.o \ $(B)/$(BASEGAME)/cgame/cg_weapons.o \ @@ -2340,6 +2341,7 @@ Q3UIOBJ_ = \ $(B)/$(BASEGAME)/ui/ui_demo2.o \ $(B)/$(BASEGAME)/ui/ui_gameinfo.o \ $(B)/$(BASEGAME)/ui/ui_ingame.o \ + $(B)/$(BASEGAME)/ui/ui_logger.o \ $(B)/$(BASEGAME)/ui/ui_menu.o \ $(B)/$(BASEGAME)/ui/ui_mfield.o \ $(B)/$(BASEGAME)/ui/ui_mods.o \ diff --git a/code/cgame/cg_local.h b/code/cgame/cg_local.h index a71b8ad..ffa0693 100644 --- a/code/cgame/cg_local.h +++ b/code/cgame/cg_local.h @@ -1627,6 +1627,9 @@ extern vmCvar_t rpg_forceFieldSet; // grp cvars extern vmCvar_t grp_berp; +// deuging +extern vmCvar_t cg_logLevel; + // lua #ifdef CG_LUA extern vmCvar_t cg_debugLua; diff --git a/code/cgame/cg_logger.c b/code/cgame/cg_logger.c new file mode 100644 index 0000000..5465f52 --- /dev/null +++ b/code/cgame/cg_logger.c @@ -0,0 +1,79 @@ +#include "cg_logger.h" + +void QDECL CG_Logger (int level, char* fmt, ...) { + va_list argptr; + char text[1024]; + + if(level > cg_logLevel.integer) { + return; + } + + va_start (argptr, fmt); + vsnprintf (text, sizeof(text), fmt, argptr); + va_end (argptr); + + switch (level) + { + case LL_ERROR: + CG_Printf(S_COLOR_RED "[cgame][error] - %s", text); + break; + case LL_WARN: + CG_Printf(S_COLOR_YELLOW "[cgame][warn ] - %s", text); + break; + case LL_INFO: + CG_Printf("[cgame][info ] - %s", text); + break; + case LL_DEBUG: + CG_Printf("[cgame][debug] - %s", text); + break; + case LL_TRACE: + CG_Printf("[cgame][trace] - %s", text); + break; + case LL_ALWAYS: + default: + CG_Printf("[cgame] - %s", text); + break; + } +} + +void QDECL _CG_LocLogger (const char* file, int line, int level, char* fmt, ...) { + va_list argptr; + char text[1024]; + + if(level > cg_logLevel.integer) { + return; + } + + va_start (argptr, fmt); + vsnprintf (text, sizeof(text), fmt, argptr); + va_end (argptr); + + switch (level) + { + case LL_ERROR: + CG_Printf(S_COLOR_RED "[cgame][error][%s:%d] - ", file, line); + CG_Printf(S_COLOR_RED "%s", text); + break; + case LL_WARN: + CG_Printf(S_COLOR_YELLOW "[cgame][warn ][%s:%d] - ", file, line); + CG_Printf(S_COLOR_YELLOW "%s", text); + break; + case LL_INFO: + CG_Printf("[cgame][info ][%s:%d] - ", file, line); + CG_Printf("%s", text); + break; + case LL_DEBUG: + CG_Printf("[cgame][debug][%s:%d] - ", file, line); + CG_Printf("%s", text); + break; + case LL_TRACE: + CG_Printf("[cgame][trace][%s:%d] - ", file, line); + CG_Printf("%s", text); + break; + case LL_ALWAYS: + default: + CG_Printf("[cgame] [%s:%d] - ", file, line); + CG_Printf("%s", text); + break; + } +} diff --git a/code/cgame/cg_logger.h b/code/cgame/cg_logger.h new file mode 100644 index 0000000..a045789 --- /dev/null +++ b/code/cgame/cg_logger.h @@ -0,0 +1,19 @@ +#ifndef CG_LOGGER_H_ +#define CG_LOGGER_H_ + +#include "cg_local.h" + +enum { + LL_ALWAYS, + LL_ERROR, + LL_WARN, + LL_INFO, + LL_DEBUG, + LL_TRACE +}; + +#define CG_LocLogger(X,...) _CG_LocLogger(__FILE__, __LINE__, X, __VA_ARGS__) +void QDECL CG_Logger(int level, char* fmt, ...) __attribute__ ((format (printf, 2, 3))); +void QDECL _CG_LocLogger(const char* file, int line, int level, char* fmt, ...) __attribute__ ((format (printf, 4, 5))); + +#endif /* CG_LOGGER_H_ */ diff --git a/code/cgame/cg_main.c b/code/cgame/cg_main.c index 51349e6..64f053a 100644 --- a/code/cgame/cg_main.c +++ b/code/cgame/cg_main.c @@ -190,6 +190,9 @@ vmCvar_t rpg_forceFieldSet; // grp cvars vmCvar_t grp_berp; +// debugging cvars +vmCvar_t cg_logLevel; + // lua #ifdef CG_LUA vmCvar_t cg_debugLua; @@ -322,6 +325,9 @@ static cvarTable_t cvarTable[] = { // grp cvars { &grp_berp, "grp_berp", "0", CVAR_ARCHIVE | CVAR_LATCH }, + // debugging cvars + { &cg_logLevel, "cg_loglevel", "2", CVAR_ARCHIVE }, + // lua #ifdef CG_LUA { &cg_debugLua, "cg_debuglua", "0", CVAR_ARCHIVE | CVAR_LATCH }, diff --git a/code/cgame/cgame.vcxproj b/code/cgame/cgame.vcxproj index 31a720d..c7902f3 100644 --- a/code/cgame/cgame.vcxproj +++ b/code/cgame/cgame.vcxproj @@ -463,6 +463,7 @@ + @@ -478,6 +479,7 @@ + diff --git a/code/ui/ui.vcxproj b/code/ui/ui.vcxproj index ddeba52..31cb3d4 100644 --- a/code/ui/ui.vcxproj +++ b/code/ui/ui.vcxproj @@ -481,6 +481,7 @@ + Disabled WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS @@ -499,6 +500,7 @@ + diff --git a/code/ui/ui.vcxproj.filters b/code/ui/ui.vcxproj.filters index ce846f5..436c074 100644 --- a/code/ui/ui.vcxproj.filters +++ b/code/ui/ui.vcxproj.filters @@ -152,6 +152,9 @@ Source Files + + Source Files + @@ -178,6 +181,9 @@ Header Files + + Header Files + diff --git a/code/ui/ui_local.h b/code/ui/ui_local.h index 70be78e..0566f8e 100644 --- a/code/ui/ui_local.h +++ b/code/ui/ui_local.h @@ -1395,6 +1395,9 @@ extern vmCvar_t sv_securityCode; extern vmCvar_t ui_handleWidescreen; +// debugging +extern vmCvar_t ui_logLevel; + #define GRAPHIC_SQUARE "menu/common/square.tga" #define BUTTON_GRAPHIC_LONGRIGHT "menu/common/bar1.tga" diff --git a/code/ui/ui_logger.c b/code/ui/ui_logger.c new file mode 100644 index 0000000..8acd5eb --- /dev/null +++ b/code/ui/ui_logger.c @@ -0,0 +1,79 @@ +#include "ui_logger.h" + +void QDECL UI_Logger (int level, char* fmt, ...) { + va_list argptr; + char text[1024]; + + if(level > ui_logLevel.integer) { + return; + } + + va_start (argptr, fmt); + vsnprintf (text, sizeof(text), fmt, argptr); + va_end (argptr); + + switch (level) + { + case LL_ERROR: + Com_Printf(S_COLOR_RED "[ui][error] - %s", text); + break; + case LL_WARN: + Com_Printf(S_COLOR_YELLOW "[ui][warn ] - %s", text); + break; + case LL_INFO: + Com_Printf("[ui][info ] - %s", text); + break; + case LL_DEBUG: + Com_Printf("[ui][debug] - %s", text); + break; + case LL_TRACE: + Com_Printf("[ui][trace] - %s", text); + break; + case LL_ALWAYS: + default: + Com_Printf("[ui] - %s", text); + break; + } +} + +void QDECL _UI_LocLogger (const char* file, int line, int level, char* fmt, ...) { + va_list argptr; + char text[1024]; + + if(level > ui_logLevel.integer) { + return; + } + + va_start (argptr, fmt); + vsnprintf (text, sizeof(text), fmt, argptr); + va_end (argptr); + + switch (level) + { + case LL_ERROR: + Com_Printf(S_COLOR_RED "[ui][error][%s:%d] - ", file, line); + Com_Printf(S_COLOR_RED "%s", text); + break; + case LL_WARN: + Com_Printf(S_COLOR_YELLOW "[ui][warn ][%s:%d] - ", file, line); + Com_Printf(S_COLOR_YELLOW "%s", text); + break; + case LL_INFO: + Com_Printf("[ui][info ][%s:%d] - ", file, line); + Com_Printf("%s", text); + break; + case LL_DEBUG: + Com_Printf("[ui][debug][%s:%d] - ", file, line); + Com_Printf("%s", text); + break; + case LL_TRACE: + Com_Printf("[ui][trace][%s:%d] - ", file, line); + Com_Printf("%s", text); + break; + case LL_ALWAYS: + default: + Com_Printf("[ui] [%s:%d] - ", file, line); + Com_Printf("%s", text); + break; + } +} diff --git a/code/ui/ui_logger.h b/code/ui/ui_logger.h new file mode 100644 index 0000000..d77c671 --- /dev/null +++ b/code/ui/ui_logger.h @@ -0,0 +1,19 @@ +#ifndef UI_LOGGER_H_ +#define UI_LOGGER_H_ + +#include "UI_local.h" + +enum { + LL_ALWAYS, + LL_ERROR, + LL_WARN, + LL_INFO, + LL_DEBUG, + LL_TRACE +}; + +#define UI_LocLogger(X,...) _UI_LocLogger(__FILE__, __LINE__, X, __VA_ARGS__) +void QDECL UI_Logger(int level, char* fmt, ...) __attribute__ ((format (printf, 2, 3))); +void QDECL _UI_LocLogger(const char* file, int line, int level, char* fmt, ...) __attribute__ ((format (printf, 4, 5))); + +#endif /* UI_LOGGER_H_ */ diff --git a/code/ui/ui_main.c b/code/ui/ui_main.c index e069cbf..f107553 100644 --- a/code/ui/ui_main.c +++ b/code/ui/ui_main.c @@ -274,6 +274,9 @@ vmCvar_t sv_securityCode; //Widescreen support vmCvar_t ui_handleWidescreen; +//debugging +vmCvar_t ui_logLevel; + static cvarTable_t cvarTable[] = { { &ui_ffa_fraglimit, "ui_ffa_fraglimit", "20", CVAR_ARCHIVE }, { &ui_ffa_timelimit, "ui_ffa_timelimit", "0", CVAR_ARCHIVE }, @@ -469,6 +472,8 @@ static cvarTable_t cvarTable[] = { { &sv_securityCode, "sv_securityCode", "4294967295", CVAR_ARCHIVE | CVAR_USERINFO | CVAR_ROM | CVAR_NORESTART }, { &ui_handleWidescreen, "ui_handleWidescreen", "1", CVAR_ARCHIVE }, + + { &ui_logLevel, "ui_loglevel", "1", CVAR_ARCHIVE }, }; static int32_t cvarTableSize = sizeof(cvarTable) / sizeof(cvarTable[0]);