--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/euser/cbase/ub_cons.cpp Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,355 @@
+// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// e32\euser\cbase\ub_cons.cpp
+//
+//
+
+#include "ub_std.h"
+#include <e32uid.h>
+#include <e32wins.h>
+
+
+
+/**
+Default constructor.
+*/
+EXPORT_C CConsoleBase::CConsoleBase()
+ {
+ }
+
+
+
+/**
+Destructor.
+*/
+EXPORT_C CConsoleBase::~CConsoleBase()
+ {
+ }
+
+
+
+
+/**
+Gets a character from the console.
+
+@return the key code from the console.
+*/
+EXPORT_C TKeyCode CConsoleBase::Getch()
+ {
+
+ TRequestStatus s;
+ Read(s);
+ User::WaitForRequest(s);
+ __ASSERT_ALWAYS(s==KErrNone,Panic(EConsGetchFailed));
+ return(KeyCode());
+ }
+
+
+
+
+/**
+Prints characters to the console window.
+
+@param aFmt The non-modifiable descriptor containing the
+ format string. The TRefByValue class provides a
+ constructor which takes a TDesC type.
+
+@param ... A variable number of arguments to be converted to text
+ as dictated by the format string.
+*/
+EXPORT_C void CConsoleBase::Printf(TRefByValue<const TDesC> aFmt,...)
+ {
+
+ TestOverflowTruncate overflow;
+ // coverity[var_decl]
+ VA_LIST list;
+ VA_START(list,aFmt);
+ TBuf<0x100> aBuf;
+ // coverity[uninit_use_in_call]
+ TRAP_IGNORE(aBuf.AppendFormatList(aFmt,list,&overflow)); // ignore leave in TTimeOverflowLeave::Overflow()
+ Write(aBuf);
+ }
+
+
+
+/**
+Sets the cursor's x-position.
+
+@param aX The x-position.
+*/
+EXPORT_C void CConsoleBase::SetPos(TInt aX)
+ {
+
+ SetCursorPosAbs(TPoint(aX,WhereY()));
+ }
+
+
+
+
+/**
+Sets the cursor's x-position and y-position.
+
+@param aX The x-position.
+@param aY The y-position.
+*/
+EXPORT_C void CConsoleBase::SetPos(TInt aX,TInt aY)
+ {
+
+ SetCursorPosAbs(TPoint(aX,aY));
+ }
+
+
+
+
+/**
+Gets the cursor's x-position.
+
+@return The cursor's x-position.
+*/
+EXPORT_C TInt CConsoleBase::WhereX() const
+ {
+
+ return(CursorPos().iX);
+ }
+
+
+
+/**
+Gets the cursor's y-position.
+
+@return The cursor's y-position.
+*/
+EXPORT_C TInt CConsoleBase::WhereY() const
+ {
+
+ return(CursorPos().iY);
+ }
+
+
+/**
+Extension function
+
+
+*/
+EXPORT_C TInt CConsoleBase::Extension_(TUint aExtensionId, TAny*& a0, TAny* a1)
+ {
+ return CBase::Extension_(aExtensionId, a0, a1);
+ }
+
+
+void CColorConsoleBase::SetTextAttribute(TTextAttribute /*anAttribute*/)
+//
+//
+//
+ {
+ }
+
+
+/**
+Extension function
+
+
+*/
+EXPORT_C TInt CColorConsoleBase::Extension_(TUint aExtensionId, TAny*& a0, TAny* a1)
+ {
+ return CConsoleBase::Extension_(aExtensionId, a0, a1);
+ }
+
+
+NONSHARABLE_CLASS(CProxyConsole) : public CColorConsoleBase
+ {
+public:
+ ~CProxyConsole();
+ TInt Construct(const TDesC& aImplDll);
+public:
+// implement for CConsoleBase
+ TInt Create(const TDesC &aTitle,TSize aSize);
+ void Read(TRequestStatus &aStatus);
+ void ReadCancel();
+ void Write(const TDesC &aDes);
+ TPoint CursorPos() const;
+ void SetCursorPosAbs(const TPoint &aPoint);
+ void SetCursorPosRel(const TPoint &aPoint);
+ void SetCursorHeight(TInt aPercentage);
+ void SetTitle(const TDesC &aTitle);
+ void ClearScreen();
+ void ClearToEndOfLine();
+ TSize ScreenSize() const;
+ TKeyCode KeyCode() const;
+ TUint KeyModifiers() const;
+// implement for CColorConsoleBase
+ void SetTextAttribute(TTextAttribute anAttribute);
+ virtual TInt Extension_(TUint aExtensionId, TAny*& a0, TAny* a1);
+private:
+ RLibrary iLib;
+ CColorConsoleBase* iConsole;
+ };
+
+TInt CProxyConsole::Construct(const TDesC& aImplDll)
+ {
+ const TUidType type(KNullUid, KSharedLibraryUid, KConsoleDllUid);
+ TInt r=iLib.Load(aImplDll,type);
+ if (r==KErrNone)
+ {
+ iConsole=(CColorConsoleBase*)(iLib.Lookup(1)());
+ if (!iConsole)
+ r=KErrNoMemory;
+ }
+ return r;
+ }
+
+CProxyConsole::~CProxyConsole()
+ {
+ delete iConsole;
+ iLib.Close();
+ }
+
+TInt CProxyConsole::Create(const TDesC &aTitle,TSize aSize)
+ {
+ return iConsole->Create(aTitle,aSize);
+ }
+
+void CProxyConsole::Read(TRequestStatus &aStatus)
+ {
+ iConsole->Read(aStatus);
+ }
+
+void CProxyConsole::ReadCancel()
+ {
+ iConsole->ReadCancel();
+ }
+
+void CProxyConsole::Write(const TDesC &aDes)
+ {
+ iConsole->Write(aDes);
+ }
+
+TPoint CProxyConsole::CursorPos() const
+ {
+ return iConsole->CursorPos();
+ }
+
+void CProxyConsole::SetCursorPosAbs(const TPoint &aPoint)
+ {
+ iConsole->SetCursorPosAbs(aPoint);
+ }
+
+void CProxyConsole::SetCursorPosRel(const TPoint &aPoint)
+ {
+ iConsole->SetCursorPosRel(aPoint);
+ }
+
+void CProxyConsole::SetCursorHeight(TInt aPercentage)
+ {
+ iConsole->SetCursorHeight(aPercentage);
+ }
+
+void CProxyConsole::SetTitle(const TDesC &aTitle)
+ {
+ iConsole->SetTitle(aTitle);
+ }
+
+void CProxyConsole::ClearScreen()
+ {
+ iConsole->ClearScreen();
+ }
+
+void CProxyConsole::ClearToEndOfLine()
+ {
+ iConsole->ClearToEndOfLine();
+ }
+
+TSize CProxyConsole::ScreenSize() const
+ {
+ return iConsole->ScreenSize();
+ }
+
+TKeyCode CProxyConsole::KeyCode() const
+ {
+ return iConsole->KeyCode();
+ }
+
+TUint CProxyConsole::KeyModifiers() const
+ {
+ return iConsole->KeyModifiers();
+ }
+
+void CProxyConsole::SetTextAttribute(TTextAttribute anAttribute)
+ {
+ iConsole->SetTextAttribute(anAttribute);
+ }
+
+TInt CProxyConsole::Extension_(TUint aExtensionId, TAny*& a0, TAny* a1)
+ {
+ return iConsole->Extension_(aExtensionId, a0, a1);
+ }
+
+
+_LIT(KConsImpl,"econs");
+#ifdef __WINS__
+_LIT(KConsGuiImpl,"econseik");
+_LIT(KConsNoGuiImpl,"econsnogui");
+_LIT(KConsWservImpl, "econswserv");
+#endif
+
+
+
+/**
+Creates a new console object.
+
+@param aTitle The title text for the console.
+ This should not be longer than 256 characters.
+@param aSize The size of the console window.
+
+@return A pointer to the new console object.
+
+@see CConsoleBase::Create()
+*/
+EXPORT_C CConsoleBase *Console::NewL(const TDesC &aTitle,TSize aSize)
+ {
+ CProxyConsole *pC=new(ELeave) CProxyConsole;
+ TInt r=pC->Construct(KConsImpl);
+ if (r==KErrNone)
+ r=pC->Create(aTitle,aSize);
+#ifdef __WINS__
+ if (r!=KErrNone)
+ {
+ delete pC;
+ pC=new(ELeave) CProxyConsole;
+ if (EmulatorNoGui())
+ {
+ // try and create a dummy console via ECONSNOGUI
+ r=pC->Construct(KConsNoGuiImpl);
+ }
+ else if (EmulatorMiniGui())
+ {
+ // try and create Wserv console via ECONSWSERV
+ r=pC->Construct(KConsWservImpl);
+ }
+ else
+ {
+ // try and create a GUI console via ECONSEIK instead
+ r=pC->Construct(KConsGuiImpl);
+ }
+ if (r==KErrNone)
+ r=pC->Create(aTitle,aSize);
+ }
+#endif
+ if (r!=KErrNone)
+ {
+ delete pC;
+ User::Leave(r);
+ }
+ return(pC);
+ }