tron@2186: /* $Id$ */ tron@2186: tron@1299: #ifndef DEBUG_H tron@1299: #define DEBUG_H tron@1299: tron@1299: #ifdef NO_DEBUG_MESSAGES tron@1299: #define DEBUG(name, level) tron@1299: #else tron@1299: #define DEBUG(name, level) if (level == 0 || _debug_ ## name ## _level >= level) debug tron@1299: tron@1299: extern int _debug_ai_level; tron@2210: extern int _debug_driver_level; tron@1299: extern int _debug_grf_level; tron@1299: extern int _debug_map_level; tron@1299: extern int _debug_misc_level; tron@1299: extern int _debug_ms_level; tron@1299: extern int _debug_net_level; tron@1299: extern int _debug_spritecache_level; truelight@1322: extern int _debug_oldloader_level; ludde@2125: extern int _debug_ntp_level; matthijs@1678: extern int _debug_npf_level; KUDr@3900: extern int _debug_yapf_level; tron@1299: #endif tron@1299: tron@1299: void CDECL debug(const char *s, ...); tron@1299: tron@1299: void SetDebugString(const char *s); Darkvater@1847: const char *GetDebugString(void); tron@1299: glx@3851: /* MSVCRT of course has to have a different syntax for long long *sigh* */ glx@3851: #if defined(_MSC_VER) || defined(__MINGW32__) Darkvater@3341: # define OTTD_PRINTF64 "I64" Darkvater@3341: #else Darkvater@3341: # define OTTD_PRINTF64 "ll" Darkvater@3341: #endif Darkvater@3341: Darkvater@3341: // Used for profiling Darkvater@3341: #define TIC() {\ Darkvater@3341: extern uint64 _rdtsc(void);\ Darkvater@3341: uint64 _xxx_ = _rdtsc();\ Darkvater@3341: static uint64 __sum__ = 0;\ Darkvater@3341: static uint32 __i__ = 0; Darkvater@3341: Darkvater@3341: #define TOC(str, count)\ Darkvater@3341: __sum__ += _rdtsc() - _xxx_;\ Darkvater@3341: if (++__i__ == count) {\ Darkvater@3341: printf("[%s]: %" OTTD_PRINTF64 "u [avg: %.1f]\n", str, __sum__, __sum__/(double)__i__);\ Darkvater@3341: __i__ = 0;\ Darkvater@3341: __sum__ = 0;\ Darkvater@3341: }\ Darkvater@3341: } Darkvater@3341: Darkvater@2436: #endif /* DEBUG_H */