kerneltest/e32utils/analyse/ProcessCfg.cpp
changeset 0 a41df078684a
equal deleted inserted replaced
-1:000000000000 0:a41df078684a
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 #include <windows.h>
       
    18 #include "analyse.h"
       
    19 #include "nonxip.h"
       
    20 
       
    21 
       
    22 extern NonXIP gNonXIP;
       
    23 
       
    24 const char* COMMON_SECT="Common";
       
    25 const char* PROFILE_SECT="Profile";
       
    26 const char* PARTITION_SECT="Partition";
       
    27 const char* FORMAT_SECT="Format";
       
    28 const char* NON_XIP_SECT="NonXIP";
       
    29 
       
    30 std::string Analyse::iRomFile;
       
    31 std::string Analyse::iThread;
       
    32 std::string Analyse::iDll;
       
    33 std::string Analyse::iFunction;
       
    34 std::vector<std::string> Analyse::iTraces;
       
    35 
       
    36 int Analyse::ProcessCfgFile(const char* aCfgFileName)
       
    37 	{
       
    38 	char buf[1024];
       
    39 	char path[MAX_PATH];
       
    40 	if (aCfgFileName[0] != '\\' || aCfgFileName[1] != ':')
       
    41 		{
       
    42 		char ** file_name = 0;
       
    43 		if (!GetFullPathNameA(aCfgFileName, sizeof path, path, file_name))
       
    44 			return ENoCfgFile;
       
    45 		aCfgFileName = path;
       
    46 		}
       
    47 
       
    48 	if (GetFileAttributesA(aCfgFileName) == 0xffffffff) // no ini file
       
    49 		return ENoCfgFile;
       
    50 	int rc = GetPrivateProfileStringA(COMMON_SECT, "TraceFile", "", buf, sizeof buf, aCfgFileName);
       
    51 	if (rc)
       
    52 		{
       
    53 		iTraces.push_back(buf);
       
    54 		sTraces.push_back(iTraces[iTraces.size()-1].c_str());
       
    55 		}
       
    56 
       
    57 	GetPrivateProfileStringA(COMMON_SECT, "Mode", "profile", buf, sizeof buf, aCfgFileName);
       
    58 	switch(buf[0])
       
    59 		{
       
    60 	case 'l': case 'L':
       
    61 		sAction = ETrace;
       
    62 		break;
       
    63 	case 'p': case 'P':
       
    64 		sAction = EProfile;
       
    65 		break;
       
    66 	case 'a': case 'A':
       
    67 		sAction = EActivity;
       
    68 		break;
       
    69 	default:
       
    70 		return EErrorCfgFile;
       
    71 		}
       
    72 
       
    73 	rc = GetPrivateProfileStringA(COMMON_SECT, "SymbolFile", "", buf, sizeof buf, aCfgFileName);
       
    74 	if (rc) 
       
    75 		{
       
    76 		iRomFile = buf;
       
    77 		sRomFile = iRomFile.c_str();
       
    78 		}
       
    79 
       
    80 	rc = GetPrivateProfileStringA(COMMON_SECT, "Range", "", buf, sizeof buf, aCfgFileName);
       
    81 	if (rc) 
       
    82 		{
       
    83 		sOptions |= ERange;
       
    84 		bool plus = false;
       
    85 		char * p = strrchr(buf, '+');
       
    86 		if (p)
       
    87 			plus = true;
       
    88 		else
       
    89 			p = strrchr(buf, '-');
       
    90 		if (!p) return EErrorCfgFile;
       
    91 		*p = '\0';
       
    92 		sBeginSample = atoi(buf);
       
    93 		sEndSample = atoi(++p);
       
    94 		if (plus) 
       
    95 			sEndSample = sEndSample += sBeginSample;
       
    96 		}
       
    97 
       
    98 	rc = GetPrivateProfileIntA(COMMON_SECT, "IncludeNullThread", 0, aCfgFileName);
       
    99 	if (rc) 
       
   100 		sOptions|=ENull;
       
   101 	
       
   102 	rc = GetPrivateProfileStringA(COMMON_SECT, "Cutoff", "", buf, sizeof buf, aCfgFileName);
       
   103 	if (rc) 
       
   104 		sCutOff = atof(buf);
       
   105 
       
   106 
       
   107 	rc = GetPrivateProfileStringA(PROFILE_SECT, "Thread", "", buf, sizeof buf, aCfgFileName);
       
   108 	if (rc) 
       
   109 		{
       
   110 		iThread = buf;
       
   111 		sThread = iThread.c_str();
       
   112 		}
       
   113 
       
   114 	rc = GetPrivateProfileStringA(PROFILE_SECT, "Dll", "", buf, sizeof buf, aCfgFileName);
       
   115 	if (rc) 
       
   116 		{
       
   117 		iDll = buf;
       
   118 		sDll = iDll.c_str();
       
   119 		}
       
   120 
       
   121 	rc = GetPrivateProfileStringA(PROFILE_SECT, "Function", "", buf, sizeof buf, aCfgFileName);
       
   122 	if (rc) 
       
   123 		{
       
   124 		iFunction = buf;
       
   125 		sFunction = iFunction.c_str();
       
   126 		}
       
   127 
       
   128 	rc = GetPrivateProfileStringA(PROFILE_SECT, "Range", "", buf, sizeof buf, aCfgFileName);
       
   129 	if (rc) 
       
   130 		{
       
   131 		sOptions |= EAddress;
       
   132 		bool plus = false;
       
   133 		char * p = strrchr(buf, '+');
       
   134 		if (p)
       
   135 			plus = true;
       
   136 		else
       
   137 			p = strrchr(buf, '-');
       
   138 		if (!p) return EErrorCfgFile;
       
   139 		*p = '\0';
       
   140 		sBase = strtoul(buf,0,16);
       
   141 		sLim = strtoul(++p,0,16);
       
   142 		if (plus) 
       
   143 			sLim = sLim += sBase;
       
   144 		}
       
   145 	
       
   146 
       
   147 	rc = GetPrivateProfileStringA(PARTITION_SECT, "Mode", "", buf, sizeof buf, aCfgFileName);
       
   148 	if (rc)
       
   149 		{
       
   150 		switch(buf[0])
       
   151 			{
       
   152 		case 'd': case 'D':
       
   153 			sPartition = EDll;
       
   154 			break;
       
   155 		case 'f': case 'F':
       
   156 			sPartition = EFunction;
       
   157 			break;
       
   158 		default:
       
   159 			return EErrorCfgFile;
       
   160 			}
       
   161 		}
       
   162 
       
   163 	rc = GetPrivateProfileIntA(PARTITION_SECT, "BucketSize", 0, aCfgFileName);
       
   164 	if (rc)
       
   165 		{
       
   166 		sPartition = ESize;
       
   167 		sBucketSize = rc;
       
   168 		}
       
   169 
       
   170 	rc = GetPrivateProfileIntA(PARTITION_SECT, "NumberOfBuckets", 0, aCfgFileName);
       
   171 	if (rc)
       
   172 		{
       
   173 		sPartition = EBuckets;
       
   174 		sBuckets = rc;
       
   175 		}
       
   176 
       
   177 
       
   178 
       
   179 	rc = GetPrivateProfileStringA(FORMAT_SECT, "Mode", "", buf, sizeof buf, aCfgFileName);
       
   180 	if (rc)
       
   181 		{
       
   182 		switch(buf[0])
       
   183 			{
       
   184 		case 'p': case 'P':
       
   185 			sFormat = EPercent;
       
   186 			break;
       
   187 		case 's': case 'S':
       
   188 			sFormat = ESamples;
       
   189 			break;
       
   190 		case 'e': case 'E':
       
   191 			sFormat = EExcel;
       
   192 			break;
       
   193 		default:
       
   194 			return EErrorCfgFile;
       
   195 			}
       
   196 		}
       
   197 
       
   198 	rc = GetPrivateProfileIntA(FORMAT_SECT, "ZeroValues", 0, aCfgFileName);
       
   199 	if (rc)
       
   200 		sOptions |= EZeros;
       
   201 
       
   202 	rc = GetPrivateProfileIntA(FORMAT_SECT, "NoOthers", 0, aCfgFileName);
       
   203 	if (rc)
       
   204 		sOptions |= ENoOther;
       
   205 
       
   206 	rc = GetPrivateProfileIntA(FORMAT_SECT, "TotalOnly", 0, aCfgFileName);
       
   207 	if (rc)
       
   208 		sOptions |= ETotalOnly;
       
   209 
       
   210 
       
   211 	char key[256];
       
   212 	for(int i=1;sprintf(key,"ObyFile%d",i),
       
   213 		GetPrivateProfileStringA(NON_XIP_SECT, key, "", buf, sizeof buf, aCfgFileName);i++)
       
   214 		gNonXIP.AddObyFile(buf);
       
   215 
       
   216 	for(i=1;sprintf(key,"RofsSymbolFile%d",i),
       
   217 		GetPrivateProfileStringA(NON_XIP_SECT, key, "", buf, sizeof buf, aCfgFileName);i++)
       
   218 		gNonXIP.AddSymbolFile(buf);
       
   219 
       
   220 	return EOk;
       
   221 	}
       
   222