windows-nt/Source/XPSP1/NT/printscan/print/spooler/dbglib/dbgcon.cxx
2020-09-26 16:20:57 +08:00

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;
}