www.pudn.com > zfxcengine-0.1.0.zip > ceConsoleStreams.cpp
// $Id: ceConsoleStreams.cpp,v 1.6 2005/06/04 15:12:12 jubu Exp $
/////////////////////////////////////////////////////////////////////////
// Module: Scripting
//! \file ceConsoleStreams.cpp
//! \brief Enthält Klassen ceConsoleStreamBuf,ceLuaConsoleStream
//! \author Bjoern Meier
//
// Diese Datei steht unter der LGPL-Lizenz, welche
// im Hauptordner(ZFXC-Engine) unter LICENSE
// nachlesbar ist.
////////////////////////////////////////////////////////////////////////////////
#include "Core/ceConsoleStreams.h"
#ifdef _DEBUG
#undef THIS_FILE
//notused : static char THIS_FILE[]=__FILE__;
#endif
#include "Core/ceMemManager.h"
namespace ZFXCE
{
////////////////////////////////////////////////////////////////////////////////
using std::ostream;
////////////////////////////////////////////////////////////////////////////////
ceConsoleStreamBuf::ceConsoleStreamBuf()
{
PUSH_FUNCTION;
m_sSize = 0;
m_ceConsole = NULL;
pReserve = new char[100];
ce_assert (NULL != pReserve);
m_sSize = 100;
setp(pReserve, pReserve + 100);
setg(0, 0, 0); // Version 1
}
////////////////////////////////////////////////////////////////////////////////
ceConsoleStreamBuf::ceConsoleStreamBuf(ceConsole* Console)
{
PUSH_FUNCTION;
ce_assert (NULL != Console);
m_sSize = 0;
pReserve = new char[100];
ce_assert (NULL != pReserve);
m_sSize = 100;
setp(pReserve, pReserve + 100);
setg(0, 0, 0); // Version 1
m_ceConsole = Console;
}
////////////////////////////////////////////////////////////////////////////////
ceConsoleStreamBuf::~ceConsoleStreamBuf()
{
PUSH_FUNCTION;
sync();
if (m_sSize>1)
delete [] pReserve;
else
delete pReserve;
pReserve = NULL;
}
////////////////////////////////////////////////////////////////////////////////
INT ceConsoleStreamBuf::sync()
{
PUSH_FUNCTION;
WriteToConsole();
return (0);
}
////////////////////////////////////////////////////////////////////////////////
void ceConsoleStreamBuf::WriteToConsole()
{
PUSH_FUNCTION;
const DWORD dwCharsToWrite = pptr() - pbase();
CHAR* sTemp = pbase();
std::string sOutPut;
for (UINT i = 0; i(*sTemp))
sOutPut += *sTemp;
++sTemp;
}
// Write messages and
if (dwCharsToWrite) {
if (NULL != m_ceConsole) {
m_ceConsole->AddOutPut(sOutPut);
}
setp(pbase(), epptr());
}
}
////////////////////////////////////////////////////////////////////////////////
INT ceConsoleStreamBuf::overflow(INT c)
{
PUSH_FUNCTION;
WriteToConsole();
if (c != EOF) {
if (pbase() == epptr())
WriteCharToConsole(c);
else
sputc(c);
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////
void ceConsoleStreamBuf::WriteCharToConsole(INT c)
{
PUSH_FUNCTION;
std::string sOutPut;
sOutPut = static_cast(c);
m_ceConsole->AddOutPut(sOutPut);
}
////////////////////////////////////////////////////////////////////////////////
ceConsole *ceConsoleStreamBuf::GetConsole() const
{
PUSH_FUNCTION;
return m_ceConsole;
}
////////////////////////////////////////////////////////////////////////////////
void ceConsoleStreamBuf::SetConsole(ceConsole *pConsole)
{
PUSH_FUNCTION;
ce_assert (NULL != pConsole);
m_ceConsole = pConsole;
}
} // Namespace ZFXCE