53 #define orxDEBUG_KU32_STATIC_FLAG_NONE 0x00000000 55 #define orxDEBUG_KU32_STATIC_FLAG_TIMESTAMP 0x00000001 56 #define orxDEBUG_KU32_STATIC_FLAG_FULL_TIMESTAMP 0x00000002 57 #define orxDEBUG_KU32_STATIC_FLAG_TYPE 0x00000004 58 #define orxDEBUG_KU32_STATIC_FLAG_TAGGED 0x00000008 60 #define orxDEBUG_KU32_STATIC_FLAG_FILE 0x00000010 61 #define orxDEBUG_KU32_STATIC_FLAG_TERMINAL 0x00000020 62 #define orxDEBUG_KU32_STATIC_FLAG_CONSOLE 0x00000040 63 #define orxDEBUG_KU32_STATIC_FLAG_CALLBACK 0x00000080 65 #define orxDEBUG_KU32_STATIC_MASK_DEFAULT 0x000000F5 67 #define orxDEBUG_KU32_STATIC_MASK_DEBUG 0x000000BD 69 #define orxDEBUG_KU32_STATIC_MASK_USER_ALL 0x0FFFFFFF 74 #define orxDEBUG_KZ_DEFAULT_DEBUG_FILE "orx-debug.log" 75 #define orxDEBUG_KZ_DEFAULT_LOG_FILE "orx.log" 76 #define orxDEBUG_KZ_DEFAULT_LOG_SUFFIX ".log" 77 #define orxDEBUG_KZ_DEFAULT_DEBUG_SUFFIX "-debug.log" 81 typedef enum __orxDEBUG_LEVEL_t
128 #if defined(__orxGCC__) || defined(__orxLLVM__) 130 #define orxLOG(STRING, ...) \ 133 _orxDebug_Log(orxDEBUG_LEVEL_LOG, (const orxSTRING)__FUNCTION__, __FILE__, __LINE__, STRING, ##__VA_ARGS__); \ 136 #define orxLOG_TERMINAL(STRING, ...) \ 139 orxU32 u32DebugFlags; \ 140 u32DebugFlags = _orxDebug_GetFlags(); \ 141 _orxDebug_SetFlags(orxDEBUG_KU32_STATIC_FLAG_TERMINAL, \ 142 orxDEBUG_KU32_STATIC_FLAG_FILE \ 143 |orxDEBUG_KU32_STATIC_FLAG_CONSOLE); \ 144 _orxDebug_Log(orxDEBUG_LEVEL_LOG, (const orxSTRING)__FUNCTION__, __FILE__, __LINE__, STRING, ##__VA_ARGS__); \ 145 _orxDebug_SetFlags(u32DebugFlags, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 148 #define orxLOG_FILE(STRING, ...) \ 151 orxU32 u32DebugFlags; \ 152 u32DebugFlags = _orxDebug_GetFlags(); \ 153 _orxDebug_SetFlags(orxDEBUG_KU32_STATIC_FLAG_FILE, \ 154 orxDEBUG_KU32_STATIC_FLAG_CONSOLE \ 155 |orxDEBUG_KU32_STATIC_FLAG_TERMINAL); \ 156 _orxDebug_Log(orxDEBUG_LEVEL_LOG, (const orxSTRING)__FUNCTION__, __FILE__, __LINE__, STRING, ##__VA_ARGS__); \ 157 _orxDebug_SetFlags(u32DebugFlags, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 160 #define orxLOG_CONSOLE(STRING, ...) \ 163 orxU32 u32DebugFlags; \ 164 u32DebugFlags = _orxDebug_GetFlags(); \ 165 _orxDebug_SetFlags(orxDEBUG_KU32_STATIC_FLAG_CONSOLE, \ 166 orxDEBUG_KU32_STATIC_FLAG_FILE \ 167 orxDEBUG_KU32_STATIC_FLAG_TERMINAL); \ 168 _orxDebug_Log(orxDEBUG_LEVEL_LOG, (const orxSTRING)__FUNCTION__, __FILE__, __LINE__, STRING, ##__VA_ARGS__); \ 169 _orxDebug_SetFlags(u32DebugFlags, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 175 #define orxLOG(STRING, ...) \ 178 _orxDebug_Log(orxDEBUG_LEVEL_LOG, (const orxSTRING)__FUNCTION__, __FILE__, __LINE__, STRING, __VA_ARGS__); \ 181 #define orxLOG_TERMINAL(STRING, ...) \ 184 orxU32 u32DebugFlags; \ 185 u32DebugFlags = _orxDebug_GetFlags(); \ 186 _orxDebug_SetFlags(orxDEBUG_KU32_STATIC_FLAG_TERMINAL, \ 187 orxDEBUG_KU32_STATIC_FLAG_FILE \ 188 |orxDEBUG_KU32_STATIC_FLAG_CONSOLE); \ 189 _orxDebug_Log(orxDEBUG_LEVEL_LOG, (const orxSTRING)__FUNCTION__, __FILE__, __LINE__, STRING, __VA_ARGS__); \ 190 _orxDebug_SetFlags(u32DebugFlags, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 193 #define orxLOG_FILE(STRING, ...) \ 196 orxU32 u32DebugFlags; \ 197 u32DebugFlags = _orxDebug_GetFlags(); \ 198 _orxDebug_SetFlags(orxDEBUG_KU32_STATIC_FLAG_FILE, \ 199 orxDEBUG_KU32_STATIC_FLAG_CONSOLE \ 200 |orxDEBUG_KU32_STATIC_FLAG_TERMINAL); \ 201 _orxDebug_Log(orxDEBUG_LEVEL_LOG, (const orxSTRING)__FUNCTION__, __FILE__, __LINE__, STRING, __VA_ARGS__); \ 202 _orxDebug_SetFlags(u32DebugFlags, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 205 #define orxLOG_CONSOLE(STRING, ...) \ 208 orxU32 u32DebugFlags; \ 209 u32DebugFlags = _orxDebug_GetFlags(); \ 210 _orxDebug_SetFlags(orxDEBUG_KU32_STATIC_FLAG_CONSOLE, \ 211 orxDEBUG_KU32_STATIC_FLAG_FILE \ 212 orxDEBUG_KU32_STATIC_FLAG_TERMINAL); \ 213 _orxDebug_Log(orxDEBUG_LEVEL_LOG, (const orxSTRING)__FUNCTION__, __FILE__, __LINE__, STRING, __VA_ARGS__); \ 214 _orxDebug_SetFlags(u32DebugFlags, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 220 #define orxDEBUG_INIT() \ 223 orxU32 u32DebugFlags; \ 225 u32DebugFlags = _orxDebug_GetFlags(); \ 226 _orxDebug_SetFlags(orxDEBUG_KU32_STATIC_MASK_DEBUG, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 227 if(orxSystem_GetVersionNumeric() < __orxVERSION__) \ 229 orxLOG("The version of the runtime library [" orxANSI_KZ_COLOR_FG_GREEN "%s" \ 230 orxANSI_KZ_COLOR_FG_DEFAULT "] is " orxANSI_KZ_COLOR_FG_RED orxANSI_KZ_COLOR_BLINK_ON "older" \ 231 orxANSI_KZ_COLOR_FG_DEFAULT orxANSI_KZ_COLOR_BLINK_OFF " than the version used when compiling this program [" \ 232 orxANSI_KZ_COLOR_FG_GREEN "%s" orxANSI_KZ_COLOR_FG_DEFAULT "]." \ 233 orxANSI_KZ_COLOR_FG_RED orxANSI_KZ_COLOR_BLINK_ON " Problems will likely ensue!", \ 234 orxSystem_GetVersionFullString(), __orxVERSION_FULL_STRING__); \ 236 else if(orxSystem_GetVersionNumeric() > __orxVERSION__) \ 238 orxLOG("The version of the runtime library [" orxANSI_KZ_COLOR_FG_GREEN "%s" \ 239 orxANSI_KZ_COLOR_FG_DEFAULT "] is " orxANSI_KZ_COLOR_FG_YELLOW orxANSI_KZ_COLOR_BLINK_ON "more recent" \ 240 orxANSI_KZ_COLOR_FG_DEFAULT orxANSI_KZ_COLOR_BLINK_OFF " than the version used when compiling this program [" \ 241 orxANSI_KZ_COLOR_FG_GREEN "%s" orxANSI_KZ_COLOR_FG_DEFAULT "]." \ 242 orxANSI_KZ_COLOR_FG_YELLOW orxANSI_KZ_COLOR_BLINK_ON " Problems may arise due to possible incompatibilities!",\ 243 orxSystem_GetVersionFullString(), __orxVERSION_FULL_STRING__); \ 245 _orxDebug_SetFlags(u32DebugFlags, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 248 #define orxDEBUG_EXIT() _orxDebug_Exit() 253 #if defined(__orxGCC__) || defined(__orxLLVM__) 254 #define orxDEBUG_PRINT(LEVEL, STRING, ...) \ 257 orxU32 u32DebugFlags; \ 258 u32DebugFlags = _orxDebug_GetFlags(); \ 259 _orxDebug_SetFlags(orxDEBUG_KU32_STATIC_MASK_DEBUG, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 260 _orxDebug_Log(LEVEL, (const orxSTRING)__FUNCTION__, __FILE__, __LINE__, STRING, ##__VA_ARGS__); \ 261 _orxDebug_SetFlags(u32DebugFlags, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 265 #define orxDEBUG_PRINT(LEVEL, STRING, ...) \ 268 orxU32 u32DebugFlags; \ 269 u32DebugFlags = _orxDebug_GetFlags(); \ 270 _orxDebug_SetFlags(orxDEBUG_KU32_STATIC_MASK_DEBUG, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 271 _orxDebug_Log(LEVEL, (const orxSTRING)__FUNCTION__, __FILE__, __LINE__, STRING, __VA_ARGS__); \ 272 _orxDebug_SetFlags(u32DebugFlags, orxDEBUG_KU32_STATIC_MASK_USER_ALL); \ 279 #define orxDEBUG_ENABLE_LEVEL(LEVEL, ENABLE)_orxDebug_EnableLevel(LEVEL, ENABLE) 280 #define orxDEBUG_IS_LEVEL_ENABLED(LEVEL) _orxDebug_IsLevelEnabled(LEVEL) 282 #define orxDEBUG_SET_FLAGS(SET, UNSET) _orxDebug_SetFlags(SET, UNSET) 283 #define orxDEBUG_GET_FLAGS() _orxDebug_GetFlags() 285 #define orxDEBUG_SET_LOG_CALLBACK(CALLBACK) _orxDebug_SetLogCallback(CALLBACK) 288 #define orxBREAK() _orxDebug_Break() 291 #define orxDEBUG_SETDEBUGFILE(FILE) _orxDebug_SetDebugFile(FILE) 292 #define orxDEBUG_SETLOGFILE(FILE) _orxDebug_SetLogFile(FILE) 293 #define orxDEBUG_SETBASEFILENAME(FILE) \ 296 orxCHAR zBuffer[512]; \ 297 zBuffer[511] = orxCHAR_NULL; \ 298 strncpy(zBuffer, FILE, 256); \ 299 strncat(zBuffer, orxDEBUG_KZ_DEFAULT_DEBUG_SUFFIX, 255);\ 300 _orxDebug_SetDebugFile(zBuffer); \ 301 strncpy(zBuffer, FILE, 256); \ 302 strncat(zBuffer, orxDEBUG_KZ_DEFAULT_LOG_SUFFIX, 255); \ 303 _orxDebug_SetLogFile(zBuffer); \ 307 #if defined(__orxGCC__) || defined(__orxLLVM__) 308 #define orxASSERT(TEST, ...) \ 311 orxDEBUG_PRINT(orxDEBUG_LEVEL_ASSERT, orxANSI_KZ_COLOR_BG_RED orxANSI_KZ_COLOR_FG_WHITE orxANSI_KZ_COLOR_BLINK_ON "FAILED ASSERTION [" #TEST "]", ##__VA_ARGS__); \ 316 #define orxASSERT(TEST, ...) \ 319 orxDEBUG_PRINT(orxDEBUG_LEVEL_ASSERT, orxANSI_KZ_COLOR_BG_RED orxANSI_KZ_COLOR_FG_WHITE orxANSI_KZ_COLOR_BLINK_ON "FAILED ASSERTION [" #TEST "]", __VA_ARGS__); \ 327 #define orxDEBUG_PRINT(LEVEL, STRING, ...) 329 #define orxDEBUG_ENABLE_LEVEL(LEVEL, ENABLE)_orxDebug_EnableLevel(LEVEL, ENABLE) 330 #define orxDEBUG_IS_LEVEL_ENABLED(LEVEL) _orxDebug_IsLevelEnabled(LEVEL) 332 #define orxDEBUG_SET_FLAGS(SET, UNSET) _orxDebug_SetFlags(SET, UNSET) 333 #define orxDEBUG_GET_FLAGS() _orxDebug_GetFlags() 335 #define orxDEBUG_SET_LOG_CALLBACK(CALLBACK) _orxDebug_SetLogCallback(CALLBACK) 341 #define orxDEBUG_SETDEBUGFILE(FILE) 342 #define orxDEBUG_SETLOGFILE(FILE) _orxDebug_SetLogFile(FILE) 343 #define orxDEBUG_SETBASEFILENAME(FILE) \ 346 orxCHAR zBuffer[512]; \ 347 zBuffer[511] = orxCHAR_NULL; \ 348 strncpy(zBuffer, FILE, 256); \ 349 strncat(zBuffer, orxDEBUG_KZ_DEFAULT_LOG_SUFFIX, 255); \ 350 _orxDebug_SetLogFile(zBuffer); \ 353 #define orxASSERT(TEST, ...) 363 #define orxDEBUG_KS32_BUFFER_OUTPUT_SIZE 2048 365 #define orxDEBUG_KZ_DATE_FORMAT orxANSI_KZ_COLOR_FG_CYAN "[%H:%M:%S]" orxANSI_KZ_COLOR_RESET 366 #define orxDEBUG_KZ_DATE_FULL_FORMAT orxANSI_KZ_COLOR_FG_CYAN "[%Y-%m-%d %H:%M:%S]" orxANSI_KZ_COLOR_RESET 368 #define orxDEBUG_KZ_TYPE_LOG_FORMAT orxANSI_KZ_COLOR_FG_GREEN "[%s]" orxANSI_KZ_COLOR_RESET 369 #define orxDEBUG_KZ_TYPE_WARNING_FORMAT orxANSI_KZ_COLOR_FG_YELLOW "[%s]" orxANSI_KZ_COLOR_RESET 370 #define orxDEBUG_KZ_TYPE_ERROR_FORMAT orxANSI_KZ_COLOR_FG_RED "[%s]" orxANSI_KZ_COLOR_RESET 372 #define orxDEBUG_KZ_FILE_FORMAT orxANSI_KZ_COLOR_FG_MAGENTA "[%s:%s(%u)]" orxANSI_KZ_COLOR_RESET
orxDLLAPI void orxFASTCALL _orxDebug_SetDebugFile(const orxSTRING _zFileName)
orxSTATUS(orxFASTCALL * orxDEBUG_CALLBACK_FUNCTION)(orxDEBUG_LEVEL _eLevel, const orxSTRING _zFunction, const orxSTRING _zFile, orxU32 _u32Line, const orxSTRING _zLog)
orxDLLAPI void orxFASTCALL _orxDebug_EnableLevel(orxDEBUG_LEVEL _eLevel, orxBOOL _bEnable)
orxDLLAPI void orxFASTCALL _orxDebug_SetLogCallback(const orxDEBUG_CALLBACK_FUNCTION _pfnLogCallback)
orxDLLAPI void orxFASTCALL _orxDebug_SetLogFile(const orxSTRING _zFileName)
orxDLLAPI void orxCDECL _orxDebug_Log(orxDEBUG_LEVEL _eLevel, const orxSTRING _zFunction, const orxSTRING _zFile, orxU32 _u32Line, const orxSTRING _zFormat,...)
orxDLLAPI void orxFASTCALL _orxDebug_Break()
orxDLLAPI orxBOOL orxFASTCALL _orxDebug_IsLevelEnabled(orxDEBUG_LEVEL _eLevel)
orxDLLAPI void orxFASTCALL _orxDebug_Exit()
orxDLLAPI orxSTATUS orxFASTCALL _orxDebug_Init()
orxDLLAPI orxU32 orxFASTCALL _orxDebug_GetFlags()
orxDLLAPI void orxFASTCALL _orxDebug_SetFlags(orxU32 _u32Add, orxU32 _u32Remove)