Source code of Windows XP (NT5)
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

#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