/*******************************************************************/
/*	      Copyright(c)  1993 Microsoft Corporation		   */
/*******************************************************************/

//***
//
// Filename:	ipxcpdbg.c
//
// Description: Debug Stuff
//
// Author:	Stefan Solomon (stefans)    October 27, 1995.
//
// Revision History:
//
//***

#include "precomp.h"
#pragma  hdrstop

//*** TRACE ID FOR RIP ***

DWORD	    IpxCpTraceID;



DWORD	DbgLevel = DEFAULT_DEBUG;
HANDLE	DbgLogFileHandle = INVALID_HANDLE_VALUE;

//
//  Debug switch which directs debug output to console or file
//
//  values:
//	     1 - Console Debug
//	     > 1 - log file: ipxcpdbg.log in the root directory
//	     2 - resets the log file for each new connection

DWORD	DebugLog;

#if DBG

VOID
SsDbgInitialize(VOID)
{
    if (DebugLog == 1) {
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        COORD coord;
        (VOID)AllocConsole( );
        (VOID)GetConsoleScreenBufferInfo(
                GetStdHandle(STD_OUTPUT_HANDLE),
                &csbi
                );
        coord.X = (SHORT)(csbi.srWindow.Right - csbi.srWindow.Left + 1);
        coord.Y = (SHORT)((csbi.srWindow.Bottom - csbi.srWindow.Top + 1) * 20);
        (VOID)SetConsoleScreenBufferSize(
                GetStdHandle(STD_OUTPUT_HANDLE),
                coord
                );
    }

    if(DebugLog > 1) {

	DbgLogFileHandle = CreateFile("\\ipxcpdbg.log",
					 GENERIC_READ | GENERIC_WRITE,
					 FILE_SHARE_READ,
					 NULL,
					 CREATE_ALWAYS,
					 0,
					 NULL);
    }
}

#endif

#if DBG

VOID
SsResetDbgLogFile(VOID)
{
    if(DebugLog == 2) {

	// reset the debug log file at the beginning for each new connection
	if(DbgLogFileHandle != INVALID_HANDLE_VALUE) {

	    SetFilePointer(DbgLogFileHandle, 0, NULL, FILE_BEGIN);
	}
    }
}

#endif

#if DBG

VOID
SsAssert(
    IN PVOID FailedAssertion,
    IN PVOID FileName,
    IN ULONG LineNumber
    )
{
    SS_PRINT(("\nAssertion failed: %s\n  at line %ld of %s\n",
		FailedAssertion, LineNumber, FileName));

    DbgUserBreakPoint( );

} // SsAssert

#endif

#if DBG

VOID
SsPrintf (
    char *Format,
    ...
    )

{
    va_list arglist;
    char OutputBuffer[1024];
    ULONG length;

    va_start( arglist, Format );

    vsprintf( OutputBuffer, Format, arglist );

    va_end( arglist );

    length = strlen( OutputBuffer );

    WriteFile( GetStdHandle(STD_OUTPUT_HANDLE), (LPVOID )OutputBuffer, length, &length, NULL );

    if(DbgLogFileHandle != INVALID_HANDLE_VALUE) {

	WriteFile(DbgLogFileHandle, (LPVOID )OutputBuffer, length, &length, NULL );
    }

} // SsPrintf




#endif

VOID
StartTracing(VOID)
{
    IpxCpTraceID = TraceRegister("IPXCP");
}

VOID
TraceIpx(ULONG	ComponentID,
      char	*Format,
      ...)
{
    va_list	arglist;

    va_start(arglist, Format);

    TraceVprintfEx(IpxCpTraceID,
		   ComponentID | TRACE_USE_MASK,
		   Format,
		   arglist);

    va_end(arglist);
}

VOID
StopTracing(VOID)
{
    TraceDeregister(IpxCpTraceID);
}