// $Id: debug.h,v 1.23 2008/01/07 14:15:48 lynx Exp $ // vim:syntax=lpc:ts=8 /* simplified form of conditional compilation */ #ifdef CONSOLE_CHARSET # if CONSOLE_CHARSET != SYSTEM_CHARSET # define ICONV(TEXT) convert_charset(TEXT, SYSTEM_CHARSET, CONSOLE_CHARSET) # else # define ICONV(TEXT) TEXT # endif #else # define ICONV(TEXT) TEXT #endif #ifdef __LDMUD__ //# define D(text) log_file(DEBUG_LOG, text) # define D(text) debug_message(ICONV(text), 1+4) // stdout + file # define PV(args) debug_message(ICONV(sprintf args), 4) // file only #else # define D(text) debug_message(ICONV(text)) # define PV(args) debug_message(ICONV(sprintf args)) #endif // obsolete..? #define S sprintf // the cool new thang: #define PP(args) D(sprintf args) // the old thang, but it's still being used in JaZ/* and suchlike #define P printf #ifndef DEBUG_FLAGS # ifdef DEBUG # ifndef DEVELOPMENT # define PT(MSG) # define DT(CODE) # else # define PT(MSG) PP(MSG); /* temporary massive debug mode */ # define DT(CODE) CODE # endif # if DEBUG == 1 # define DEBUG_FLAGS 0x03 # else # if DEBUG == 2 # define DEBUG_FLAGS 0x07 # else # if DEBUG == 3 # define DEBUG_FLAGS 0x0f # else # if DEBUG == 4 # define DEBUG_FLAGS 0x1f # else # define DEBUG_FLAGS 0x01 # endif # endif # endif # endif # else # define PT(MSG) # define DT(CODE) # define DEBUG_FLAGS 0x00 /* no debugging */ # endif #endif #if DEBUG_FLAGS & 0x01 # define D0(CODE) CODE # define P0(MSG) PP(MSG); #else # define D0(CODE) # define P0(MSG) #endif #if DEBUG_FLAGS & 0x02 # define D1(CODE) CODE # define P1(MSG) PP(MSG); // just can't go into interface.h # pragma save_types # pragma warn_deprecated #else # define D1(CODE) # define P1(MSG) #endif #if DEBUG_FLAGS & 0x04 # define D2(CODE) CODE # define P2(MSG) PP(MSG); #else # define D2(CODE) # define P2(MSG) #endif #if DEBUG_FLAGS & 0x08 # define D3(CODE) CODE # define P3(MSG) PV(MSG); #else # define D3(CODE) # define P3(MSG) #endif #if DEBUG_FLAGS & 0x10 # define D4(CODE) CODE # define P4(MSG) PV(MSG); #else # define D4(CODE) # define P4(MSG) #endif #if DEBUG > 0 # ifdef STRICT # define ASSERT(NAME,COND,VALUE) { unless (COND) { \ PP(("Assertion %s failed in %O: %O\n", NAME, ME, VALUE)); \ raise_error("Assertion failed (strict mode).\n"); } } # else # define ASSERT(NAME,COND,VALUE) { unless (COND) \ PP(("Assertion %s failed in %O: %O\n", NAME, ME, VALUE)); } # endif #else # define ASSERT(NAME,CONDITION,VALUE) #endif // #define WHERE_AM_I \ // PP(("FILE " __FILE__ " DIR " __DIR__ " PATH0 " __PATH__(0) "\n"));