153 lines
3.1 KiB
C
153 lines
3.1 KiB
C
/*** debug.c - Debug functions
|
|
*
|
|
* This module contains all the debug functions.
|
|
*
|
|
* Copyright (c) 1996,1997 Microsoft Corporation
|
|
* Author: Michael Tsang (MikeTs)
|
|
* Created 09/07/96
|
|
*
|
|
* MODIFICATION HISTORY
|
|
*/
|
|
|
|
#include "pch.h"
|
|
#include <stdarg.h> //for va_*
|
|
|
|
#ifdef TRACING
|
|
|
|
#define TRACEFILE_NAME "tracelog.txt"
|
|
|
|
FILE *gpfileTrace = NULL;
|
|
PSZ gpszTraceFile = NULL;
|
|
int giTraceLevel = 0;
|
|
int giIndent = 0;
|
|
|
|
/***LP OpenTrace - Initialize tracing
|
|
*
|
|
* This function opens the device that the trace output will go to.
|
|
* It will first try the caller's filename, or else the default filenmae.
|
|
*
|
|
* ENTRY
|
|
* pszTraceOut -> output device name
|
|
*
|
|
* EXIT
|
|
* None
|
|
*/
|
|
|
|
VOID LOCAL OpenTrace(char *pszTraceOut)
|
|
{
|
|
if ((gpfileTrace == NULL) && (giTraceLevel > 0))
|
|
{
|
|
if ((pszTraceOut == NULL) ||
|
|
((gpfileTrace = fopen(pszTraceOut, "w")) == NULL))
|
|
{
|
|
gpfileTrace = fopen(TRACEFILE_NAME, "w");
|
|
}
|
|
}
|
|
} //OpenTrace
|
|
|
|
/***LP CloseTrace - Finish tracing
|
|
*
|
|
* This function close the device that the trace output will go to.
|
|
*
|
|
* ENTRY
|
|
* None
|
|
*
|
|
* EXIT
|
|
* None
|
|
*/
|
|
|
|
VOID LOCAL CloseTrace(VOID)
|
|
{
|
|
if (gpfileTrace != NULL)
|
|
{
|
|
fclose(gpfileTrace);
|
|
gpfileTrace = NULL;
|
|
}
|
|
giTraceLevel = 0;
|
|
} //CloseTrace
|
|
|
|
/***LP EnterProc - Entering a procedure
|
|
*
|
|
* ENTRY
|
|
* n - trace level of this procedure
|
|
* pszFormat -> format string
|
|
* ... - variable arguments according to format string
|
|
*
|
|
* EXIT
|
|
* None
|
|
*/
|
|
|
|
VOID CDECL EnterProc(int n, char *pszFormat, ...)
|
|
{
|
|
int i;
|
|
va_list marker;
|
|
|
|
if (n <= giTraceLevel)
|
|
{
|
|
if (gpfileTrace != NULL)
|
|
{
|
|
fprintf(gpfileTrace, "%s:", MODNAME);
|
|
for (i = 0; i < giIndent; ++i)
|
|
fprintf(gpfileTrace, "| ");
|
|
va_start(marker, pszFormat);
|
|
vfprintf(gpfileTrace, pszFormat, marker);
|
|
fflush(gpfileTrace);
|
|
va_end(marker);
|
|
}
|
|
++giIndent;
|
|
}
|
|
} //EnterProc
|
|
|
|
/***LP ExitProc - Exiting a procedure
|
|
*
|
|
* ENTRY
|
|
* n - trace level of this procedure
|
|
* pszFormat -> format string
|
|
* ... - variable arguments according to format string
|
|
*
|
|
* EXIT
|
|
* None
|
|
*/
|
|
|
|
VOID CDECL ExitProc(int n, char *pszFormat, ...)
|
|
{
|
|
int i;
|
|
va_list marker;
|
|
|
|
if (n <= giTraceLevel)
|
|
{
|
|
--giIndent;
|
|
if (gpfileTrace != NULL)
|
|
{
|
|
fprintf(gpfileTrace, "%s:", MODNAME);
|
|
for (i = 0; i < giIndent; ++i)
|
|
fprintf(gpfileTrace, "| ");
|
|
va_start(marker, pszFormat);
|
|
vfprintf(gpfileTrace, pszFormat, marker);
|
|
fflush(gpfileTrace);
|
|
va_end(marker);
|
|
}
|
|
}
|
|
} //ExitProc
|
|
|
|
#endif //ifdef TRACING
|
|
|
|
/***LP ErrPrintf - Print to stderr
|
|
*
|
|
* ENTRY
|
|
* pszFormat -> format string
|
|
* ... - variable arguments according to format string
|
|
*
|
|
* EXIT
|
|
* None
|
|
*/
|
|
|
|
VOID CDECL ErrPrintf(char *pszFormat, ...)
|
|
{
|
|
va_list marker;
|
|
|
|
va_start(marker, pszFormat);
|
|
vfprintf(stdout, pszFormat, marker);
|
|
va_end(marker);
|
|
} //ErrPrintf
|