diff -r 000000000000 -r e4d67989cc36 genericopenlibs/cstdlib/TSTLIB/testconsole.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/cstdlib/TSTLIB/testconsole.cpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,170 @@ +// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Console redirection server +// +// + +#include "testconsole.h" +#include +#include +#include + + +NONSHARABLE_CLASS(CActiveConsole) : public CActive + { + public: + CActiveConsole(); + void ConsoleRead(); + static CActiveConsole* NewLC(CConsoleBase* aConsole, CTestConsole * aStream); + static CActiveConsole* NewL(CConsoleBase* aConsole, CTestConsole * aStream); + void ConstructL(CConsoleBase* aConsole, CTestConsole * aStream); + + private: + void DoCancel(); + void RunL(); + CTestConsole * iStream; + CConsoleBase * iConsole; + }; + +CActiveConsole::CActiveConsole() : CActive(CActive::EPriorityStandard) + { + } + +void CActiveConsole::DoCancel() + { + } + + +void CActiveConsole::ConsoleRead() + { + iConsole->Read(iStatus); + SetActive(); + } + +void CActiveConsole::RunL() + { + iStream->DoneReading(iConsole->KeyCode()); + } + + + + +CActiveConsole* CActiveConsole::NewLC(CConsoleBase* aConsole, CTestConsole * aStream) + { + CActiveConsole* self=new (ELeave) CActiveConsole; + CleanupStack::PushL(self); + self->ConstructL(aConsole, aStream); + return self; + } + +CActiveConsole* CActiveConsole::NewL(CConsoleBase* aConsole, CTestConsole * aStream) + { + CActiveConsole* self = NewLC(aConsole, aStream); + CleanupStack::Pop(); + return self; + } + +void CActiveConsole::ConstructL(CConsoleBase* aConsole, CTestConsole * aStream) + { + iConsole = aConsole; + iStream = aStream; + CActiveScheduler::Add(this); + } + + +CTestConsole::CTestConsole() + { +#ifdef __MARM + TRAPD(r,iConsole=Console::NewL(_L("Redirection Server"),TSize(KConsFullScreen, KConsFullScreen))) +#else + TRAPD(r,iConsole=Console::NewL(_L("Redirection Server"),TSize(KDefaultConsWidth,KDefaultConsHeight))) +#endif + __ASSERT_ALWAYS(r==KErrNone,User::Panic(_L("Redirection Server"),0)); + + //create and add the active object + TRAPD(x, iActiveChap=CActiveConsole::NewL(iConsole, this)); + __ASSERT_ALWAYS(x==KErrNone,User::Panic(_L("Redirection Server"),0)); + + } + + +CTestConsole::~CTestConsole() + { + if (iConsole) + { + iConsole->Write(_L("Console Closed")); + User::After(2*1000000); + delete iConsole; + } + } + + + void CTestConsole::Write(TDes8& aDes) + { + + TBuf<256> str; + CnvUtfConverter::ConvertToUnicodeFromUtf8(str, aDes); + + iConsole->Write(str); + + } + + void CTestConsole::Read(const RMessage2& aMessage) + { + iMessage = aMessage; + iActiveChap->ConsoleRead(); //read from the console + } + + + void CTestConsole::DoneReading(TKeyCode aKeyCode) + { + TText8 ch; + switch (aKeyCode) + { + case EKeyEnter: + ch = '\n'; + break; + case EKeyBackspace: + ch = 0x08; + break; + default: + ch = (TText8)(aKeyCode&0xFF); + break; + } + + //append it to the buffer + iBuf.Append(ch); + Write(iBuf); + + CompleteRead(iMessage); + } + + CStreamBase2* CTestConsoleFactory::GetStream() + { + return new CTestConsole(); + } + + void CTestConsoleFactory::Configure() + { + } + + +CTestConsoleFactory* CTestConsoleFactory::NewL() + { + CTestConsoleFactory* f=new(ELeave) CTestConsoleFactory(); + + return f; + } + +