--- /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 <e32svr.h>
+#include <utf.h>
+#include <e32cons.h>
+
+
+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;
+ }
+
+