userlibandfileserver/fileserver/etshell/ts_std.h
changeset 0 a41df078684a
child 6 0173bcd7697c
--- /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;
+		}
+	};