diff -r 000000000000 -r b16258d2340f applayerprotocols/ftpengine/consui/CONSOLE.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerprotocols/ftpengine/consui/CONSOLE.CPP Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,135 @@ +// Copyright (c) 1998-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: +// Author: Philippe Gabriel +// Console active object +// Buffers input from the keyboard and reports a command line +// terminated by a return key +// +// + +/** + @file Console.cpp + @internalComponent +*/ + +//#include "defs.h" +//#include "debug.h" +#include "CONSOLE.H" +#include +#include + +// +// Definitions +// + +CmdConsole::CmdConsole(MCmdConsoleReport* aNotifier,CConsoleBase* aConsole):CActive(CActive::EPriorityStandard), +iNotifier(aNotifier),iConsole(aConsole),iAcceptInput(TRUE) +{ +} + +CmdConsole* CmdConsole::NewL(MCmdConsoleReport* aNotifier,CConsoleBase* aConsole) +{ + CmdConsole* self = new(ELeave) CmdConsole(aNotifier,aConsole); + CActiveScheduler::Add(self); + return self; +} + +CmdConsole::~CmdConsole(void) +{ +Cancel(); +} + +void CmdConsole::Start(void) +{ + iConsole->Read(iStatus); + SetActive(); +} + +void CmdConsole::Reset(void) +{ + // Reset buffer + iCmdBuffer.Zero(); + // Ok to Accept input + iAcceptInput = TRUE; + // Display a prompt + iConsole->Printf(_L("\nftp>")); +} + +TDes& CmdConsole::FetchCmd(void) +{ + return iCmdBuffer; +} + +void CmdConsole::RunL() +{ +// Utput to the screen is done in a weird way +// but could not find the pattern to printf directly +TBuf<5> test; +TPtrC acceptInput(KAlphabet); +TChar c= iConsole->KeyCode(); + Start(); + if ( c == EKeyEscape ) + { + // Call Notifier + iNotifier->Escape(); + return; + } + if (!iAcceptInput) + return; + if ( c == EKeyEnter ) + { + // Call Notifier + iAcceptInput = FALSE; + iConsole->Printf(_L("\n")); + iNotifier->CmdReady(); + return; + } + if (c == EKeyBackspace) + {if (iCmdBuffer.Length()==0) + // If buffer empty bail out + return; + // Otherwise remove last char from buffer + iCmdBuffer.Delete(iCmdBuffer.Length()-1,1); + test.Zero(); + test.Append(EKeyBackspace); + test.Append(' '); + test.Append(EKeyBackspace); + test.Append(0); + + iConsole->Printf(_L("%S"),&test); + // iConsole->Printf(_L("%C"),c); + } + else if(KErrNotFound != acceptInput.Locate(c)) + { + // Is that a char or a cmd? + // If it's a char append it + iCmdBuffer.Append(c); + // Output it on the screen + // iConsole->Printf(_L("%S"),&acceptInput.Mid(acceptInput.Locate(c),1)); + // iConsole->Printf(_L("%c"),c); + test.Zero(); + test.Append(c); + test.Append(0); + + iConsole->Printf(_L("%S"),&test); + } +} + +void CmdConsole::DoCancel(void) +{ +iConsole->ReadCancel(); +} + +void CmdConsole::ConstructL(void){} +