e32tools/elf2e32/source/parametermanager.h
changeset 2 39c28ec933dd
child 6 787612182dd0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/e32tools/elf2e32/source/parametermanager.h	Mon May 10 19:54:49 2010 +0100
@@ -0,0 +1,451 @@
+// Copyright (c) 2004-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:
+// Implementation of the Header file for Class ParameterManager of the elf2e32 tool
+// @internalComponent
+// @released
+// 
+//
+
+#if !defined(SYMBIAN_PARAMETERMANAGER_H_)
+#define SYMBIAN_PARAMETERMANAGER_H_
+
+#include "parameterlistinterface.h"
+#include <vector>
+#include <map>
+#include <string>
+
+class UseCaseBase;
+class Symbol;
+
+
+
+/**
+This class is derived from ParameterListInterface (the abstract base class). 
+
+@internalComponent
+@released
+*/
+class ParameterManager : public ParameterListInterface
+{
+
+public:
+
+	typedef std::vector<char *> ParamList;
+
+	struct OptionDesc
+	{
+		char * iName;
+		const void * iParser;
+		char * iDoc;
+	};
+
+	struct TargetTypeDesc
+	{
+		const char * iName;
+		ETargetType iTargetType;
+	};
+
+	struct PriorityValueDesc
+	{
+		const char * iName;
+		TProcessPriority iPriority;
+	};
+	
+	struct CompressionMethodDesc
+	{
+		const char *iMethodName;
+		UINT		iMethodUid;
+	};
+
+	/*struct SysDefs
+	{
+		int iSysDefOrdinalNum;
+		char * iSysDefSymbolName;
+	};
+
+	typedef struct SysDefs Sys;*/
+
+	typedef std::string string;
+	typedef std::less<string> OptionCompare;
+	typedef std::map<string, const OptionDesc *, OptionCompare> OptionMap;
+	typedef vector<char *> LibSearchPaths;
+
+	typedef void (*ParserFn)(ParameterManager *, char *, char *, const OptionDesc *);
+
+
+	#define DECLARE_PARAM_PARSER(name) \
+		static void name(ParameterManager* aPM, char* aOption, char* aValue, void* aDesc)
+	
+	#define DEFINE_PARAM_PARSER(name) \
+		void name(ParameterManager * aPM, char * aOption, char* aValue, void * aDesc)
+	
+	#define INITIALISE_PARAM_PARSER \
+		aOption = aOption; \
+		aValue = aValue; \
+		aDesc = aDesc;
+
+	DECLARE_PARAM_PARSER(ParseDefInput);
+	DECLARE_PARAM_PARSER(ParseDSOOutput);
+	DECLARE_PARAM_PARSER(ParseTargetTypeName);
+	DECLARE_PARAM_PARSER(ParseLinkAs);
+	DECLARE_PARAM_PARSER(ParseDefOutput);
+	DECLARE_PARAM_PARSER(ParseElfInput);
+	DECLARE_PARAM_PARSER(ParseFileDump);
+	DECLARE_PARAM_PARSER(ParseE32ImageInput);
+	DECLARE_PARAM_PARSER(ParseOutput);
+	DECLARE_PARAM_PARSER(ParseLogFile);
+	DECLARE_PARAM_PARSER(ParseMessageFile);
+	DECLARE_PARAM_PARSER(ParseDumpMessageFile);
+	
+	DECLARE_PARAM_PARSER(ParamHelp);
+	DECLARE_PARAM_PARSER(ParseUID1);
+	DECLARE_PARAM_PARSER(ParseUID2);
+	DECLARE_PARAM_PARSER(ParseUID3);
+
+
+	DECLARE_PARAM_PARSER(ParseCapability);
+	DECLARE_PARAM_PARSER(ParseSecureId);
+	DECLARE_PARAM_PARSER(ParseVendorId);
+	DECLARE_PARAM_PARSER(ParseFixedAddress);
+	DECLARE_PARAM_PARSER(ParseUncompressed);
+	DECLARE_PARAM_PARSER(ParseCompressionMethod);
+	DECLARE_PARAM_PARSER(ParseHeap);
+	DECLARE_PARAM_PARSER(ParseStackCommitted);
+	DECLARE_PARAM_PARSER(ParseUnfrozen);
+	DECLARE_PARAM_PARSER(ParseIgnoreNonCallable);
+	DECLARE_PARAM_PARSER(ParseLibPaths);
+	DECLARE_PARAM_PARSER(ParseSysDefs);
+	DECLARE_PARAM_PARSER(ParseAllowDllData);
+	DECLARE_PARAM_PARSER(ParsePriority);
+	DECLARE_PARAM_PARSER(ParseVersion);
+	DECLARE_PARAM_PARSER(ParseCallEntryPoint);
+	DECLARE_PARAM_PARSER(ParseFPU);
+
+	DECLARE_PARAM_PARSER(ParsePaged);
+	DECLARE_PARAM_PARSER(ParseUnpaged);
+	DECLARE_PARAM_PARSER(ParseDefaultPaged);
+
+	DECLARE_PARAM_PARSER(ParseCodePaging);
+	DECLARE_PARAM_PARSER(ParseDataPaging);
+
+	DECLARE_PARAM_PARSER(ParseExcludeUnwantedExports);
+	DECLARE_PARAM_PARSER(ParseIsCustomDllTarget);
+	DECLARE_PARAM_PARSER(ParseSymNamedLookup);
+	DECLARE_PARAM_PARSER(ParseDebuggable);
+	DECLARE_PARAM_PARSER(ParseSmpSafe);
+
+	ParameterManager(int aArgc, char** aArgv);
+	virtual ~ParameterManager();
+	void ParameterAnalyser();
+	void SetDefInput(char * aDefInputVal);
+	void SetDSOOutput(char * aDSOOutputVal);
+	void SetElfInput(char * aSetElfInput);
+	void SetE32Input(char * aSetE32Input);
+	void SetFileDumpOptions(char * aSetE32DumpOptions);
+	void SetE32Output(char * aSetE32Output);
+	void SetDefOutput(char * aSetDefOutput);
+	void SetTargetTypeName(ETargetType  aSetTargetTypeName);
+	void SetLinkDLLName(char * aSetLinkDLLName);
+	void SetUID1(UINT aSetUINT1);
+	void SetUID2(UINT aSetUINT2);
+	void SetUID3(UINT aSetUINT3);
+	void SetFixedAddress(bool aSetFixedAddress);
+	void SetCompress(bool aSetCompress);
+	void SetCompressionMethod(UINT aCompressionMethod);
+	void SetSecureId(UINT aSetSecureID);
+	void SetVendorId(UINT aSetVendorID);
+	void SetHeapCommittedSize(UINT aSetHeapCommittedSize);
+	void SetHeapReservedSize(UINT aSetHeapReservedSize);
+	void SetStackCommittedSize(UINT aSetStackCommittedSize);
+	void SetUnfrozen(bool aVal);
+	void SetIgnoreNonCallable(bool aVal);
+	void SetCapability(unsigned int newVal);
+	void SetCapability(SCapabilitySet & newVal);
+	void SetSysDefs(unsigned int aSysDefOrdinal, char * aSysDefSymbol, int aCount);
+	void SetLogFile(char * aSetLogFile);
+	void SetMessageFile(char *aMessageFile);
+	void SetDumpMessageFile(char *aDumpMessageFile);
+	void SetDllDataP(bool newVal);
+	void SetPriority(TProcessPriority anewVal);
+	void SetVersion(UINT aSetVersion);
+	void SetCallEntryPoint(bool aCallEntryPoint);
+	void SetFPU(UINT aVal);
+
+	void SetCodePaged(bool);
+	void SetCodeUnpaged(bool);
+	void SetCodeDefaultPaged(bool);
+
+	void SetDataPaged(bool);
+	void SetDataUnpaged(bool);
+	void SetDataDefaultPaged(bool);
+	
+	void SetExcludeUnwantedExports(bool aVal);
+	void SetCustomDllTarget(bool aVal);
+	void SetSymNamedLookup(bool aVal);
+	void SetDebuggable(bool aVal);
+	void SetSmpSafe(bool aVal);
+
+	int NumOptions();
+	int NumShortOptions();
+	void InitParamParser();
+	void ParseCommandLine();
+	void RecordImageLocation();
+	char * Path(char * aArg);
+	ETargetType TargetTypeName();
+	ETargetType ValidateTargetType(const char * aTargetType);
+	LibSearchPaths& LibPath();
+	char * DefInput();
+	char * ElfInput();
+	char * E32Input();
+	bool DefFileInOption();
+	bool DefFileOutOption();
+	bool ElfFileInOption();
+	bool E32ImageInOption();
+	bool FileDumpOption();
+	bool DSOFileOutOption();
+	bool E32OutOption();
+	bool LinkAsOption();
+	bool Uid1Option();
+	bool SecureIdOption();
+	bool VendorIdOption();
+	bool SysDefOption();
+	bool LogFileOption();
+	bool MessageFileOption();
+	bool DumpMessageFileOption();
+	bool DllDataP();
+	TProcessPriority Priority();
+	bool PriorityOption();
+	bool VersionOption();
+	bool CallEntryPoint();
+	bool FPUOption();
+
+	char * DefOutput();
+	char * DSOOutput();
+	char * E32ImageOutput();
+	char * LinkAsDLLName();
+	char * FileName(char * aArg);
+	char * LogFile();
+	char * MessageFile();
+	char * DumpMessageFile();
+	char * FileDumpOptions();
+	char * FileDumpSubOptions();
+	int DumpOptions();
+	int SysDefCount();
+	char DirectorySeparator();
+	//int SysDefOrdinalNum();
+	//char * SysDefSymbol();
+	Sys SysDefSymbols(int count);
+	UINT Uid1();
+	UINT Uid2();
+	UINT Uid3();
+	UINT SecureId();
+	UINT VendorId();
+	UINT Version();
+	bool FixedAddress();
+	bool Compress();
+	UINT CompressionMethod();
+	size_t HeapCommittedSize();
+	size_t HeapReservedSize();
+	size_t StackCommittedSize();
+	bool Unfrozen();
+	bool IgnoreNonCallable();
+	UseCaseBase * SelectUseCase();
+	SCapabilitySet Capability();
+	void ParseCapability1(const char * name, const char * end, SCapabilitySet& aCapabilities, bool invert);
+	void ParseCapabilitiesArg(SCapabilitySet& aCapabilities, const char *aText);
+	UINT FPU();
+
+	bool IsCodePaged();
+	bool IsCodeUnpaged();
+	bool IsCodeDefaultPaged();
+
+	bool IsDataPaged();
+	bool IsDataUnpaged();
+	bool IsDataDefaultPaged();
+
+	bool ExcludeUnwantedExports();
+	bool IsCustomDllTarget();
+	bool SymNamedLookup();
+	bool IsDebuggable();
+	bool IsSmpSafe();
+
+private:
+	/** The number of command line arguments passed into the program */
+	int iArgc;
+
+	/** The listing of all the arguments */
+	char ** iArgv;
+
+	/** REVISIT */
+	char * iImageLocation;
+
+	/** REVISIT */
+	char * iImageName;
+
+	/** To check if the --targettypeoption (Option to pass the target type of the final image) is provided */
+	 bool iTargetTypeOption;
+
+	/** To check if the --definput (Option to pass the input DEF File) is passed as input */
+	 bool iDefFileInOption;
+
+	/** To check if the --defoutput (Option to pass the output DEF File name) is passed as input */
+	bool iDefFileOutOption;
+	
+	/** To check if the --dump is passed as input */
+	bool iFileDumpOption;
+
+	/** To check if the --dso (Option to pass the output DSO File name) is passed as input */
+	bool iDSOFileOutOption;
+	
+	/** To check if the --output (Option to pass the output image name) is passed as input */
+	bool iOutFileOption;
+	
+	/** To check if the --elfinput (Option to pass the input Elf File) is passed as input */
+	bool iElfFileInOption;
+	
+	/** To check if the --e32input (Option to pass the input E32 File) is passed as input */
+	bool iE32ImageInOption;
+	
+	/** To check if the --linkas (Option to pass DLL name to be linked with) is passed as input */
+	bool iLinkAsOption;
+
+	bool iUid1Option;
+	bool iSecureIDOption;
+	bool iVendorIDOption;
+
+	/** System level identifier, identifies the general type of a Symbian OS object */
+	UINT iUID1;
+
+	/** Interface identifier, distinguishes within a type (i.e.within a UID1) */
+	UINT iUID2;
+
+	/** Project identifier, identifies a particular subtype */ 
+	UINT iUID3;
+
+	UINT iSecureID;
+
+	UINT iVendorID;
+
+	bool iCompress;
+	UINT iCompressionMethod;
+
+	bool iFixedAddress;
+
+	size_t iHeapCommittedSize;
+	size_t iHeapReservedSize;
+	size_t iStackCommittedSize;
+	bool iUnfrozen;
+	bool iIgnoreNonCallable;
+
+
+	/** List of the parameters */
+	ParamList iParamList;
+
+	/** The short prefix '-' used for the command line options for the program */
+	static const char * iParamShortPrefix;
+
+	/** The normal prefix '--' used for the command line options for the program */
+	static const char * iParamPrefix;
+
+	/** The '=' used for passing the arguments to the command line options for the program */
+	static const char iParamEquals; 
+
+	/** The list of command line options (with normal prefix '--') that will be accepted by the program */
+	static const OptionDesc iOptions[];
+
+	/** The list of command line options (with short prefix '-') that will be accepted by the program */
+	static const OptionDesc iShortOptions[];
+
+	/** The map between the command line option (with normal prefix '--') and the corresponding function */
+	OptionMap iOptionMap;
+
+	/** The map between the command line option (with short prefix '-') and the corresponding function */
+	OptionMap iShortOptionMap;
+
+	/** The usecase that is selected, could either be LibraryTarget or DLLTarget or EXETarget */
+	UseCaseBase *iUseCase;
+
+	/** Target Type that is passed as input to the --targettype option */
+	ETargetType iTargetTypeName;
+
+	/** File name of the output DEF file passed as input to the --defoutput option */
+	char * iDefOutput;
+
+	/** File name of the output DSO file passed as input to the --dso option */
+	char * iDSOOutput;
+
+	/** File name of the output image passed as input to the --output option */
+	char * iOutFileName;
+
+	/** File name of the input DEF file passed as input to the --definput option */
+	char * iDefInput;
+
+	/** File name of the input DSO file passed as input to the --dsoin option */
+	char * iElfInput;
+
+	/** File name of the input E32 image passed as input to the --e32dump option */
+	char * iE32Input;
+
+	/** File name of the DLL to be linked with passed as input to the --linkas option */
+	char * iLinkDLLName;
+
+	/** Path name of the intermediate libraries passed as input to the --libpath option */
+	char * iLibPath;
+
+	int iDumpOptions;
+	char *iFileDumpSubOptions;
+
+	bool iSysDefOption;
+	char * iLogFileName;
+	bool iLogFileOption;
+	char * iMessageFileName;
+	bool iMessageFileOption;
+	char * iDumpMessageFileName;
+	bool iDumpMessageFileOption;
+
+	bool iDllDataP;
+	
+	//vector<char*> iLibPathList;
+	LibSearchPaths iLibPathList;
+	SCapabilitySet iCapability;
+	//struct SysDefs iSysDefSymbols[10];
+	Sys iSysDefSymbols[10];
+	int iSysDefCount;
+	bool iPriorityOption;
+	TProcessPriority iPriorityVal;
+	UINT iVersion;
+	bool iVersionOption;
+	bool iCallEntryPoint;
+	UINT iFPU;
+	bool iFPUOption;
+
+	int iArgumentCount;
+	
+	bool iCodePaged;
+	bool iCodeUnpaged;
+	bool iCodeDefaultPaged;
+
+	bool iDataPaged;
+	bool iDataUnpaged;
+	bool iDataDefaultPaged;
+
+	bool iExcludeUnwantedExports;
+	bool iCustomDllTarget;
+	bool iSymNamedLookup;
+	bool iDebuggable;
+	bool iSmpSafe;
+};
+
+
+#endif // !defined(SYMBIAN_PARAMETERMANAGER_H_)