--- a/memana/analyzetoolclient/commandlineengine/internal/src/arguments.cpp Thu Feb 11 15:52:57 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,947 +0,0 @@
-/*
-* Copyright (c) 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: Argument parsing functions.
-*/
-#include "../inc/ATCommonDefines.h"
-#include "../inc/CATBase.h"
-
-//Forward declarations.
-bool parseBaseArguments( vector<string>& vArgs, ARGUMENTS& args );
-bool parseHookArguments( vector<string>& vArgs, ARGUMENTS& args );
-bool parseOldHookArguments( vector<string>& vArgs, ARGUMENTS& args );
-bool parseAnalyzeArguments( vector<string>& vArgs, ARGUMENTS& args );
-bool parseHtiArguments( vector<string>& vArgs, ARGUMENTS& args );
-bool parseParseArguments( vector<string>& vArgs, ARGUMENTS& args );
-bool checkDataFileName( string& sFileName );
-
-// Constants for old "hooking" parameter parsing.
-#define INVALID_PARAMETER "AnalyzeTool : Error, invalid parameter: "
-const char LOG_S60[] = "s60";
-const char LOG_XTI[] = "xti";
-const char DATAFILENAME_INVALID_CHARS[] = " &^+-@$%*()|\\/[]{}<>?;:,\"'";
-
-/**
-* Check datafile name for invalid characters.
-* @return true if file name ok.
-*/
-bool checkDataFileName( string& sFileName )
-{
- for ( size_t i = 0; i < sFileName.length(); i++ )
- {
- const char c = sFileName.at( i );
- if( strchr( DATAFILENAME_INVALID_CHARS, c ) != 0 )
- return false;
- }
- return true;
-}
-
-/**
-* Parse base arguments from given vector of strings.
-* Removes debug / help arguments from vector.
-*/
-bool parseBaseArguments( vector<string>& vArgs, ARGUMENTS& args )
-{
- // Iterator used in this function.
- vector<string>::iterator it;
- // If no arguments set show help true.
- if ( vArgs.size() == 0 )
- {
- args.eMainSwitch = SWITCH_UNKNOWN;
- args.bHelp = true;
- }
- //Try find help and debug switches.
- //Note: -help is main switch what shows syntax examples.
- for(it = vArgs.begin(); it != vArgs.end(); it++ )
- {
- //Help switches.
- if ( ! _stricmp( (*it).c_str(), "-?" ) )
- {
- args.bHelp = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- else if ( ! _stricmp( (*it).c_str(), "--?" ) )
- {
- args.bHelp = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- else if ( ! _stricmp( (*it).c_str(), "--help" ) )
- {
- args.bHelp = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- else if ( ! _stricmp( (*it).c_str(), "/?" ) )
- {
- args.bHelp = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- //Debug switches.
- else if ( ! _stricmp( (*it).c_str(), "-show_debug" ) )
- {
- args.bDebugConsole = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- else if ( ! _stricmp( (*it).c_str(), "--show_debug" ) )
- {
- args.bDebugConsole = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- else if ( ! _stricmp( (*it).c_str(), "-show_debug_all" ) )
- {
- args.bDebugConsole = true;
- args.bDebugLowLevel = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- else if ( ! _stricmp( (*it).c_str(), "--show_debug_all" ) )
- {
- args.bDebugConsole = true;
- args.bDebugLowLevel = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- else if ( ! _stricmp( (*it).c_str(), "-show_dbgview" ) )
- {
- args.bDebugDbgView = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- else if ( ! _stricmp( (*it).c_str(), "--show_dbgview" ) )
- {
- args.bDebugDbgView = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- else if ( ! _stricmp( (*it).c_str(), "-show_dbgview_all" ) )
- {
- args.bDebugDbgView = true;
- args.bDebugLowLevel = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- else if ( ! _stricmp( (*it).c_str(), "--show_dbgview_all" ) )
- {
- args.bDebugDbgView = true;
- args.bDebugLowLevel = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- //Raptor switch.
- else if ( ! _stricmp( (*it).c_str(), "-sbs2" ) )
- {
- args.bEnableSbs2 = true;
- it = vArgs.erase( it );
- if ( it == vArgs.end() )
- break;
- }
- }
- if ( vArgs.size() > 0 )
- {
- //Pick up main switch.
- it = vArgs.begin();
- if ( ! _stricmp( (*it).c_str(), "-a" ) )
- args.eMainSwitch = SWITCH_ANALYZE;
- else if ( ! _stricmp( (*it).c_str(), "-p" ) )
- args.eMainSwitch = SWITCH_PARSE_TRACE;
- else if ( ! _stricmp( (*it).c_str(), "-c" ) )
- args.eMainSwitch = SWITCH_CLEAN;
- else if ( ! _stricmp( (*it).c_str(), "-g" ) )
- args.eMainSwitch = SWITCH_HTI_GET;
- else if ( ! _stricmp( (*it).c_str(), "-delete" ) )
- args.eMainSwitch = SWITCH_HTI_DELETE;
- else if ( ! _stricmp( (*it).c_str(), "-v" ) )
- args.eMainSwitch = SWITCH_VERSION;
- else if ( ! _stricmp( (*it).c_str(), "-help" ) )
- args.eMainSwitch = SWITCH_HELP;
- else if ( ! _stricmp( (*it).c_str(), "-me" ) )
- {
- args.eMainSwitch = SWITCH_HOOK;
- args.eHookSwitch = HOOK_EXTERNAL;
- }
- else if ( ! _stricmp( (*it).c_str(), "-e" ) )
- {
- args.eMainSwitch = SWITCH_HOOK;
- args.eHookSwitch = HOOK_EXTERNAL_FAST;
- }
- else if ( ! _stricmp( (*it).c_str(), "-mi" ) )
- {
- args.eMainSwitch = SWITCH_HOOK;
- args.eHookSwitch = HOOK_INTERNAL;
- }
- else if ( ! _stricmp( (*it).c_str(), "-instrument_i" ) )
- {
- args.eMainSwitch = SWITCH_HOOK;
- args.eHookSwitch = HOOK_EXTENSION_INTERNAL;
- }
- else if ( ! _stricmp( (*it).c_str(), "-instrument_e" ) )
- {
- args.eMainSwitch = SWITCH_HOOK;
- args.eHookSwitch = HOOK_EXTENSION_EXTERNAL;
- }
- else if ( ! _stricmp( (*it).c_str(), "-instrument_ef" ) )
- {
- args.eMainSwitch = SWITCH_HOOK;
- args.eHookSwitch = HOOK_EXTENSION_EXTERNAL_FAST;
- }
- else if ( ! _stricmp( (*it).c_str(), "-uninstrument" ) )
- {
- args.eMainSwitch = SWITCH_UNHOOK;
- args.eHookSwitch = HOOK_EXTENSION_UNINSTRUMENT;
- }
- else if ( ! _stricmp( (*it).c_str(), "-uninstrument_failed" ) )
- {
- args.eMainSwitch = SWITCH_UNHOOK;
- args.eHookSwitch = HOOK_EXTENSION_FAILED;
- }
- else if ( ! _stricmp( (*it).c_str(), "-inst" ) )
- {
- args.eMainSwitch = SWITCH_OLD_HOOK;
- args.eHookSwitch = HOOK_OLD_EXTENSION_INSTRUMENT;
- }
- else if ( ! _stricmp( (*it).c_str(), "-uninst" ) )
- {
- args.eMainSwitch = SWITCH_OLD_HOOK;
- args.eHookSwitch = HOOK_OLD_EXTENSION_UNINSTRUMENT;
- }
- else if ( ! _stricmp( (*it).c_str(), "-uninst_failed" ) )
- {
- args.eMainSwitch = SWITCH_OLD_HOOK;
- args.eHookSwitch = HOOK_OLD_EXTENSION_FAILED;
- }
- }
- return true;
-}
-
-/**
-* Parse analyze related arguments from given vector of strings.
-*/
-bool parseAnalyzeArguments( vector<string>& vArgs, ARGUMENTS& args )
-{
- bool bRet = true;
- if ( vArgs.size() < 2 )
- {
- cout << AT_MSG << "Error, missing datafile." << endl;
- return false;
- }
- // Iterator used in this function.
- vector<string>::const_iterator it;
- for(it = vArgs.begin()+1; it != vArgs.end(); it++ )
- {
- if ( it->find("-l") != string::npos )
- {
- if ( it->length() == 3 )
- {
- // Create char array for atoi function
- char level[2];
- level[0] = it->at(2);
- level[1] = 0; // null terminate
- // check that its digit first
- if ( isdigit(level[0]) )
- {
- // pass array to atoi
- int iLoggingLevel = atoi( level );
- if ( iLoggingLevel >= 0 && iLoggingLevel <= 3 )
- {
- // log level ok
- args.ANALYZE.iLoggingLevel = iLoggingLevel;
- continue;
- }
- }
- bRet = false;
- cout << AT_MSG << "Invalid logging level specified (0-3)." << endl;
- args.ANALYZE.iLoggingLevel = -1;
- }
- }
- // No else here because logging level check is done to all args in list.
- // Rom symbol file
- if( _stricmp( it->c_str(), "-s" ) == 0 )
- {
- it++;
- if ( it == vArgs.end() )
- {
- bRet = false;
- cout << AT_MSG << "Missing symbol file." << endl;
- break; // Leave for loop.
- }
- else
- {
- args.ANALYZE.bSymbolFile = true;
- args.ANALYZE.vSymbolFiles.push_back( *it );
- continue;
- }
- }
- else
- {
- // If we got datafile we must assume this is output
- if( ! args.ANALYZE.sDataFile.empty() )
- {
- if ( args.ANALYZE.sOutputFile.empty() )
- args.ANALYZE.sOutputFile = *it;
- else
- {
- bRet = false;
- cout << AT_MSG << "Invalid parameter: " << *it << endl;
- }
- }
- // If this is file we assume datafile
- else if( CATBase::FileExists( it->c_str() ) )
- {
- args.ANALYZE.sDataFile = *it;
- }
- else
- {
- bRet = false;
- cout << AT_MSG << "Specified datafile does not exist." << endl;
- }
- }
- }
- if ( args.ANALYZE.sDataFile.empty() )
- bRet = false;
- return bRet;
-}
-
-
-/**
-* Parse hooking related arguments from given vector of strings.
-*/
-bool parseHookArguments( vector<string>& vArgs, ARGUMENTS& args )
-{
- bool bRet = true;
- try {
- // Iterator used in this function.
- vector<string>::const_iterator it;
-
- // Check that we have some arguments except main switch.
- if ( vArgs.size() < 2 )
- {
- if ( args.eHookSwitch == HOOK_EXTENSION_UNINSTRUMENT
- || args.eHookSwitch == HOOK_EXTENSION_FAILED
- )
- return bRet;
- cout << AT_MSG << "Error, Missing build command." << endl;
- bRet = false;
- }
- bool bBuildFound = false;
- for(it = vArgs.begin()+1; it != vArgs.end(); it++ )
- {
- // If's to pickup atool options
- // no build switch
- if ( _stricmp( it->c_str(), "-nobuild" ) == 0 )
- {
- args.HOOK.bNoBuild = true;
- }
- // call stack size(s)
- else if ( _stricmp( it->c_str(), "-acs" ) == 0 || _stricmp( it->c_str(), "-fcs" ) == 0 )
- {
- // Free vs Alloc
- bool bAlloc = true;
- if ( _stricmp( it->c_str(), "-fcs" ) == 0 )
- bAlloc = false;
- // Value
- it++;
- if ( it== vArgs.end() )
- {
- bRet = false;
- cout << AT_MSG << "Error, missing call stack size parameter." << endl;
- break;
- }
- else if ( ! _stricmp( it->c_str(), "sbs" )
- || ! _stricmp( it->c_str(), "abld" )
- || ! _stricmp( it->c_str(), "-f" ) )
- {
- bRet = false;
- cout << AT_MSG << "Error, missing call stack size parameter." << endl;
- break;
- }
- else
- {
- int i;
- // Try to parse integer value using stream.
- istringstream ss( *it );
- if ( ss>>i )
- {
- // Value parsed ok now check bounds.
- if ( i < AT_CALL_STACK_SIZE_MIN )
- {
- bRet = false;
- cout << AT_MSG << "Error, specified call stack size value too small." << endl;
- break;
- }
- else if ( i > AT_CALL_STACK_SIZE_MAX )
- {
- bRet = false;
- cout << AT_MSG << "Error, specified call stack size value too big." << endl;
- break;
- }
- else
- {
- // Value valid.
- if ( bAlloc )
- args.HOOK.iAllocCallStackSize = i;
- else
- args.HOOK.iFreeCallStackSize = i;
- }
- }
- else
- {
- // Error parsing value using stream.
- bRet = false;
- cout << AT_MSG << "Error, specified call stack size value invalid." << endl;
- break;
- }
-
- }
- }
- // Data file name.
- else if ( _stricmp( it->c_str(), "-f" ) == 0 )
- {
- it++;
- if ( it == vArgs.end() )
- {
- bRet = false;
- cout << AT_MSG << "Error, missing internal data gathering file name." << endl;
- break;
- }
- else if ( ! _stricmp( it->c_str(), "sbs" ) || ! _stricmp( it->c_str(), "abld" ) )
- {
- bRet = false;
- cout << AT_MSG << "Error, missing internal data gathering file name." << endl;
- break;
- }
- else
- {
- if ( checkDataFileName( string( *it ) ) )
- {
- // Pickup filename.
- args.HOOK.bDataFileName = true;
- args.HOOK.sDataFileName = *it;
- }
- else
- {
- bRet = false;
- cout << AT_MSG << "Error, specified internal data gathering file name contains invalid character(s)." << endl;
- break;
- }
- }
- }
- // Build command parsing.
- else if ( _stricmp( it->c_str(), "sbs" ) == 0 )
- {
- bBuildFound = true;
- // Use raptor build system, pickup all rest arguments to sbs commmand.
- bool bFoundConfig = false; // Have we found config already?
- args.HOOK.iBuildSystem = 2;
- vector<string>::const_iterator itC = it;
- args.HOOK.sBuildCmd.clear();
- for ( ; itC != vArgs.end() ; itC++ )
- {
- args.HOOK.sBuildCmd.append( *itC );
- args.HOOK.sBuildCmd.append( " " );
- args.HOOK.vBuildCmd.push_back( *itC );
- }
- // Remove last space
- if ( args.HOOK.vBuildCmd.size() > 1 )
- args.HOOK.sBuildCmd.erase( args.HOOK.sBuildCmd.size()-1 );
-
- // Parse needed variables from sbs command.
- vector<string>::iterator itSbs;
- for( itSbs = args.HOOK.vBuildCmd.begin(); itSbs != args.HOOK.vBuildCmd.end() ; itSbs++ )
- {
- // Program(s).
- if ( _stricmp( itSbs->c_str(), "-p" ) == 0 )
- {
- // Next is program.
- itSbs++;
- args.HOOK.vTargetPrograms.push_back( *itSbs );
- }
- else if ( itSbs->find( "--project=" ) != string::npos )
- {
- itSbs->erase(0, 10 );
- args.HOOK.vTargetPrograms.push_back( *itSbs );
- }
- // platform & build type
- else if ( _stricmp( itSbs->c_str(), "-c" ) == 0 )
- {
- itSbs++;
-
- // Error message if config found more than once.
- if ( bFoundConfig )
- {
- bRet = false;
- cout << AT_MSG << "Error, AnalyzeTool does not support defining more than one configuration (platform & build type)." << endl;
- continue;
- }
- bFoundConfig = true;
-
- // Check for '_' which separates platform and type.
- if ( itSbs->find("_") != string::npos )
- {
- args.HOOK.sPlatform = itSbs->substr(0, itSbs->find("_") );
- args.HOOK.sBuildType = itSbs->substr( itSbs->find("_")+1, itSbs->size()- itSbs->find("_")+1 );
- }
- else
- args.HOOK.sPlatform = *itSbs;
- }
- else if ( itSbs->find( "--config=" ) != string::npos )
- {
- // Error message if config found more than once.
- if ( bFoundConfig )
- {
- bRet = false;
- cout << AT_MSG << "Error, AnalyzeTool does not support defining more than one configuration (platform & build type)." << endl;
- continue;
- }
- bFoundConfig = true;
-
- itSbs->erase( 0, 9 );
- // Check for '_' which separates platform and type.
- if ( itSbs->find("_") != string::npos )
- {
- args.HOOK.sPlatform = itSbs->substr(0, itSbs->find("_") );
- args.HOOK.sBuildType = itSbs->substr( itSbs->find("_")+1, itSbs->size()- itSbs->find("_")+1 );
- }
- else
- args.HOOK.sPlatform = *itSbs;
- }
- }
- // Check platform and build type
- if ( args.HOOK.sPlatform.empty() )
- {
- // not platform was found.
- cout << AT_MSG << "Error, no supported platform found in sbs parameters (armv5/winscw/gcce)." << endl;
- bRet = false;
- }
- else
- {
- // check is platform supported.
- bool bOk = false;
- if ( _stricmp( args.HOOK.sPlatform.c_str(), "armv5" ) == 0 )
- bOk = true;
- else if ( _stricmp( args.HOOK.sPlatform.c_str(), "winscw" ) == 0 )
- bOk = true;
- else if ( _stricmp( args.HOOK.sPlatform.c_str(), "gcce" ) == 0 )
- bOk = true;
- if ( ! bOk )
- {
- // not supported.
- cout << AT_MSG << "Error, no supported platform found in sbs parameters (armv5/winscw/gcce)." << endl;
- bRet = false;
- }
- }
- if ( args.HOOK.sBuildType.empty() )
- {
- // no build type specified.
- cout << AT_MSG << "Error, no build type specified in sbs parameters (udeb/urel)." << endl;
- bRet = false;
- }
- else
- {
- // check is build type supported.
- bool bOk = false;
- if ( _stricmp( args.HOOK.sBuildType.c_str(), "urel" ) == 0 )
- bOk = true;
- else if ( _stricmp( args.HOOK.sBuildType.c_str(), "udeb" ) == 0 )
- bOk = true;
- if ( ! bOk )
- {
- // not supported.
- cout << AT_MSG << "Error, no build type specified in sbs parameters (udeb/urel)." << endl;
- bRet = false;
- }
- }
- }
- else if ( _stricmp( it->c_str(), "abld" ) == 0 )
- {
- bBuildFound = true;
- // Use abld build system, pickup all rest argumenst as abld options.
- args.HOOK.iBuildSystem = 1;
-
- vector<string>::const_iterator itC = it;
- args.HOOK.sBuildCmd.clear();
- for ( ; itC != vArgs.end() ; itC++ )
- {
- args.HOOK.sBuildCmd.append( *itC );
- args.HOOK.sBuildCmd.append( " " );
- args.HOOK.vBuildCmd.push_back( *itC );
- }
-
- string sCmd( args.HOOK.sBuildCmd ); // build command to lower case here.
- for( size_t i = 0 ; i < sCmd.size(); i++ )
- sCmd.at(i) = tolower( sCmd.at(i) );
-
- sCmd.erase(0,11); // remove "abld build "
-
- //Is -debug switch in command?
- if( sCmd.find( "-debug " ) != string::npos )
- {
- sCmd.erase( sCmd.find( "-debug " ), 7 );
- }
-
- // Parse needed "variables" from command.
- bool bOk = false;
-
- // Find platform
- if ( sCmd.find( "armv5" ) != string::npos )
- {
- bOk = true;
- args.HOOK.sPlatform = "armv5";
- sCmd.erase( sCmd.find( "armv5" ), 5 );
- }
- else if ( sCmd.find( "winscw" ) != string::npos )
- {
- bOk = true;
- args.HOOK.sPlatform = "winscw";
- sCmd.erase( sCmd.find( "winscw" ), 6 );
- }
- else if ( sCmd.find( "gcce" ) != string::npos )
- {
- bOk = true;
- args.HOOK.sPlatform = "gcce";
- sCmd.erase( sCmd.find( "gcce" ), 4 );
- }
- if ( bOk )
- {
- // Feature variant.
- if ( sCmd.at(0 ) == '.' )
- {
- sCmd.erase(0,1);
- args.HOOK.sFeatureVariant = sCmd.substr( 0, sCmd.find_first_of(' ') );
- sCmd.erase(0, sCmd.find_first_of(' ')+1 );
- }
- }
- else
- {
- // not platform specified.
- cout << AT_MSG << "Error, no supported platform found in abld parameters (armv5/winscw/gcce)." << endl;
- bRet = false;
- }
-
- // find build type
- bOk = false;
- if ( sCmd.find( "urel" ) != string::npos )
- {
- bOk = true;
- args.HOOK.sBuildType = "urel";
- sCmd.erase( sCmd.find( "urel" ), 4 );
- }
-
- else if ( sCmd.find( "udeb" ) != string::npos )
- {
- bOk = true;
- args.HOOK.sBuildType = "udeb";
- sCmd.erase( sCmd.find( "udeb" ), 4 );
- }
- if( !bOk )
- {
- // no build type specified.
- cout << AT_MSG << "Error, no build type specified in abld parameters (udeb/urel)." << endl;
- bRet = false;
- }
-
- // Is there multiple programs (only should be used from extension).
- if ( sCmd.find(" -p") != string::npos )
- {
- sCmd.erase( sCmd.find(" -p" ), sCmd.size() - sCmd.find(" -p" ) );
- // Loop thru all parameters and pick up programs.
- vector<string>::iterator it;
- for( it = args.HOOK.vBuildCmd.begin(); it != args.HOOK.vBuildCmd.end(); it++ )
- {
- if ( _stricmp( it->c_str(), "-p" ) == 0 )
- {
- // Next is program.
- it++;
- string sProgram = *it;
- // Make sure program name ends with ".mmp".
- CATBase::ChangeToLower( sProgram );
- if ( sProgram.length() >= 4 )
- {
- string sEnd = sProgram.substr( sProgram.length()-4, 4 );
- if ( sEnd.compare( ".mmp" ) != 0 )
- sProgram.append( ".mmp" );
- }
- else
- sProgram.append( ".mmp" );
- args.HOOK.vTargetPrograms.push_back( sProgram );
- }
- }
- }
- else {
- // find single defined program.
- if ( sCmd.find_first_not_of(' ') != string::npos )
- {
- size_t iS = sCmd.find_first_not_of(' ');
- size_t iE = sCmd.find_first_of(' ', iS );
- string sProgram;
- if ( iE == string::npos )
- sProgram = sCmd.substr( iS, sCmd.size()-iS );
- else
- sProgram = sCmd.substr( iS, iE-iS);
- // Make sure program name ends with ".mmp".
- CATBase::ChangeToLower( sProgram );
- if ( sProgram.length() >= 4 )
- {
- string sEnd = sProgram.substr( sProgram.length()-4, 4 );
- if ( sEnd.compare( ".mmp" ) != 0 )
- sProgram.append( ".mmp" );
- }
- else
- sProgram.append( ".mmp" );
- args.HOOK.vTargetPrograms.push_back( sProgram );
- }
- }
- }
- else
- {
- if ( ! bBuildFound )
- {
- bRet = false;
- cout << AT_MSG << "Error, invalid parameter :" << *it << endl;
- break;
- }
- }
- }
- }
- catch(...)
- {
- bRet = false;
- cout << AT_MSG << "Error parsing arguments." << endl;
- }
- return bRet;
-}
-
-
-/**
-* Parse old style hooking related arguments from given vector of strings.
-*/
-bool parseOldHookArguments( vector<string>& vArgs, ARGUMENTS& args )
-{
- // Only supporting extension here atm.
- // This is frozen do not change anything in this else if.
- bool bRet = true;
- vector<string>::iterator it = vArgs.begin()+1;
- string sMmpFileName;
- string sPhoneDataFileName;
- vector<string> vMmpFileNames;
- string sVariant;
- bool bBuildUdeb = true;
- bool bLogTargetS60 = false;
- bool bLogTargetXTI = false;
- bool bPhoneDataFileName = false;
- bool bMmpFileName = false;
- bool bVariant = false;
- bool bEmulator = false;
- bool bGcce = false;
-
- while( it != vArgs.end() )
- {
- string sArgument( *it );
- CATBase::ChangeToLower( sArgument );
- //Mmp filename given?
- if( sArgument.find( ".mmp" ) != string::npos )
- {
- if( bMmpFileName && ! args.bEnableSbs2 )
- {
- cout<<INVALID_PARAMETER<<*it<<"."<<endl;
- return 0;
- }
- sMmpFileName = *it;
- vMmpFileNames.push_back( *it );
- bMmpFileName = true;
- }
- else
- //Logging mode XTI?
- if( stricmp( sArgument.c_str(), LOG_XTI ) == 0 )
- {
- if ( bLogTargetS60 )
- {
- cout<<INVALID_PARAMETER<<*it<<"."<<endl;
- return 0;
- }
- bLogTargetXTI = true;
- }
- else
- //Logging mode S60?
- if( stricmp( sArgument.c_str(), LOG_S60 ) == 0 )
- {
- if ( bLogTargetXTI )
- {
- cout<<INVALID_PARAMETER<<*it<<"."<<endl;
- return 0;
- }
- bLogTargetS60 = true;
- }
- else
- //Variant
- //if( sArgument.find( "-variant" ) != string::npos )
- if( stricmp( sArgument.c_str(), "-variant") == 0 )
- {
- // use variant
- bVariant = true;
- // pickup variant name
- it++;
- if ( it == vArgs.end() )
- {
- cout << "When using -variant, variant name must be specified." << endl;
- return 0;
- }
- sVariant.append( *it );
- }
- else
- //Build urel?
- if( stricmp( sArgument.c_str(), "urel" ) == 0 )
- {
- bBuildUdeb = false;
- }
- else
- //Build udeb?
- //if( sArgument.find( "udeb" ) != string::npos && sArgument.length() == 4)
- if( stricmp( sArgument.c_str(), "udeb" ) == 0 )
- {
- bBuildUdeb = true;
- }
- else
- //Build for emulator
- if( stricmp( sArgument.c_str(), "-e" ) == 0 || stricmp( sArgument.c_str(), "-winscw") == 0 )
- {
- bEmulator = true;
- }
- else
- if( stricmp( sArgument.c_str(), "-gcce") == 0 )
- {
- bGcce = true;
- }
- else
- //Assume its data file name
- if( bLogTargetS60 )
- {
- if ( bPhoneDataFileName )
- {
- cout<<INVALID_PARAMETER<<*it<<"."<<endl;
- bRet = false;
- }
- // Check that datafile name is <= 50 chars long
- if ( sArgument.size() > 50 )
- {
- cout << AT_MSG << "Error, specified datafile name too long (Max 50 chars)." << endl;
- bRet = false;
- }
- sPhoneDataFileName = sArgument;
- bPhoneDataFileName = true;
- }
- // unregognized build parameter
- else
- {
- // print error and exit
- cout<<INVALID_PARAMETER<<*it<<"."<<endl;
- bRet = false;
- }
- it++;
- }
- // platform
- if ( bEmulator )
- args.HOOK.sPlatform = "winscw";
- else
- args.HOOK.sPlatform = "armv5";
- if ( bGcce )
- args.HOOK.sPlatform = "gcce";
- // build type
- if ( bBuildUdeb )
- args.HOOK.sBuildType = "udeb";
- else
- args.HOOK.sBuildType = "urel";
- // Variant
- if ( bVariant )
- args.HOOK.sFeatureVariant = sVariant;
- if ( ! bLogTargetS60 && ! bLogTargetXTI )
- args.HOOK.iLoggingMode = 1;
- if ( bLogTargetS60 )
- args.HOOK.iLoggingMode = 2;
- else if ( bLogTargetXTI )
- args.HOOK.iLoggingMode = 1;
- // If selected modules to be compiled
- if ( vMmpFileNames.size() > 0 )
- args.HOOK.vTargetPrograms = vMmpFileNames;
- // S60 data file name
- if ( ! sPhoneDataFileName.empty() )
- {
- args.HOOK.bDataFileName = true;
- args.HOOK.sDataFileName = sPhoneDataFileName;
- }
- return bRet;
-}
-
-/**
-* Parse HTI related arguments from given vector of strings.
-*/
-bool parseHtiArguments( vector<string>& /* vArgs */, ARGUMENTS& /* args*/)
-{
- //Implementation currently in hti.cpp, should be moved here.
- return false;
-}
-
-/**
-* Parse trace parsing related arguments from given vector of strings.
-*/
-bool parseParseArguments( vector<string>& vArgs, ARGUMENTS& args )
-{
- // Iterator used in this function.
- vector<string>::const_iterator it = vArgs.begin();
-
- if ( it == vArgs.end() )
- return false;
-
- it++;
-
- if ( it == vArgs.end() )
- {
- cout << AT_MSG << "Error, input file not defined (raw data file)." << endl;
- return false;
- }
-
- //Input.
- args.PARSE.bDataFile = true;
- args.PARSE.sDataFile = *it;
-
- it++;
- if ( it == vArgs.end() )
- {
-
- cout << AT_MSG << "Error, output file not defined (device data file)." << endl;
- return false;
- }
-
- //Output.
- args.PARSE.bOutputFile = true;
- args.PARSE.sOutputFile = *it;
- return true;
-}
-
-//EOF