mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
2.8 KiB
130 lines
2.8 KiB
#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
|