--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/userlibandfileserver/fileserver/etshell/ts_std.h Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,284 @@
+// 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:
+// f32\etshell\ts_std.h
+//
+//
+
+#include <f32file.h>
+#include <f32ver.h>
+#include <f32dbg.h>
+#include <e32cons.h>
+#include <e32twin.h>
+#include <e32des16.h>
+#include "f32image.h"
+
+const TUint KShellMajorVersionNumber=0;
+const TUint KShellMinorVersionNumber=1;
+const TUint KShellBuildVersionNumber=KF32BuildVersionNumber;
+const TInt KShellMaxCommandLine=0x100;
+
+const TInt KDefaultHistorySize=20;
+
+enum TShellPanic
+ {
+ EShellBadFileCopy,
+ EShellBadDrivePath,
+ EShellBadRelativePath,
+ EShellFilePathTooBig
+ };
+
+enum TLineEditAction
+ {
+ ENoAction,
+ ECommandCompletion,
+ EShellCommand
+ };
+
+class CLineEdit : public CBase
+ {
+public:
+ enum TCursorType {ECursorNone=0,ECursorNormal=20,ECursorInsert=100};
+ enum TEditMode {EEditOverWrite,EEditInsert};
+public:
+ static CLineEdit* NewL(CConsoleBase* aConsole,TInt aMaxHistory);
+ ~CLineEdit();
+ TLineEditAction Edit(const TDesC& aPrompt, TDes* aBuf, TBool aNewLine);
+ TInt Pos() { return iPos; }
+ void SetPos(TInt aPos) { iPos = aPos; }
+protected:
+ CLineEdit();
+ TPoint Where();
+ TInt Lines();
+ TInt WordLeft();
+ TInt WordRight();
+ void ClearLine();
+ void ClearLast(TInt aCnt);
+ void Recall();
+ void Cursor();
+ void Refresh();
+ inline TDes& Buf() {return *iBuf;}
+ void NewLine();
+ void StoreBufferHistory();
+
+private:
+ CArrayFixFlat<HBufC*>* iHistory;
+ CConsoleBase* iConsole; // Not owned
+ TInt iMaxHistory;
+ TInt iWidth;
+ TInt iHeight;
+ TInt iPos;
+ TInt iLine;
+ TInt iOrigin;
+ TInt iRecall;
+ TEditMode iMode;
+ TDes* iBuf;
+ TSize iFrameSizeChar;
+ TInt iTabCount;
+ };
+
+class TShellCommand
+ {
+public:
+ enum {EASwitch=0x1,EBSwitch=0x2,ECSwitch=0x4,EDSwitch=0x8,EESwitch=0x10,
+ EFSwitch=0x20,EGSwitch=0x40,EHSwitch=0x80,EISwitch=0x100,EJSwitch=0x200,
+ EKSwitch=0x400,ELSwitch=0x800,EMSwitch=0x1000,ENSwitch=0x2000,EOSwitch=0x4000,
+ EPSwitch=0x8000,EQSwitch=0x10000,ERSwitch=0x20000,ESSwitch=0x40000,ETSwitch=0x80000,
+ EUSwitch=0x100000,EVSwitch=0x200000,EWSwitch=0x400000,EXSwitch=0x800000,EYSwitch=0x1000000,
+ EZSwitch=0x2000000};
+ const TPtrC iName;
+ const TPtrC iHelp;
+ const TPtrC iHelpDetail;
+ const TUint iSwitchesSupported;
+ TInt (* const iFunction)(TDes& aPath,TUint aSwitches);
+public:
+ TShellCommand(const TDesC& aName,const TDesC& aHelp,const TDesC& aHelpDetail,TUint aSwitches,TInt (*aFunction)(TDes&,TUint));
+private:
+ TShellCommand& operator=(TShellCommand);
+ };
+
+class TWord
+{
+// User types COMMAND aDes
+// TWord is initialised with aDes
+// NextWord takes aDes and locates any spaces
+// If aDes is a single word, NextWord returns the start position of the word
+// Otherwise, NextWord returns the start position of the next word
+
+public:
+ TWord (const TDesC& aDes);
+ void Init(const TDesC& aDes);
+ TInt FindNextWord(TDes& aWord);
+private:
+ TInt iSpace; // Position of the first space
+ TInt iNextSpace; // Position of the following space
+ TPtrC iDes; // The given command line text
+public:
+ TBuf<KShellMaxCommandLine> iRightString; // The residual string after a space
+ TBuf<KShellMaxCommandLine> iNextWord; // Text between a space and the end of the string or another space
+};
+
+
+class CCliCompleter;
+
+class CShell : public CBase
+ {
+public:
+ static CShell* NewL();
+ ~CShell();
+ void RunL();
+ void SetCurrentPath(const TDesC& aDes);
+ TDes& CurrentPath();
+ void SetDrivePath(const TDesC& aDes);
+ static void NewLine();
+ static TKeyCode OutputStringToConsole(TBool aPageSwitch,TRefByValue<const TDesC> aFmt,...);
+ static TKeyCode OutputStringToConsole(TBool aPageSwitch, const TDesC& aBuf);
+ static TKeyCode OutputStringToConsole(const TDesC& aNotification,TBool aPageSwitch,TRefByValue<const TDesC> aFmt,...);
+public:
+ static CConsoleBase* TheConsole;
+ static CFileMan* TheFileMan;
+ static CCliCompleter* TheCliCompleter;
+
+private:
+
+ /** Total numbr of built-in shell commands */
+ enum {ENoShellCommands=33};
+
+private:
+ static void DoBanner();
+ static void DoCommand(TDes& aCommand);
+ static void PrintError(TInt aError);
+ static void PrintHelp();
+ static void PrintHelp(const TShellCommand* aCommand);
+ static void ChangeDrive(TChar aDrive);
+ static TInt RunBatch(TDes& aCommand);
+ static TInt RunExecutable(TDes& aCommand,TBool aWaitForCompletion);
+ static TKeyCode PageSwitchDisplay(const TDesC& aBuf);
+private:
+ static TBuf<KMaxFileName> currentPath;
+ static TBuf<KMaxFileName> drivePaths[KMaxDrives];
+ static const TShellCommand iCommand[ENoShellCommands];
+ static RFs TheFs;
+ static CLineEdit* TheEditor;
+ friend class ShellFunction;
+ friend class CDllChecker;
+ };
+
+
+class CDllChecker : public CBase
+//
+// A class for checking dependencies of executables and Dlls
+//
+ {
+private:
+ enum TResultCheck {EAlreadyOpen,ECouldNotOpenFile,ENotFound,EUidNotSupported,ENoImportData,EUidDifference,EFileFoundAndUidSupported};
+ struct SDllInfo
+ {
+ TBuf8<KMaxFileName> iDllName;
+ TUid iUid;
+ TResultCheck iResult;
+ };
+
+ CArrayFixFlat<SDllInfo>* iDllArray; // Array of Imports already checked
+ TInt iCalls; // Number of recursive calls of GetImportDataL()
+
+ RFile iFile;//file object for reading data from phisical file
+ TUint32 iConversionOffset;
+private:
+ void GetFileNameAndUid(SDllInfo &aDllInfo, const TDesC8 &aExportName);
+ TInt FindDll(TDes& aDllName,TFileName& aFileName, TPath& aPath);
+ void DllAppendL(const SDllInfo& aDllInfo);
+ TUint8* NextBlock(TUint8* aBlock);
+
+ void LoadFileInflateL(E32ImageHeaderComp* aHeader,TUint8* aRestOfFileData,TUint32 aRestOfFileSize);
+ void LoadFileNoCompressL(E32ImageHeaderComp* aHeader,TUint8* aRestOfFileData,TUint32 aRestOfFileSize);
+ TInt CheckUid3(TInt32 aUid3,TUid aUid);
+ TInt LoadFile(TUint32 aCompression,E32ImageHeaderComp* aHeader,TUint8* aRestOfFileData,TUint32 iRestOfFileSize);
+ void GetDllTableL(TUint8* aImportData,TInt aDllRefTableCount,TUint aFlags);
+public:
+ CDllChecker();
+ ~CDllChecker();
+ void ConstructL();
+ void GetImportDataL(const TDesC& aFileName, TUid* aPointer);
+ void ListArray();
+ };
+
+class ShellFunction
+ {
+public:
+ static CShell* TheShell;
+public:
+ static TInt Attrib(TDes& aPath,TUint aSwitches);
+ static TInt Cd(TDes& aPath,TUint aSwitches);
+ static TInt ChkDeps(TDes& aPath,TUint aSwitches);
+ static TInt ChkDsk(TDes& aPath,TUint aSwitches);
+ static TInt Copy(TDes& aPath,TUint aSwitches);
+#ifndef __DATA_CAGING__
+ static TInt DefaultPath(TDes& aPath,TUint aSwitches);
+#endif
+ static TInt VolumeLabel(TDes& aPath,TUint aSwitches);
+ static TInt Del(TDes& aPath,TUint aSwitches);
+ static TInt Dir(TDes& aPath,TUint aSwitches);
+ static TInt Edit(TDes& aPath,TUint aSwitches);
+ static TInt Format(TDes& aPath,TUint aSwitches);
+ static TInt Gobble(TDes& aPath,TUint aSwitches);
+ static TInt Hexdump(TDes& aPath,TUint aSwitches);
+ static TInt Md(TDes& aPath,TUint aSwitches);
+ static TInt Move(TDes& aPath,TUint aSwitches);
+ static TInt Ps(TDes& aPath,TUint aSwitches);
+ static TInt Rename(TDes& aPath,TUint aSwitches);
+ static TInt Rd(TDes& aPath,TUint aSwitches);
+ static TInt Start(TDes& aProgram,TUint aSwitches);
+ static TInt Time(TDes&,TUint aSwitches);
+ static TInt Trace(TDes& aState,TUint aSwitches);
+ static TInt Tree(TDes& aPath,TUint aSwitches);
+ static TInt Type(TDes& aPath,TUint aSwitches);
+ static TInt ValidName(TDes& aPath,TUint aSwitches);
+ static TInt XCopy(TDes& aPath,TUint aSwitches);
+ static TInt Lock(TDes& aPath, TUint aSwitches);
+ static TInt Unlock(TDes& aPath, TUint aSwitches);
+ static TInt Clear(TDes& aPath, TUint aSwitches);
+ static TInt SetSize(TDes& aPath,TUint aSwitches);
+ static TInt DebugPort(TDes& aArgs, TUint aSwitches);
+ static TInt Plugin(TDes& aArgs, TUint aSwitches);
+ static TInt DrvInfo(TDes& aArgs, TUint aSwitches);
+ static TInt SysInfo(TDes& aArgs, TUint aSwitches);
+ static TInt MountFileSystem(TDes& aArgs, TUint aSwitches);
+ static TInt ConsoleEcho(TDes& aArgs, TUint aSwitches);
+ static TInt RunExec(TDes& aProgram, TUint aSwitches);
+ static void ParsePath(TDes& aPath);
+ static TInt GetFullPath(TDes& aPath,TParse& aParse);
+ static void AlignTextIntoColumns(RPointerArray<HBufC>& aText);
+ static void StripQuotes(TDes& aVal);
+
+private:
+ static TInt ShowDirectoryTree(TDes& aPath,TUint aSwitches,TDes& aTreeGraph);
+ static TBool Certain();
+ static void OutputContentsToConsole(RPointerArray<HBufC>& aText,TUint aSwitches);
+ static void OutputDirContentL(CDir* aDirList,RPointerArray<HBufC>& aText,TUint aSwitches);
+ };
+
+GLREF_D TVersion TheShellVersion;
+GLREF_C void Panic(TShellPanic anErrorCode);
+GLREF_C TInt AddRelativePath(TParse& aParse,const TDesC& aRelativePath);
+GLREF_C TInt GetFullPath(TParse& aParse,const TDesC& aPath,const TDesC& aCurrentPath);
+GLREF_C void Get16BitDllName(TDes8& aDllName,TDes& aFileName);
+
+NONSHARABLE_CLASS(SimpleOverflowTruncate): public TDes16Overflow
+ {
+ public:
+ virtual void Overflow(TDes16&)
+ {
+ return;
+ }
+ };