// 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_)