127 lines
2.1 KiB
C++
127 lines
2.1 KiB
C++
/*++
|
|
|
|
Copyright (c) 1998-1999 Microsoft Corporation
|
|
All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
dbgcon.cxx
|
|
|
|
Abstract:
|
|
|
|
Debug Device Text Console
|
|
|
|
Author:
|
|
|
|
Steve Kiraly (SteveKi) 10-Dec-1995
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#include "precomp.hxx"
|
|
#pragma hdrstop
|
|
|
|
#include "dbgcon.hxx"
|
|
|
|
//
|
|
// Construct the console device.
|
|
//
|
|
TDebugDeviceConsole::
|
|
TDebugDeviceConsole(
|
|
IN LPCTSTR pszConfiguration,
|
|
IN EDebugType eDebugType
|
|
) : TDebugDevice( pszConfiguration, eDebugType ),
|
|
_bValid( FALSE ),
|
|
_hOutputHandle( INVALID_HANDLE_VALUE ),
|
|
_eCharType( kAnsi )
|
|
{
|
|
//
|
|
// Get the current character type.
|
|
//
|
|
_eCharType = eGetCharType();
|
|
|
|
//
|
|
// If console allocated.
|
|
//
|
|
_bValid = AllocConsole();
|
|
|
|
//
|
|
// If valid console created.
|
|
//
|
|
_hOutputHandle = GetStdHandle( STD_OUTPUT_HANDLE );
|
|
}
|
|
|
|
//
|
|
// Release the constructed console.
|
|
//
|
|
TDebugDeviceConsole::
|
|
~TDebugDeviceConsole(
|
|
)
|
|
{
|
|
//
|
|
// If console was alocated.
|
|
//
|
|
if( _hOutputHandle )
|
|
{
|
|
FreeConsole();
|
|
}
|
|
}
|
|
|
|
//
|
|
// Indicates object validity.
|
|
//
|
|
BOOL
|
|
TDebugDeviceConsole::
|
|
bValid(
|
|
VOID
|
|
)
|
|
{
|
|
return _hOutputHandle != NULL;
|
|
}
|
|
|
|
//
|
|
// Output to the specified device.
|
|
//
|
|
BOOL
|
|
TDebugDeviceConsole::
|
|
bOutput (
|
|
IN UINT uSize,
|
|
IN LPBYTE pBuffer
|
|
)
|
|
{
|
|
BOOL bStatus = FALSE;
|
|
|
|
//
|
|
// Only if console was created.
|
|
//
|
|
if( bValid() )
|
|
{
|
|
//
|
|
// Adjust passed in byte cound to a character count.
|
|
//
|
|
if( _eCharType == kUnicode )
|
|
{
|
|
uSize = uSize / sizeof( WCHAR );
|
|
}
|
|
|
|
//
|
|
// Write the specified bytes to the console.
|
|
//
|
|
DWORD cbWritten;
|
|
bStatus = WriteConsole( _hOutputHandle,
|
|
pBuffer,
|
|
uSize,
|
|
&cbWritten,
|
|
NULL );
|
|
//
|
|
// Success only of the specified bytes were written.
|
|
//
|
|
if( !bStatus || cbWritten != uSize )
|
|
{
|
|
bStatus = FALSE;
|
|
}
|
|
}
|
|
|
|
return bStatus;
|
|
}
|