|
|
#include "common.hpp"
#ifndef NO_LTRACE
int __CLTraceScope::s_depth = 0;
static const int g_LTRACEBUFLEN = 2048; static TCHAR g_buf[g_LTRACEBUFLEN]; static TCHAR g_buf2[g_LTRACEBUFLEN];
void __trace(LPCTSTR format, ...) { va_list args; va_start(args, format); #ifdef WIN95
{ char *psz = NULL; char szDfs[1024]={0}; strcpy(szDfs,Format); // make a local copy of format string
while (psz = strstr(szDfs,"%p")) // find each %p
*(psz+1) = 'x'; // replace each %p with %x
_vstprintf(g_buf2, szDfs, args); // use the local format string
} #else
{ _vstprintf(g_buf2, format, args); } #endif
va_end(args); OutputDebugString((LPCTSTR)g_buf2); }
__CLTraceScope::__CLTraceScope(LPCTSTR scope, LPCTSTR file, int line) : m_scope(NULL), m_file(file), m_line(line), m_depth(s_depth++) { __trace(_T("{LTF}\t%s{ %s\n"), spacing(), scope); }
__CLTraceScope::__CLTraceScope(LPCTSTR file, int line) : m_scope(NULL), m_file(file), m_line(line), m_depth(s_depth++) { }
__CLTraceScope::~__CLTraceScope() { s_depth--; __trace(_T("{LTF}\t%s}\n"), spacing()); }
void __CLTraceScope::ltrace(LPCTSTR format, ...) { va_list args; va_start(args, format); #ifdef WIN95
{ char *psz = NULL; char szDfs[1024]={0}; strcpy(szDfs,format); // make a local copy of format string
while (psz = strstr(szDfs,"%p")) // find each %p
*(psz+1) = 'x'; // replace each %p with %x
_vstprintf(g_buf, szDfs, args); // use the local format string
} #else
{ _vstprintf(g_buf, format, args); } #endif
va_end(args); __trace(_T("{LTF}\t%s|- %s\n"), spacing(), g_buf); }
void __CLTraceScope::scope(LPCTSTR format, ...) { va_list args; va_start(args, format); #ifdef WIN95
{ char *psz = NULL; char szDfs[1024]={0}; strcpy(szDfs,format); // make a local copy of format string
while (psz = strstr(szDfs,"%p")) // find each %p
*(psz+1) = 'x'; // replace each %p with %x
_vstprintf(g_buf, szDfs, args); // use the local format string
} #else
{ _vstprintf(g_buf, format, args); } #endif
va_end(args); __trace(_T("{LTF}\t%s{ %s\n"), spacing(), g_buf); }
LPCTSTR __CLTraceScope::spacing() { const int SPACINGCHAR = _T(' '); const int SPACERSPERDEPTH = 3; const int DEPTHCHAR = _T('|'); const int MINSPACING = 1; const int MAXSPACING = 128; static TCHAR space[MAXSPACING + 1], backup[MAXSPACING + 1]; static bool sinit = false; if (!sinit) { for (int i = 0; i < MAXSPACING;) { for (int s = 0; s < SPACERSPERDEPTH && i < MAXSPACING; s++) space[i++] = SPACINGCHAR; if (i >= MAXSPACING) break; space[i++] = DEPTHCHAR; } space[MAXSPACING] = 0; strcpy(backup, space); sinit = true; } else strcpy(space, backup); // todo: this can be greatly optimized :)
int zat = (MINSPACING + m_depth) * (SPACERSPERDEPTH + 1) - 1; if (zat > MAXSPACING) zat = MAXSPACING; space[zat] = 0; return space; }
#endif
|