201031
authorhgs
Mon, 23 Aug 2010 15:29:36 +0300
changeset 41 838cdffd57ce
parent 36 813b186005b6
child 42 0ff24a8f6ca2
201031
layers.sysdef.xml
tracefw/tracecompiler/group/bld.inf
tracefw/tracecompiler/group/build.xml
tracefw/tracecompiler/src/com.nokia.tracecompiler/.classpath
tracefw/tracecompiler/src/com.nokia.tracecompiler/.project
tracefw/tracecompiler/src/com.nokia.tracecompiler/.settings/org.eclipse.core.resources.prefs
tracefw/tracecompiler/src/com.nokia.tracecompiler/.settings/org.eclipse.jdt.core.prefs
tracefw/tracecompiler/src/com.nokia.tracecompiler/.settings/org.eclipse.jdt.ui.prefs
tracefw/tracecompiler/src/com.nokia.tracecompiler/about.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/build.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/Messages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompiler.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerConfiguration.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerConstants.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerGlobals.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerIllegalArgumentsException.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerLogger.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerMain.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerModelListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerRootException.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerView.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryDefRef.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryEngine.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryFile.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryFileConstants.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryFileExport.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryFileRef.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryFileWriter.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryPreferences.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryRef.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/Messages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/DataType.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/Dictionary.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/LocationStore.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/Options.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TagWriter.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TestEncoder.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/Trace.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TraceComponent.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TraceDataStore.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TraceDictionaryEncoder.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TraceGroup.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TypeDef.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TypeDefStore.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/XMLDataFilter.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/messages.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/FileDocument.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/FileDocumentMonitor.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/Messages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/StringDocument.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/StringDocumentFactory.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/messages.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/ConfigurationDelegate.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/LocationListBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/LocationMapModelListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/LocationProperties.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/Messages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/SourceContextManager.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/SourceContextManagerImpl.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngine.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineActions.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineConfiguration.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineConfigurationListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineErrorCodes.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineErrorMessages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineEvents.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineGlobals.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineInterface.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineView.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceLocation.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceLocationConverter.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceLocationList.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceLocationListListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceLocationMap.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/ViewAdapter.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/EventEngine.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/Messages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/messages.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckFormattedTraceExists.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckIsBufferSizeDynamic.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckIsKernelModeEndifNeeded.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckIsKernelModeFlagNeeded.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckIsTraceBufferBuilt.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckIsTraceFormatDuplicate.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckParameterNeedsAlignment.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/ComplexHeaderRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/HeaderConstants.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/HeaderEngine.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/HeaderTemplate.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/IteratorComplexTraces.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/IteratorParameters.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/IteratorTraces.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/Messages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/SetNewLineCount.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TemplateCheckBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TemplateChoice.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TemplateIterator.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TemplateIteratorEntry.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TraceHeader.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TraceHeaderWriter.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/messages.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/messages.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/plugin/PluginEngine.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/plugin/PluginTracePropertyVerifier.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/plugin/TraceAPIPluginManager.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/plugin/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/Messages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/ProjectConstants.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/ProjectEngine.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/SortedProperties.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/TraceCompilerProject.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/TraceIDCache.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/messages.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/DocumentElementWrapper.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/EnumElementParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/FileElementParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/Messages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/PropertyFileConstants.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/PropertyFileElementParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/PropertyFileEngine.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/PropertyFileParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/PropertyFileUtils.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/TracePropertyFile.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/ValueElementParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/messages.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ArrayParameterRuleImpl.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutoAddFunctionParametersRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutoAddParameterRuleBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutoAddReturnParameterRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutoAddThisPtrRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutoAddValueRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutomaticTraceTextRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ClassNameWrapper.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ComplexHeaderRuleImpl.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/EndOfFunctionLocationRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/EntryTraceRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ExitTracePropertyBuilder.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ExitTraceRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ExtensionBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/FillerParameterRuleImpl.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/Messages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ParameterTypeMappingRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/PerformanceEventRuleBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/PerformanceEventStartRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/PerformanceEventStopRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ReadOnlyObjectRuleImpl.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RuleBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RuleUtils.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngine.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngineConfigurationListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngineConstants.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngineModelListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEnginePluginManager.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngineResetListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/SourceParserRuleBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/StartOfFunctionLocationRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/StateTraceRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ThisPointerParameterTemplate.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/TraceFormatRuleBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/TraceParameterFormattingRuleBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ValueParameterTemplate.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/messages.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/osttrace/OstConstants.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/osttrace/OstTraceFormatRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/osttrace/OstTraceParserRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/osttrace/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/Messages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceEngine.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceEngineModelExtensionListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceEngineModelListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceFormatter.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceLocationRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceParserResult.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceParserRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceProperties.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/TraceFormattingRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/TraceParameterFormattingRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/messages.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/utils/TraceMultiplierRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/utils/TraceUtils.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/utils/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/file/FileCompareOutputStream.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/file/FileUtils.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/licence.lic
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/licence_hash.lic
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/messages.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/DuplicateParameterNameModifier.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/DuplicateValueModifier.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/Trace.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceCompilerErrorParameters.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceCompilerException.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceConstantTable.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceConstantTableEntry.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceGroup.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModel.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModelExtension.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModelExtensionListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModelListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModelPersistentExtension.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModelResetListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObject.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectFactory.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectModifier.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectProperty.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectPropertyList.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectPropertyVerifier.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectRuleCreateObject.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectRuleFactory.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectRuleOnDelete.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectRuleRemoveOnCreate.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectUtils.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceParameter.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceProcessingListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceAPIFormatter.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceAPIParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceAPIPlugin.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceCompilerExport.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceCompilerPlugin.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceFormatConstants.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceHeaderContribution.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/FormattingUtils.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/GroupNameIdPair.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/GroupNames.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/Messages.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/ProjectFileParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/ProjectUtils.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/PropertyNames.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/TraceLocationParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/TraceProjectAPI.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/TraceProjectAPIList.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/TraceProjectFile.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/messages.properties
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/rules/ArrayParameterRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/rules/FillerParameterRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/rules/HiddenTraceObjectRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/rules/ReadOnlyObjectRule.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/rules/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/ContextAreaParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/ContextSearchData.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/ExcludedAreaParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/ExcludedAreaSearchData.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/FormatMapping.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/FunctionReturnValueParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/FunctionReturnValueSearchData.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/OffsetLength.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/ParsedType.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/PositionArrayComparator.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceConstants.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceContext.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceDocumentFactory.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceDocumentInterface.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceDocumentMonitor.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceDocumentProcessor.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceErrorCodes.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceExcludedArea.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceIterator.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceLocation.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceLocationBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceLocationInterface.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceLocationListener.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceParameter.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceParameterTokenizer.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceParser.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceParserException.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourcePropertyProvider.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceReturn.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceSearch.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceSelector.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceStringSearch.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceUtils.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SymbianConstants.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/TokenizerSearchData.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/TypeMapping.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/package.html
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/DocumentAdapter.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/DocumentFactory.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/DocumentFactoryBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/DocumentMonitorBase.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/SimpleLocation.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/TraceCompilerVersion.java
tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/package.html
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_1.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_2.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_3.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_4.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_5.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_6_0.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_6_1.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_6_2.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_6_3.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_7_0.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_7_1.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_7_2.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_8.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_9.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_tc_output_8.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_tc_output_9.txt
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/group/FixedIdDefinitionsTestApp.mmp
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/group/bld.inf
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/inc/FixedIdDefinitionsTestApp.h
tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/src/FixedIdDefinitionsTestApp.cpp
tracefw/tracecompiler/test/MultipleCppTraceErrorApp/data/referencelog.txt
tracefw/tracecompiler/test/MultipleCppTraceErrorApp/group/MultipleCppTraceErrorApp.mmp
tracefw/tracecompiler/test/MultipleCppTraceErrorApp/group/bld.inf
tracefw/tracecompiler/test/MultipleCppTraceErrorApp/inc/MultipleCppTraceErrorApp.h
tracefw/tracecompiler/test/MultipleCppTraceErrorApp/sis/TraceErrorApp_EKA2.pkg
tracefw/tracecompiler/test/MultipleCppTraceErrorApp/src/ExtraCppFile.cpp
tracefw/tracecompiler/test/MultipleCppTraceErrorApp/src/MultipleCppTraceErrorApp.cpp
tracefw/tracecompiler/test/MultipleCppTraceErrorApp/traces/OstTraceDefinitions.h
tracefw/tracecompiler/test/MultipleCppTraceErrorApp/traces/fixed_id.definitions
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/data/referencelog.txt
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/group/MultipleMmpTraceErrorApp1.mmp
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/group/MultipleMmpTraceErrorApp2.mmp
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/group/bld.inf
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/inc/MultipleMmpTraceErrorApp.h
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/sis/TraceErrorApp_EKA2.pkg
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/src/ExtraCppFile1.cpp
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/src/ExtraCppFile2.cpp
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/src/MultipleMmpTraceErrorApp1.cpp
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/src/MultipleMmpTraceErrorApp2.cpp
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/traces/OstTraceDefinitions.h
tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/traces/fixed_id.definitions
tracefw/tracecompiler/test/TraceErrorApp/data/referencelog.txt
tracefw/tracecompiler/test/TraceErrorApp/group/TraceErrorApp.mmp
tracefw/tracecompiler/test/TraceErrorApp/group/bld.inf
tracefw/tracecompiler/test/TraceErrorApp/inc/TraceErrorApp.h
tracefw/tracecompiler/test/TraceErrorApp/sis/TraceErrorApp_EKA2.pkg
tracefw/tracecompiler/test/TraceErrorApp/src/TraceErrorApp.cpp
tracefw/tracecompiler/test/TraceErrorApp/traces/OstTraceDefinitions.h
tracefw/tracecompiler/test/TraceErrorApp/traces/fixed_id.definitions
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/console/group/HelloTraceConsole.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/console/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/console/group/hellotraceconsole.iby
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/console/inc/HelloTraceConsole.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/console/src/HelloTraceConsole.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/bwins/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/eabi/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/group/HelloTraceDll.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/group/HelloTraceDll2.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/group/hellotracedll.iby
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceExample.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceFn.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceFn2.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceInterface.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceInterface2.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTracePanic.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceTypes.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceTypes2.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceFn2Dup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceFn2Dup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceFnDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceFnDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceInterface2Dup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceInterface2Dup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceInterfaceDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceInterfaceDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceTypes2Dup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceTypes2Dup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceTypesDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceTypesDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/src/HelloTraceExample.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/src/HelloTraceFn.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/src/HelloTraceInterface.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/src/HelloTracePanic.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/src/HelloTraceTypes.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/traces/trace.properties
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/console/group/HelloTraceConsole.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/console/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/console/group/hellotraceconsole.iby
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/console/inc/HelloTraceConsole.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/console/src/HelloTraceConsole.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/bwins/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/eabi/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/group/HelloTraceDll.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/group/HelloTraceDll2.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/group/hellotracedll.iby
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/inc/HelloTraceExample.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/inc/HelloTraceFn.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/inc/HelloTraceInterface.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/inc/HelloTracePanic.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/inc/HelloTraceTypes.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceFnDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceFnDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceInterfaceDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceInterfaceDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceTypesDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceTypesDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/src/HelloTraceExample.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/src/HelloTraceFn.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/src/HelloTraceInterface.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/src/HelloTracePanic.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/src/HelloTraceTypes.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/traces/hellotracedll2_dll/trace.properties
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/traces/hellotracedll_dll/trace.properties
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/console/group/HelloTraceConsole.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/console/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/console/group/hellotraceconsole.iby
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/console/inc/HelloTraceConsole.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/console/src/HelloTraceConsole.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/bwins/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/eabi/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/group/HelloTraceDll.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/group/HelloTraceDll2.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/group/hellotracedll.iby
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceExample.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceFn.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceFn2.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceInterface.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceInterface2.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTracePanic.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceTypes.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceTypes2.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceFn2Dup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceFn2Dup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceFnDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceFnDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceInterface2Dup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceInterface2Dup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceInterfaceDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceInterfaceDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceTypes2Dup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceTypes2Dup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceTypesDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceTypesDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceExample.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceExample2.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceFn.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceFn2.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceInterface.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceInterface2.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTracePanic.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTracePanic2.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceTypes.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceTypes2.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/traces/trace.properties
tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/console/group/HelloTraceConsole.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/console/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/console/group/hellotraceconsole.iby
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/console/inc/HelloTraceConsole.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/bwins/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/eabi/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/group/HelloTraceDll.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/group/hellotracedll.iby
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/inc/HelloTraceExample.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/inc/HelloTraceFn.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/inc/HelloTraceInterface.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/inc/HelloTracePanic.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/inc/HelloTraceTypes.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceFnDup.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceFnDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceInterfaceDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceInterfaceDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceTypesDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceTypesDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/src/HelloTraceExample.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/src/HelloTraceFn.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/src/HelloTraceInterface.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/src/HelloTracePanic.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/src/HelloTraceTypes.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/traces/trace.properties
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/console/group/HelloTraceConsole.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/console/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/console/group/hellotraceconsole.iby
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/console/inc/HelloTraceConsole.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/console/src/HelloTraceConsole.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/bwins/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/eabi/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/group/HelloTraceDll.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/group/hellotracedll.iby
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/inc/HelloTraceExample.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/inc/HelloTraceFn.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/inc/HelloTraceInterface.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/inc/HelloTracePanic.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/inc/HelloTraceTypes.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceFnDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceFnDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceInterfaceDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceInterfaceDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceTypesDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceTypesDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/src/HelloTraceExample.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/src/HelloTraceFn.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/src/HelloTraceInterface.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/src/HelloTracePanic.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/src/HelloTraceTypes.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/traces/hellotracedll_dll/trace.properties
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/console/group/HelloTraceConsole.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/console/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/console/group/hellotraceconsole.iby
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/console/inc/HelloTraceConsole.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/console/src/HelloTraceConsole.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/bwins/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/eabi/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/group/HelloTraceDll.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/group/hellotracedll.iby
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/inc/HelloTraceExample.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/inc/HelloTraceInterface.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/inc/HelloTracePanic.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/inc/HelloTraceTypes.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceFnDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceFnDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceInterfaceDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceInterfaceDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceTypesDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceTypesDup2.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/src/HelloTraceExample.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/src/HelloTraceFn.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/src/HelloTraceInterface.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/src/HelloTracePanic.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/src/HelloTraceTypes.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/traces/trace.properties
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/console/group/HelloTraceConsole.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/console/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/console/group/hellotraceconsole.iby
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/console/inc/HelloTraceConsole.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/console/src/HelloTraceConsole.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/bwins/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/eabi/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/group/HelloTraceDll.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/group/hellotracedll.iby
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/inc/HelloTraceExample.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/inc/HelloTraceFn.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/inc/HelloTraceInterface.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/inc/HelloTracePanic.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/inc/HelloTraceTypes.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceFn.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceFnDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceInterface.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceInterfaceDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceTypes.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceTypesDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/src/HelloTraceExample.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/src/HelloTraceFn.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/src/HelloTraceInterface.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/src/HelloTracePanic.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/src/HelloTraceTypes.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/traces/trace.properties
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/console/group/HelloTraceConsole.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/console/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/console/group/hellotraceconsole.iby
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/console/inc/HelloTraceConsole.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/console/src/HelloTraceConsole.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/bwins/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/eabi/HelloTraceDllu.def
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/group/HelloTraceDll.mmp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/group/bld.inf
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/group/hellotracedll.iby
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/inc/HelloTraceExample.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/inc/HelloTraceFn.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/inc/HelloTraceInterface.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/inc/HelloTracePanic.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/inc/HelloTraceTypes.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceFn.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceFnDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceInterface.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceInterfaceDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceTypes.inl
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceTypesDup.h
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/src/HelloTraceExample.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/src/HelloTraceFn.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/src/HelloTraceInterface.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/src/HelloTracePanic.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/src/HelloTraceTypes.cpp
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/traces/hellotracedll_dll/trace.properties
tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/group/bld.inf
tracefw/tracecompiler/test/group/bld.inf
tracefw/tracecompiler/test/group/build.xml
tracefw/tracecompiler/test/group/ccbuild.xml
tracefw/tracecompiler/test/group/readme.txt
tracefw/tracecompiler/test/lib/junit-4.7.jar
tracefw/tracecompiler/test/multipleMmpTestCases/group/bld.inf
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/group/bld.inf
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/group/mmp_traces1.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/group/mmp_traces2.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/inc/MultipleMmpApp.h
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/src/ExtraCppFile1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/src/ExtraCppFile2.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/src/MultipleMmpApp1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/src/MultipleMmpApp2.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/group/bld.inf
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/group/mmp_traces_mixed1.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/group/mmp_traces_mixed2.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/inc/MultipleMmpApp.h
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/src/ExtraCppFile1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/src/ExtraCppFile2.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/src/MultipleMmpApp1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/src/MultipleMmpApp2.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/group/bld.inf
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/group/mmp_traces_mmpname1.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/group/mmp_traces_mmpname2.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/inc/MultipleMmpApp.h
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/src/ExtraCppFile1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/src/ExtraCppFile2.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/src/MultipleMmpApp1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/src/MultipleMmpApp2.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/group/bld.inf
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/group/mmp_traces_slash_target_ext1.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/group/mmp_traces_slash_target_ext2.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/inc/MultipleMmpApp.h
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/src/ExtraCppFile1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/src/ExtraCppFile2.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/src/MultipleMmpApp1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/src/MultipleMmpApp2.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/group/bld.inf
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/group/mmp_traces_slash_target_cs_ext1.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/group/mmp_traces_slash_target_cs_ext2.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/inc/MultipleMmpApp.h
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/src/ExtraCppFile1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/src/MultipleMmpApp1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/group/bld.inf
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/group/mmp_traces_target_type1.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/group/mmp_traces_target_type2.mmp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/inc/MultipleMmpApp.h
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/src/ExtraCppFile1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/src/ExtraCppFile2.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/src/MultipleMmpApp1.cpp
tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/src/MultipleMmpApp2.cpp
tracefw/tracecompiler/test/src/ErrorLogsTestBase.java
tracefw/tracecompiler/test/src/ErrorLogsTestSystem.java
tracefw/tracecompiler/test/src/ErrorLogsTestUnit.java
tracefw/tracecompiler/test/src/FixedIdDefinitionsTest.java
tracefw/tracecompiler/test/src/GroupNamesTest.java
tracefw/tracecompiler/test/src/MacroWrappersTest.java
tracefw/tracecompiler/test/src/MultipleMmpTest.java
tracefw/tracecompiler/test/src/ParseFunctionParametersTest.java
tracefw/tracecompiler/test/src/PluginTracePropertyVerifierTest.java
tracefw/tracecompiler/test/src/TraceHeadersLicenceTest.java
tracefw/tracecompiler/test/src/TraceLocationConverterTest.java
tracefw/tracecompiler/test/src/TracesInHeadersTest.java
tracefw/tracecompiler/test/testdata/test_opensystemtrace_types.h
tracefw/tracecompiler/tracecompiler/readme.txt
tracefw/tracecompiler/tracecompiler/release_note.txt
tracefw/tracecompiler/tracecompiler/tracecompiler.pl
tracefw/tracecompiler/tracecompiler/tracecompiler.pm
tracefw/tracecompiler/tracecompiler/tracecompiler.zip
tracefw/tracecompiler/tracecompiler/tracecompiler_mmp_data.pm
tracefw/tracecompiler/tracecompiler/tracecompiler_parse_mmp.pl
--- a/layers.sysdef.xml	Thu Jul 29 16:04:29 2010 +0300
+++ b/layers.sysdef.xml	Mon Aug 23 15:29:36 2010 +0300
@@ -7,7 +7,12 @@
   <systemModel>
     <layer name="os_layer">
       <module name="osrndtools">
-        <unit unitID="tools.osrndtools" mrp="" bldFile="&layer_real_source_path;/group" name="osrndtools" />
+      	<component name="osrndtools">
+        	<unit unitID="tools.osrndtools" mrp="" bldFile="&layer_real_source_path;/group" name="osrndtools" />
+        </component>
+        <component name="tracecompiler">
+          <unit unitID="tools.tracecompiler" mrp="" bldFile="&layer_real_source_path;/tracefw/tracecompiler/group" name="tracecompiler" />
+        </component>
       </module>
     </layer>
   </systemModel>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2008 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: 
+*
+* TraceCompiler
+*/
+
+PRJ_PLATFORMS
+TOOLS2
+
+PRJ_EXPORTS
+../tracecompiler/tracecompiler.pl 			+/tools/ //
+../tracecompiler/tracecompiler.pm 			+/tools/ //
+../tracecompiler/tracecompiler_parse_mmp.pl 		+/tools/ //
+../tracecompiler/tracecompiler_mmp_data.pm		+/tools/ //
+	
+
+:zip ../tracecompiler/tracecompiler.zip +/tools/tracecompiler overwrite//
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/group/build.xml	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,119 @@
+<!--
+#
+# Copyright (c) 2008-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: 
+#
+-->
+<project name="OstTraceCompiler" default="build" basedir="..">
+
+<condition property="isLinux">
+    <os name="linux"/>
+</condition>
+
+<condition property="isWindows">
+	<not>
+		<os name="linux"/>
+	</not>
+</condition>
+	
+<condition property="isRel">
+	<matches string="${epoc.rel}" pattern="^.*rel$"/>
+</condition>
+	
+<condition property="isDeb">
+	<matches string="${epoc.rel}" pattern="^.*deb$"/>
+</condition>
+
+	
+<target name="init" >
+	<property environment="env" />
+	<property name="epoc.root" value="${env.EPOCROOT}/" />
+	<property name="src.dir" value="src" />
+	<property name="jar.dir" value="jar" />
+	<property name="dest.dir" value="${tools.rel}/tracecompiler" />
+	<property name="build.dir" value="${epoc.root}epoc32/build/ost/tracecompiler" />
+</target>
+
+
+<target name="clean" depends="init" if="isRel">
+	<echo>Cleaning the ${build.dir}</echo>
+	<delete dir="${build.dir}"/>
+	<echo>Creating the build directory</echo>
+	<mkdir dir="${build.dir}"/>
+	
+	<echo>Deleting *.xml_ files</echo>
+	<delete>
+		<fileset dir="${epoc.root}epoc32/build" includes="**/*.xml_"/>
+	</delete>
+    <delete dir="${dest.dir}"/>
+    <delete file="tracecompiler/tracecompiler.zip"/>
+</target>
+
+	
+<target name="what" depends="init" description="Prints out all releasables">
+	<pathconvert pathsep="${line.separator}" property="output">
+		<fileset dir="${dest.dir}" casesensitive="no"/>
+	</pathconvert>
+	<echo message="${output}" />
+</target>
+
+
+<target name="build" if="isRel" depends="clean">	
+	<javac srcdir="${src.dir}" destdir="${build.dir}" debug="true" target="1.5"></javac>
+
+	<echo> Copying html and properties files from src/com.nokia.tracecompiler/src to ${build.dir} </echo>
+	<copy todir="${build.dir}">
+		<fileset dir="src/com.nokia.tracecompiler/src" includes="**/*.properties"/>
+		<fileset dir="src/com.nokia.tracecompiler/src" includes="**/*.html"/>
+        <fileset dir="src/com.nokia.tracecompiler/src" includes="**/*.lic"/>
+	</copy>
+
+	<antcall target="change_windows_file_attributes"></antcall>
+
+	<antcall target="change_linux_file_attributes"></antcall>
+
+	<echo>Zip TraceCompiler binaries</echo>
+	<zip destfile="tracecompiler/tracecompiler.zip" update="true">
+		<zipfileset dir="${build.dir}"/> 
+	</zip>
+	
+	<echo>Unzip recompiled TraceCompiler binaries intop epoc32/tools/tracecompiler</echo>
+	<unzip src="tracecompiler/tracecompiler.zip" dest="${dest.dir}" overwrite="true"/>
+
+	<mkdir dir="${jar.dir}"/>
+       	<jar destfile="${jar.dir}/tracecompiler.jar" basedir="${build.dir}">
+       		<fileset dir="src/com.nokia.tracecompiler/src" includes="**/*.properties"/>
+       		<manifest>
+       			<attribute name="Main-Class" value="com.nokia.tracecompiler.TraceCompilerMain"/>
+       		</manifest>
+        </jar>
+</target>
+
+<target name="change_windows_file_attributes" if="isWindows">
+	<echo message="Change tracecompiler.zip file attributes in Windows"/>
+	<exec executable="attrib">
+		<arg value="-r"/>
+		<arg value="tracecompiler/tracecompiler.zip"/>
+	</exec>
+</target>
+
+<target name="change_linux_file_attributes" if="isLinux">
+	<echo message="Change tracecompiler.zip file attributes in Linux"/>
+	<exec executable="chmod">
+		<arg value="777"/>
+		<arg value="tracecompiler/tracecompiler.zip"/>
+	</exec>
+</target>
+
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/.classpath	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="bin"/>	
+</classpath>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/.project	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.nokia.tracecompiler</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
+	</natures>
+</projectDescription>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/.settings/org.eclipse.core.resources.prefs	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,8 @@
+#Fri Sep 04 14:04:36 BST 2009
+eclipse.preferences.version=1
+encoding//src/com/nokia/tracecompiler/autogen/messages.properties=8859_1
+encoding//src/com/nokia/tracecompiler/dictionary/messages.properties=8859_1
+encoding//src/com/nokia/tracecompiler/engine/header/messages.properties=8859_1
+encoding//src/com/nokia/tracecompiler/engine/messages.properties=8859_1
+encoding//src/com/nokia/tracecompiler/engine/project/messages.properties=8859_1
+encoding//src/com/nokia/tracecompiler/engine/rules/messages.properties=8859_1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/.settings/org.eclipse.jdt.core.prefs	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+#Tue Apr 14 13:07:47 EEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.source=1.5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/.settings/org.eclipse.jdt.ui.prefs	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+#Tue Apr 14 13:07:47 EEST 2009
+eclipse.preferences.version=1
+internal.default.compliance=default
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/about.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body>
+
+<h2>About This Content</h2>
+ 
+<p>February 4, 2009</p>	
+
+<h3>Copyright</h3>
+<p>Copyright &copy; 2007-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.<br>
+This component and the accompanying materials are made available under the <br/>
+terms of the License "Symbian Foundation License v1.0" which accompanies this <br/>
+distribution, and is available at the URL: <a href="http://www.symbianfoundation.org/legal/sfl-v10.html">http://www.symbianfoundation.org/legal/sfl-v10.html</a>.<p>
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/build.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,2 @@
+source.. = src/
+output.. = bin/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/Messages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ ** Localization for tracecompiler package
+ *
+ */
+package com.nokia.tracecompiler;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+@SuppressWarnings("all")
+public final class Messages {
+
+	/**
+	 * Bundle name
+	 */
+	private static final String BUNDLE_NAME = "com.nokia.tracecompiler.messages"; //$NON-NLS-1$
+
+	/**
+	 * Bundle
+	 */
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Prevents construction
+	 */
+	private Messages() {
+	}
+
+	/**
+	 * Gets localized string based on key
+	 * 
+	 * @param key
+	 *            the resource key
+	 * @return the localized resource
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompiler.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,758 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ * TraceCompiler command-line main class
+ *
+ */
+package com.nokia.tracecompiler;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import com.nokia.tracecompiler.document.FileDocumentMonitor;
+import com.nokia.tracecompiler.document.StringDocumentFactory;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineEvents;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineInterface;
+import com.nokia.tracecompiler.engine.TraceLocationList;
+import com.nokia.tracecompiler.engine.project.ProjectEngine;
+import com.nokia.tracecompiler.engine.utils.TraceUtils;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.plugin.TraceCompilerPlugin;
+import com.nokia.tracecompiler.project.GroupNames;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SymbianConstants;
+import com.nokia.tracecompiler.utils.DocumentFactory;
+import com.nokia.tracecompiler.utils.TraceCompilerVersion;
+
+/**
+ * TraceCompiler command-line main class
+ * 
+ */
+public class TraceCompiler {
+	
+	private static String LINE_SEPARATOR =  System.getProperty("line.separator"); //$NON-NLS-1$
+
+	/**
+	 * Index of third character
+	 */
+	private static final int INDEX_OF_THIRD_CHARACTER = 2;
+
+	/**
+	 * Index of first character
+	 */
+	private static final int INDEX_OF_FIRST_CHARACTER = 0;
+
+	/**
+	 * Version option
+	 */
+	private static final String VERSION_OPTION = "--version"; //$NON-NLS-1$
+	private static final String LEGACY_VERSION_OPTION = "-version"; //$NON-NLS-1$
+	private static final String VERSION_OPTION_SF = "-v"; //$NON-NLS-1$
+	/**
+	 * Version option instruction text
+	 */
+	private static final String VERSION_OPTION_INSTRUCTION_TEXT = "print TraceCompiler version"; //$NON-NLS-1$
+
+	
+	/**
+	 * help option
+	 */
+	private static final String HELP_OPTION = "--help"; //$NON-NLS-1$
+	private static final String HELP_OPTION_SF = "-h"; //$NON-NLS-1$
+	private static final String HELP_OPTION_INSTRUCTION_TEXT = "print help"; //$NON-NLS-1$
+	
+	/**
+	 * Verbose option
+	 */
+	private static final String VERBOSE_OPTION = "--verbose"; //$NON-NLS-1$
+	private static final String VERBOSE_OPTION_SF = "-vb"; //$NON-NLS-1$
+	/**
+	 * Verbose option instruction text
+	 */
+	private static final String VERBOSE_OPTION_INSTRUCTION_TEXT = "print info messages."; //$NON-NLS-1$
+
+	/**
+	 * keep going option
+	 */
+	private static final String STOP_ON_ERROR_OPTION = "--stopOnError"; //$NON-NLS-1$
+	private static final String STOP_ON_ERROR_OPTION_SF = "-soe"; //$NON-NLS-1$
+	/**
+	 * keep going option instruction text
+	 */
+	private static final String STOP_ON_ERROR_OPTION_INSTRUCTION_TEXT = "On error, stop at the end of the compilation unit."; //$NON-NLS-1$
+
+	
+
+	/**
+	 * Version text
+	 */
+	private static final String VERSION_TEXT = "TraceCompiler version "; //$NON-NLS-1$
+
+	/**
+	 * Option instruction text
+	 */
+	private static final String OPTION_INSTRUCTION_TEXT = "Options:"; //$NON-NLS-1$
+
+	
+	private static final String USAGE = "Usage: " + LINE_SEPARATOR + //$NON-NLS-1$
+										"tracecompiler [options] Component_UID [Component_name MMP_path source_file...]" + LINE_SEPARATOR + //$NON-NLS-1$
+										"\t" + OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR + //$NON-NLS-1$
+										"\t" + HELP_OPTION_SF  + ", " + HELP_OPTION + ", " + HELP_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR +   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+										"\t" + VERSION_OPTION_SF + ", " + VERSION_OPTION + ", " + LEGACY_VERSION_OPTION + "\t" +  VERSION_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR +   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$
+										"\t" + VERBOSE_OPTION_SF + ", " + VERBOSE_OPTION + "\t\t" + VERBOSE_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR +  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+										"\t" + STOP_ON_ERROR_OPTION_SF + ", " + STOP_ON_ERROR_OPTION + "\t" + STOP_ON_ERROR_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR;  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+
+
+
+	/**
+	 * End of source files tag
+	 */
+	private static final String ENDOFSOURCEFILES = "*ENDOFSOURCEFILES*"; //$NON-NLS-1$
+	
+
+	/**
+	 * Offset to UID
+	 */
+	private static final int COMPONENT_UID_ARG = 0;
+
+	/**
+	 * Offset to component name
+	 */
+	private static final int COMPONENT_NAME_ARG = 1;
+
+	/**
+	 * Offset to MMP path
+	 */
+	private static final int COMPONENT_MMP_PATH_ARG = 2; // CodForChk_Dis_Magic
+
+	/**
+	 * Offset to source files
+	 */
+	private static final int SOURCE_FILE_START_OFFSET = 3; // CodForChk_Dis_Magic
+
+	/**
+	 * Number of arguments
+	 */
+	private static final int MANDATORY_ARGUMENT_COUNT = 1;
+
+	/**
+	 * MMP file extension
+	 */
+	private static final String MMP = ".mmp"; //$NON-NLS-1$
+
+	/**
+	 * Underscore character
+	 */
+	private static final String UNDERSCORE = "_"; //$NON-NLS-1$
+
+	/**
+	 * Name of the trace folder that include component name
+	 */
+	private String traceFolderName;
+
+	/**
+	 * Decode plugins path
+	 */
+	private String DECODE_PLUGINS_PATH = "com/nokia/tracecompiler/decodeplugins"; //$NON-NLS-1$
+
+	/**
+	 * Decode plugin name tag
+	 */
+	private String DECODE_PLUGIN_NAME_TAG = "<DECODE_PLUGIN_NAME>"; //$NON-NLS-1$
+
+	/**
+	 * Decode plugin class name tag
+	 */
+	private String DECODE_PLUGIN_CLASS_NAME_TAG = "<DECODE_PLUGIN_CLASS_NAME>"; //$NON-NLS-1$
+
+	/**
+	 * Decode plugin engine class name template
+	 */
+	private String ENGINE_CLASS_NAME_TEMPLATE = DECODE_PLUGIN_NAME_TAG
+			+ "Engine"; //$NON-NLS-1$
+
+	/**
+	 * Decode plugin engine file name template
+	 */
+	private String ENGINE_FILE_NAME_TEMPLATE = DECODE_PLUGIN_CLASS_NAME_TAG
+			+ ".class"; //$NON-NLS-1$
+
+	/**
+	 * Decode plugins class template
+	 */
+	private String CLASS_TEMPLATE = "com.nokia.tracecompiler.decodeplugins." + DECODE_PLUGIN_NAME_TAG + "." + DECODE_PLUGIN_CLASS_NAME_TAG; //$NON-NLS-1$ //$NON-NLS-2$	
+
+	/**
+	 * Main function
+	 * 
+	 * @param args
+	 *            the command line arguments
+	 */
+	public static void main(String[] args) {
+		ArrayList<String> list = new ArrayList<String>(Arrays.asList(args));
+		long startTime = System.currentTimeMillis();
+		//create a new session of TraceCompiler
+		TraceCompiler console = new TraceCompiler();
+		
+		try {
+			console.parseCommandLine(list);
+		} catch (Exception e) { //should cover IOException and TraceCompilerIllegalArgumentsException
+			//There is no point to continue if there are problems with the arguments.
+			TraceCompilerLogger.printError(e.getMessage());
+			printUsage();
+			System.exit(1);
+		}
+		
+		boolean error = false;
+		try {
+			if(list.size() != 0) {
+				console.createPlugins();
+				console.start();
+				console.buildTraceFiles();
+				
+			}
+		} catch (Exception e) {
+			if (e instanceof TraceCompilerRootException) {
+				TraceCompilerLogger.printError(e.getMessage()); 
+			} //else the error should have been reported earlier
+			error = true;
+		} finally {
+			try {
+				if (!error) { //check if errors have been logged by EventEngine
+					TraceCompilerEngineEvents events = TraceCompilerEngineGlobals.getEvents();
+					if (events != null && events.hasErrorHappened()) {
+						error = true;
+					}
+				}
+				console.shutdown();
+			} catch (TraceCompilerException e) {
+				error = true;
+			}
+		}
+
+		if (console.componentName != null) {
+			TraceCompilerLogger.printMessage(console.componentName + " took " //$NON-NLS-1$
+					+ (System.currentTimeMillis() - startTime) + " ms"); //$NON-NLS-1$
+		}
+		if (error) {
+			System.exit(1);
+		} else {
+			System.exit(0);
+		}	
+	}
+
+	/**
+	 * With Eclipse, the plug-ins are loaded by Eclipse framework. Here they
+	 * must be manually created and started
+	 */
+	private ArrayList<TraceCompilerPlugin> plugIns = new ArrayList<TraceCompilerPlugin>();
+
+	/**
+	 * Model listener
+	 */
+	private TraceCompilerModelListener modelListener;
+
+	/**
+	 * Name of the component
+	 */
+	private String componentName;
+
+	/**
+	 * UID of the component
+	 */
+	private long componentUID;
+
+	/**
+	 * Component path
+	 */
+	private String componentPath;
+
+	/**
+	 * MMP file path
+	 */
+	private File mmpPath;
+
+	/**
+	 * Constructor
+	 */
+	TraceCompiler() {
+
+		// Creates listeners and preferences
+		modelListener = new TraceCompilerModelListener();
+	}
+
+	/**
+	 * Creates the plug-ins to be registered with TraceCompiler
+	 * @throws TraceCompilerRootException if fail to create a valid plugins
+	 */
+	private void createPlugins() throws TraceCompilerRootException {
+		
+		// Get location of the TraceCompiler
+		URL path = getClass().getProtectionDomain().getCodeSource()
+				.getLocation();
+		String decodePluginsPath = path.getPath();
+
+		// If first character is forward slash and it is located before drive
+		// letter remove it
+		if (decodePluginsPath.charAt(INDEX_OF_FIRST_CHARACTER) == SourceConstants.FORWARD_SLASH_CHAR
+				&& decodePluginsPath.charAt(INDEX_OF_THIRD_CHARACTER) == SourceConstants.COLON_CHAR) {
+			decodePluginsPath = decodePluginsPath.substring(1);
+		}
+		
+		// Concatenate decode plugins path
+		decodePluginsPath = decodePluginsPath.concat(DECODE_PLUGINS_PATH);
+		
+		// Replace slashes with correct separator character
+		decodePluginsPath = decodePluginsPath.replace(
+				SourceConstants.FORWARD_SLASH_CHAR, File.separatorChar);
+		decodePluginsPath = decodePluginsPath.replace(
+				SourceConstants.BACKSLASH_CHAR, File.separatorChar);
+		File decodePluginsDir = new File(decodePluginsPath);
+		String[] decodePlugins = decodePluginsDir.list();
+		if (decodePlugins != null) {
+			for (int i = 0; i < decodePlugins.length; i++) {
+
+				// Get decode plugin name
+				String decodePluginName = decodePlugins[i];
+
+				// Get decode plugin path
+				String decodePluginPath = decodePluginsPath
+						+ File.separatorChar + decodePluginName;
+
+				// Decode plugin must be in own directory
+				Boolean isDirectory = (new File(decodePluginPath))
+						.isDirectory();
+				if (isDirectory) {
+
+					// Construct decode plugin engine class name
+					String engineClassName = ENGINE_CLASS_NAME_TEMPLATE
+							.replaceFirst(DECODE_PLUGIN_NAME_TAG,
+									decodePluginName.substring(0, 1)
+											.toUpperCase()
+											+ decodePluginName.substring(1));
+
+					// Construct decode plugin engine file name
+					String engineFileName = ENGINE_FILE_NAME_TEMPLATE
+							.replaceFirst(DECODE_PLUGIN_CLASS_NAME_TAG,
+									engineClassName);
+					String engineFileFullName = decodePluginPath
+							+ File.separatorChar + engineFileName;
+
+					// Check does engine file exist
+					Boolean exists = (new File(engineFileFullName)).exists();
+					if (exists) {
+						String engineClassFullName = CLASS_TEMPLATE
+								.replaceFirst(DECODE_PLUGIN_NAME_TAG,
+										decodePluginName).replaceFirst(
+										DECODE_PLUGIN_CLASS_NAME_TAG,
+										engineClassName);
+						try {
+							Class<?> engineClass = Class
+									.forName(engineClassFullName);
+							TraceCompilerPlugin engine = (TraceCompilerPlugin) engineClass
+									.newInstance();
+							plugIns.add(engine);
+							TraceCompilerLogger.printInfo("Decode plugin " + engineClassFullName + " added"); //$NON-NLS-1$ //$NON-NLS-2$
+						} catch (Exception e) {
+							String msg = "Decode plugin " + engineClassFullName + " adding failed"; //$NON-NLS-1$ //$NON-NLS-2$
+							throw new TraceCompilerRootException(msg, e); 
+						}
+					} else {
+						String msg = "Decode plugin file " + engineFileFullName + " does not exist"; //$NON-NLS-1$ //$NON-NLS-2$
+						throw new TraceCompilerRootException(msg, null);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Parses the command line
+	 * 
+	 * @param args
+	 *            the arguments
+	 * @throws TraceCompilerRootException if arguments are invalid
+	 * @throws IOException 
+	 */
+	private void parseCommandLine(ArrayList<String> list) throws TraceCompilerIllegalArgumentsException, IOException {
+		TraceCompilerLogger.printInfo("Building traces..."); //$NON-NLS-1$
+		if (list.size() == 0) {
+			printUsage();
+			System.exit(0);
+		}
+		List<String> switches = new ArrayList<String>();
+
+		// version, verbose, keepgoing if available could be anywhere, so process them and remove them from the list
+		for (String element : list) {
+			if (element.equalsIgnoreCase(HELP_OPTION) || element.equalsIgnoreCase(HELP_OPTION_SF)) {
+				printUsage();
+				System.exit(0);
+			}
+			if (element.equalsIgnoreCase(VERBOSE_OPTION) || element.equalsIgnoreCase(VERBOSE_OPTION_SF)) {
+				TraceCompilerGlobals.setVerbose(true);
+				switches.add(element);
+			}
+			if (element.equalsIgnoreCase(LEGACY_VERSION_OPTION) || element.equalsIgnoreCase(VERSION_OPTION) || element.equalsIgnoreCase(VERSION_OPTION_SF)) {
+				TraceCompilerLogger.printMessage(VERSION_TEXT + TraceCompilerVersion.getVersion());
+				System.exit(0);
+			}
+			if (element.equalsIgnoreCase(STOP_ON_ERROR_OPTION) || element.equalsIgnoreCase(STOP_ON_ERROR_OPTION_SF)) {
+				TraceCompilerGlobals.setKeepGoing(false);
+				switches.add(element);
+			}
+		}
+		
+		//remove switches from the list
+		for (String string : switches) {
+			list.remove(string);
+		}
+		
+		switches = null;
+		
+		if (list.size() < MANDATORY_ARGUMENT_COUNT) {
+			throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.invalidTraceCompilerArgumetsExceptionText"), null); //$NON-NLS-1$
+		}
+		
+		
+		//the rest of elements must be in the order COMPONENT_UID, COMPONENT_NAME, COMPONENT_MMP_PATH, source...
+		//COMPONENT_UID must be on the command line, the rest can either be on the command line or stdin
+
+		try {
+			componentUID = Long.parseLong(list.get(COMPONENT_UID_ARG),
+					TraceCompilerConstants.HEX_RADIX);
+			TraceCompilerLogger.printInfo("Component UID: 0x" + Long.toHexString(componentUID)); //$NON-NLS-1$
+
+		} catch (NumberFormatException e) {
+			String msg = Messages.getString("TraceCompiler.componentUidIsNotValidExceptionText") + componentUID; //$NON-NLS-1$
+			throw new TraceCompilerIllegalArgumentsException(msg, null);
+		}
+		if (componentUID > 0) {
+
+			// Arguments are given as a parameter
+			if (list.size() > MANDATORY_ARGUMENT_COUNT + 1) {
+				parseParameters(list);
+
+				// Otherwise, read arguments from STDIN
+			} else {
+				readFromStdin();
+			}
+		} else {
+			String msg = Messages.getString("TraceCompiler.componentUidIsNotValidExceptionText") + componentUID; //$NON-NLS-1$
+			throw new TraceCompilerIllegalArgumentsException(msg, null);
+		}
+	}
+
+
+	private static void printUsage() {
+		TraceCompilerLogger.printMessage(VERSION_TEXT + TraceCompilerVersion.getVersion());
+		TraceCompilerLogger.printMessage(USAGE);
+	}
+
+	/**
+	 * Parses parameters
+	 * 
+	 * @param args
+	 *            the parameters
+	 * @throws TraceCompilerRootException if arguments are not valid
+	 */
+	private void parseParameters(List<String> args) throws TraceCompilerIllegalArgumentsException {
+		//index is safe, already checked by the caller
+		componentName = args.get(COMPONENT_NAME_ARG);
+		traceFolderName = 	TraceCompilerConstants.TRACES_DIRECTORY + UNDERSCORE
+							+ componentName;
+		
+		mmpPath = new File(args.get(COMPONENT_MMP_PATH_ARG));
+
+		if (isMmpValid()) {
+
+			// Move the files from args array to source file list
+				ArrayList<String> sources = new ArrayList<String>();
+				for (int i = 0; i < args.size() - SOURCE_FILE_START_OFFSET; i++) {
+					sources.add(args.get(SOURCE_FILE_START_OFFSET + i));
+				}
+
+				registerFiles(sources);
+		} else {
+			throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.invalidMmpExceptionText") + mmpPath, null); //$NON-NLS-1$
+		}
+		
+	}
+
+	/**
+	 * Read information from STDIN
+	 * @throws IOException if fails to read the input
+	 * @throws TraceCompilerRootException if the list of files is empty
+	 */
+	private void readFromStdin() throws IOException, TraceCompilerIllegalArgumentsException {
+		ArrayList<String> files = new ArrayList<String>();
+
+		// Create reader
+		BufferedReader stdin = new BufferedReader(
+				new InputStreamReader(System.in));
+		
+			int numberOfReceivedLines = 1;
+
+			String line = stdin.readLine();
+						
+			while (line != null) {
+
+				// End of source files received
+				if (line.equals(ENDOFSOURCEFILES)) {
+					break;
+				}
+
+				// Component name
+				if (numberOfReceivedLines == COMPONENT_NAME_ARG) {
+					componentName = line;
+					traceFolderName = TraceCompilerConstants.TRACES_DIRECTORY
+							+ UNDERSCORE + componentName;
+
+					// MMP path
+				} else if (numberOfReceivedLines == COMPONENT_MMP_PATH_ARG) {
+					mmpPath = new File(line);
+					if (!isMmpValid()) {
+						stdin.close();
+						throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.invalidMmpExceptionText") + mmpPath, null); //$NON-NLS-1$
+					}
+
+					// Source files
+				} else {
+					// Add to the files list
+					File file = new File(line);
+					files.add(file.getAbsolutePath());
+				}
+
+				numberOfReceivedLines++;
+
+				// Read new line from STDIN
+				line = stdin.readLine();				
+			}
+		stdin.close();
+		registerFiles(files);
+	}
+
+	/**
+	 * Registers files to document monitor.
+	 * 
+	 * @param sources
+	 *            sources
+	 * @throws TraceCompilerRootException 
+	 */
+	private void registerFiles(ArrayList<String> sources) throws TraceCompilerIllegalArgumentsException {
+
+		if (sources.size() == 0) {
+			throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.noSourceFilesExceptionText"), null); //$NON-NLS-1$
+		}
+		File parent = mmpPath.getParentFile();
+		boolean found = false;
+
+		componentPath = parent.getAbsolutePath();
+
+		ProjectEngine.traceFolderName = TraceCompilerConstants.TRACES_DIRECTORY;
+
+		// Find location of "traces" or "traces_<component name>" -folder. If
+		// "traces" or "traces_<component name>" -folder does not
+		// exist, "traces" -folder will be add to same level than "group" or
+		// "mmpfiles" -folder. If "group" or "mmpfiles" -folder does not exist
+		// then "traces" -folder will be added to same level than source file.
+		while (!found && parent != null) {
+			File[] children = parent.listFiles();
+			if (children != null) {
+				for (int i = 0; i < children.length; i++) {
+					File child = children[i];
+					String childName = child.getName();
+					if (child.isDirectory() && isProjectRoot(childName)) {
+						componentPath = parent.getAbsolutePath();
+						found = true;
+
+						// Check that does subdirectory that name is
+						// "traces_<component name>" exist in this directory. If
+						// it exist use that as traces directory name.
+						for (i = 0; i < children.length; i++) {
+							child = children[i];
+							childName = child.getName();
+							if (child.isDirectory()
+									&& childName
+											.equalsIgnoreCase(traceFolderName)) {
+								ProjectEngine.traceFolderName = traceFolderName;
+								break;
+							}
+						}
+						break;
+					}
+				}
+			}
+
+			if (found == false) {
+				parent = parent.getParentFile();
+			}
+		}
+
+		registerSourceFiles(sources);
+	}
+
+	/**
+	 * Checks if this folder is the project root
+	 * 
+	 * @param name
+	 *            name of the folder
+	 * @return true if this folder is the project root
+	 */
+	private boolean isProjectRoot(String name) {
+		boolean retval = false;
+		if (name.equalsIgnoreCase(traceFolderName)
+				|| name.equalsIgnoreCase(SymbianConstants.GROUP_DIRECTORY)
+				|| name.equalsIgnoreCase(SymbianConstants.MMPFILES_DIRECTORY)
+				|| name
+						.equalsIgnoreCase(TraceCompilerConstants.TRACES_DIRECTORY)) {
+			retval = true;
+		}
+		return retval;
+	}
+
+	/**
+	 * Registers source files
+	 * 
+	 * @param files
+	 */
+	private void registerSourceFiles(ArrayList<String> files) {
+		if (files.size() > 0) {
+			String[] fileArr = new String[files.size()];
+			files.toArray(fileArr);
+
+			// Sets the source files to the TraceCompiler document
+			// factory. It will create a document from each source in the array
+			FileDocumentMonitor.setFiles(fileArr);
+			DocumentFactory.registerDocumentFramework(
+					new FileDocumentMonitor(), StringDocumentFactory.class);
+		}
+	}
+
+	/**
+	 * Initializes TraceCompiler
+	 * @throws TraceCompilerRootException if fail to initialize the plugins
+	 * @throws TraceCompilerException 
+	 */
+	private void start() throws TraceCompilerRootException, TraceCompilerException {
+
+		// Starts TraceCompiler. This is normally called from the Eclipse
+		// plug-in
+		// activator, but in console case that does not exist
+		TraceCompilerEngineGlobals.start();
+				
+		
+		//Reads the GroupId values from opensystemtrace_types.h
+		//If this fails a message is logged and trace compiler stops
+		GroupNames.initialiseGroupName();
+
+		
+		// Registers a view to TraceCompiler
+		TraceCompilerEngineGlobals
+				.setView(new TraceCompilerView(componentPath));
+
+		// Registers all plug-in components
+		for (TraceCompilerPlugin plugin : plugIns) {
+			TraceCompilerEngineGlobals.registerPlugin(plugin);
+		}
+		// Adds a model event listener
+		TraceCompilerEngineGlobals.getTraceModel().addModelListener(
+				modelListener);
+		TraceCompilerEngineGlobals.getTraceModel().addExtensionListener(
+				modelListener);
+		TraceCompilerEngineGlobals.getTraceModel().getExtension(
+				TraceLocationList.class).addLocationListListener(modelListener);
+		TraceCompilerEngineGlobals.getTraceModel().addProcessingListener(modelListener);
+	}
+
+	/**
+	 * Parses the sources and generates trace files
+	 * @throws Exception 
+	 */
+	private void buildTraceFiles() throws Exception {
+		TraceCompilerEngineInterface tbi = TraceCompilerEngineGlobals
+				.getTraceCompiler();
+		try {
+			// Opens a trace project
+			componentName = TraceUtils.convertName(componentName);
+
+			// Set project path before opening project
+			TraceCompilerEngineGlobals.setProjectPath(componentPath);
+			tbi.openProject(componentName);
+			TraceModel model = TraceCompilerEngineGlobals.getTraceModel();
+			if (model.isValid()) {
+				model.setID((int) componentUID);
+
+				// Location errors are printed after a file changes, but the
+				// last file is not detected by the listener
+				if (modelListener.getErrors().size() > 0) {
+					modelListener.printLocationErrors();
+					tbi.closeProject();
+					throw new TraceCompilerRootException(null, null);
+				}
+				tbi.exportProject();
+				tbi.closeProject();
+			} else {
+				String msg = "Project creation was cancelled"; //$NON-NLS-1$
+				throw new TraceCompilerRootException(msg, null);
+			}
+		} catch (TraceCompilerException e) {
+			TraceCompilerEngineGlobals.getEvents().postError(e);
+			throw new TraceCompilerRootException("Build trace files failed.", e); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Shuts down TraceCompiler
+	 * @throws TraceCompilerException 
+	 */
+	private void shutdown() throws TraceCompilerException {
+		for (TraceCompilerPlugin plugin : plugIns) {
+			TraceCompilerEngineGlobals.unregisterPlugin(plugin);
+		}
+		TraceCompilerEngineGlobals.shutdown();
+	}
+
+	/**
+	 * Checks if the MMP file is valid
+	 * 
+	 * @return true if MMP file is valid
+	 */
+	private boolean isMmpValid() {
+		boolean valid = false;
+		String pathStr = mmpPath.getAbsolutePath();
+
+		if (mmpPath.exists() && pathStr.length() > MMP.length()) {
+			String end = pathStr.substring(pathStr.length() - MMP.length());
+			if (end.equalsIgnoreCase(MMP)) {
+				valid = true;
+			} else {
+				TraceCompilerLogger.printError("Invalid MMP file: " + mmpPath.getAbsolutePath()); //$NON-NLS-1$
+			}
+		} else {
+			TraceCompilerLogger.printError("Missing or can not access MMP path: " + mmpPath.getAbsolutePath()); //$NON-NLS-1$
+		}
+		return valid;
+		
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerConfiguration.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Configuration for the console UI
+*
+*/
+package com.nokia.tracecompiler;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineConfiguration;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineConfigurationListener;
+
+/**
+ * Configuration for the TraceCompiler UI
+ * 
+ */
+final class TraceCompilerConfiguration implements TraceCompilerEngineConfiguration {
+
+	/**
+	 * Export path
+	 */
+	private String exportPath;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param exportPath
+	 *            the export path for decode files
+	 */
+	TraceCompilerConfiguration(String exportPath) {
+		this.exportPath = exportPath;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#
+	 *      addConfigurationListener(com.nokia.tracecompiler.engine.TraceCompilerConfigurationListener)
+	 */
+	public void addConfigurationListener(
+			TraceCompilerEngineConfigurationListener configurationListener) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#
+	 *      getFlag(java.lang.String)
+	 */
+	public boolean getFlag(String flagName) {
+		boolean retval;
+		if (flagName.equals(TraceCompilerEngineConfiguration.CONSOLE_UI_MODE)) {
+			retval = true;
+		} else {
+			retval = false;
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#
+	 *      getText(java.lang.String)
+	 */
+	public String getText(String textName) {
+		String retval;
+		if (textName.equals(TraceCompilerEngineConfiguration.ENVIRONMENT_ROOT)) {
+			retval = exportPath;
+		} else {
+			retval = ""; //$NON-NLS-1$
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#
+	 *      getValue(java.lang.String)
+	 */
+	public int getValue(String valueName) {
+		return 0;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#
+	 *      hasEntry(java.lang.String)
+	 */
+	public boolean hasEntry(String entryName) {
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#isAvailable()
+	 */
+	public boolean isAvailable() {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#
+	 *      removeConfigurationListener(com.nokia.tracecompiler.engine.TraceCompilerConfigurationListener)
+	 */
+	public void removeConfigurationListener(
+			TraceCompilerEngineConfigurationListener configurationListener) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#setFlag(java.lang.String,
+	 *      boolean)
+	 */
+	public void setFlag(String flagName, boolean flag) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#setText(java.lang.String,
+	 *      java.lang.String)
+	 */
+	public void setText(String textName, String text) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#setValue(java.lang.String,
+	 *      int)
+	 */
+	public void setValue(String valueName, int value) {
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerConstants.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Constants for console UI
+*
+*/
+package com.nokia.tracecompiler;
+
+
+/**
+ * Constants for TraceCompiler UI
+ *
+ */
+public interface TraceCompilerConstants {
+
+	/**
+	 * Default UID if component does not have one
+	 */
+	int DEFAULT_UID = 0x0;
+
+	/**
+	 * Traces directory
+	 */
+	String TRACES_DIRECTORY = "traces"; //$NON-NLS-1$
+
+	/**
+	 * Radix for hex numbers
+	 */
+	int HEX_RADIX = 16; // CodForChk_Dis_Magic
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerGlobals.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,73 @@
+/*
+ * 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:
+ *
+ * TraceCompilerGlobals global constants
+ *
+ */
+package com.nokia.tracecompiler;
+
+/**
+ * TraceCompiler Global constants
+ *
+ */
+public class TraceCompilerGlobals {
+
+	/**
+	 * Verbose output. Verbose is usually checked to print Infos
+	 */
+	private static boolean VERBOSE = false;
+	
+	/**
+	 * KepGoing is used to decide whether we continue processing on errors
+	 */
+	private static boolean KEEPGOING =  true;
+	
+	//disallow instances
+	private TraceCompilerGlobals() {
+		// singleton
+	}
+
+	/**
+	 * set verbose mode
+	 * @param verbose
+	 */
+	public static void setVerbose(boolean verbose) {
+		VERBOSE = verbose;
+	}
+	
+	/**
+	 * is vebose mode on/off
+	 * @return boolean
+	 */
+	public static boolean isVebose() {
+		return VERBOSE;
+	}
+	
+	/**
+	 * set keep going mode
+	 * @param keepgoing
+	 */
+	public static void setKeepGoing(boolean keepgoing) {
+		KEEPGOING = keepgoing;
+	}
+	
+	/**
+	 * is keepgoing mode on/off
+	 * @return boolean
+	 */
+	public static boolean keepGoing() {
+		return KEEPGOING;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerIllegalArgumentsException.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,36 @@
+/*
+ * 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:
+ *
+ * TraceCompilerIllegalArgumentsException thrown when tracecompiler can not process its arguments
+ *
+ */
+package com.nokia.tracecompiler;
+
+/**
+ * TraceCompilerIllegalArgumentsException thrown when tracecompiler can not process its arguments
+ *
+ */
+public class TraceCompilerIllegalArgumentsException extends TraceCompilerRootException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1387782275931306398L;
+
+	public TraceCompilerIllegalArgumentsException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerLogger.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ * Simple Logger
+ *
+ */
+package com.nokia.tracecompiler;
+
+
+
+/**
+ * Simple logger for errors warnings and infos
+ *
+ */
+public class TraceCompilerLogger {
+
+	/**
+	 * Prints errors message to STDERR.
+	 * 
+	 * @param msg
+	 *            the message
+	 */
+	static public void printError(String msg) {
+		if (msg != null) {
+			System.err.println(Messages.getString("TraceCompilerLogger.errorPrefix") + msg); //$NON-NLS-1$
+			System.err.flush();
+		}
+	}
+	
+	/**
+	 * Prints warning message to STDERR.
+	 * @param msg
+	 */
+	static public void printWarning(String msg) {
+			System.err.println(Messages.getString("TraceCompilerLogger.warningPrefix") + msg); //$NON-NLS-1$
+			System.err.flush();
+	}
+
+	/**
+	 * Prints warning message to STDOUT if verbose is on.
+	 * @param msg
+	 */
+	static public void printInfo(String msg) {
+		if (TraceCompilerGlobals.isVebose()) {
+			System.out.println(Messages.getString("TraceCompilerLogger.infoPrefix") + msg); //$NON-NLS-1$
+			System.out.flush();
+		}
+	}
+	
+	/**
+	 * Prints warning message to STDOUT.
+	 * @param msg
+	 */
+	static public void printMessage(String msg) {
+			System.out.println(msg);
+			System.out.flush();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerMain.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,766 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ * TraceCompiler command-line main class
+ *
+ */
+package com.nokia.tracecompiler;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.nokia.tracecompiler.document.FileDocumentMonitor;
+import com.nokia.tracecompiler.document.StringDocumentFactory;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineEvents;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineInterface;
+import com.nokia.tracecompiler.engine.TraceLocationList;
+import com.nokia.tracecompiler.engine.project.ProjectEngine;
+import com.nokia.tracecompiler.file.FileUtils;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.plugin.TraceCompilerPlugin;
+import com.nokia.tracecompiler.project.GroupNames;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.utils.DocumentFactory;
+import com.nokia.tracecompiler.utils.TraceCompilerVersion;
+
+/**
+ * TraceCompiler command-line main class
+ * 
+ */
+public class TraceCompilerMain {
+	
+	/** line separator */
+	private static String LINE_SEPARATOR =  System.getProperty("line.separator"); //$NON-NLS-1$
+	
+	/**
+	 * Index of third character
+	 */
+	private static final int INDEX_OF_THIRD_CHARACTER = 2;
+
+	/**
+	 * Index of first character
+	 */
+	private static final int INDEX_OF_FIRST_CHARACTER = 0;
+	
+	/**
+	 * TraceCompiler options
+	 */
+	
+	/**
+	 * UID : it is used to create the dictionary file
+	 */
+	private static final String UID_SWITCH = Messages.getString("TraceCompiler.UidStwich"); //$NON-NLS-1$
+	private static final String UID_SWITCH_TEXT = Messages.getString("TraceCompiler.UidText"); //$NON-NLS-1$
+	/**
+	 * project name : it is used to create the dictionary file
+	 */
+	private static final String PRJ_NAME_SWITCH = Messages.getString("TraceCompiler.ProjectSwitch");//$NON-NLS-1$
+	private static final String PRJ_NAME_SWITCH_TEXT = Messages.getString("TraceCompiler.ProjectText"); //$NON-NLS-1$
+	/**
+	 * mmp file path:  may be used to compute the traces folder
+	 */
+	private static final String MMP_PATH_SWITCH = Messages.getString("TraceCompiler.MmpSwitch");//$NON-NLS-1$
+	private static final String MMP_PATH_SWITCH_TEXT = Messages.getString("TraceCompiler.MmpText"); //$NON-NLS-1$
+	/**
+	 * traces folder: absolute or relative to the mmp folder
+	 */
+	private static final String TRACES_PATH_SWITCH = Messages.getString("TraceCompiler.TracesSwitch");//$NON-NLS-1$
+	private static final String TRACES_PATH_SWITCH_TEXT = Messages.getString("TraceCompiler.TracesText"); //$NON-NLS-1$
+	
+
+	/**
+	 * Version option
+	 */
+	private static final String VERSION_OPTION = Messages.getString("TraceCompiler.VersionSwitchLong"); //$NON-NLS-1$
+	private static final String VERSION_OPTION_SF = Messages.getString("TraceCompiler.VersionSwitchShort"); //$NON-NLS-1$
+	private static final String VERSION_OPTION_INSTRUCTION_TEXT = Messages.getString("TraceCompiler.VersionText"); //$NON-NLS-1$
+
+	
+	/**
+	 * help option
+	 */
+	private static final String HELP_OPTION = Messages.getString("TraceCompiler.HelpSwicthLong"); //$NON-NLS-1$
+	private static final String HELP_OPTION_SF = Messages.getString("TraceCompiler.HelpSwitchShort"); //$NON-NLS-1$
+	private static final String HELP_OPTION_INSTRUCTION_TEXT = Messages.getString("TraceCompiler.HelpText"); //$NON-NLS-1$
+	
+	/**
+	 * Verbose option
+	 */
+	private static final String VERBOSE_OPTION = Messages.getString("TraceCompiler.VerboseSwitchLong"); //$NON-NLS-1$
+	private static final String VERBOSE_OPTION_SF = Messages.getString("TraceCompiler.VerboseSwitchShort"); //$NON-NLS-1$
+	private static final String VERBOSE_OPTION_INSTRUCTION_TEXT = Messages.getString("TraceCompiler.VerboseText"); //$NON-NLS-1$
+
+	/**
+	 * keep going option
+	 */
+	private static final String STOP_ON_ERROR_OPTION = Messages.getString("TraceCompiler.StopSwitchLong"); //$NON-NLS-1$
+	private static final String STOP_ON_ERROR_OPTION_SF = Messages.getString("TraceCompiler.StopSwitchShort"); //$NON-NLS-1$
+	private static final String STOP_ON_ERROR_OPTION_INSTRUCTION_TEXT = Messages.getString("TraceCompiler.StopText"); //$NON-NLS-1$
+
+	
+
+	/**
+	 * Version text
+	 */
+	private static final String VERSION_TEXT = Messages.getString("TraceCompiler.DisplayVersionText"); //$NON-NLS-1$
+
+	/**
+	 * Option instruction text
+	 */
+	private static final String OPTION_INSTRUCTION_TEXT = Messages.getString("TraceCompiler.Options"); //$NON-NLS-1$
+	private static final String VALUE=Messages.getString("TraceCompiler.Value"); //$NON-NLS-1$
+	
+
+	
+	private static final String USAGE = Messages.getString("TraceCompiler.Usage") + LINE_SEPARATOR + //$NON-NLS-1$
+	Messages.getString("TraceCompiler.UsageText") + LINE_SEPARATOR + //$NON-NLS-1$
+										"\t" + OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR + //$NON-NLS-1$
+										"\t" + HELP_OPTION_SF  + ", " + HELP_OPTION + ", " + HELP_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR +   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+										"\t" + VERSION_OPTION_SF + ", " + VERSION_OPTION + "\t" +  VERSION_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR +   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+										"\t" + VERBOSE_OPTION_SF + ", " + VERBOSE_OPTION + "\t\t" + VERBOSE_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR +  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+										"\t" + STOP_ON_ERROR_OPTION_SF + ", " + STOP_ON_ERROR_OPTION + "\t" + STOP_ON_ERROR_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR +  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+										"\t" + UID_SWITCH + "=" + VALUE + "\t" + UID_SWITCH_TEXT +  LINE_SEPARATOR + //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+										"\t" + PRJ_NAME_SWITCH + "=" + VALUE + "\t" + PRJ_NAME_SWITCH_TEXT +  LINE_SEPARATOR + //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+										"\t" + MMP_PATH_SWITCH + "=" + VALUE + "\t" + MMP_PATH_SWITCH_TEXT +  LINE_SEPARATOR + //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+										"\t" + TRACES_PATH_SWITCH + "=" + VALUE + "\t" + TRACES_PATH_SWITCH_TEXT; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+
+
+
+	/**
+	 * End of source files tag
+	 */
+	private static final String ENDOFSOURCEFILES = Messages.getString("TraceCompiler.EndOfList"); //$NON-NLS-1$
+
+	/**
+	 * MMP file extension
+	 */
+	private static final String MMP_FILE_TYPE = Messages.getString("TraceCompiler.MmpExtension"); //$NON-NLS-1$
+
+	/**
+	 * Decode plugins path
+	 */
+	private String DECODE_PLUGINS_PATH = Messages.getString("TraceCompiler.PluginPath"); //$NON-NLS-1$
+
+	/**
+	 * Decode plugin name tag
+	 */
+	private String DECODE_PLUGIN_NAME_TAG = Messages.getString("TraceCompiler.DecodeText1"); //$NON-NLS-1$
+
+	/**
+	 * Decode plugin class name tag
+	 */
+	private String DECODE_PLUGIN_CLASS_NAME_TAG = Messages.getString("TraceCompiler.DecodeText2"); //$NON-NLS-1$
+
+	/**
+	 * Decode plugin engine class name template
+	 */
+	private String ENGINE_CLASS_NAME_TEMPLATE = DECODE_PLUGIN_NAME_TAG
+			+ "Engine"; //$NON-NLS-1$
+
+	/**
+	 * Decode plugin engine file name template
+	 */
+	private String ENGINE_FILE_NAME_TEMPLATE = DECODE_PLUGIN_CLASS_NAME_TAG
+			+ ".class"; //$NON-NLS-1$
+
+	/**
+	 * Decode plugins class template
+	 */
+	private String CLASS_TEMPLATE = Messages.getString("TraceCompiler.DecodePluginsNameSpace") + DECODE_PLUGIN_NAME_TAG + "." + DECODE_PLUGIN_CLASS_NAME_TAG; //$NON-NLS-1$ //$NON-NLS-2$	
+	
+	//switch with value such as --uid=value
+	private Pattern valueSwitchPattern = Pattern.compile("(--\\S+)=(\\S+)"); //$NON-NLS-1$
+	//switches with no values such -v, --version
+	private Pattern singleSwitchPattern = Pattern.compile("-{1,2}([^=]+)"); //$NON-NLS-1$
+	
+	/**
+	 * list of source files
+	 */
+	private ArrayList<String> sources = new ArrayList<String>();
+	/**
+	 * traces path
+	 */
+	private String traces_path = null;
+	
+	
+	
+	
+	/**
+	 * Main function
+	 * 
+	 * @param args
+	 *            the command line arguments
+	 */
+	public static void main(String[] args) {
+		if (args.length == 0) {
+			printUsage();
+			return;
+		}
+		
+		ArrayList<String> list = null;
+		
+		//support spaces in switches, build a long string, clean it and convert it back to array - a bit expensive
+		String tmpString = "";  //$NON-NLS-1$
+		for (int i = 0; i < args.length; i++) {
+			tmpString = tmpString + " " + args[i];  //$NON-NLS-1$
+		}
+		tmpString = tmpString.replaceAll("\\s*=\\s*", "="); //$NON-NLS-1$ //$NON-NLS-2$
+		tmpString = tmpString.replaceAll("\\s+", " "); //$NON-NLS-1$ //$NON-NLS-2$
+		String[] split = tmpString.trim().split(" "); //$NON-NLS-1$
+		tmpString = null; // not needed anymore
+		
+		//rebuild array of arguments
+		if (split.length > 0) {
+			list = new ArrayList<String>(Arrays.asList(split));
+		}
+				
+		long startTime = System.currentTimeMillis();
+		//create a new session of TraceCompiler
+		TraceCompilerMain console = new TraceCompilerMain();
+		
+		try {
+			console.parseCommandLine(list);
+		} catch (Exception e) { //should cover IOException and TraceCompilerIllegalArgumentsException
+			//There is no point to continue if there are problems with the arguments.
+			TraceCompilerLogger.printError(e.getMessage());
+			printUsage();
+			System.exit(1);
+		}
+		
+		boolean error = false;
+		try {
+			if(list.size() != 0) {
+				console.createPlugins();
+				console.start();
+				console.buildTraceFiles();				
+			}
+		} catch (Exception e) {
+			if (e instanceof TraceCompilerRootException) {
+				TraceCompilerLogger.printError(e.getMessage()); 
+			} //else the error should have been reported earlier
+			error = true;
+		} finally {
+			try {
+				if (!error) { //check if errors have been logged by EventEngine
+					TraceCompilerEngineEvents events = TraceCompilerEngineGlobals.getEvents();
+					if (events != null && events.hasErrorHappened()) {
+						error = true;
+					}
+				}
+				console.shutdown();
+			} catch (TraceCompilerException e) {
+				error = true;
+			}
+		}
+
+		if (console.projectName != null) {
+			TraceCompilerLogger.printMessage(console.projectName + Messages.getString("TraceCompiler.Took") //$NON-NLS-1$
+					+ (System.currentTimeMillis() - startTime) + Messages.getString("TraceCompiler.MS")); //$NON-NLS-1$
+		}
+		if (error) {
+			System.exit(1);
+		} else {
+			System.exit(0);
+		}	
+	}
+
+	/**
+	 * With Eclipse, the plug-ins are loaded by Eclipse framework. Here they
+	 * must be manually created and started
+	 */
+	private ArrayList<TraceCompilerPlugin> plugIns = new ArrayList<TraceCompilerPlugin>();
+
+	/**
+	 * Model listener
+	 */
+	private TraceCompilerModelListener modelListener;
+
+	/**
+	 * Name of the component
+	 */
+	private String projectName = null;
+	
+
+	/**
+	 * UID of the component
+	 */
+	private long componentUID = 0L;
+
+	/**
+	 * Component path
+	 */
+	private String componentPath = null;
+
+	/**
+	 * MMP file path
+	 */
+	private File mmpPath = null;
+
+	/**
+	 * Constructor
+	 */
+	TraceCompilerMain() {
+
+		// Creates listeners and preferences
+		modelListener = new TraceCompilerModelListener();
+	}
+
+	/**
+	 * Creates the plug-ins to be registered with TraceCompiler
+	 * @throws TraceCompilerRootException if fail to create a valid plugins
+	 */
+	private void createPlugins() throws TraceCompilerRootException {
+		
+		// Get location of the TraceCompiler
+		URL path = getClass().getProtectionDomain().getCodeSource()
+				.getLocation();
+		String decodePluginsPath = path.getPath();
+
+		// If first character is forward slash and it is located before drive
+		// letter remove it
+		if (decodePluginsPath.charAt(INDEX_OF_FIRST_CHARACTER) == SourceConstants.FORWARD_SLASH_CHAR
+				&& decodePluginsPath.charAt(INDEX_OF_THIRD_CHARACTER) == SourceConstants.COLON_CHAR) {
+			decodePluginsPath = decodePluginsPath.substring(1);
+		}
+		
+		// Concatenate decode plugins path
+		decodePluginsPath = decodePluginsPath.concat(DECODE_PLUGINS_PATH);
+		
+		// Replace slashes with correct separator character
+		decodePluginsPath = decodePluginsPath.replace(
+				SourceConstants.FORWARD_SLASH_CHAR, File.separatorChar);
+		decodePluginsPath = decodePluginsPath.replace(
+				SourceConstants.BACKSLASH_CHAR, File.separatorChar);
+		File decodePluginsDir = new File(decodePluginsPath);
+		String[] decodePlugins = decodePluginsDir.list();
+		if (decodePlugins != null) {
+			for (int i = 0; i < decodePlugins.length; i++) {
+
+				// Get decode plugin name
+				String decodePluginName = decodePlugins[i];
+
+				// Get decode plugin path
+				String decodePluginPath = decodePluginsPath
+						+ File.separatorChar + decodePluginName;
+
+				// Decode plugin must be in own directory
+				Boolean isDirectory = (new File(decodePluginPath))
+						.isDirectory();
+				if (isDirectory) {
+
+					// Construct decode plugin engine class name
+					String engineClassName = ENGINE_CLASS_NAME_TEMPLATE
+							.replaceFirst(DECODE_PLUGIN_NAME_TAG,
+									decodePluginName.substring(0, 1)
+											.toUpperCase()
+											+ decodePluginName.substring(1));
+
+					// Construct decode plugin engine file name
+					String engineFileName = ENGINE_FILE_NAME_TEMPLATE
+							.replaceFirst(DECODE_PLUGIN_CLASS_NAME_TAG,
+									engineClassName);
+					String engineFileFullName = decodePluginPath
+							+ File.separatorChar + engineFileName;
+
+					// Check does engine file exist
+					Boolean exists = (new File(engineFileFullName)).exists();
+					if (exists) {
+						String engineClassFullName = CLASS_TEMPLATE
+								.replaceFirst(DECODE_PLUGIN_NAME_TAG,
+										decodePluginName).replaceFirst(
+										DECODE_PLUGIN_CLASS_NAME_TAG,
+										engineClassName);
+						try {
+							Class<?> engineClass = Class
+									.forName(engineClassFullName);
+							TraceCompilerPlugin engine = (TraceCompilerPlugin) engineClass
+									.newInstance();
+							plugIns.add(engine);
+							TraceCompilerLogger.printInfo(Messages.getString(Messages.getString("TraceCompiler.DecodePlugin") + engineClassFullName + Messages.getString("TraceCompiler.Added"))); //$NON-NLS-1$ //$NON-NLS-2$
+						} catch (Exception e) {
+							String msg = Messages.getString("TraceCompiler.DecodePlugin" + engineClassFullName + Messages.getString("TraceCompiler.AddingFailed")); //$NON-NLS-1$ //$NON-NLS-2$
+							throw new TraceCompilerRootException(msg, e); 
+						}
+					} else {
+						String msg = Messages.getString("TraceCompiler.DecodePluginFile") + Messages.getString("TraceCompiler.EngineFullName") + engineFileFullName + Messages.getString("TraceCompiler.DoesNotExist"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						throw new TraceCompilerRootException(msg, null);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Parses the command line
+	 * 
+	 * @param args
+	 *            the arguments
+	 * @throws TraceCompilerRootException if arguments are invalid
+	 * @throws IOException 
+	 */
+	private void parseCommandLine(ArrayList<String> list) throws TraceCompilerIllegalArgumentsException, IOException {
+		TraceCompilerLogger.printInfo(Messages.getString("TraceCompiler.BuildingTracesMess")); //$NON-NLS-1$
+		Iterator<String> argIterator = list.iterator();
+		
+		if (list.size() == 0) {
+			printUsage();
+			System.exit(0);
+		}
+		while (argIterator.hasNext()) {
+			String element = argIterator.next().trim();
+			Matcher m = singleSwitchPattern.matcher(element);
+
+			if (m.matches()) { //it's one of the single switches 
+				if (element.equalsIgnoreCase(HELP_OPTION) || element.equalsIgnoreCase(HELP_OPTION_SF)) {
+					printUsage();
+					System.exit(0);
+				}
+				if (element.equalsIgnoreCase(VERBOSE_OPTION) || element.equalsIgnoreCase(VERBOSE_OPTION_SF)) {
+					TraceCompilerGlobals.setVerbose(true);
+					TraceCompilerLogger.printInfo(Messages.getString("TraceCompiler.veboseEnabled")); //$NON-NLS-1$
+					continue;
+				}
+				if ( element.equalsIgnoreCase(VERSION_OPTION) || element.equalsIgnoreCase(VERSION_OPTION_SF)) {
+					TraceCompilerLogger.printMessage(VERSION_TEXT + TraceCompilerVersion.getVersion());
+					System.exit(0);
+				}
+				if (element.equalsIgnoreCase(STOP_ON_ERROR_OPTION) || element.equalsIgnoreCase(STOP_ON_ERROR_OPTION_SF)) {
+					TraceCompilerGlobals.setKeepGoing(false);
+					TraceCompilerLogger.printInfo(Messages.getString("TraceCompiler.StopOnErrorEnabled")); //$NON-NLS-1$
+					continue;
+				}
+				TraceCompilerLogger.printMessage(Messages.getString("TraceCompiler.UnsupportedSwitch")  + element); //$NON-NLS-1$
+			} else {
+				m = valueSwitchPattern.matcher(element.trim());
+				if (m.matches()) { //it's one of the swithes with values
+					if (m.group(1).equalsIgnoreCase(UID_SWITCH)) {
+						// UID
+						try {
+							componentUID = Long.parseLong(m.group(2),TraceCompilerConstants.HEX_RADIX);	
+							TraceCompilerLogger.printInfo("Component UID: 0x" + Long.toHexString(componentUID)); //$NON-NLS-1$
+							if (componentUID <= 0L) {
+								String msg = Messages.getString("TraceCompiler.componentUidIsNotValidExceptionText") + componentUID; //$NON-NLS-1$
+								throw new TraceCompilerIllegalArgumentsException(msg, null);
+							}
+						} catch (NumberFormatException e) {
+							String msg = Messages.getString("TraceCompiler.componentUidIsNotValidExceptionText") + componentUID; //$NON-NLS-1$
+							throw new TraceCompilerIllegalArgumentsException(msg, null);
+						}
+					} else {
+						if (m.group(1).equalsIgnoreCase(PRJ_NAME_SWITCH)) {
+							// project name
+							projectName = m.group(2);
+							TraceCompilerLogger.printInfo(Messages.getString("TraceCompiler.CompNameSet") + projectName); //$NON-NLS-1$
+						} else {
+							if (m.group(1).equalsIgnoreCase(MMP_PATH_SWITCH)) {
+								//mmp path. for the moment only the mmp folder is used.
+								mmpPath = new File(m.group(2));
+								TraceCompilerLogger.printInfo(Messages.getString("TraceCompiler.MMPPathSet") + mmpPath); //$NON-NLS-1$
+							} else {
+								if (m.group(1).equalsIgnoreCase(TRACES_PATH_SWITCH)) {
+									//traces path
+									traces_path = m.group(2);
+								} else {
+									//unsupported switch
+									TraceCompilerLogger.printMessage(Messages.getString("TraceCompiler.UnsupportedSwitch") + element); //$NON-NLS-1$
+								}
+							}
+						}
+					}
+
+				} else {
+					//it must be a file name
+					//it's a good time to stop TC here if the file does not exist
+					if (!(new File(element)).exists()) {
+						throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.sourceFileDoesNotExist") + element, null); //$NON-NLS-1$
+					}
+					sources.add(element);				
+				}	
+			}
+		}
+		
+		// by now, if the user wanted just help or version they would have got it and TC stopped
+		
+		if (componentUID <= 0L) {
+			String msg = Messages.getString("TraceCompiler.componentUidIsNotValidExceptionText") + componentUID; //$NON-NLS-1$
+			throw new TraceCompilerIllegalArgumentsException(msg, null);
+		}
+		
+		if (projectName == null) {
+			throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.projectNameMissing"), null); //$NON-NLS-1$
+		}
+		
+		//if files have not been provided , get them from stdin
+		if (sources.size() == 0) {
+			//get them from the stdin
+			readFromStdin();
+		}
+		
+		if (mmpPath == null ) {
+			throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.mmpPathMissing"), null); //$NON-NLS-1$
+		} else if (!isMmpValid()) {
+			throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.invalidMmpExceptionText") + mmpPath, null); //$NON-NLS-1$
+		}
+		
+		if (traces_path == null ) {
+			throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.tracesPathMissing"), null); //$NON-NLS-1$
+		} else {
+			computeTracesPath(traces_path);
+		}
+		
+		if (sources.size() == 0 ) {
+			throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.fileListMissing"), null); //$NON-NLS-1$
+		}
+		
+		//we have all parameters input and validated, register files.
+		registerSourceFiles(sources);		
+	}
+	
+	
+	/**
+	 * If traces path is relative, work out the full path relative to the location of the mmp file
+	 * @param path
+	 * @throws TraceCompilerIllegalArgumentsException
+	 */
+	private void computeTracesPath(String path) throws TraceCompilerIllegalArgumentsException {
+		String traces_pathString = path;
+		traces_pathString = traces_pathString.replace('/', File.separatorChar);
+		traces_pathString = traces_pathString.replace('\\', File.separatorChar);
+
+		File traces_path = new File(traces_pathString);
+
+		Pattern p = Pattern.compile("(([a-zA-Z]:[\\\\/])|([\\\\/])).*"); //$NON-NLS-1$
+		Matcher m = p.matcher(traces_pathString);
+
+		if (!m.matches() /*  workaround for isAbsolute in java */) {
+			//traces path is relative to mmp location
+			traces_pathString = mmpPath.getAbsoluteFile().getParent() + File.separator + traces_pathString;
+		}
+
+		traces_path = new File(traces_pathString);
+
+		if (traces_path.isDirectory() && !traces_path.canWrite()) {
+			throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.TracesPathWriteProtected") + traces_path, null); //$NON-NLS-1$
+		}
+
+		boolean dirExists = true;
+		if (!traces_path.exists()) {
+			dirExists = FileUtils.createDirectories(traces_path);
+		}
+		if (!dirExists) {
+			throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.mkdirFailed") + traces_path, null); //$NON-NLS-1$
+		}
+
+		//set component path and trace folder
+		componentPath = traces_path.getParent();
+		ProjectEngine.traceFolderName = traces_path.getName();
+		TraceCompilerLogger.printInfo(Messages.getString("TraceCompiler.settingComponentPath") + componentPath); //$NON-NLS-1$
+		TraceCompilerLogger.printInfo(Messages.getString("TraceCompiler.settingTracesPath") + ProjectEngine.traceFolderName); //$NON-NLS-1$
+	}
+
+	private static void printUsage() {
+		TraceCompilerLogger.printMessage(VERSION_TEXT + TraceCompilerVersion.getVersion());
+		TraceCompilerLogger.printMessage(USAGE);
+	}
+
+	/**
+	 * Read information from STDIN
+	 * @throws IOException if fails to read the input
+	 * @throws TraceCompilerRootException if the list of files is empty
+	 */
+	private void readFromStdin() throws IOException, TraceCompilerIllegalArgumentsException {
+		TraceCompilerLogger.printInfo(Messages.getString("TraceCompiler.ReadingFilesMess")  + ENDOFSOURCEFILES); //$NON-NLS-1$
+		// Create reader
+		BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
+
+			String line = stdin.readLine();
+						
+			while (line != null) {
+				line = line.trim();
+				if (line.length() > 0) {
+					// End of source files received
+					if (line.equals(ENDOFSOURCEFILES)) {
+						break;
+					}
+					line = line.replaceAll("\\s+", ""); //$NON-NLS-1$ //$NON-NLS-2$
+					Matcher m = valueSwitchPattern.matcher(line.trim());
+					//because mmp path and traces path can be very long, we should allow them to be input'ed through stdin too.
+					if (m.matches()) { //it's one of the swithes with values
+						if (m.group(1).equalsIgnoreCase(MMP_PATH_SWITCH)) {
+							//mmp path. for the moment only the mmp folder is used.
+							mmpPath = new File(m.group(2));
+							TraceCompilerLogger.printInfo(Messages.getString("TraceCompiler.MMPPathSet") + mmpPath); //$NON-NLS-1$
+						} else {
+							if (m.group(1).equalsIgnoreCase(TRACES_PATH_SWITCH)) {
+								//traces path
+								traces_path = m.group(2);
+							} else {
+								//unsupported switch
+								TraceCompilerLogger.printMessage(Messages.getString("TraceCompiler.UnsupportedSwitch") + line); //$NON-NLS-1$
+							}
+						}
+					} else {
+
+						//it must be a file name
+						//it's a good time to stop TC here if the file does not exist
+						if (!(new File(line)).exists()) {
+							throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.sourceFileDoesNotExist") + line, null); //$NON-NLS-1$
+						}
+						sources.add(line);
+					}
+				}
+				// Read new line from STDIN
+				line = stdin.readLine();				
+			}
+		stdin.close();
+	}
+
+	/**
+	 * Registers source files
+	 * 
+	 * @param files
+	 */
+	private void registerSourceFiles(ArrayList<String> files) throws TraceCompilerIllegalArgumentsException {
+		if (sources.size() == 0) {
+			throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.noSourceFilesExceptionText"), null); //$NON-NLS-1$
+		}
+		if (files.size() > 0) {
+			String[] fileArr = new String[files.size()];
+			files.toArray(fileArr);
+
+			// Sets the source files to the TraceCompiler document
+			// factory. It will create a document from each source in the array
+			FileDocumentMonitor.setFiles(fileArr);
+			DocumentFactory.registerDocumentFramework(
+					new FileDocumentMonitor(), StringDocumentFactory.class);
+		}
+	}
+
+	/**
+	 * Initializes TraceCompiler
+	 * @throws TraceCompilerRootException if fail to initialize the plugins
+	 * @throws TraceCompilerException 
+	 */
+	private void start() throws TraceCompilerRootException, TraceCompilerException {
+
+		// Starts TraceCompiler. This is normally called from the Eclipse
+		// plug-in
+		// activator, but in console case that does not exist
+		TraceCompilerEngineGlobals.start();
+						
+		//Reads the GroupId values from opensystemtrace_types.h
+		//If this fails a message is logged and trace compiler stops
+		GroupNames.initialiseGroupName();
+
+		
+		// Registers a view to TraceCompiler
+		TraceCompilerEngineGlobals
+				.setView(new TraceCompilerView(componentPath));
+
+		// Registers all plug-in components
+		for (TraceCompilerPlugin plugin : plugIns) {
+			TraceCompilerEngineGlobals.registerPlugin(plugin);
+		}
+		// Adds a model event listener
+		TraceCompilerEngineGlobals.getTraceModel().addModelListener(
+				modelListener);
+		TraceCompilerEngineGlobals.getTraceModel().addExtensionListener(
+				modelListener);
+		TraceCompilerEngineGlobals.getTraceModel().getExtension(
+				TraceLocationList.class).addLocationListListener(modelListener);
+		TraceCompilerEngineGlobals.getTraceModel().addProcessingListener(modelListener);
+	}
+
+	/**
+	 * Parses the sources and generates trace files
+	 * @throws Exception 
+	 */
+	private void buildTraceFiles() throws Exception {
+		TraceCompilerEngineInterface tbi = TraceCompilerEngineGlobals
+				.getTraceCompiler();
+		try {
+			// Opens a trace project
+
+			// Set project path before opening project
+			TraceCompilerEngineGlobals.setProjectPath(componentPath);
+			tbi.openProject(projectName);
+			TraceModel model = TraceCompilerEngineGlobals.getTraceModel();
+			if (model.isValid()) {
+				model.setID((int) componentUID);
+
+				// Location errors are printed after a file changes, but the
+				// last file is not detected by the listener
+				if (modelListener.getErrors().size() > 0) {
+					modelListener.printLocationErrors();
+					tbi.closeProject();
+					throw new TraceCompilerRootException(null, null);
+				}
+				tbi.exportProject();
+				tbi.closeProject();
+			} else {
+				String msg = Messages.getString("TraceCompiler.ProjectCancelledMess"); //$NON-NLS-1$
+				throw new TraceCompilerRootException(msg, null);
+			}
+		} catch (TraceCompilerException e) {
+			TraceCompilerEngineGlobals.getEvents().postError(e);
+			throw new TraceCompilerRootException(Messages.getString("TraceCompiler.BuildFailed"), e); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Shuts down TraceCompiler
+	 * @throws TraceCompilerException 
+	 */
+	private void shutdown() throws TraceCompilerException {
+		for (TraceCompilerPlugin plugin : plugIns) {
+			TraceCompilerEngineGlobals.unregisterPlugin(plugin);
+		}
+		TraceCompilerEngineGlobals.shutdown();
+	}
+
+	/**
+	 * Checks if the MMP file is valid
+	 * 
+	 * @return true if MMP file is valid
+	 */
+	private boolean isMmpValid() {
+		boolean valid = false;
+		String pathStr = mmpPath.getAbsolutePath();
+
+		if (mmpPath.exists() && pathStr.length() > MMP_FILE_TYPE.length()) {
+			String end = pathStr.substring(pathStr.length() - MMP_FILE_TYPE.length());
+			if (end.equalsIgnoreCase(MMP_FILE_TYPE)) {
+				valid = true;
+			} else {
+				TraceCompilerLogger.printError(Messages.getString("TraceCompiler.invalidMmpExceptionText") + mmpPath.getAbsolutePath()); //$NON-NLS-1$
+			}
+		} else {
+			TraceCompilerLogger.printError(Messages.getString("TraceCompiler.InvalidMMP2") + mmpPath.getAbsolutePath()); //$NON-NLS-1$
+		}
+		return valid;
+		
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerModelListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,246 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ * Model extension listener for console UI
+ *
+ */
+package com.nokia.tracecompiler;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceLocation;
+import com.nokia.tracecompiler.engine.TraceLocationList;
+import com.nokia.tracecompiler.engine.TraceLocationListListener;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceModelExtensionListener;
+import com.nokia.tracecompiler.model.TraceModelListener;
+import com.nokia.tracecompiler.model.TraceObject;
+import com.nokia.tracecompiler.model.TraceProcessingListener;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceLocationListener;
+
+/**
+ * Model extension listener for TraceCompiler UI
+ * 
+ */
+final class TraceCompilerModelListener implements TraceModelListener,
+		TraceModelExtensionListener, TraceLocationListListener,
+		SourceLocationListener, TraceProcessingListener {
+
+	/**
+	 * List of errors for a source
+	 */
+	private ArrayList<TraceLocation> errorList = new ArrayList<TraceLocation>();
+
+	/**
+	 * Name of the file being processed
+	 */
+	private String currentFileName;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 * objectAdded(com.nokia.tracecompiler.model.TraceObject,
+	 * com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectAdded(TraceObject owner, TraceObject object) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 * objectCreationComplete(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectCreationComplete(TraceObject object) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 * objectRemoved(com.nokia.tracecompiler.model.TraceObject,
+	 * com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectRemoved(TraceObject owner, TraceObject object) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 * propertyUpdated(com.nokia.tracecompiler.model.TraceObject, int)
+	 */
+	public void propertyUpdated(TraceObject object, int property) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtensionListener#
+	 * extensionAdded(com.nokia.tracecompiler.model.TraceObject,
+	 * com.nokia.tracecompiler.model.TraceModelExtension)
+	 */
+	public void extensionAdded(TraceObject object, TraceModelExtension extension) {
+		if (extension instanceof TraceLocationList) {
+			((TraceLocationList) extension).addLocationListListener(this);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtensionListener#
+	 * extensionRemoved(com.nokia.tracecompiler.model.TraceObject,
+	 * com.nokia.tracecompiler.model.TraceModelExtension)
+	 */
+	public void extensionRemoved(TraceObject object,
+			TraceModelExtension extension) {
+		if (extension instanceof TraceLocationList) {
+			((TraceLocationList) extension).removeLocationListListener(this);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.TraceLocationListListener#
+	 * locationAdded(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	public void locationAdded(TraceLocation location) {
+		location.addLocationListener(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.TraceLocationListListener#
+	 * locationRemoved(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	public void locationRemoved(TraceLocation location) {
+		location.removeLocationListener(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceLocationListener#
+	 * locationValidityChanged(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	public void locationValidityChanged(TraceLocation location) {
+		String fileName = location.getFileName();
+		if (currentFileName != null) {
+			if (!fileName.equals(currentFileName)) {
+				currentFileName = fileName;
+				printLocationErrors();
+			}
+		} else {
+			currentFileName = fileName;
+		}
+		TraceCompilerErrorCode code = location.getValidityCode();
+		if (code != TraceCompilerErrorCode.OK
+				&& code != TraceCompilerErrorCode.TRACE_DOES_NOT_EXIST) {
+			if (!errorList.contains(location)) {
+				errorList.add(location);
+				location.reference();
+			}
+		} else {
+			if (errorList.remove(location)) {
+				location.dereference();
+			}
+		}
+	}
+
+	/**
+	 * Prints the errors from the error list
+	 */
+	void printLocationErrors() {
+		Collections.sort(errorList, new Comparator<TraceLocation>() {
+
+			/**
+			 * Sorts the array by line number
+			 * 
+			 * @param o1
+			 *            location 1
+			 * @param o2
+			 *            location 2
+			 * @return the result
+			 */
+			public int compare(TraceLocation o1, TraceLocation o2) {
+				int line1 = o1.getLineNumber();
+				int line2 = o2.getLineNumber();
+				return line1 > line2 ? 1 : line1 == line2 ? 0 : -1;
+			}
+
+		});
+		for (TraceLocation location : errorList) {
+			printLocationError(location);
+		}
+		errorList.clear();
+	}
+
+	/**
+	 * Prints a location error
+	 * 
+	 * @param location
+	 *            the location
+	 */
+	private void printLocationError(TraceLocation location) {
+		TraceCompilerEngineGlobals.getEvents().postErrorMessage(
+				location.getFileName()
+						+ Messages.getString("TraceCompilerModelListener.lineNumberPrefix") //$NON-NLS-1$
+						+ location.getLineNumber()
+						+ SourceConstants.COLON
+						+ SourceConstants.SPACE
+						+ TraceCompilerEngineErrorMessages.getErrorMessage(
+								location.getValidityCode(), location
+										.getValidityParameters()), null, true);
+	}
+
+	/**
+	 * get list of cumulated erros.
+	 * 
+	 * @return list of TaceLocaion
+	 */
+	public ArrayList<TraceLocation> getErrors() {
+		return errorList;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.nokia.tracecompiler.model.TraceProcessingListener#processingComplete
+	 * (boolean)
+	 */
+	public void processingComplete(boolean changed) {
+		printLocationErrors();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.nokia.tracecompiler.model.TraceProcessingListener#processingStarted()
+	 */
+	public void processingStarted() {
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerRootException.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+ * 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:
+ *
+ * Command-line based view implementation
+ *
+ */
+package com.nokia.tracecompiler;
+
+
+public class TraceCompilerRootException extends Exception {
+	// Serial version UID, as required for all Exceptions
+	private static final long serialVersionUID = 2126996710246333574L;
+	
+
+	/**
+	 * Constructs a TraceCompilerRootException with the given detail message and
+	 * cause.
+	 * @param message the detail message
+	 * @param cause the Exception that caused this Exception
+	 */
+	public TraceCompilerRootException(String message, Throwable cause)
+	{
+		super(message, cause);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerView.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2008 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:
+ *
+ * Console view implementation
+ *
+ */
+package com.nokia.tracecompiler;
+
+import java.io.File;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineConfiguration;
+import com.nokia.tracecompiler.engine.ViewAdapter;
+
+/**
+ * TraceCompiler view implementation
+ * 
+ */
+class TraceCompilerView extends ViewAdapter {
+
+	/**
+	 * Epoc root name in environment variables
+	 */
+	private static final String EPOCROOT = "EPOCROOT"; //$NON-NLS-1$
+
+	/**
+	 * Export path
+	 */
+	private String exportPath;
+
+	/**
+	 * Configuration
+	 */
+	private TraceCompilerConfiguration configuration;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param projectPath
+	 *            the project path
+	 */
+	TraceCompilerView(String projectPath) {
+		// First try to get EPOCROOT from environment
+		exportPath = System.getenv(EPOCROOT);
+
+		// Windows substed drive
+		if (exportPath == null) {
+			int index = projectPath.indexOf(':');
+			if (index >= 0) {
+				exportPath = projectPath.substring(0, index + 2); // CodForChk_Dis_Magic
+			} else {
+				exportPath = File.separator;
+			}
+
+			// Check if it ends with a file separator, if not add one at the end
+		} else if (!exportPath.endsWith(File.separator)) {
+			exportPath = exportPath + File.separator;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.ViewAdapter#getConfiguration()
+	 */
+	@Override
+	public TraceCompilerEngineConfiguration getConfiguration() {
+		if (configuration == null) {
+			configuration = new TraceCompilerConfiguration(exportPath);
+		}
+		return configuration;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryDefRef.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Reference to a trace definition
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary;
+
+/**
+ * Reference to a trace definition
+ * 
+ */
+final class DictionaryDefRef extends DictionaryRef {
+
+	/**
+	 * Constructor
+	 * 
+	 * @param refid
+	 *            the reference id
+	 */
+	DictionaryDefRef(int refid) {
+		super(refid);
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryEngine.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2007 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:
+*
+* TraceCompilerExport implementation for Symbian dictionary files
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.plugin.TraceCompilerExport;
+
+/**
+ * TraceCompilerExport implementation for Symbian dictionary files
+ * 
+ */
+public final class DictionaryEngine implements TraceCompilerExport {
+
+	/**
+	 * The trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * Dictionary instance
+	 */
+	private static DictionaryEngine instance;
+
+	/**
+	 * Gets the shared instance
+	 * 
+	 * @return the instance
+	 */
+	static DictionaryEngine getInstance() {
+		return instance;
+	}
+
+	/**
+	 * Constructor
+	 */
+	public DictionaryEngine() {
+		instance = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerPlugin#
+	 *      traceProjectOpened(com.nokia.tracecompiler.model.TraceModel)
+	 */
+	public void traceProjectOpened(TraceModel model) {
+		this.model = model;
+		DictionaryFile file = model.getExtension(DictionaryFile.class);
+		if (file == null) {
+			file = new DictionaryFile(DictionaryFileExport
+					.getPathForDictionary(model));
+			model.addExtension(file);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerPlugin#traceProjectClosed()
+	 */
+	public void traceProjectClosed() {
+		if (model != null && model.isValid()) {
+			model.removeExtensions(DictionaryFile.class);
+		}
+		model = null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerExport#exportTraceProject()
+	 */
+	public void exportTraceProject() throws TraceCompilerException {
+		if (model != null && model.isValid()) {
+			DictionaryFile df = model.getExtension(DictionaryFile.class);
+			if (df != null) {
+				DictionaryFileExport export = new DictionaryFileExport(df);
+				export.exportDictionary();
+			}
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryFile.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Project file for Dictionary format
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary;
+
+import com.nokia.tracecompiler.project.TraceProjectFile;
+
+/**
+ * Project file for Dictionary format
+ * 
+ */
+final class DictionaryFile extends TraceProjectFile {
+
+	/**
+	 * Title shown in UI
+	 */
+	private static final String TITLE = Messages
+			.getString("DictionaryFile.Title"); //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 * 
+	 * @param absolutePath
+	 *            the path to the dictionary file
+	 */
+	DictionaryFile(String absolutePath) {
+		super(absolutePath, true);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectFile#getFileExtension()
+	 */
+	@Override
+	protected String getFileExtension() {
+		return DictionaryFileConstants.DICTIONARY_FILE_EXTENSION;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectFile#getTitle()
+	 */
+	@Override
+	public String getTitle() {
+		return TITLE;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryFileConstants.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Constants related to dictionary file
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary;
+
+/**
+ * Constants related to dictionary file
+ * 
+ */
+interface DictionaryFileConstants {
+
+	/**
+	 * Dictionary file extension
+	 */
+	String DICTIONARY_FILE_EXTENSION = "Dictionary.xml"; //$NON-NLS-1$
+
+	/**
+	 * Search depth for dictionary file
+	 */
+	int DICTIONARY_SEARCH_DEPTH = 3; // CodForChk_Dis_Magic
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryFileExport.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Exporter for dictionary file
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary;
+
+import java.io.File;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineConfiguration;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.file.FileUtils;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.source.SourceConstants;
+
+/**
+ * Exporter for dictionary file
+ * 
+ */
+final class DictionaryFileExport {
+
+	/**
+	 * The dictionary file properties
+	 */
+	private DictionaryFile dictionaryFile;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param dictionary
+	 *            the dictionary file
+	 */
+	DictionaryFileExport(DictionaryFile dictionary) {
+		this.dictionaryFile = dictionary;
+	}
+
+	/**
+	 * Exports the dictionary file
+	 */
+	void exportDictionary() {
+		String exportPath = getExportPath(File.separatorChar);
+		String exportFile = dictionaryFile.getFileName();
+		String envRoot = TraceCompilerEngineGlobals.getConfiguration().getText(
+				TraceCompilerEngineConfiguration.ENVIRONMENT_ROOT);
+		if (envRoot != null) {
+			File target = new File(envRoot + exportPath + exportFile);
+			// The dictionary file is updated with the new environment root
+			dictionaryFile.updatePath(target.getAbsolutePath());
+			DictionaryFileWriter writer = new DictionaryFileWriter(
+					dictionaryFile);
+			writer.write();
+			dictionaryFile.postFileWrittenEvent(dictionaryFile
+					.getAbsolutePathWithID());
+		}
+	}
+
+	/**
+	 * Returns the export path for dictionary files
+	 * 
+	 * @param separator
+	 *            the file separator to use
+	 * @return the export path
+	 */
+	private static String getExportPath(char separator) {
+		String exportPath = DictionaryPreferences.DEFAULT_EXPORT_PATH;
+
+		// Accepts both types of separators, ends with separator
+		exportPath = FileUtils.convertSeparators(separator, exportPath, true);
+		return exportPath;
+	}
+
+	/**
+	 * Gets the default path to the dictionary file
+	 * 
+	 * @param model
+	 *            trace model
+	 * @return the file
+	 */
+	static String getPathForDictionary(TraceModel model) {
+		String fileName = model.getName()
+				+ DictionaryFileConstants.DICTIONARY_FILE_EXTENSION;
+		String exportPath = getExportPath(File.separatorChar);
+		String envRoot = TraceCompilerEngineGlobals.getConfiguration().getText(
+				TraceCompilerEngineConfiguration.ENVIRONMENT_ROOT);
+		return FileUtils.convertSeparators(SourceConstants.FORWARD_SLASH_CHAR,
+				envRoot + exportPath + fileName, false);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryFileRef.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Reference to a file
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary;
+
+/**
+ * Reference to a file
+ * 
+ */
+final class DictionaryFileRef extends DictionaryRef {
+
+	/**
+	 * File name
+	 */
+	String file;
+
+	/**
+	 * File path
+	 */
+	String path;
+
+	/**
+	 * Trace
+	 */
+	com.nokia.tracecompiler.model.Trace trace;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param file
+	 *            the file name
+	 * @param path
+	 *            the file path
+	 * @param trace
+	 *            the trace
+	 */
+	DictionaryFileRef(String file, String path,
+			com.nokia.tracecompiler.model.Trace trace) {
+		super(0);
+		this.file = file;
+		this.path = path;
+		this.trace = trace;
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryFileWriter.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,586 @@
+/*
+* Copyright (c) 2008-2010 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:
+*
+* Writer for dictionary file
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.decodeplugins.dictionary.encoder.DataType;
+import com.nokia.tracecompiler.decodeplugins.dictionary.encoder.Dictionary;
+import com.nokia.tracecompiler.decodeplugins.dictionary.encoder.LocationStore;
+import com.nokia.tracecompiler.decodeplugins.dictionary.encoder.TraceComponent;
+import com.nokia.tracecompiler.decodeplugins.dictionary.encoder.TraceDataStore;
+import com.nokia.tracecompiler.decodeplugins.dictionary.encoder.TraceDictionaryEncoder;
+import com.nokia.tracecompiler.decodeplugins.dictionary.encoder.TypeDef;
+import com.nokia.tracecompiler.decodeplugins.dictionary.encoder.TypeDefStore;
+import com.nokia.tracecompiler.engine.LocationListBase;
+import com.nokia.tracecompiler.engine.LocationProperties;
+import com.nokia.tracecompiler.file.FileUtils;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceConstantTable;
+import com.nokia.tracecompiler.model.TraceConstantTableEntry;
+import com.nokia.tracecompiler.model.TraceGroup;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.model.TraceObjectUtils;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.project.FormattingUtils;
+import com.nokia.tracecompiler.project.PropertyNames;
+import com.nokia.tracecompiler.project.TraceProjectAPI;
+import com.nokia.tracecompiler.project.TraceProjectAPI.TraceFormatFlags;
+import com.nokia.tracecompiler.rules.FillerParameterRule;
+import com.nokia.tracecompiler.rules.HiddenTraceObjectRule;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceUtils;
+
+/**
+ * Writer for dictionary file
+ * 
+ */
+final class DictionaryFileWriter {
+
+	/**
+	 * Comparator for file references
+	 */
+	private final class FileRefComparator implements
+			Comparator<DictionaryFileRef> {
+		public int compare(DictionaryFileRef o1, DictionaryFileRef o2) {
+			int val = o1.path.compareTo(o2.path);
+			if (val == 0) {
+				val = o1.file.compareTo(o2.file);
+			}
+			return val;
+		}
+	}
+
+	/**
+	 * Dictionary file
+	 */
+	private DictionaryFile dictionaryFile;
+
+	/**
+	 * Sequential number for trace definitions
+	 */
+	private int defref;
+
+	/**
+	 * Sequential number for file definitions
+	 */
+	private int fileref;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param dictionaryFile
+	 *            the dictionary file
+	 */
+	DictionaryFileWriter(DictionaryFile dictionaryFile) {
+		this.dictionaryFile = dictionaryFile;
+	}
+
+	/**
+	 * Writes the dictionary file
+	 */
+	void write() {
+		defref = 0;
+		fileref = 0;
+		File file = new File(dictionaryFile.getAbsolutePathWithID());
+		// Delete removes possible read-only flags
+		if (file.exists()) {
+			file.delete();
+		}
+
+		TraceDictionaryEncoder encoder = new TraceDictionaryEncoder();
+		File path = file.getParentFile();
+		if (!path.exists()) {
+			FileUtils.createDirectories(path);
+		}
+		encoder.createNewDictionary(file.getAbsolutePath());
+		Dictionary.startDictionary();
+		createTypedefs();
+		createDefs();
+		createLocations();
+		createComponent();
+		Dictionary.endDictionary();
+	}
+
+	/**
+	 * Creates the type definitions
+	 */
+	private void createTypedefs() {
+		TypeDefStore.startTypeDefs();
+		ArrayList<String> typeList = buildTypeList();
+		writeTypeDefinitions(typeList);
+		TypeDefStore.endTypeDefs();
+	}
+
+	/**
+	 * Builds the list of parameter types
+	 * 
+	 * @return the list of types found from the model
+	 */
+	private ArrayList<String> buildTypeList() {
+		TraceModel model = dictionaryFile.getOwner().getModel();
+		ArrayList<String> typeList = new ArrayList<String>();
+		for (TraceGroup group : model) {
+			for (Trace trace : group) {
+				for (TraceParameter parameter : trace) {
+					if ((parameter.getExtension(HiddenTraceObjectRule.class) == null)
+							|| (parameter
+									.getExtension(FillerParameterRule.class) != null)) {
+						String type = parameter.getType();
+						if (!typeList.contains(type)) {
+							typeList.add(type);
+						}
+					}
+				}
+			}
+		}
+		return typeList;
+	}
+
+	/**
+	 * Writes the data type definitions
+	 * 
+	 * @param typeList
+	 *            the list of data types
+	 */
+	private void writeTypeDefinitions(ArrayList<String> typeList) {
+		for (String type : typeList) {
+			DataType dt = mapTypeToDataType(type);
+			if (dt != null) {
+				// Normal parameters
+				int size = mapParameterTypeToSize(type);
+				String formatChar = SourceUtils.mapNormalTypeToFormat(type);
+				if (formatChar != null && formatChar.length() > 1
+						&& formatChar.charAt(0) == '%') {
+					formatChar = formatChar.substring(1);
+					TypeDefStore.writeTypeDef(type, size, formatChar, dt);
+
+					// Write alternative format characters
+					writeAlternativeFormatChars(formatChar, type, size, dt);
+
+				} else {
+					TypeDefStore.writeTypeDef(type, size, null, dt);
+				}
+			} else {
+				// Enum parameters
+				TraceModel model = dictionaryFile.getOwner().getModel();
+				TraceConstantTable table = model.findConstantTableByName(type);
+				if (table != null) {
+					TypeDefStore.startTypeDef(table.getName(),
+							mapParameterTypeToSize(table.getType()), null,
+							DataType.ENUM);
+					for (TraceConstantTableEntry entry : table) {
+						TypeDef.writeTypeMember(entry.getID(), entry.getName(),
+								null);
+					}
+					TypeDefStore.endTypeDef();
+				}
+			}
+		}
+	}
+
+	/**
+	 * Writes alternative format characters to the Dictionary
+	 * 
+	 * @param formatChar
+	 *            formatchar
+	 * @param type
+	 *            parameter type
+	 * @param size
+	 *            parameter size
+	 * @param dt
+	 *            data type
+	 */
+	private void writeAlternativeFormatChars(String formatChar, String type,
+			int size, DataType dt) {
+
+		// If there's big L, write also 'll' type
+		if (formatChar.indexOf('L') != -1) {
+
+			// Double small l
+			String newFormatChar = formatChar.replace("L", "ll"); //$NON-NLS-1$ //$NON-NLS-2$
+			TypeDefStore.writeTypeDef(type, size, newFormatChar, dt);
+			writeCapitalHexType(newFormatChar, type, size, dt);
+
+		}
+
+		// Write alternative option to float types
+		else if (formatChar.equals("f") || formatChar.equals("e") //$NON-NLS-1$//$NON-NLS-2$
+				|| formatChar.equals("g")) { //$NON-NLS-1$
+
+			String newFormatChar = 'L' + formatChar;
+			TypeDefStore.writeTypeDef(type, size, newFormatChar, dt);
+		}
+
+		else {
+			// If length is one, add also formatchar with "l"
+			if (formatChar.length() == 1) {
+				String newFormatChar = "l" + formatChar; //$NON-NLS-1$
+				TypeDefStore.writeTypeDef(type, size, newFormatChar, dt);
+				writeCapitalHexType(newFormatChar, type, size, dt);
+			}
+
+			// Check capital hex need
+			writeCapitalHexType(formatChar, type, size, dt);
+		}
+	}
+
+	/**
+	 * Writes capital hex type
+	 * 
+	 * @param formatChar
+	 *            formatchar
+	 * @param type
+	 *            parameter type
+	 * @param size
+	 *            parameter size
+	 * @param dt
+	 *            data type
+	 */
+	private void writeCapitalHexType(String formatChar, String type, int size,
+			DataType dt) {
+
+		// Write also capital X if there are hex values
+		if (formatChar.indexOf('x') != -1) {
+			type = type.toUpperCase();
+			TypeDefStore.writeTypeDef(type, size, formatChar.replace('x', 'X'),
+					dt);
+		}
+	}
+
+	/**
+	 * Gets the parameter size from type
+	 * 
+	 * @param type
+	 *            the type
+	 * @return the size in bytes
+	 */
+	private int mapParameterTypeToSize(String type) {
+		int size = SourceUtils.mapParameterTypeToSize(type);
+		if (size == 0) {
+			if (type.equals(TraceParameter.ASCII)) {
+				size = 1;
+			} else if (type.equals(TraceParameter.UNICODE)) {
+				size = 2; // CodForChk_Dis_Magic
+			}
+		}
+		return size;
+	}
+
+	/**
+	 * Creates the trace definitions
+	 */
+	private void createDefs() {
+		// This should check for duplicates
+		TraceDataStore.startDataStore();
+		TraceModel model = dictionaryFile.getOwner().getModel();
+		TraceProjectAPI api = model.getExtension(TraceProjectAPI.class);
+		for (TraceGroup group : model) {
+			for (Trace trace : group) {
+				trace.addExtension(new DictionaryDefRef(++defref));
+				TraceFormatFlags flags = new TraceFormatFlags();
+				flags.isFormattingSupported = true;
+				String data = api.formatTraceForExport(trace, flags);
+				data = replaceUnescapeQuotes(data);
+				TraceDataStore.writeData(defref, DataType.STRING, data);
+			}
+		}
+		TraceDataStore.endDataStore();
+	}
+
+	/**
+	 * Replaces unescape quates
+	 * 
+	 * @param data
+	 *            the data
+	 * @return the new string
+	 */
+	private String replaceUnescapeQuotes(String data) {
+		data = data.replace("\\\"", "\""); //$NON-NLS-1$ //$NON-NLS-2$
+		return data;
+	}
+
+	/**
+	 * Maps a basic type to a Dictionary data type
+	 * 
+	 * @param type
+	 *            the type
+	 * @return the data type
+	 */
+	private DataType mapTypeToDataType(String type) { // CodForChk_Dis_ComplexFunc
+		DataType retval;
+		// Unsigned is not supported in Dictionary
+		if (type.equals(TraceParameter.SDEC32)) {
+			retval = DataType.INTEGER;
+		} else if (type.equals(TraceParameter.HEX32)) {
+			retval = DataType.HEX;
+		} else if (type.equals(TraceParameter.UDEC32)) {
+			retval = DataType.INTEGER;
+		} else if (type.equals(TraceParameter.OCT32)) {
+			retval = DataType.OCTAL;
+		} else if (type.equals(TraceParameter.SDEC16)) {
+			retval = DataType.INTEGER;
+		} else if (type.equals(TraceParameter.HEX16)) {
+			retval = DataType.HEX;
+		} else if (type.equals(TraceParameter.UDEC16)) {
+			retval = DataType.INTEGER;
+		} else if (type.equals(TraceParameter.OCT16)) {
+			retval = DataType.OCTAL;
+		} else if (type.equals(TraceParameter.SDEC8)) {
+			retval = DataType.INTEGER;
+		} else if (type.equals(TraceParameter.HEX8)) {
+			retval = DataType.HEX;
+		} else if (type.equals(TraceParameter.UDEC8)) {
+			retval = DataType.INTEGER;
+		} else if (type.equals(TraceParameter.OCT8)) {
+			retval = DataType.OCTAL;
+		} else if (type.equals(TraceParameter.SDEC64)) {
+			retval = DataType.INTEGER;
+		} else if (type.equals(TraceParameter.HEX64)) {
+			retval = DataType.HEX;
+		} else if (type.equals(TraceParameter.UDEC64)) {
+			retval = DataType.INTEGER;
+		} else if (type.equals(TraceParameter.OCT64)) {
+			retval = DataType.OCTAL;
+		} else if (type.equals(TraceParameter.ASCII)) {
+			retval = DataType.STRING;
+		} else if (type.equals(TraceParameter.UNICODE)) {
+			retval = DataType.STRING;
+		} else if (type.equals(TraceParameter.FLOAT_FIX)) {
+			retval = DataType.FLOAT;
+		} else if (type.equals(TraceParameter.FLOAT_EXP)) {
+			retval = DataType.FLOAT;
+		} else if (type.equals(TraceParameter.FLOAT_OPT)) {
+			retval = DataType.FLOAT;
+		} else if (type.equals(TraceParameter.POINTER)) {
+			retval = DataType.HEX;
+		} else {
+			retval = null;
+		}
+		return retval;
+	}
+
+	/**
+	 * Creates the location definitions
+	 */
+	private void createLocations() {
+		ArrayList<DictionaryFileRef> files = new ArrayList<DictionaryFileRef>();
+		LocationStore.startLocations();
+		for (TraceGroup group : dictionaryFile.getOwner().getModel()) {
+			for (Trace trace : group) {
+				writeLocation(files, trace);
+			}
+		}
+		// Build XML and assign ID's to refs
+		Collections.sort(files, new FileRefComparator());
+		String lastpath = null;
+		for (DictionaryFileRef ref : files) {
+			if (!ref.path.equals(lastpath)) {
+				if (lastpath != null) {
+					LocationStore.endPath();
+				}
+				LocationStore.startPath(ref.path);
+				lastpath = ref.path;
+			}
+			LocationStore.writeFile(++fileref, ref.file);
+			ref.refid = fileref;
+		}
+		if (lastpath != null) {
+			LocationStore.endPath();
+		}
+		LocationStore.endLocations();
+	}
+
+	/**
+	 * Writes the location of a trace
+	 * 
+	 * @param files
+	 *            file references
+	 * @param trace
+	 *            trace to be written
+	 */
+	private void writeLocation(ArrayList<DictionaryFileRef> files, Trace trace) {
+		LocationProperties loc = findFirstLocation(trace);
+		if (loc != null) {
+			String path = loc.getFilePath();
+			String file = loc.getFileName();
+			if (path != null) {
+				path = FileUtils.convertSeparators(
+						SourceConstants.FORWARD_SLASH_CHAR, path, true);
+				// TODO: Remove drive letter. Actually cannot remove drive
+				// letter because EPOCROOT might not be in the root of the drive
+			}
+			DictionaryFileRef ref = getRef(files, file, path);
+			if (ref == null) {
+				ref = new DictionaryFileRef(file, path, trace);
+				files.add(ref);
+				trace.addExtension(ref);
+			} else {
+				trace.addExtension(ref);
+			}
+		}
+	}
+
+	/**
+	 * Finds the first location from trace
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @return the location
+	 */
+	private LocationProperties findFirstLocation(Trace trace) {
+		Iterator<LocationListBase> itr = trace
+				.getExtensions(LocationListBase.class);
+		LocationProperties loc = null;
+		while (itr.hasNext() && loc == null) {
+			Iterator<LocationProperties> locs = itr.next().iterator();
+			if (locs.hasNext()) {
+				loc = locs.next();
+			}
+		}
+		return loc;
+	}
+
+	/**
+	 * Gets a file reference
+	 * 
+	 * @param files
+	 *            the list of file references
+	 * @param file
+	 *            file name
+	 * @param path
+	 *            file path
+	 * @return the file reference
+	 */
+	private DictionaryFileRef getRef(ArrayList<DictionaryFileRef> files,
+			String file, String path) {
+		DictionaryFileRef retval = null;
+		for (int i = 0; i < files.size() && retval == null; i++) {
+			DictionaryFileRef ref = files.get(i);
+			if (ref.file.equals(file) && ref.path.equals(path)) {
+				retval = ref;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Creates the component definition
+	 */
+	private void createComponent() {
+		TraceModel model = dictionaryFile.getOwner().getModel();
+		int compid = model.getID();
+		// Component prefix and suffix are in property file.
+		// If not there, the default values are used
+		String prefix = TraceObjectUtils.findProperty(model,
+				PropertyNames.PREFIX);
+		if (prefix == null || prefix.length() == 0) {
+			prefix = FormattingUtils.getDefaultComponentPrefix(model);
+		}
+		String suffix = TraceObjectUtils.findProperty(model,
+				PropertyNames.SUFFIX);
+		if (suffix == null || suffix.length() == 0) {
+			suffix = FormattingUtils.getDefaultComponentSuffix(model);
+		}
+		Dictionary.startComponent(compid, dictionaryFile.getProjectName(),
+				prefix, suffix);
+		for (TraceGroup group : model) {
+			createGroup(group);
+		}
+		Dictionary.endComponent();
+	}
+
+	/**
+	 * Creates a group definition
+	 * 
+	 * @param group
+	 *            the group
+	 */
+	private void createGroup(TraceGroup group) {
+		String prefix = TraceObjectUtils.findProperty(group,
+				PropertyNames.PREFIX);
+		if (prefix == null || prefix.length() == 0) {
+			prefix = FormattingUtils.getDefaultGroupPrefix(group);
+		}
+		String suffix = TraceObjectUtils.findProperty(group,
+				PropertyNames.SUFFIX);
+		if (suffix == null || suffix.length() == 0) {
+			suffix = FormattingUtils.getDefaultGroupSuffix(group);
+		}
+		TraceComponent.startGroup(group.getID(), group.getName(), prefix,
+				suffix);
+		for (Trace trace : group) {
+			createTrace(trace);
+		}
+		TraceComponent.endGroup();
+	}
+
+	/**
+	 * Creates a trace definition
+	 * 
+	 * @param trace
+	 *            the trace
+	 */
+	private void createTrace(Trace trace) {
+		DictionaryDefRef defref = trace.getExtension(DictionaryDefRef.class);
+		if (defref != null) {
+			DictionaryFileRef fileref = trace
+					.getExtension(DictionaryFileRef.class);
+			com.nokia.tracecompiler.decodeplugins.dictionary.encoder.TraceGroup.startTrace(defref
+					.getRefId(), trace.getName());
+			if (fileref != null) {
+				writeTraceWithLocation(fileref.getRefId(), trace);
+			} else {
+				com.nokia.tracecompiler.decodeplugins.dictionary.encoder.Trace.writeInstance(trace
+						.getID(), 0, 0, "", //$NON-NLS-1$
+						""); //$NON-NLS-1$
+			}
+			com.nokia.tracecompiler.decodeplugins.dictionary.encoder.TraceGroup.endTrace();
+		}
+		trace.removeExtensions(DictionaryRef.class);
+
+	}
+
+	/**
+	 * Writes a trace which has a source location
+	 * 
+	 * @param refId
+	 *            file reference number
+	 * @param trace
+	 *            the trace
+	 */
+	private void writeTraceWithLocation(int refId, Trace trace) {
+		LocationProperties loc = findFirstLocation(trace);
+		int line = 0;
+		String className = ""; //$NON-NLS-1$
+		String functionName = ""; //$NON-NLS-1$
+		if (loc != null) {
+			line = loc.getLineNumber();
+			className = loc.getClassName();
+			functionName = loc.getFunctionName();
+		}
+		com.nokia.tracecompiler.decodeplugins.dictionary.encoder.Trace.writeInstance(trace.getID(),
+				refId, line, functionName, className);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryPreferences.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Preferences for dictionary
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary;
+
+/**
+ * Preferences for dictionary
+ * 
+ */
+public interface DictionaryPreferences {
+
+	/**
+	 * Export path for dictionary files
+	 */
+	String EXPORT_PATH = "Dictionary.exportPath"; //$NON-NLS-1$
+
+	/**
+	 * Default path where to export dictionary files
+	 */
+	String DEFAULT_EXPORT_PATH = "epoc32/ost_dictionaries"; //$NON-NLS-1$
+
+	/**
+	 * Gets a property from preferences
+	 * 
+	 * @param name
+	 *            the property name
+	 * @return the property value
+	 */
+	public String getString(String name);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/DictionaryRef.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Reference base class
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary;
+
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceObject;
+
+/**
+ * Reference base class
+ * 
+ */
+class DictionaryRef implements TraceModelExtension {
+
+	/**
+	 * Reference id
+	 */
+	int refid;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param refid
+	 *            the reference id
+	 */
+	DictionaryRef(int refid) {
+		this.refid = refid;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#getOwner()
+	 */
+	public TraceObject getOwner() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#
+	 *      setOwner(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void setOwner(TraceObject owner) {
+	}
+
+	/**
+	 * Gets the reference id
+	 * 
+	 * @return ID
+	 */
+	int getRefId() {
+		return refid;
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/Messages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Localization for dictionary package
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Localization for dictionary package
+ * 
+ */
+class Messages {
+
+	/**
+	 * Bundle name
+	 */
+	private static final String BUNDLE_NAME = "com.nokia.tracecompiler.decodeplugins.dictionary.messages"; //$NON-NLS-1$
+
+	/**
+	 * Bundle
+	 */
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Prevents construction
+	 */
+	private Messages() {
+
+	}
+
+	/**
+	 * Gets localized string based on key
+	 * 
+	 * @param key
+	 *            the resource key
+	 * @return the localized resource
+	 */
+	public static String getString(String key) {
+		String value;
+		try {
+			value = RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			value = '!' + key + '!';
+		}
+		return value;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/DataType.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2008 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:
+*
+* DataType enumeration
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * DataType enumeration
+ * 
+ */
+public enum DataType {
+
+	/**
+	 * String type
+	 */
+	STRING("string"), //$NON-NLS-1$
+
+	/**
+	 * Integer type
+	 */
+	INTEGER("integer"), //$NON-NLS-1$
+
+	/**
+	 * Float type
+	 */
+	FLOAT("float"), //$NON-NLS-1$
+
+	/**
+	 * Hex type
+	 */
+	HEX("hex"), //$NON-NLS-1$
+
+	/**
+	 * Binary type
+	 */
+	BINARY("binary"), //$NON-NLS-1$
+
+	/**
+	 * Octal type
+	 */
+	OCTAL("octal"), //$NON-NLS-1$
+
+	/**
+	 * Enum type
+	 */
+	ENUM("enum"), //$NON-NLS-1$
+
+	/**
+	 * Raw type
+	 */
+	RAW("raw"), //$NON-NLS-1$
+
+	/**
+	 * Compound type
+	 */
+	COMPOUND("compound"); //$NON-NLS-1$
+
+	/**
+	 * Data type
+	 */
+	private final String type;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param type
+	 *            the type
+	 */
+	private DataType(String type) {
+		this.type = type;
+	}
+
+	/**
+	 * Gets the type as string
+	 * 
+	 * @return type
+	 */
+	public String getType() {
+		return type;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/Dictionary.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Dictionary tag
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Dictionary tag
+ * 
+ */
+public class Dictionary {
+
+	/**
+	 * Writes start of the XML file and starts &lt;tracedictionary&gt; structure
+	 */
+	public static void startDictionary() {
+		TagWriter.write(TagWriter.XML_START, TagWriter.INDENT_0);
+		TagWriter.write(TagWriter.DICTIONARY_START, TagWriter.INDENT_0);
+	}
+
+	/**
+	 * Writes &lt;/tracedictionary&gt;
+	 */
+	public static void endDictionary() {
+		TagWriter.write(TagWriter.DICTIONARY_END, TagWriter.INDENT_0);
+		TagWriter.close();
+	}
+
+	/**
+	 * Starts &lt;component id="", name="" prefix="" suffix=""&gt; structure
+	 * 
+	 * @param id
+	 *            unique component id within dictionary
+	 * @param name
+	 *            name of the component
+	 * @param prefix
+	 *            optional prefix for the component
+	 * @param suffix
+	 *            optional suffix for the component
+	 */
+	public static void startComponent(int id, String name, String prefix,
+			String suffix) {
+		TraceComponent.startComponent(id, name, prefix, suffix);
+
+	}
+
+	/**
+	 * Writes &lt;/component&gt;
+	 */
+	public static void endComponent() {
+		TraceComponent.endComponent();
+	}
+
+	/**
+	 * Starts &lt;metadata&gt; structure
+	 */
+	public static void startMetaData() {
+		TagWriter.write(TagWriter.METADATA_START, TagWriter.INDENT_1);
+	}
+
+	/**
+	 * Writes user defined tags &lt;mytagXXX&gt;value&lt;/mytagXXX&gt;
+	 * 
+	 * @param name
+	 *            tag
+	 * @param value
+	 *            value of the tag
+	 */
+	public static void writeMetaData(String name, String value) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.START_TAG_OPEN);
+		sb.append(name);
+		sb.append(TagWriter.TAG_CLOSE);
+		sb.append(XMLDataFilter.changeData(value));
+		sb.append(TagWriter.END_TAG_OPEN);
+		sb.append(name);
+		sb.append(TagWriter.TAG_CLOSE);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_2);
+	}
+
+	/**
+	 * Writes &lt;/metadata&gt;
+	 */
+	public static void endMetaData() {
+		TagWriter.write(TagWriter.METADATA_END, TagWriter.INDENT_1);
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/LocationStore.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Location store
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Location store
+ * 
+ */
+public class LocationStore {
+
+	/**
+	 * Writes &lt;locations&gt;
+	 */
+	public static void startLocations() {
+		TagWriter.write(TagWriter.LOCATIONS_START, TagWriter.INDENT_1);
+	}
+
+	/**
+	 * Starts &lt;path val=""&gt; structure
+	 * 
+	 * @param path
+	 *            relative or absolute path to some directory
+	 */
+	public static void startPath(String path) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.PATH_START_OPEN);
+		TagWriter.appendAttribute(sb, TagWriter.VAL_ATTR, path, false);
+		sb.append(TagWriter.TAG_CLOSE);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_2);
+	}
+
+	/**
+	 * Writes &lt;file id=""&gt;fileName&lt;/file&gt; structure
+	 * 
+	 * @param id
+	 *            unique number within &lt;locations&gt; structure
+	 * @param fileName
+	 *            value of the file element
+	 */
+	public static void writeFile(int id, String fileName) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.FILE_START_OPEN);
+		TagWriter.appendAttribute(sb, TagWriter.ID_ATTR, String.valueOf(id),
+				false);
+		sb.append(TagWriter.TAG_CLOSE);
+		sb.append(XMLDataFilter.changeData(fileName));
+		sb.append(TagWriter.FILE_END);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_3);
+	}
+
+	/**
+	 * Writes &lt;/path&gt;
+	 */
+	public static void endPath() {
+		TagWriter.write(TagWriter.PATH_END, TagWriter.INDENT_2);
+	}
+
+	/**
+	 * Writes &lt;/locations&gt;
+	 */
+	public static void endLocations() {
+		TagWriter.write(TagWriter.LOCATIONS_END, TagWriter.INDENT_1);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/Options.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Options
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Options
+ * 
+ */
+public class Options {
+
+	/**
+	 * Writes &lt;options&gt;
+	 * 
+	 * @param indent
+	 *            amount of tabs for indent
+	 */
+	static void startOptions(int indent) {
+		TagWriter.write(TagWriter.OPTIONS_START, indent);
+	}
+
+	/**
+	 * Writes &lt;/options&gt;
+	 * 
+	 * @param indent
+	 *            amount of tabs for indent
+	 */
+	static void endOptions(int indent) {
+		TagWriter.write(TagWriter.OPTIONS_END, indent);
+	}
+
+	/**
+	 * Writes user defined tags &lt;mytagXXX&gt;value&lt;/mytagXXX&gt;
+	 * 
+	 * @param tag
+	 *            user defined tag
+	 * @param value
+	 *            value of the tag
+	 * @param indent
+	 *            amount of tabs for indent
+	 */
+	static void writeOptions(String tag, String value, int indent) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.START_TAG_OPEN);
+		sb.append(tag);
+		sb.append(TagWriter.TAG_CLOSE);
+		sb.append(XMLDataFilter.changeData(value));
+		sb.append(TagWriter.END_TAG_OPEN);
+		sb.append(tag);
+		sb.append(TagWriter.TAG_CLOSE);
+		TagWriter.write(sb.toString(), indent);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TagWriter.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,489 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Tag writer
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+import java.io.BufferedOutputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+
+/**
+ * Tag writer
+ * 
+ */
+class TagWriter {
+
+	/**
+	 * 
+	 */
+	private static final String OUTPUT_FORMAT_UTF8 = "UTF-8"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	private static OutputStreamWriter m_writer = null;
+
+	/**
+	 * 
+	 */
+	static final String XML_START = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String CLASSIFICATION_ATTR = "classification="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String CLASSNAME_ATTR = "classname="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String COMPONENT_START_OPEN = "<component "; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String COMPONENT_END = "</component>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String DATA_REF_ATTR = "data-ref="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String DATASTORE_START = "<datastore>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String DATASTORE_END = "<datastore>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String DEF_END = "</def>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String DEF_START_OPEN = "<def "; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String DICTIONARY_START = "<tracedictionary xmlns:xsi=" + //$NON-NLS-1$
+			"\"http://www.w3.org/2001/XMLSchema-instance\" " + //$NON-NLS-1$
+			"xsi:noNamespaceSchemaLocation=\"DictionarySchema.xsd\">";//$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String DICTIONARY_END = "</tracedictionary>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String END_TAG_OPEN = "</"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String EXTERNAL_DEF_END = "</external-def>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String EXTERNAL_DEF_START = "<external-def>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String FILE_START_OPEN = "<file "; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String FILE_END = "</file>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String FORMATCHAR_ATTR = "formatchar="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String GROUP_END = "</group>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String GROUP_START_OPEN = "<group "; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String ID_ATTR = "id="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String INSTANCE_START_OPEN = "<instance "; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String INSTANCE_END = "</instance>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String LINE_ATTR = "line="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String LOC_REF_ATTR = "loc-ref="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String LOCATIONS_START = "<locations>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String LOCATIONS_END = "</locations>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String METHODNAME_ATTR = "methodname="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String METADATA_START = "<metadata>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String METADATA_END = "</metadata>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String NAME_ATTR = "name="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String NAME_START = "<name>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String NAME_END = "</name>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String OBJECT_END = "</object>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String OBJECT_START = "<object>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String OBJECT_START_OPEN = "<object "; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String OPTIONS_START = "<options>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String OPTIONS_START_OPEN = "<options "; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String OPTIONS_END = "</options>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String PATH_START_OPEN = "<path "; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String PATH_END = "</path>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String PREFIX_ATTR = "prefix="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String QUOTE = "\""; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String ROW_CHANGE = "\n"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String SIZE_ATTR = "size="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String SPACE = " "; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String START_TAG_OPEN = "<"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String SUFFIX_ATTR = "suffix="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TAB = "\t"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TAG_CLOSE = ">"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TAG_END = "/>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TRACE_END = "</trace>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TRACE_START = "<trace>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TRACE_START_OPEN = "<trace "; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TRACE_DATA_END = "</data>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TRACE_DATA_START = "<data>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TYPE_ATTR = "type="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TYPEDEFS_START = "<typedefs>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TYPEDEFS_END = "</typedefs>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TYPEMEMBER_END = "</typemember>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TYPEMEMBER_START = "<typemember>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String TYPEMEMBER_START_OPEN = "<typemember "; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String VAL_ATTR = "val="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String VALUE_ATTR = "value="; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String VALUE_START = "<value>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final String VALUE_END = "</value>"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	static final int INDENT_0 = 0;
+
+	/**
+	 * 
+	 */
+	static final int INDENT_1 = 1;
+
+	/**
+	 * 
+	 */
+	static final int INDENT_2 = 2; // CodForChk_Dis_Magic
+
+	/**
+	 * 
+	 */
+	static final int INDENT_3 = 3;// CodForChk_Dis_Magic
+
+	/**
+	 * 
+	 */
+	static final int INDENT_4 = 4;// CodForChk_Dis_Magic
+
+	/**
+	 * 
+	 */
+	static final int INDENT_5 = 5;// CodForChk_Dis_Magic
+
+	/**
+	 * 
+	 */
+	static final int INDENT_6 = 6;// CodForChk_Dis_Magic
+
+	/**
+	 * Initializes TagWriter
+	 * 
+	 * @param filePath
+	 *            name of the output file
+	 */
+	static void initialize(String filePath) {
+		try {
+			OutputStream fout = new FileOutputStream(filePath);
+			OutputStream bout = new BufferedOutputStream(fout);
+			m_writer = new OutputStreamWriter(bout, OUTPUT_FORMAT_UTF8);
+		} catch (java.io.IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Writes tag to XML file
+	 * 
+	 * @param tag
+	 *            name of the tag
+	 * @param indent
+	 *            amount of tabs for indent
+	 */
+	static void write(String tag, int indent) {
+		try {
+			StringBuffer sb = new StringBuffer();
+			for (int i = 0; i < indent; i++) {
+				sb.append(TAB);
+			}
+			sb.append(tag);
+			sb.append(ROW_CHANGE);
+			m_writer.write(sb.toString());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Appends attribute to given StringBuffer
+	 * 
+	 * @param sb
+	 *            buffer to be updated
+	 * @param attribute
+	 *            attribute to append
+	 * @param value
+	 *            value of the attribute
+	 * @param withSpace
+	 *            is there leading space before attribute
+	 */
+	static void appendAttribute(StringBuffer sb, String attribute,
+			String value, boolean withSpace) {
+		if (value != null) {
+			if (withSpace) {
+				sb.append(SPACE);
+			}
+			sb.append(attribute);
+			sb.append(QUOTE);
+			sb.append(value);
+			sb.append(QUOTE);
+		}
+	}
+
+	/**
+	 * Closes TagWriter
+	 */
+	static void close() {
+		try {
+			m_writer.flush();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		try {
+			m_writer.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TestEncoder.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,133 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Testing class for Encoder
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Testing class for Encoder
+ * 
+ */
+public class TestEncoder {
+
+	/**
+	 * 
+	 */
+	private static final String DICTIONARY1 = "c:\\Temp\\traces.xml"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	private static final String DICTIONARY2 = "c:\\Temp\\traces2.xml"; //$NON-NLS-1$
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		TraceDictionaryEncoder encoder = new TraceDictionaryEncoder();
+		encoder.createNewDictionary(DICTIONARY1);
+		Dictionary.startDictionary();
+		Dictionary.startMetaData();
+		Dictionary.writeMetaData("name", "<Metadata>"); //$NON-NLS-1$ //$NON-NLS-2$
+		Dictionary.writeMetaData("id", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+		Dictionary.endMetaData();
+		TypeDefStore.startTypeDefs();
+		TypeDefStore.writeExternalDefFile("<?xml version=\"1.0\" encoding=" //$NON-NLS-1$
+				+ "\"UTF-8\"?> <external>c:\\Temp\\ExternalDef.xml</external>"); //$NON-NLS-1$
+		TypeDefStore.startTypeDef("TBool", 1, null, DataType.BINARY); //$NON-NLS-1$
+		TypeDef.writeTypeMember(0, "EFalse", "BOOL"); //$NON-NLS-1$ //$NON-NLS-2$
+		TypeDef.writeTypeMember(-1, "iX", "TInt"); //$NON-NLS-1$ //$NON-NLS-2$
+		TypeDef.writeTypeMember(0, "EFalse", null); //$NON-NLS-1$
+		TypeDefStore.endTypeDef();
+		TypeDefStore.startTypeDef("TPoint", -1, null, DataType.COMPOUND); //$NON-NLS-1$
+		TypeDef.writeTypeMember(-1, "iX", "TInt"); //$NON-NLS-1$ //$NON-NLS-2$
+		TypeDef.writeTypeMember(-1, "iY", "TInt"); //$NON-NLS-1$ //$NON-NLS-2$
+		TypeDefStore.endTypeDef();
+		TypeDefStore.writeTypeDef("TPixel", 1, "u", DataType.RAW); //$NON-NLS-1$ //$NON-NLS-2$
+		TypeDefStore.endTypeDefs();
+		TraceDataStore.startDataStore();
+		TraceDataStore.writeData(3, DataType.HEX, "<hex> value is 0xFF"); //$NON-NLS-1$ CodForChk_Dis_Magic
+		TraceDataStore.writeData(2, DataType.OCTAL, "<octal> value is 8"); //$NON-NLS-1$ CodForChk_Dis_Magic
+		TraceDataStore.writeData(1, DataType.BINARY, "<binary> value is 0"); //$NON-NLS-1$
+		TraceDataStore.endDataStore();
+		LocationStore.startLocations();
+		LocationStore.startPath("<?xml version=\"1.0\" encoding=" //$NON-NLS-1$
+				+ "\"UTF-8\"?><file>C:\\Temp\\</file>"); //$NON-NLS-1$
+		LocationStore.writeFile(1, "<?xml version=\"1.0\" encoding=" //$NON-NLS-1$
+				+ "\"UTF-8\"?><file>C:\\Temp\\file1.txt</file>"); //$NON-NLS-1$
+		LocationStore.writeFile(2, "<?xml version=\"1.0\" encoding=" //$NON-NLS-1$ CodForChk_Dis_Magic
+				+ "\"UTF-8\"?><file>C:\\Temp\\file2.txt</file>"); //$NON-NLS-1$
+		LocationStore.endPath();
+		LocationStore.endLocations();
+		Dictionary.startComponent(666, "Satan", null, null); //$NON-NLS-1$ CodForChk_Dis_Magic
+		TraceComponent.startOptions();
+		TraceComponent.writeOption("background", "red"); //$NON-NLS-1$ //$NON-NLS-2$
+		TraceComponent.startGroup(1, "Group UNO", "pre", "suf"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		TraceGroup.startOptions();
+		TraceGroup.writeOption("JeesTag", "<Tampura>"); //$NON-NLS-1$ //$NON-NLS-2$
+		TraceGroup.writeOption("NoTag", "<Ilkves>"); //$NON-NLS-1$ //$NON-NLS-2$
+		TraceGroup.endOptions();
+		TraceGroup.startTrace(-1, null);
+		Trace.startOptions();
+		Trace.writeOption("MyTag", "Value"); //$NON-NLS-1$ //$NON-NLS-2$
+		Trace.endOptions();
+		Trace.writeInstance(99, 1, 22, "testMethod", "testClass"); //$NON-NLS-1$ //$NON-NLS-2$ CodForChk_Dis_Magic
+		TraceGroup.endTrace();
+		TraceGroup.startTrace(-1, null);
+		Trace.writeInstance(100, 1, 235, "heyBabe", "auts"); //$NON-NLS-1$ //$NON-NLS-2$ CodForChk_Dis_Magic
+		Trace.writeInstance(100, 2, 291, "heyBabe2", "auts2"); //$NON-NLS-1$ //$NON-NLS-2$ CodForChk_Dis_Magic
+		TraceGroup.endTrace();
+		TraceComponent.endGroup();
+		Dictionary.endComponent();
+		Dictionary.endDictionary();
+
+		TraceDictionaryEncoder encoder2 = new TraceDictionaryEncoder();
+		encoder2.createNewDictionary(DICTIONARY2);
+		Dictionary.startDictionary();
+		Dictionary.startMetaData();
+		Dictionary.writeMetaData("id", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+		Dictionary.writeMetaData("name", "Metadata Example"); //$NON-NLS-1$ //$NON-NLS-2$
+		Dictionary.endMetaData();
+		TypeDefStore.startTypeDefs();
+		TypeDefStore.writeExternalDefFile("StandardTypeDefs.xml"); //$NON-NLS-1$
+		TypeDefStore.writeTypeDef("TUint", 4, "u", DataType.ENUM); //$NON-NLS-1$ //$NON-NLS-2$ CodForChk_Dis_Magic
+		TypeDefStore.startTypeDef("TBool", 1, null, DataType.ENUM); //$NON-NLS-1$
+		TypeDef.writeTypeMember(0, "EFalse", null); //$NON-NLS-1$
+		TypeDef.writeTypeMember(1, "ETrue", null); //$NON-NLS-1$
+		TypeDefStore.endTypeDef();
+		TraceDataStore.startDataStore();
+		TraceDataStore.writeData(1, DataType.STRING, "My integer value: %d"); //$NON-NLS-1$
+		TraceDataStore.endDataStore();
+		LocationStore.startLocations();
+		LocationStore.startPath("../src"); //$NON-NLS-1$
+		LocationStore.writeFile(1, "foo.cpp"); //$NON-NLS-1$
+		LocationStore.writeFile(2, "foo2.cpp"); //$NON-NLS-1$ CodForChk_Dis_Magic
+		LocationStore.endPath();
+		LocationStore.endLocations();
+		Dictionary.startComponent(12345678, "ComName", "ComPrefix", null); //$NON-NLS-1$ //$NON-NLS-2$ CodForChk_Dis_Magic
+		TraceComponent.startGroup(1, "Flow", "GroupPrefix", "GroupSuffix"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		TraceGroup.startTrace(1, null);
+		Trace.writeInstance(1, 1, 14, "MyGlobalMethodL", null); //$NON-NLS-1$ CodForChk_Dis_Magic
+		Trace.writeInstance(2, 1, 214, "MyClassMethod", null); //$NON-NLS-1$ CodForChk_Dis_Magic
+		TraceGroup.endTrace();
+		TraceComponent.endGroup();
+		Dictionary.endComponent();
+		Dictionary.endDictionary();
+
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/Trace.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Writes Trace objects
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Writes Trace objects
+ * 
+ */
+public class Trace {
+
+	/**
+	 * Starts &lt;trace data-ref=""&gt; structure
+	 * 
+	 * @param dataRef
+	 *            reference to actual data stored in &lt;data&gt; structure
+	 * @param name
+	 *            name of the trace. Can be null if trace doesn't have name
+	 */
+	static void startTrace(int dataRef, String name) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.TRACE_START_OPEN);
+		if (dataRef >= 0) {
+			TagWriter.appendAttribute(sb, TagWriter.DATA_REF_ATTR, String
+					.valueOf(dataRef), false);
+
+			if (name != null && name != "") { //$NON-NLS-1$
+				TagWriter.appendAttribute(sb, TagWriter.NAME_ATTR, name, true);
+			}
+		}
+		sb.append(TagWriter.TAG_CLOSE);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_3);
+
+	}
+
+	/**
+	 * Writes &lt;/trace&gt;
+	 */
+	static void endTrace() {
+		TagWriter.write(TagWriter.TRACE_END, TagWriter.INDENT_3);
+	}
+
+	/**
+	 * Writes &lt;options&gt;
+	 */
+	public static void startOptions() {
+		Options.startOptions(TagWriter.INDENT_4);
+	}
+
+	/**
+	 * Writes &lt;/options&gt;
+	 */
+	public static void endOptions() {
+		Options.endOptions(TagWriter.INDENT_4);
+	}
+
+	/**
+	 * Writes user defined tags &lt;mytagXXX&gt;value&lt;/mytagXXX&gt;
+	 * 
+	 * @param tag
+	 *            user defined tag
+	 * @param value
+	 *            value of the tag
+	 */
+	public static void writeOption(String tag, String value) {
+		Options.writeOptions(tag, value, TagWriter.INDENT_5);
+	}
+
+	/**
+	 * Writes &lt;instance id="" locRef="" line="" methodName=""
+	 * className=""/&gt; structure
+	 * 
+	 * @param id
+	 *            unique id number for this instance in current group structure
+	 * @param locRef
+	 *            unique location reference for instance (reference to
+	 *            &lt;locations&gt; structure
+	 * @param line
+	 *            positive number of line where data were founded in source file
+	 * @param methodName
+	 *            name of the function from which trace was generated
+	 * @param className
+	 *            this is class name or namespace name for method described in
+	 *            methodname attribute
+	 */
+	public static void writeInstance(int id, int locRef, int line,
+			String methodName, String className) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.INSTANCE_START_OPEN);
+		TagWriter.appendAttribute(sb, TagWriter.ID_ATTR, String.valueOf(id),
+				false);
+		TagWriter.appendAttribute(sb, TagWriter.LOC_REF_ATTR, String
+				.valueOf(locRef), true);
+		TagWriter.appendAttribute(sb, TagWriter.LINE_ATTR,
+				String.valueOf(line), true);
+		TagWriter.appendAttribute(sb, TagWriter.METHODNAME_ATTR, methodName,
+				true);
+		if (className != null) {
+			TagWriter.appendAttribute(sb, TagWriter.CLASSNAME_ATTR, className,
+					true);
+		}
+		sb.append(TagWriter.TAG_END);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_4);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TraceComponent.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Writes component objects
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Writes component objects
+ * 
+ */
+public class TraceComponent {
+
+	/**
+	 * Starts &lt;component id="", name="" prefix="" suffix=""&gt; structure
+	 * 
+	 * @param id
+	 *            unique component id within dictionary
+	 * @param name
+	 *            name of the component
+	 * @param prefix
+	 *            optional prefix for the component
+	 * @param suffix
+	 *            optional suffix for the component
+	 */
+	static void startComponent(int id, String name, String prefix, String suffix) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.COMPONENT_START_OPEN);
+		TagWriter.appendAttribute(sb, TagWriter.ID_ATTR, String.valueOf(id),
+				false);
+		TagWriter.appendAttribute(sb, TagWriter.NAME_ATTR, name, true);
+		if (prefix != null) {
+			TagWriter.appendAttribute(sb, TagWriter.PREFIX_ATTR, prefix, true);
+		}
+		if (suffix != null) {
+			TagWriter.appendAttribute(sb, TagWriter.SUFFIX_ATTR, suffix, true);
+		}
+		sb.append(TagWriter.TAG_CLOSE);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_1);
+	}
+
+	/**
+	 * Writes &lt;/component&gt;
+	 */
+	static void endComponent() {
+		TagWriter.write(TagWriter.COMPONENT_END, TagWriter.INDENT_1);
+	}
+
+	/**
+	 * Writes &lt;options&gt;
+	 */
+	public static void startOptions() {
+		Options.startOptions(TagWriter.INDENT_2);
+	}
+
+	/**
+	 * Writes user defined tags &lt;mytagXXX&gt;value&lt;/mytagXXX&gt;
+	 * 
+	 * @param tag
+	 *            user defined tag
+	 * @param value
+	 *            value of the tag
+	 */
+	public static void writeOption(String tag, String value) {
+		Options.writeOptions(tag, value, TagWriter.INDENT_3);
+	}
+
+	/**
+	 * Writes &lt;/options&gt;
+	 */
+	public static void endOptions() {
+		Options.endOptions(TagWriter.INDENT_2);
+	}
+
+	/**
+	 * Starts &lt;group id="", name="" prefix="" suffix=""&gt; structure
+	 * 
+	 * @param id
+	 *            unique group identifier within dictionary
+	 * @param name
+	 *            group name
+	 * @param prefix
+	 *            optional prefix for the group
+	 * @param suffix
+	 *            optional suffix for the group
+	 */
+	public static void startGroup(int id, String name, String prefix,
+			String suffix) {
+		TraceGroup.startGroup(id, name, prefix, suffix);
+	}
+
+	/**
+	 * Writes &lt;/group&gt;
+	 */
+	public static void endGroup() {
+		TraceGroup.endGroup();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TraceDataStore.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Writes Data objects
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Writes Data objects
+ * 
+ */
+public class TraceDataStore {
+
+	/**
+	 * Writes &lt;data&gt;
+	 */
+	public static void startDataStore() {
+		TagWriter.write(TagWriter.TRACE_DATA_START, TagWriter.INDENT_1);
+	}
+
+	/**
+	 * Writes &lt;def id="" dataType=""&gt;value&lt;/def&gt; structure
+	 * 
+	 * @param id
+	 *            unique number in &lt;data&gt; structure, it is data identifier
+	 * @param dataType
+	 *            data type, defaults to string
+	 * @param value
+	 *            the value
+	 * 
+	 */
+	public static void writeData(int id, DataType dataType, String value) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.DEF_START_OPEN);
+		TagWriter.appendAttribute(sb, TagWriter.ID_ATTR, String.valueOf(id),
+				false);
+		if (dataType != null) {
+			TagWriter.appendAttribute(sb, TagWriter.TYPE_ATTR, dataType
+					.getType(), true);
+		}
+		sb.append(TagWriter.TAG_CLOSE);
+		sb.append(XMLDataFilter.changeData(value));
+		sb.append(TagWriter.DEF_END);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_2);
+	}
+
+	/**
+	 * Writes &lt;/data&gt;
+	 */
+	public static void endDataStore() {
+		TagWriter.write(TagWriter.TRACE_DATA_END, TagWriter.INDENT_1);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TraceDictionaryEncoder.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Dictionary encoder class
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Dictionary encoder class
+ * 
+ */
+public class TraceDictionaryEncoder {
+
+	/**
+	 * Constructor
+	 */
+	public TraceDictionaryEncoder() {
+	}
+
+	/**
+	 * Creates a new dictionary XML file to given path
+	 * 
+	 * @param filePath
+	 *            the path
+	 */
+	public void createNewDictionary(String filePath) {
+		TagWriter.initialize(filePath);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TraceGroup.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Writes groups objects
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Writes groups objects
+ * 
+ */
+public class TraceGroup {
+
+	/**
+	 * Writes &lt;options&gt;
+	 */
+	public static void startOptions() {
+		Options.startOptions(TagWriter.INDENT_3);
+	}
+
+	/**
+	 * Writes user defined tags &lt;mytagXXX&gt;value&lt;/mytagXXX&gt;
+	 * 
+	 * @param tag
+	 *            user defined tag
+	 * @param value
+	 *            value of the tag
+	 */
+	public static void writeOption(String tag, String value) {
+		Options.writeOptions(tag, value, TagWriter.INDENT_4);
+	}
+
+	/**
+	 * Writes &lt;/options&gt;
+	 */
+	public static void endOptions() {
+		Options.endOptions(TagWriter.INDENT_3);
+	}
+
+	/**
+	 * Starts &lt;trace data-ref=""&gt; structure
+	 * 
+	 * @param dataRef
+	 *            reference to actual data stored in &lt;data&gt; structure
+	 * @param name
+	 *            name of the trace. Can be null if trace doesn't have name            
+	 */
+	public static void startTrace(int dataRef, String name) {
+		Trace.startTrace(dataRef, name);
+	}
+
+	/**
+	 * Writes &lt;/trace&gt;
+	 */
+	public static void endTrace() {
+		Trace.endTrace();
+	}
+
+	/**
+	 * Starts &lt;group id="", name="" prefix="" suffix=""&gt; structure
+	 * 
+	 * @param id
+	 *            unique group identifier within dictionary
+	 * @param name
+	 *            group name
+	 * @param prefix
+	 *            optional prefix for the group
+	 * @param suffix
+	 *            optional suffix for the group
+	 */
+	static void startGroup(int id, String name, String prefix, String suffix) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.GROUP_START_OPEN);
+		TagWriter.appendAttribute(sb, TagWriter.ID_ATTR, String.valueOf(id),
+				false);
+		TagWriter.appendAttribute(sb, TagWriter.NAME_ATTR, name, true);
+		if (prefix != null) {
+			TagWriter.appendAttribute(sb, TagWriter.PREFIX_ATTR, prefix, true);
+		}
+		if (suffix != null) {
+			TagWriter.appendAttribute(sb, TagWriter.SUFFIX_ATTR, suffix, true);
+		}
+		sb.append(TagWriter.TAG_CLOSE);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_2);
+
+	}
+
+	/**
+	 * Writes &lt;/group&gt;
+	 */
+	static void endGroup() {
+		TagWriter.write(TagWriter.GROUP_END, TagWriter.INDENT_2);
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TypeDef.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Writes type def objects
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Writes type def objects
+ * 
+ */
+public class TypeDef {
+
+	/**
+	 * Writes &lt;typemember value="" name="" type=""/&gt; structure
+	 * 
+	 * @param value
+	 *            value which will be assigned to name attribute in case where
+	 *            object have classification equals enum
+	 * @param name
+	 *            text which is assigned to value attribute or to type attribute
+	 * @param type
+	 *            name of data type that will be assigned to name attribute in
+	 *            case where object classification equals compound
+	 */
+	public static void writeTypeMember(int value, String name, String type) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.TYPEMEMBER_START_OPEN);
+		TagWriter.appendAttribute(sb, TagWriter.VALUE_ATTR, String
+				.valueOf(value), false);
+		TagWriter.appendAttribute(sb, TagWriter.NAME_ATTR, name, true);
+		if (type != null) { // optional attribute
+			TagWriter.appendAttribute(sb, TagWriter.TYPE_ATTR, type, true);
+		}
+		sb.append(TagWriter.TAG_END);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_3);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/TypeDefStore.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,128 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Writes type definition objects
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Writes type definition objects
+ * 
+ */
+public class TypeDefStore {
+
+	/**
+	 * Writes &lt;typedef&gt;
+	 */
+	public static void startTypeDefs() {
+		TagWriter.write(TagWriter.TYPEDEFS_START, TagWriter.INDENT_1);
+	}
+
+	/**
+	 * Writes &lt;external-def&gt;path&lt;/external-def&gt; structure
+	 * 
+	 * @param path
+	 *            path to external dictionary file
+	 */
+	public static void writeExternalDefFile(String path) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.EXTERNAL_DEF_START);
+		sb.append(XMLDataFilter.changeData(path));
+		sb.append(TagWriter.EXTERNAL_DEF_END);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_2);
+	}
+
+	/**
+	 * Starts &lt;object type="" size="" formatChar="" dataType=""&gt; structure
+	 * 
+	 * @param type
+	 *            original type name
+	 * @param size
+	 *            size of typical object, it’s optional because dictionary user
+	 *            can calculate size for compound types by sum size of each
+	 *            member. Give -1 if not used.
+	 * @param formatChar
+	 *            used for formatting
+	 * @param dataType
+	 *            one value form &lt;datatype&gt; enumeration
+	 */
+	public static void startTypeDef(String type, int size, String formatChar,
+			DataType dataType) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.OBJECT_START_OPEN);
+		TagWriter.appendAttribute(sb, TagWriter.TYPE_ATTR, type, false);
+		if (size >= 0) { // optional attribute
+			TagWriter.appendAttribute(sb, TagWriter.SIZE_ATTR, String
+					.valueOf(size), true);
+		}
+		if (formatChar != null) { // optional attribute
+			TagWriter.appendAttribute(sb, TagWriter.FORMATCHAR_ATTR,
+					formatChar, true);
+		}
+		TagWriter.appendAttribute(sb, TagWriter.CLASSIFICATION_ATTR, dataType
+				.getType(), true);
+		sb.append(TagWriter.TAG_CLOSE);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_2);
+	}
+
+	/**
+	 * Writes &lt;object type="" size="" formatChar="" dataType=""/&gt;
+	 * structure
+	 * 
+	 * @param type
+	 *            original type name
+	 * @param size
+	 *            size of typical object, it’s optional because dictionary user
+	 *            can calculate size for compound types by sum size of each
+	 *            member. Give -1 if not used.
+	 * @param formatChar
+	 *            used for formatting
+	 * @param dataType
+	 *            one value form &lt;datatype&gt; enumeration
+	 */
+	public static void writeTypeDef(String type, int size, String formatChar,
+			DataType dataType) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(TagWriter.OBJECT_START_OPEN);
+		TagWriter.appendAttribute(sb, TagWriter.TYPE_ATTR, type, false);
+		if (size >= 0) {
+			TagWriter.appendAttribute(sb, TagWriter.SIZE_ATTR, String
+					.valueOf(size), true);
+		}
+		if (formatChar != null) {
+			TagWriter.appendAttribute(sb, TagWriter.FORMATCHAR_ATTR,
+					formatChar, true);
+		}
+		TagWriter.appendAttribute(sb, TagWriter.CLASSIFICATION_ATTR, dataType
+				.getType(), true);
+		sb.append(TagWriter.TAG_END);
+		TagWriter.write(sb.toString(), TagWriter.INDENT_2);
+	}
+
+	/**
+	 * Writes &lt;/object&gt;
+	 */
+	public static void endTypeDef() {
+		TagWriter.write(TagWriter.OBJECT_END, TagWriter.INDENT_2);
+	}
+
+	/**
+	 * Writes &lt;/typedef&gt;
+	 */
+	public static void endTypeDefs() {
+		TagWriter.write(TagWriter.TYPEDEFS_END, TagWriter.INDENT_1);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/XMLDataFilter.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Replaces special characters with escape sequences 
+*
+*/
+package com.nokia.tracecompiler.decodeplugins.dictionary.encoder;
+
+/**
+ * Replaces special characters with escape sequences
+ * 
+ */
+class XMLDataFilter {
+
+	/**
+	 * XML start tag
+	 */
+	private static final String LEFT_ARROW = "<"; //$NON-NLS-1$
+
+	/**
+	 * XML end tag
+	 */
+	private static final String RIGHT_ARROW = ">"; //$NON-NLS-1$
+
+	/**
+	 * XML entity tag
+	 */
+	private static final String AMPERSAND = "&"; //$NON-NLS-1$
+
+	/**
+	 * XML start tag escaped
+	 */
+	private static final String LEFT_ARROW_SUBST = "&lt;"; //$NON-NLS-1$
+
+	/**
+	 * XML end tag escaped
+	 */
+	private static final String RIGHT_ARROW_SUBST = "&gt;"; //$NON-NLS-1$
+
+	/**
+	 * XML entity tag escaped
+	 */
+	private static final String AMPERSAND_SUBST = "&amp;"; //$NON-NLS-1$
+
+	/**
+	 * Not found result
+	 */
+	private static final int NOT_FOUND = -1;
+
+	/**
+	 * Changes XML data
+	 * 
+	 * @param data
+	 *            data to be changed
+	 * @return changed data
+	 */
+	static String changeData(String data) {
+
+		// This must be before any other that will add & marks to the text.
+		// Otherwise those will be replaced also.
+		if (data.indexOf(AMPERSAND) != NOT_FOUND) {
+			data = data.replaceAll(AMPERSAND, AMPERSAND_SUBST);
+		}
+		if (data.indexOf(LEFT_ARROW) != NOT_FOUND) {
+			data = data.replaceAll(LEFT_ARROW, LEFT_ARROW_SUBST);
+		}
+		if (data.indexOf(RIGHT_ARROW) != NOT_FOUND) {
+			data = data.replaceAll(RIGHT_ARROW, RIGHT_ARROW_SUBST);
+		}
+
+		return data;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/encoder/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Dictionary encoder is used to create dictionary XML files
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/messages.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,1 @@
+DictionaryFile.Title=Dictionary File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/decodeplugins/dictionary/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+TraceCompiler plug-in implementation to export the project to Symbian Dictionary format
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/FileDocument.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2007 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:
+*
+* File-based implementation of the document interface
+*
+*/
+package com.nokia.tracecompiler.document;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import com.nokia.tracecompiler.file.FileUtils;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourcePropertyProvider;
+
+/**
+ * File-based implementation of the document interface. This extends the string
+ * document with SourcePropertyProvider implementation which can provide the
+ * file name to TraceCompiler source framework
+ * 
+ */
+final class FileDocument extends StringDocument implements
+		SourcePropertyProvider {
+
+	/**
+	 * The file
+	 */
+	private File file;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param file
+	 *            the document file
+	 * @throws IOException
+	 *             if processing fails
+	 */
+	FileDocument(File file) throws IOException {
+		this.file = file;
+		byte[] buf = new byte[(int) file.length()];
+		FileInputStream fis = new FileInputStream(file);
+		fis.read(buf);
+		fis.close();
+		setSourceData(new String(buf));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.utils.DocumentAdapter#getPropertyProvider()
+	 */
+	@Override
+	public SourcePropertyProvider getPropertyProvider() {
+		return this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourcePropertyProvider#getFileName()
+	 */
+	public String getFileName() {
+		return file.getName();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourcePropertyProvider#getFilePath()
+	 */
+	public String getFilePath() {
+		return FileUtils.convertSeparators(
+				SourceConstants.FORWARD_SLASH_CHAR, file.getParent(), true);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/FileDocumentMonitor.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2010 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:
+*
+* Document monitor implementation which reads all files from a directory
+*
+*/
+package com.nokia.tracecompiler.document;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import com.nokia.tracecompiler.TraceCompilerGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.source.SourceEngine;
+import com.nokia.tracecompiler.file.FileUtils;
+import com.nokia.tracecompiler.source.SourceDocumentFactory;
+import com.nokia.tracecompiler.source.SourceDocumentProcessor;
+import com.nokia.tracecompiler.utils.DocumentMonitorBase;
+
+/**
+ * Document monitor implementation which reads files
+ * 
+ */
+public final class FileDocumentMonitor extends DocumentMonitorBase {
+
+	/**
+	 * Document factory
+	 */
+	private StringDocumentFactory documentFactory;
+
+	/**
+	 * Files to be processed
+	 */
+	private static String[] files;
+
+	/**
+	 * Sets the files to be used by the document monitor
+	 * 
+	 * @param files
+	 *            the files
+	 */
+	public static void setFiles(String[] files) {
+		FileDocumentMonitor.files = files;
+	}
+
+	/**
+	 * Constructor
+	 */
+	public FileDocumentMonitor() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.utils.DocumentMonitorBase#getFactory()
+	 */
+	@Override
+	public SourceDocumentFactory getFactory() {
+		if (documentFactory == null) {
+			documentFactory = new StringDocumentFactory();
+		}
+		return documentFactory;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.utils.DocumentMonitorAdapter#
+	 *      startMonitor(com.nokia.tracecompiler.source.SourceDocumentProcessor)
+	 */
+	@Override
+	public void startMonitor(SourceDocumentProcessor processor) throws Exception {
+		
+		// Put source files and non-source files to same list
+		SourceEngine sourceEngine = TraceCompilerEngineGlobals.getSourceEngine();
+		ArrayList<String> list = sourceEngine.getNonSourceFiles();
+		for (int i=0; i < files.length; i++) {
+			String fileName = files[i];
+			if (!list.contains(fileName)) {
+				list.add(fileName);
+			}
+		}		
+		String[] fileArr = new String[list.size()];
+		list.toArray(fileArr);
+		String err = ""; //$NON-NLS-1$
+		
+		for (String fileName : fileArr) {
+			File file = new File(fileName);
+			if (file.exists() && !file.isDirectory()
+					&& FileUtils.isFileAllowed(file.getName())) {
+				try {
+					TraceCompilerEngineGlobals.getEvents().postInfoMessage(Messages.getString("FileDocumentMonitor.processingSourceFileText") + file.getAbsolutePath(), null); //$NON-NLS-1$
+					processor.sourceOpened(new FileDocument(file));
+				} catch (Exception e) {
+					// Error after processing one file
+					String msg = TraceCompilerEngineErrorMessages
+							.getErrorMessage(
+									TraceCompilerErrorCode.CANNOT_OPEN_SOURCE_FILE,
+									null);
+					TraceCompilerEngineGlobals.getEvents().postErrorMessage(msg,
+							file.getAbsolutePath(),true);
+					err = e.getMessage();
+				} finally {
+					if (TraceCompilerEngineGlobals.getEvents().hasErrorHappened() && !TraceCompilerGlobals.keepGoing())  {
+						throw new Exception("TraceCompiler stopping on error. " + err); //$NON-NLS-1$
+					}
+				}
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.utils.DocumentMonitorAdapter#stopMonitor()
+	 */
+	@Override
+	public void stopMonitor() {
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/Messages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2010 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:
+*
+* Localized strings for engine package
+*
+*/
+package com.nokia.tracecompiler.document;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+
+	/**
+	 * Bundle name
+	 */
+	private static final String BUNDLE_NAME = "com.nokia.tracecompiler.document.messages"; //$NON-NLS-1$
+
+	/**
+	 * Bundle
+	 */
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Prevents construction
+	 */
+	private Messages() {
+	}
+
+	/**
+	 * Gets localized string based on key
+	 * 
+	 * @param key
+	 *            the resource key
+	 * @return the localized resource
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/StringDocument.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2007 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:
+*
+* String-based document object
+*
+*/
+package com.nokia.tracecompiler.document;
+
+import java.util.ArrayList;
+
+import com.nokia.tracecompiler.source.SourceParserException;
+import com.nokia.tracecompiler.utils.DocumentAdapter;
+
+/**
+ * String-based document object
+ * 
+ */
+class StringDocument extends DocumentAdapter {
+
+	/**
+	 * The document data
+	 */
+	private String sourceData;
+
+	/**
+	 * Line information
+	 */
+	private ArrayList<Integer> lines = new ArrayList<Integer>();
+
+	/**
+	 * Constructor
+	 */
+	StringDocument() {
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param data
+	 *            the document data
+	 */
+	StringDocument(String data) {
+		setSourceData(data);
+	}
+
+	/**
+	 * Sets the source data
+	 * 
+	 * @param data
+	 *            the source data
+	 */
+	void setSourceData(String data) {
+		this.sourceData = data;
+		if (data.length() > 0) {
+			lines.add(0);
+		}
+		for (int i = 0; i < data.length(); i++) {
+			if (data.charAt(i) == '\n') {
+				lines.add(i + 1);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.utils.DocumentAdapter#get(int, int)
+	 */
+	@Override
+	public String get(int start, int length) throws SourceParserException {
+		return sourceData.substring(start, start + length);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.utils.DocumentAdapter#getChar(int)
+	 */
+	@Override
+	public char getChar(int offset) throws SourceParserException {
+		return sourceData.charAt(offset);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.utils.DocumentAdapter#getLength()
+	 */
+	@Override
+	public int getLength() {
+		return sourceData.length();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.utils.DocumentAdapter#getLineOfOffset(int)
+	 */
+	@Override
+	public int getLineOfOffset(int offset) throws SourceParserException {
+		int retval = -1;
+		if (offset >= 0 && offset < sourceData.length()) {
+			for (int i = 0; i < lines.size(); i++) {
+				int lineStart = lines.get(i);
+				if (lineStart > offset) {
+					retval = i - 1;
+					i = lines.size();
+				}
+			}
+		}
+		return retval;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/StringDocumentFactory.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Document factory for file-based documents
+*
+*/
+package com.nokia.tracecompiler.document;
+
+import com.nokia.tracecompiler.source.SourceDocumentInterface;
+import com.nokia.tracecompiler.utils.DocumentFactoryBase;
+
+/**
+ * Document factory for string-based documents and simple locations which do not
+ * support changes or selections.
+ * 
+ */
+public final class StringDocumentFactory extends DocumentFactoryBase {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.utils.DocumentFactoryBase#createDocument(java.lang.String)
+	 */
+	@Override
+	public SourceDocumentInterface createDocument(String sourceData) {
+		return new StringDocument(sourceData);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/document/messages.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,1 @@
+FileDocumentMonitor.processingSourceFileText=Processing source file : 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/ConfigurationDelegate.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Delegate to configuration of the view
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import java.util.ArrayList;
+
+/**
+ * Delegate to configuration of the view
+ * 
+ */
+final class ConfigurationDelegate implements TraceCompilerEngineConfiguration {
+
+	/**
+	 * Configuration from view
+	 */
+	private TraceCompilerEngineConfiguration configuration;
+
+	/**
+	 * Temporary list of configuration listeners
+	 */
+	private ArrayList<TraceCompilerEngineConfigurationListener> tempListeners;
+
+	/**
+	 * Sets the configuration delegate
+	 * 
+	 * @param configuration
+	 *            the configuration
+	 */
+	void setConfiguration(TraceCompilerEngineConfiguration configuration) {
+		this.configuration = configuration;
+		if (configuration != null && tempListeners != null) {
+			for (int i = 0; i < tempListeners.size(); i++) {
+				TraceCompilerEngineConfigurationListener listener = tempListeners
+						.get(i);
+				configuration.addConfigurationListener(listener);
+				listener.configurationCreated();
+			}
+			tempListeners.clear();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#isAvailable()
+	 */
+	public boolean isAvailable() {
+		boolean retval;
+		if (configuration != null) {
+			retval = configuration.isAvailable();
+		} else {
+			retval = false;
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#
+	 *      addConfigurationListener(com.nokia.tracecompiler.engine.TraceCompilerConfigurationListener)
+	 */
+	public void addConfigurationListener(
+			TraceCompilerEngineConfigurationListener configurationListener) {
+		if (configuration != null) {
+			configuration.addConfigurationListener(configurationListener);
+		} else {
+			if (tempListeners == null) {
+				tempListeners = new ArrayList<TraceCompilerEngineConfigurationListener>();
+			}
+			tempListeners.add(configurationListener);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#
+	 *      removeConfigurationListener(com.nokia.tracecompiler.engine.TraceCompilerConfigurationListener)
+	 */
+	public void removeConfigurationListener(
+			TraceCompilerEngineConfigurationListener configurationListener) {
+		if (configuration != null) {
+			configuration.removeConfigurationListener(configurationListener);
+		} else {
+			if (tempListeners != null) {
+				tempListeners.remove(configurationListener);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#getFlag(java.lang.String)
+	 */
+	public boolean getFlag(String flagName) {
+		boolean retval;
+		if (configuration != null) {
+			retval = configuration.getFlag(flagName);
+		} else {
+			retval = false;
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#getText(java.lang.String)
+	 */
+	public String getText(String textName) {
+		String retval;
+		if (configuration != null) {
+			retval = configuration.getText(textName);
+		} else {
+			retval = ""; //$NON-NLS-1$
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#getValue(java.lang.String)
+	 */
+	public int getValue(String valueName) {
+		int retval;
+		if (configuration != null) {
+			retval = configuration.getValue(valueName);
+		} else {
+			retval = 0;
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#hasEntry(java.lang.String)
+	 */
+	public boolean hasEntry(String entryName) {
+		boolean retval;
+		if (configuration != null) {
+			retval = configuration.hasEntry(entryName);
+		} else {
+			retval = false;
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#
+	 *      setFlag(java.lang.String, boolean)
+	 */
+	public void setFlag(String flagName, boolean flag) {
+		if (configuration != null) {
+			configuration.setFlag(flagName, flag);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#
+	 *      setText(java.lang.String, java.lang.String)
+	 */
+	public void setText(String textName, String text) {
+		if (configuration != null) {
+			configuration.setText(textName, text);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfiguration#setValue(java.lang.String,
+	 *      int)
+	 */
+	public void setValue(String valueName, int value) {
+		if (configuration != null) {
+			configuration.setValue(valueName, value);
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/LocationListBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for TraceLocationList and PersistentLocationList
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceObject;
+
+/**
+ * Base class for TraceLocationList and PersistentLocationList
+ * 
+ */
+public class LocationListBase implements TraceModelExtension,
+		Iterable<LocationProperties> {
+
+	/**
+	 * List of locations
+	 */
+	private ArrayList<LocationProperties> locations = new ArrayList<LocationProperties>();
+
+	/**
+	 * Owning trace object
+	 */
+	private TraceObject owner;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#getOwner()
+	 */
+	public TraceObject getOwner() {
+		return owner;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#setOwner(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void setOwner(TraceObject owner) {
+		this.owner = owner;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Iterable#iterator()
+	 */
+	public Iterator<LocationProperties> iterator() {
+		return locations.iterator();
+	}
+
+	/**
+	 * Gets the location count of this list
+	 * 
+	 * @return the count
+	 */
+	public final int getLocationCount() {
+		return locations.size();
+	}
+
+	/**
+	 * Checks if there are locations in this list
+	 * 
+	 * @return true if list has locations
+	 */
+	public final boolean hasLocations() {
+		return !locations.isEmpty();
+	}
+
+	/**
+	 * Adds a location to this list
+	 * 
+	 * @param location
+	 *            the location to be added
+	 */
+	void add(LocationProperties location) {
+		locations.add(location);
+	}
+
+	/**
+	 * Removes a location from this list
+	 * 
+	 * @param location
+	 *            the location to be removed
+	 * @return true if removed
+	 */
+	boolean remove(LocationProperties location) {
+		return locations.remove(location);
+	}
+
+	/**
+	 * Checks if location exists
+	 * 
+	 * @param location
+	 *            the location
+	 * @return true if exists
+	 */
+	boolean contains(LocationProperties location) {
+		return locations.contains(location);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/LocationMapModelListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Model listener for trace location mapper
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceGroup;
+import com.nokia.tracecompiler.model.TraceModelListener;
+import com.nokia.tracecompiler.model.TraceObject;
+import com.nokia.tracecompiler.model.TraceParameter;
+
+/**
+ * Model listener for trace location mapper
+ * 
+ */
+final class LocationMapModelListener implements TraceModelListener {
+
+	/**
+	 * Trace location mapper
+	 */
+	private final TraceLocationMap locationMap;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param map
+	 *            the location mapper
+	 */
+	LocationMapModelListener(TraceLocationMap map) {
+		locationMap = map;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      objectAdded(com.nokia.tracecompiler.model.TraceObject,
+	 *      com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectAdded(TraceObject owner, TraceObject object) {
+		// A trace does not have a name yet, so this does nothing
+		// The locations are assigned to the trace in propertyChanged
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      objectRemoved(com.nokia.tracecompiler.model.TraceObject,
+	 *      com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectRemoved(TraceObject owner, TraceObject object) throws TraceCompilerException {
+		if (object instanceof Trace) {
+			locationMap.moveToUnrelated((Trace) object);
+		} else if (object instanceof TraceGroup) {
+			// Moves locations to unrelated list
+			for (Trace trace : (TraceGroup) object) {
+				locationMap.moveToUnrelated(trace);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      propertiesUpdated(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void propertyUpdated(TraceObject object, int property) throws TraceCompilerException {
+		if (object instanceof Trace && property == NAME && object.isComplete()) {
+			Trace trace = (Trace) object;
+			locationMap.moveFromUnrelated(trace);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      objectCreationComplete(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectCreationComplete(TraceObject object) throws TraceCompilerException {
+		if (object instanceof Trace) {
+			Trace trace = (Trace) object;
+			locationMap.moveFromUnrelated(trace);
+		} else if (object instanceof TraceParameter) {
+			// If a parameter is added, the validity needs to be checked
+			TraceLocationList list = ((TraceParameter) object).getTrace()
+					.getExtension(TraceLocationList.class);
+			if (list != null) {
+				for (LocationProperties loc : list) {
+					((TraceLocation) loc).runValidityCheck();
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/LocationProperties.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Common properties of locations
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+/**
+ * Common properties of locations
+ * 
+ */
+public interface LocationProperties {
+
+	/**
+	 * Gets the file path
+	 * 
+	 * @return the file path
+	 */
+	public String getFilePath();
+
+	/**
+	 * Gets the file name
+	 * 
+	 * @return the file name
+	 */
+	public String getFileName();
+
+	/**
+	 * Gets the line number
+	 * 
+	 * @return the line number
+	 */
+	public int getLineNumber();
+
+	/**
+	 * Gets the name of the class which owns this location
+	 * 
+	 * @return the class name
+	 */
+	public String getClassName();
+
+	/**
+	 * Gets the name of function which owns this location
+	 * 
+	 * @return the function name
+	 */
+	public String getFunctionName();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/Messages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Localized strings for engine package
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Messages for engine package
+ * 
+ */
+public class Messages {
+
+	/**
+	 * Bundle name
+	 */
+	private static final String BUNDLE_NAME = "com.nokia.tracecompiler.engine.messages"; //$NON-NLS-1$
+
+	/**
+	 * Bundle
+	 */
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Prevents construction
+	 */
+	private Messages() {
+	}
+
+	/**
+	 * Gets localized string based on key
+	 * 
+	 * @param key
+	 *            the resource key
+	 * @return the localized resource
+	 */
+	public static String getString(String key) {
+		String value;
+		try {
+			value = RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			value = '!' + key + '!';
+		}
+		return value;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/SourceContextManager.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Interface to change the currently active source context
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import com.nokia.tracecompiler.source.SourceContext;
+
+/**
+ * Interface to the currently active source context
+ * 
+ */
+public interface SourceContextManager {
+
+	/**
+	 * Gets the active source context
+	 * 
+	 * @return the context
+	 */
+	public SourceContext getContext();
+
+	/**
+	 * Sets the active source context
+	 * 
+	 * @param context
+	 *            the context
+	 */
+	public void setContext(SourceContext context);
+
+	/**
+	 * Checks if the auto-converter is running
+	 * 
+	 * @return true if converter is running, false otherwise
+	 */
+	public boolean isConverting();
+
+	/**
+	 * Sets the auto-converter flag
+	 * 
+	 * @param flag
+	 *            the new flag value
+	 */
+	public void setConverting(boolean flag);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/SourceContextManagerImpl.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2007 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:
+*
+* SourceContextManager interface implementation
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import com.nokia.tracecompiler.source.SourceContext;
+
+/**
+ * SourceContextManager interface implementation
+ * 
+ */
+final class SourceContextManagerImpl implements SourceContextManager {
+
+	/**
+	 * Active context
+	 */
+	private SourceContext activeContext;
+
+	/**
+	 * Converting flag
+	 */
+	private boolean isConverting;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param sourceEngine
+	 *            the source engine
+	 */
+	SourceContextManagerImpl() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.SourceContextManager#getContext()
+	 */
+	public SourceContext getContext() {
+		return activeContext;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.SourceContextManager#
+	 *      setContext(com.nokia.tracecompiler.source.SourceContext)
+	 */
+	public void setContext(SourceContext context) {
+		activeContext = context;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.SourceContextManager#isConverting()
+	 */
+	public boolean isConverting() {
+		return isConverting;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.SourceContextManager#setConverting(boolean)
+	 */
+	public void setConverting(boolean flag) {
+		this.isConverting = flag;
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngine.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,393 @@
+/*
+ * 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:
+ *
+ * A singleton access point to functionality of Trace Compiler
+ *
+ */
+package com.nokia.tracecompiler.engine;
+
+import java.util.ArrayList;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.event.EventEngine;
+import com.nokia.tracecompiler.engine.header.HeaderEngine;
+import com.nokia.tracecompiler.engine.plugin.PluginEngine;
+import com.nokia.tracecompiler.engine.project.ProjectEngine;
+import com.nokia.tracecompiler.engine.propertyfile.PropertyFileEngine;
+import com.nokia.tracecompiler.engine.rules.RulesEngine;
+import com.nokia.tracecompiler.engine.source.SourceEngine;
+import com.nokia.tracecompiler.engine.source.SourceListener;
+import com.nokia.tracecompiler.engine.source.SourceProperties;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.plugin.TraceCompilerPlugin;
+
+/**
+ * A singleton access point to functionality of Trace Compiler
+ * 
+ */
+final class TraceCompilerEngine implements SourceListener, TraceCompilerEngineInterface {
+
+	/**
+	 * TraceCompiler plug-in engine
+	 */
+	private PluginEngine pluginEngine;
+
+	/**
+	 * Event handler interface implementation
+	 */
+	private TraceCompilerEngineEvents eventEngine;
+
+	/**
+	 * Source editor engine
+	 */
+	private SourceEngine sourceEngine;
+
+	/**
+	 * Trace header engine
+	 */
+	private HeaderEngine headerEngine;
+
+	/**
+	 * Trace project engine
+	 */
+	private ProjectEngine projectEngine;
+
+	/**
+	 * Rule engine
+	 */
+	private RulesEngine rulesEngine;
+
+	/**
+	 * Trace property file engine
+	 */
+	private PropertyFileEngine propertyFileEngine;
+
+	/**
+	 * Source context manager
+	 */
+	private SourceContextManager contextManager;
+
+	/**
+	 * Location map
+	 */
+	private TraceLocationMap locationMap;
+
+	/**
+	 * Location converter
+	 */
+	private TraceLocationConverter locationConverter;
+
+	/**
+	 * Trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * Interface to the view
+	 */
+	private TraceCompilerEngineView view = new ViewAdapter();
+
+	/**
+	 * Configuration
+	 */
+	private ConfigurationDelegate configurationDelegate;
+
+	/**
+	 * List of engines that need project open / export / close notifications
+	 */
+	private ArrayList<TraceCompilerEngineBase> engines = new ArrayList<TraceCompilerEngineBase>();
+
+	/**
+	 * View has been registered flag
+	 */
+	private boolean isViewRegistered = false;
+
+	/**
+	 * Project path is stored in case the view unregisters and re-registers
+	 */
+	private String currentProjectPath;
+
+	/**
+	 * Gets the configuration of TraceCompiler
+	 * 
+	 * @return the configuration
+	 */
+	TraceCompilerEngineConfiguration getConfiguration() {
+		return configurationDelegate;
+	}
+
+	/**
+	 * Gets the trace compiler interface
+	 * 
+	 * @return this object
+	 */
+	TraceCompilerEngineInterface getTraceCompiler() {
+		return this;
+	}
+
+	/**
+	 * Gets the trace model
+	 * 
+	 * @return the trace model
+	 */
+	TraceModel getModel() {
+		return model;
+	}
+
+	/**
+	 * Gets the source engine
+	 * 
+	 * @return the source engine
+	 */
+	SourceEngine getSourceEngine() {
+		return sourceEngine;
+	}
+
+	/**
+	 * Gets the events interface
+	 * 
+	 * @return the events interface
+	 */
+	TraceCompilerEngineEvents getEvents() {
+		return eventEngine;
+	}
+
+	/**
+	 * Adds a plug-in
+	 * 
+	 * @param plugin
+	 *            the plugin
+	 */
+	void registerPlugin(TraceCompilerPlugin plugin) {
+		pluginEngine.add(plugin);
+	}
+
+	/**
+	 * Removes an existing plug-in
+	 * 
+	 * @param plugin
+	 *            the plugin
+	 */
+	void unregisterPlugin(TraceCompilerPlugin plugin) {
+		pluginEngine.remove(plugin);
+	}
+
+	/**
+	 * Gets the source context manager
+	 * 
+	 * @return the context manager
+	 */
+	public SourceContextManager getSourceContextManager() {
+		return contextManager;
+	}
+
+	/**
+	 * Starts TraceCompiler.
+	 * @throws TraceCompilerException 
+	 */
+	void start() throws TraceCompilerException {
+		configurationDelegate = new ConfigurationDelegate();
+		rulesEngine = new RulesEngine();
+		pluginEngine = new PluginEngine();
+		model = new TraceModel(rulesEngine, pluginEngine.getVerifier());
+		pluginEngine.setModel(model);
+		projectEngine = new ProjectEngine(model);
+		propertyFileEngine = new PropertyFileEngine(model);
+		eventEngine = new EventEngine(model);
+		sourceEngine = new SourceEngine(model);
+		locationMap = new TraceLocationMap(model);
+		locationConverter = new TraceLocationConverter(model);
+		sourceEngine.addSourceListener(this);
+		contextManager = new SourceContextManagerImpl();
+		headerEngine = new HeaderEngine(model);
+		// Keep this order -> Exports need to be in correct order
+		// Property file engine manages the ID cache so it needs to be run
+		// before plug-in's and header
+		engines.add(projectEngine);
+		engines.add(propertyFileEngine);
+		engines.add(headerEngine);
+		engines.add(pluginEngine);
+	}
+
+	/**
+	 * Shuts down TraceCompiler
+	 * @throws TraceCompilerException 
+	 */
+	void shutdown() throws TraceCompilerException {
+		closeProject();
+	}
+
+	/**
+	 * Registers the view
+	 * 
+	 * @param view
+	 *            the view
+	 * @throws TraceCompilerException 
+	 */
+	void setView(TraceCompilerEngineView view) throws TraceCompilerException {
+		if (view == null) {
+			// Closes the project, but leaves the currentProjectName and
+			// currentProjectPath variables. When view re-registers the project
+			// is opened back
+			internalCloseProject();
+			this.view = new ViewAdapter();
+			isViewRegistered = false;
+		} else {
+			this.view = view;
+			isViewRegistered = true;
+		}
+		configurationDelegate.setConfiguration(this.view.getConfiguration());
+	}
+
+	/**
+	 * Checks that model is valid
+	 * 
+	 * @throws TraceCompilerException
+	 *             if model is not valid
+	 */
+	private void checkIsModelValid() throws TraceCompilerException {
+		if (!model.isValid()) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.MODEL_NOT_READY);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngineInterface#openProject(java.lang.String,
+	 *      java.lang.String)
+	 */
+	public void openProject(String modelName) throws Exception {
+		try {
+			if (view != null && isViewRegistered && !model.isValid()) {
+				projectEngine.openTraceProject(currentProjectPath, modelName);
+				for (TraceCompilerEngineBase engine : engines) {
+					engine.projectOpened();
+				}
+				model.setValid(true);
+				sourceEngine.start();
+			}
+		} catch (TraceCompilerException e) {
+			closeModel();
+			throw e;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngineInterface#exportProject()
+	 */
+	public void exportProject() throws TraceCompilerException {
+		checkIsModelValid();
+		if (model.getID() != 0) {
+			for (TraceCompilerEngineBase engine : engines) {
+					engine.exportProject();
+			}
+		} else {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.INVALID_MODEL_PROPERTIES_FOR_EXPORT);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngineInterface#closeProject()
+	 */
+	public void closeProject() throws TraceCompilerException {
+		internalCloseProject();
+		currentProjectPath = null;
+	}
+
+	/**
+	 * Closes the project
+	 * @throws TraceCompilerException 
+	 */
+	private void internalCloseProject() throws TraceCompilerException {
+		if (model.isValid()) {
+			if (!TraceCompilerEngineGlobals.getConfiguration().getFlag(
+					TraceCompilerEngineConfiguration.CONSOLE_UI_MODE)) {
+				try {
+					// Plug-in's are not exported when project is closed
+					// They can do cleanup in traceProjectClosed call
+					for (TraceCompilerEngineBase engine : engines) {
+						if (engine != pluginEngine) {
+							engine.exportProject();
+						}
+					}
+				} catch (TraceCompilerException e) {
+					getEvents().postError(e);
+						throw e;
+				}
+			}
+			// Engines are closed in reverse order
+			for (int i = engines.size() - 1; i >= 0; i--) {
+				engines.get(i).projectClosed();
+			}
+			sourceEngine.shutdown();
+			closeModel();
+		}
+	}
+
+	/**
+	 * Closes the trace model
+	 */
+	private void closeModel() {
+		try {
+			if (model != null) {
+				model.reset();
+				model.setValid(false);
+			}
+		} catch (Exception e) {
+			if (TraceCompilerEngineConfiguration.ASSERTIONS_ENABLED) {
+				getEvents().postAssertionFailed("Failed to close model", e); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.SourceListener#
+	 *      sourceOpened(com.nokia.tracecompiler.engine.SourceProperties)
+	 */
+	public void sourceOpened(SourceProperties properties) throws TraceCompilerException {
+		locationMap.addSource(properties);
+		locationConverter.sourceOpened(properties);
+	}
+
+	/**
+	 * Get project path
+	 * 
+	 * @return project path
+	 */
+	public String getProjectPath() {
+		return currentProjectPath;
+	}
+
+	/**
+	 * Set project path
+	 * 
+	 * @param path
+	 *            the path
+	 */
+	public void setProjectPath(String path) {
+		currentProjectPath = path;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineActions.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Action interface
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+/**
+ * Action interface
+ * 
+ */
+public interface TraceCompilerEngineActions {
+
+	/**
+	 * Enables actions based on selected object
+	 * 
+	 * @param object
+	 *            the object that has been selected
+	 */
+	public void enableActions(Object object);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for all engine classes
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+/**
+ * Base class for all engine classes
+ * 
+ */
+public abstract class TraceCompilerEngineBase {
+
+	/**
+	 * Called after trace project has been opened
+	 * @throws TraceCompilerException 
+	 */
+	public abstract void projectOpened() throws TraceCompilerException;
+
+	/**
+	 * Called when trace project is closed
+	 */
+	public abstract void projectClosed();
+
+	/**
+	 * Called when exporting the project
+	 * 
+	 * @throws TraceCompilerException
+	 *             if export fails
+	 */
+	public abstract void exportProject() throws TraceCompilerException;
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineConfiguration.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Access to configuration of TraceCompiler
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+/**
+ * Access to configuration of TraceCompiler
+ * 
+ */
+public interface TraceCompilerEngineConfiguration {
+
+	/**
+	 * Name of the currently selected source formatter
+	 */
+	public String FORMATTER_NAME = "TraceCompiler.sourceFormatter"; //$NON-NLS-1$
+
+	/**
+	 * Environment root
+	 */
+	public String ENVIRONMENT_ROOT = "TraceCompiler.environmentRoot"; //$NON-NLS-1$
+
+	/**
+	 * Printf support flag
+	 */
+	public String PRINTF_SUPPORT = "TraceCompiler.printfSupport"; //$NON-NLS-1$
+
+	/**
+	 * Printf extension macro
+	 */
+	public String PRINTF_EXTENSION = "TraceCompiler.printfMacro"; //$NON-NLS-1$
+
+	/**
+	 * Console UI mode flag
+	 */
+	public String CONSOLE_UI_MODE = "TraceCompiler.consoleUI"; //$NON-NLS-1$
+
+	/**
+	 * Flag to show the project files in view
+	 */
+	public boolean SHOW_PROJECT_FILES = false;
+
+	/**
+	 * Compiler flag to show hidden parameters in view
+	 */
+	public boolean SHOW_HIDDEN_PARAMETERS_IN_VIEW = false;
+
+	/**
+	 * Compiler flag to show location tag in view
+	 */
+	public boolean SHOW_LOCATION_TAG_IN_VIEW = false;
+
+	/**
+	 * Assertions events are enabled
+	 */
+	public boolean ASSERTIONS_ENABLED = true;
+
+	/**
+	 * Trace location assertions are enabled
+	 */
+	public boolean GLOBAL_LOCATION_ASSERTS = false;
+
+	/**
+	 * Traces the view state
+	 */
+	public boolean TRACE_VIEW_STATE = false;
+
+	/**
+	 * Allow changes to source formatter
+	 */
+	public boolean ALLOW_FORMAT_CHANGE = false;
+
+	/**
+	 * Comment after trace
+	 */
+	public String COMMENT_POSITION_AFTER_TRACE = "before"; //$NON-NLS-1$
+
+	/**
+	 * Comment before trace
+	 */
+	public String COMMENT_POSITION_BEFORE_TRACE = "after"; //$NON-NLS-1$
+
+	/**
+	 * Flag which determines if the configuration is available
+	 * 
+	 * @return true if available, false if not
+	 */
+	public boolean isAvailable();
+
+	/**
+	 * Stores a boolean flag into properties
+	 * 
+	 * @param flagName
+	 *            name for the flag
+	 * @param flag
+	 *            flag to be stored
+	 */
+	public void setFlag(String flagName, boolean flag);
+
+	/**
+	 * Gets a configuration flag based on flag name
+	 * 
+	 * @param flagName
+	 *            the confiugration flag name
+	 * @return the flag value
+	 */
+	public boolean getFlag(String flagName);
+
+	/**
+	 * Stores an integer value into properties
+	 * 
+	 * @param valueName
+	 *            name for the value
+	 * @param value
+	 *            value to be stored
+	 */
+	public void setValue(String valueName, int value);
+
+	/**
+	 * Gets a configuration value based on value name
+	 * 
+	 * @param valueName
+	 *            configuration value name
+	 * @return the value
+	 */
+	public int getValue(String valueName);
+
+	/**
+	 * Stores text into properties
+	 * 
+	 * @param textName
+	 *            name for the text
+	 * @param text
+	 *            text to be stored
+	 */
+	public void setText(String textName, String text);
+
+	/**
+	 * Gets a text entry based on property name
+	 * 
+	 * @param textName
+	 *            configuration value name
+	 * @return the text
+	 */
+	public String getText(String textName);
+
+	/**
+	 * Checks if the given entry exists in configuration.
+	 * 
+	 * @param entryName
+	 *            the name of the entry
+	 * @return true if entry exists, false otherwise
+	 */
+	public boolean hasEntry(String entryName);
+
+	/**
+	 * Adds a configuration listener to this configuration
+	 * 
+	 * @param configurationListener
+	 *            the listener to be added
+	 */
+	public void addConfigurationListener(
+			TraceCompilerEngineConfigurationListener configurationListener);
+
+	/**
+	 * Removes an existing configuration listener
+	 * 
+	 * @param configurationListener
+	 *            the listener to be removed
+	 */
+	public void removeConfigurationListener(
+			TraceCompilerEngineConfigurationListener configurationListener);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineConfigurationListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Configuration listener interface
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+/**
+ * Configuration listener interface
+ * 
+ */
+public interface TraceCompilerEngineConfigurationListener {
+
+	/**
+	 * Configuration creation notification
+	 */
+	public void configurationCreated();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineErrorCodes.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,489 @@
+/*
+ * Copyright (c) 2008 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:
+ *
+ * Error codes for TraceCompiler
+ *
+ */
+package com.nokia.tracecompiler.engine;
+
+import com.nokia.tracecompiler.model.TraceCompilerErrorParameters;
+import com.nokia.tracecompiler.model.TraceCompilerException.TraceCompilerExceptionCode;
+
+/**
+ * Error codes for TraceCompiler
+ * 
+ */
+public interface TraceCompilerEngineErrorCodes {
+
+	/**
+	 * Error parameters for a file-related errors
+	 */
+	public class FileErrorParameters extends TraceCompilerErrorParameters {
+
+		/**
+		 * Path to the file
+		 */
+		public String file;
+
+	}
+
+	/**
+	 * Error parameters for errors related to names, titles etc.
+	 */
+	public class StringErrorParameters extends TraceCompilerErrorParameters {
+
+		/**
+		 * String
+		 */
+		public String string;
+
+	}
+
+	/**
+	 * Error parameters for integer values that must be between two values
+	 */
+	public class RangeErrorParameters extends TraceCompilerErrorParameters {
+
+		/**
+		 * Start of range
+		 */
+		public int start;
+
+		/**
+		 * End of range
+		 */
+		public int end;
+
+		/**
+		 * Hex / decimal flag
+		 */
+		public boolean isHex;
+
+	}
+
+	/**
+	 * Error codes for TraceCompiler
+	 */
+	public enum TraceCompilerErrorCode implements TraceCompilerExceptionCode {
+
+		/**
+		 * Success
+		 */
+		OK,
+
+		/**
+		 * Trace ID was duplicate
+		 */
+		DUPLICATE_TRACE_ID,
+
+		/**
+		 * Group ID was duplicate
+		 */
+		DUPLICATE_GROUP_ID,
+
+		/**
+		 * Trace name was duplicate
+		 */
+		DUPLICATE_TRACE_NAME,
+
+		/**
+		 * Trace name was duplicate
+		 */
+		DUPLICATE_GROUP_NAME,
+
+		/**
+		 * Trace ID was not valid. Parameters for this error are either
+		 * RangeErrorParameters or null (no range)
+		 */
+		INVALID_TRACE_ID,
+
+		/**
+		 * Group ID was not valid. Parameters for this error are either
+		 * RangeErrorParameters or null (no range)
+		 */
+		INVALID_GROUP_ID,
+
+		/**
+		 * Name was not valid
+		 */
+		INVALID_TRACE_NAME,
+
+		/**
+		 * Name was not valid
+		 */
+		INVALID_GROUP_NAME,
+
+		/**
+		 * Trace string was not valid
+		 */
+		INVALID_TRACE_DATA,
+
+		/**
+		 * Cannot edit source file
+		 */
+		SOURCE_NOT_EDITABLE,
+
+		/**
+		 * Source location was not valid
+		 */
+		INVALID_SOURCE_LOCATION,
+
+		/**
+		 * Unreachable trace location
+		 */
+		UNREACHABLE_TRACE_LOCATION,
+
+		/**
+		 * Tried to perform group operation when group was not selected
+		 */
+		GROUP_NOT_SELECTED,
+
+		/**
+		 * Tried to perform trace operation when trace was not selected
+		 */
+		TRACE_NOT_SELECTED,
+
+		/**
+		 * Not enough parameters in trace
+		 */
+		NOT_ENOUGH_PARAMETERS,
+
+		/**
+		 * Unexpected exception occurred
+		 */
+		UNEXPECTED_EXCEPTION,
+
+		/**
+		 * Trace model is not ready
+		 */
+		MODEL_NOT_READY,
+
+		/**
+		 * No trace groups
+		 */
+		NO_TRACE_GROUPS,
+
+		/**
+		 * Parameter name is not valid
+		 */
+		INVALID_PARAMETER_NAME,
+
+		/**
+		 * Model properties are not valid
+		 */
+		INVALID_MODEL_PROPERTIES_FOR_EXPORT,
+
+		/**
+		 * Model name is not valid
+		 */
+		INVALID_MODEL_NAME,
+
+		/**
+		 * Trace project file cannot be parsed
+		 */
+		INVALID_PROJECT_FILE,
+
+		/**
+		 * File was not found. This error is related to FileErrorParameters
+		 * class
+		 */
+		FILE_NOT_FOUND,
+
+		/**
+		 * Path was not valid. This is related to FileErrorParameters class
+		 */
+		INVALID_PATH,
+
+		/**
+		 * Constant value was duplicate
+		 */
+		DUPLICATE_CONSTANT_VALUE,
+
+		/**
+		 * Constant name was already in use
+		 */
+		DUPLICATE_CONSTANT_TABLE_NAME,
+
+		/**
+		 * Constant table name was not valid
+		 */
+		INVALID_CONSTANT_TABLE_NAME,
+
+		/**
+		 * Constant table not part of project
+		 */
+		CONSTANT_TABLE_NOT_PART_OF_PROJECT,
+
+		/**
+		 * Constant ID was already in use
+		 */
+		DUPLICATE_CONSTANT_ID,
+
+		/**
+		 * Constant value was not valid
+		 */
+		INVALID_CONSTANT_VALUE,
+
+		/**
+		 * Parameter name was already in use
+		 */
+		DUPLICATE_PARAMETER_NAME,
+
+		/**
+		 * Parameter type was not supported
+		 */
+		INVALID_PARAMETER_TYPE,
+
+		/**
+		 * Parameters cannot be added
+		 */
+		PARAMETER_ADD_NOT_ALLOWED,
+
+		/**
+		 * Parameters cannot be removed
+		 */
+		PARAMETER_REMOVE_NOT_ALLOWED,
+
+		/**
+		 * Parameter name was empty. This is generated when automatically adding
+		 * function parameters to new trace and a parameter does not have a name
+		 * in the declaration.
+		 */
+		EMPTY_PARAMETER_NAME,
+
+		/**
+		 * Parameter template was already used by another parameter
+		 */
+		PARAMETER_TEMPLATE_ALREADY_IN_USE,
+
+		/**
+		 * Tried to remove trace location when one was not selected
+		 */
+		LOCATION_NOT_SELECTED,
+
+		/**
+		 * Cannot add a constant, since constant table was not selected
+		 */
+		CONSTANT_TABLE_NOT_SELECTED,
+
+		/**
+		 * The selected object was not valid target for delete operation
+		 */
+		CANNOT_DELETE_SELECTED_OBJECT,
+
+		/**
+		 * Trace text format is not valid
+		 */
+		INVALID_TRACE_TEXT_FORMAT,
+
+		/**
+		 * Trace name format is not valid
+		 */
+		INVALID_TRACE_NAME_FORMAT,
+
+		/**
+		 * Missing function name from trace name format
+		 */
+		TRACE_NAME_FORMAT_MISSING_FUNCTION,
+
+		/**
+		 * No traces to delete
+		 */
+		NO_TRACES_TO_DELETE,
+
+		/**
+		 * Source file is not open
+		 */
+		SOURCE_NOT_OPEN,
+
+		/**
+		 * Failed to parse a constant table from source
+		 */
+		CONSTANT_TABLE_PARSE_FAILED,
+
+		/**
+		 * Cannot open project file
+		 */
+		CANNOT_OPEN_PROJECT_FILE,
+
+		/**
+		 * Cannot write project file
+		 */
+		CANNOT_WRITE_PROJECT_FILE,
+
+		/**
+		 * Parameter ID was already in use
+		 */
+		DUPLICATE_PARAMETER_ID,
+
+		/**
+		 * Constant table ID was already in use
+		 */
+		DUPLICATE_CONSTANT_TABLE_ID,
+
+		/**
+		 * Instrumenter function list was empty
+		 */
+		NO_FUNCTIONS_TO_INSTRUMENT,
+
+		/**
+		 * Instrumenter function list was empty. Related to
+		 * StringErrorParameters
+		 */
+		NO_FUNCTIONS_TO_INSTRUMENT_WITH_TEMPLATE,
+
+		/**
+		 * Multiple errors during an operation
+		 */
+		MULTIPLE_ERRORS_IN_OPERATION,
+
+		/**
+		 * Printf parameter parameter format specification did not match the
+		 * parameter count
+		 */
+		PARAMETER_FORMAT_MISMATCH,
+
+		/**
+		 * A trace does not exist
+		 */
+		TRACE_DOES_NOT_EXIST,
+
+		/**
+		 * Trace needs to be converted to correct API
+		 */
+		TRACE_NEEDS_CONVERSION,
+
+		/**
+		 * Parameter count of location and trace do not match
+		 */
+		PARAMETER_COUNT_MISMATCH,
+
+		/**
+		 * Parameter count in location does not match the API macro
+		 */
+		PARAMETER_COUNT_DOES_NOT_MATCH_API,
+
+		/**
+		 * Location parser failed
+		 */
+		LOCATION_PARSER_FAILED,
+
+		/**
+		 * Trace is not referenced from source files
+		 */
+		TRACE_HAS_NO_LOCATIONS,
+
+		/**
+		 * Trace is used from multiple locations in source files
+		 */
+		TRACE_HAS_MULTIPLE_LOCATIONS,
+
+		/**
+		 * Project was empty when export was called
+		 */
+		NO_TRACES_TO_EXPORT,
+
+		/**
+		 * Source file cannot be opened
+		 */
+		CANNOT_OPEN_SOURCE_FILE,
+
+		/**
+		 * Trace in source cannot be updated
+		 */
+		CANNOT_UPDATE_TRACE_INTO_SOURCE,
+
+		/**
+		 * Parameter format is not supported
+		 */
+		PARAMETER_FORMAT_NOT_SUPPORTED,
+
+		/**
+		 * Parameter format is not supported by default macros
+		 */
+		PARAMETER_FORMAT_NEEDS_EXT_MACRO,
+
+		/**
+		 * Ext macro usage is not necessary with
+		 */
+		PARAMETER_FORMAT_UNNECESSARY_EXT_MACRO,
+
+		/**
+		 * Parameter format cannot be used as an array
+		 */
+		PARAMETER_FORMAT_NOT_SUPPORTED_IN_ARRAY,
+
+		/**
+		 * Property file element was unknown
+		 */
+		PROPERTY_FILE_ELEMENT_NOT_SUPPORTED,
+
+		/**
+		 * Property file element was in wrong place
+		 */
+		PROPERTY_FILE_ELEMENT_MISPLACED,
+
+		/**
+		 * Property file attribute was not valid
+		 */
+		PROPERTY_FILE_ATTRIBUTE_INVALID,
+
+		/**
+		 * Inserting a trace into source will produce incorrect results
+		 */
+		INSERT_TRACE_DOES_NOT_WORK,
+
+		/**
+		 * Trace found from source is not in valid source context
+		 */
+		NO_CONTEXT_FOR_LOCATION,
+
+		/**
+		 * Function parameters could not be parsed
+		 */
+		CANNOT_PARSE_FUNCTION_PARAMETERS,
+
+		/**
+		 * Parameter name is not valid exit trace return parameter name
+		 */
+		INVALID_PARAMETER_NAME_IN_RETURN_VALUE,
+
+		/**
+		 * Run out of Group IDs
+		 */
+		RUN_OUT_OF_GROUP_IDS,
+
+		/**
+		 * Run out of Trace IDs
+		 */
+		RUN_OUT_OF_TRACE_IDS,
+
+		/**
+		 * Cannot add function parameters if there is var arg list
+		 */
+		VAR_ARG_LIST_PARAMETER_FOUND,
+
+		/**
+		 * TRACE_STATE group name was used in non state trace
+		 */
+		INVALID_USAGE_OF_TRACE_STATE_GROUP_NAME,
+
+		/**
+		 * TRACE_PERFORMANCE group name was used in non performance trace
+		 */
+		INVALID_USAGE_OF_TRACE_PERFORMACE_GROUP_NAME
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineErrorMessages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,722 @@
+/*
+ * Copyright (c) 2008 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:
+ *
+ * Error code to error message mapper
+ *
+ */
+package com.nokia.tracecompiler.engine;
+
+import java.io.File;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.FileErrorParameters;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.RangeErrorParameters;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.StringErrorParameters;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.model.TraceCompilerErrorParameters;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceUtils;
+
+/**
+ * Error code to error message mapper
+ * 
+ */
+public final class TraceCompilerEngineErrorMessages {
+
+	/**
+	 * Maps an exception to error message
+	 * 
+	 * @param e
+	 *            the exception
+	 * @return the message
+	 */
+	public static String getErrorMessage(TraceCompilerException e) {
+		return TraceCompilerEngineErrorMessages.getErrorMessage(
+				(TraceCompilerErrorCode) e.getErrorCode(), e
+						.getErrorParameters());
+	}
+
+	/**
+	 * Maps error code to error message
+	 * 
+	 * @param error
+	 *            the error code
+	 * @param parameters
+	 *            the parameters of the error
+	 * @return the message
+	 */
+	public static String getErrorMessage(TraceCompilerErrorCode error,
+			TraceCompilerErrorParameters parameters) {
+		// CodForChk_Dis_LengthyFunc
+		// CodForChk_Dis_ComplexFunc
+		String s;
+		StringBuffer sb = new StringBuffer();
+		switch (error) {
+		case DUPLICATE_GROUP_ID:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.DuplicateGroupID")); //$NON-NLS-1$
+			break;
+		case DUPLICATE_GROUP_NAME:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.DuplicateGroupName")); //$NON-NLS-1$
+			break;
+		case DUPLICATE_TRACE_ID:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.DuplicateTraceID")); //$NON-NLS-1$
+			break;
+		case DUPLICATE_TRACE_NAME:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.DuplicateTraceName")); //$NON-NLS-1$
+			break;
+		case DUPLICATE_PARAMETER_ID:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.DuplicateParameterID"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case DUPLICATE_CONSTANT_VALUE:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.DuplicateConstantValue"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case DUPLICATE_CONSTANT_ID:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.DuplicateConstantID"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case DUPLICATE_CONSTANT_TABLE_NAME:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.DuplicateConstantTableName"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case DUPLICATE_CONSTANT_TABLE_ID:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.DuplicateConstantTableID"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case DUPLICATE_PARAMETER_NAME:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.DuplicateParameterName"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case INVALID_GROUP_ID:
+			createInvalidGroupIDMessage(parameters, sb);
+			break;
+		case INVALID_TRACE_ID:
+			createInvalidTraceIDMessage(parameters, sb);
+			break;
+		case INVALID_MODEL_PROPERTIES_FOR_EXPORT:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidModelPropertiesForExport"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case INVALID_MODEL_NAME:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidProjectName")); //$NON-NLS-1$
+			break;
+		case INVALID_GROUP_NAME:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidGroupName")); //$NON-NLS-1$
+			break;
+		case INVALID_TRACE_NAME:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidTraceName")); //$NON-NLS-1$
+			break;
+		case INVALID_PARAMETER_NAME:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidParameterName"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case EMPTY_PARAMETER_NAME:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.EmptyParameterName")); //$NON-NLS-1$
+			break;
+		case INVALID_CONSTANT_TABLE_NAME:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidConstantTableName"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case CONSTANT_TABLE_NOT_PART_OF_PROJECT:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ConstantTableNotPartOfProject"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case INVALID_TRACE_DATA:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidTraceData")); //$NON-NLS-1$
+			break;
+		case INVALID_PARAMETER_TYPE:
+			createInvalidParameterTypeMessage(parameters, sb);
+			break;
+		case INVALID_CONSTANT_VALUE:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidConstantValue"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case SOURCE_NOT_EDITABLE:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.SourceNotEditable"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case INVALID_SOURCE_LOCATION:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidSourceLocation"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case UNREACHABLE_TRACE_LOCATION:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.UnreachableTraceLocation"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case INVALID_PROJECT_FILE:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidTraceFile")); //$NON-NLS-1$
+			break;
+		case FILE_NOT_FOUND:
+			createFileNotFoundMessage((FileErrorParameters) parameters, sb);
+			break;
+		case INVALID_PATH:
+			createInvalidPathMessage((FileErrorParameters) parameters, sb);
+			break;
+		case SOURCE_NOT_OPEN:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.SourceNotOpen")); //$NON-NLS-1$
+			break;
+		case CANNOT_OPEN_PROJECT_FILE:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.CannotOpenProjectFile"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case CANNOT_WRITE_PROJECT_FILE:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.CannotWriteProjectFile"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case PARAMETER_FORMAT_MISMATCH:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterFormatMismatch"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case GROUP_NOT_SELECTED:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.GroupNotSelected")); //$NON-NLS-1$
+			break;
+		case TRACE_NOT_SELECTED:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.TraceNotSelected")); //$NON-NLS-1$
+			break;
+		case CONSTANT_TABLE_NOT_SELECTED:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ConstantTableNotSelected"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case LOCATION_NOT_SELECTED:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.TraceLocationNotSelected"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case CANNOT_DELETE_SELECTED_OBJECT:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.CannotDeleteSelectedObject"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case MODEL_NOT_READY:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.TraceProjectNotOpen"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case NO_TRACE_GROUPS:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.NoTraceGroups")); //$NON-NLS-1$
+			break;
+		case NOT_ENOUGH_PARAMETERS:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.NotEnoughParameters"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case PARAMETER_ADD_NOT_ALLOWED:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterAddNotAllowed"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case PARAMETER_REMOVE_NOT_ALLOWED:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterRemoveNotAllowed"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case PARAMETER_TEMPLATE_ALREADY_IN_USE:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterTemplateInUse"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case CONSTANT_TABLE_PARSE_FAILED:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ConstantTableParseFailed"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case UNEXPECTED_EXCEPTION:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.UnexpectedException"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case TRACE_NAME_FORMAT_MISSING_FUNCTION:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.NameFormatMissingFunction"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case INVALID_TRACE_TEXT_FORMAT:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidTraceTextFormat"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case INVALID_TRACE_NAME_FORMAT:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidTraceNameFormat"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case NO_FUNCTIONS_TO_INSTRUMENT_WITH_TEMPLATE:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.NoFunctionsToInstrumentPrefix"); //$NON-NLS-1$
+			sb.append(s);
+			sb.append(((StringErrorParameters) parameters).string);
+			s = Messages
+					.getString("TraceCompilerErrorMessages.NoFunctionsToInstrumentPostfix"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case NO_FUNCTIONS_TO_INSTRUMENT:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.NoFunctionsToInstrument"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case MULTIPLE_ERRORS_IN_OPERATION:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.MultipleErrorsInOperation"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case NO_TRACES_TO_DELETE:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.NoTracesToDelete")); //$NON-NLS-1$
+			break;
+		case TRACE_DOES_NOT_EXIST:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.TraceDoesNotExist"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case TRACE_NEEDS_CONVERSION:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.TraceNeedsConversionPrefix"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case PARAMETER_COUNT_MISMATCH:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterCountMismatch"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case PARAMETER_COUNT_DOES_NOT_MATCH_API:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterCountDoesNotMatchApi"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case TRACE_HAS_NO_LOCATIONS:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.TraceHasNoLocations"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case TRACE_HAS_MULTIPLE_LOCATIONS:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.TraceHasMultipleLocations"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case LOCATION_PARSER_FAILED:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.LocationCouldNotBeParsed"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case NO_TRACES_TO_EXPORT:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.NoTracesToExport"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case CANNOT_OPEN_SOURCE_FILE:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.CannotOpenSourceFile"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case CANNOT_UPDATE_TRACE_INTO_SOURCE:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.CannotUpdateTraceIntoSource"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case PARAMETER_FORMAT_NOT_SUPPORTED:
+			createParameterFormatNotSupportedMessage(parameters, sb);
+			break;
+		case PARAMETER_FORMAT_NEEDS_EXT_MACRO:
+			createParameterFormatNotSupportedInMacroMessage(parameters, sb);
+			break;
+		case PARAMETER_FORMAT_NOT_SUPPORTED_IN_ARRAY:
+			createParameterFormatNotSupportedInArrayMessage(parameters, sb);
+			break;
+		case PARAMETER_FORMAT_UNNECESSARY_EXT_MACRO:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterFormatUnnecessaryExtMacro"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case PROPERTY_FILE_ELEMENT_NOT_SUPPORTED:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.PropertyFileElementNotSupportedPrefix"); //$NON-NLS-1$ CodForChk_Dis_LengthyLine
+			sb.append(s);
+			sb.append(((StringErrorParameters) parameters).string);
+			s = Messages
+					.getString("TraceCompilerErrorMessages.PropertyFileElementNotSupportedPostfix"); //$NON-NLS-1$ CodForChk_Dis_LengthyLine
+			sb.append(s);
+			break;
+		case PROPERTY_FILE_ELEMENT_MISPLACED:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.PropertyFileElementMisplacedPrefix"); //$NON-NLS-1$
+			sb.append(s);
+			sb.append(((StringErrorParameters) parameters).string);
+			s = Messages
+					.getString("TraceCompilerErrorMessages.PropertyFileElementMisplacedPostfix"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case PROPERTY_FILE_ATTRIBUTE_INVALID:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.PropertyFileAttributeInvalidPrefix"); //$NON-NLS-1$
+			sb.append(s);
+			sb.append(((StringErrorParameters) parameters).string);
+			s = Messages
+					.getString("TraceCompilerErrorMessages.PropertyFileAttributeInvalidPostfix"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case INSERT_TRACE_DOES_NOT_WORK:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InsertTraceDoesNotWork"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case NO_CONTEXT_FOR_LOCATION:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.NoContextForLocation"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case CANNOT_PARSE_FUNCTION_PARAMETERS:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.CannotParseFunctionParameters"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case INVALID_PARAMETER_NAME_IN_RETURN_VALUE:
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidParameterNameInReturnValue"); //$NON-NLS-1$
+			sb.append(s);
+			break;
+		case RUN_OUT_OF_GROUP_IDS:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.RunOutOfGroupIDs")); //$NON-NLS-1$
+			break;
+		case RUN_OUT_OF_TRACE_IDS:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.RunOutOfTraceIDs")); //$NON-NLS-1$
+			break;
+		case VAR_ARG_LIST_PARAMETER_FOUND:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.VarArgListParameterFound")); //$NON-NLS-1$
+			break;
+		case INVALID_USAGE_OF_TRACE_STATE_GROUP_NAME:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidUsageOfTraceStateGroupName")); //$NON-NLS-1$
+			break;
+		case INVALID_USAGE_OF_TRACE_PERFORMACE_GROUP_NAME:
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidUsageOfTracePerformanceGroupName")); //$NON-NLS-1$
+			break;
+		default:
+			break;
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Creates invalid parameter type message
+	 * 
+	 * @param parameters
+	 *            the parameters
+	 * @param sb
+	 *            the message buffer
+	 */
+	private static void createInvalidParameterTypeMessage(
+			TraceCompilerErrorParameters parameters, StringBuffer sb) {
+		String s;
+		if (parameters instanceof StringErrorParameters) {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidParameterTypePrefix"); //$NON-NLS-1$
+			sb.append(s);
+			sb.append(((StringErrorParameters) parameters).string);
+			String format = SourceUtils
+					.mapNormalTypeToFormat(((StringErrorParameters) parameters).string);
+			if (format != null) {
+				sb.append(" "); //$NON-NLS-1$
+				sb.append(format);
+			}
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidParameterTypePostfix"); //$NON-NLS-1$
+			sb.append(s);
+		} else {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidParameterType"); //$NON-NLS-1$
+			sb.append(s);
+		}
+	}
+
+	/**
+	 * Creates parameter format not supported message
+	 * 
+	 * @param parameters
+	 *            the parameters
+	 * @param sb
+	 *            the message buffer
+	 */
+	private static void createParameterFormatNotSupportedMessage(
+			TraceCompilerErrorParameters parameters, StringBuffer sb) {
+		String s;
+		if (parameters instanceof StringErrorParameters) {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterFormatNotSupportedPrefix"); //$NON-NLS-1$
+			sb.append(s);
+			sb.append(((StringErrorParameters) parameters).string);
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterFormatNotSupportedPostfix"); //$NON-NLS-1$
+			sb.append(s);
+		} else {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterFormatNotSupported"); //$NON-NLS-1$
+			sb.append(s);
+		}
+	}
+
+	/**
+	 * Creates parameter not supported in macro message
+	 * 
+	 * @param parameters
+	 *            the parameters
+	 * @param sb
+	 *            the message buffer
+	 */
+	private static void createParameterFormatNotSupportedInMacroMessage(
+			TraceCompilerErrorParameters parameters, StringBuffer sb) {
+		String s;
+		if (parameters instanceof StringErrorParameters) {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterFormatNotSupportedInMacroPrefix"); //$NON-NLS-1$ CodForChk_Dis_LengthyLine
+			sb.append(s);
+			sb.append(((StringErrorParameters) parameters).string);
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterFormatNotSupportedInMacroPostfix"); //$NON-NLS-1$ CodForChk_Dis_LengthyLine
+			sb.append(s);
+		} else {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterFormatNotSupportedInMacro"); //$NON-NLS-1$
+			sb.append(s);
+		}
+	}
+
+	/**
+	 * Creates parameter not supported in array message
+	 * 
+	 * @param parameters
+	 *            the parameters
+	 * @param sb
+	 *            the message buffer
+	 */
+	private static void createParameterFormatNotSupportedInArrayMessage(
+			TraceCompilerErrorParameters parameters, StringBuffer sb) {
+		String s;
+		if (parameters instanceof StringErrorParameters) {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterFormatNotSupportedInArrayPrefix"); //$NON-NLS-1$ CodForChk_Dis_LengthyLine
+			sb.append(s);
+			sb.append(((StringErrorParameters) parameters).string);
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterFormatNotSupportedInArrayPostfix"); //$NON-NLS-1$ CodForChk_Dis_LengthyLine
+			sb.append(s);
+		} else {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.ParameterFormatNotSupportedInArray"); //$NON-NLS-1$
+			sb.append(s);
+		}
+	}
+
+	/**
+	 * Creates invalid trace ID message
+	 * 
+	 * @param parameters
+	 *            the parameters
+	 * @param sb
+	 *            the message buffer
+	 */
+	private static void createInvalidTraceIDMessage(
+			TraceCompilerErrorParameters parameters, StringBuffer sb) {
+		String s;
+		if (parameters instanceof RangeErrorParameters) {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidTraceIDStart"); //$NON-NLS-1$
+			sb.append(s);
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidTraceIDMiddle"); //$NON-NLS-1$
+			addRangeParameter((RangeErrorParameters) parameters, sb, s);
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidTraceIDEnd")); //$NON-NLS-1$
+		} else {
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidTraceID")); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Creates invalid group ID message
+	 * 
+	 * @param parameters
+	 *            the parameters
+	 * @param sb
+	 *            the message buffer
+	 */
+	private static void createInvalidGroupIDMessage(
+			TraceCompilerErrorParameters parameters, StringBuffer sb) {
+		String s;
+		if (parameters instanceof RangeErrorParameters) {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidGroupIDStart"); //$NON-NLS-1$
+			sb.append(s);
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidGroupIDMiddle"); //$NON-NLS-1$
+			addRangeParameter((RangeErrorParameters) parameters, sb, s);
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidGroupIDEnd")); //$NON-NLS-1$
+		} else {
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidGroupID")); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Adds a range parameter to error buffer
+	 * 
+	 * @param parameters
+	 *            the range
+	 * @param sb
+	 *            the buffer
+	 * @param middleText
+	 *            the text between the range
+	 */
+	private static void addRangeParameter(RangeErrorParameters parameters,
+			StringBuffer sb, String middleText) {
+		if (parameters.isHex) {
+			sb.append(SourceConstants.HEX_PREFIX);
+			sb.append(Integer.toHexString(parameters.start));
+		} else {
+			sb.append(parameters.start);
+		}
+		sb.append(middleText);
+		if (parameters.isHex) {
+			sb.append(SourceConstants.HEX_PREFIX);
+			sb.append(Integer.toHexString(parameters.end));
+		} else {
+			sb.append(parameters.end);
+		}
+	}
+
+	/**
+	 * Creates "Invalid directory" message
+	 * 
+	 * @param parameters
+	 *            the message parameters
+	 * @param sb
+	 *            the string buffer where the message is stored
+	 */
+	private static void createInvalidPathMessage(
+			FileErrorParameters parameters, StringBuffer sb) {
+		String s;
+		if (parameters != null) {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidDirectoryPrefix"); //$NON-NLS-1$
+			sb.append(s);
+			sb.append(convertPath(parameters.file));
+			s = Messages
+					.getString("TraceCompilerErrorMessages.InvalidDirectoryPostfix"); //$NON-NLS-1$
+			sb.append(s);
+		} else {
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.InvalidDirectory")); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Creates "File not found" message
+	 * 
+	 * @param parameters
+	 *            the message parameters
+	 * @param sb
+	 *            the string buffer where the message is stored
+	 */
+	private static void createFileNotFoundMessage(
+			FileErrorParameters parameters, StringBuffer sb) {
+		String s;
+		if (parameters != null) {
+			s = Messages
+					.getString("TraceCompilerErrorMessages.FileDoesNotExistPrefix"); //$NON-NLS-1$
+			sb.append(s);
+			sb.append(convertPath(parameters.file));
+			s = Messages
+					.getString("TraceCompilerErrorMessages.FileDoesNotExistPostfix"); //$NON-NLS-1$
+			sb.append(s);
+		} else {
+			sb.append(Messages
+					.getString("TraceCompilerErrorMessages.FileDoesNotExist")); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Adds some spaces to path string to allow folding
+	 * 
+	 * @param path
+	 *            the path
+	 * @return the converted path
+	 */
+	public static String convertPath(String path) {
+		StringBuffer sb = new StringBuffer();
+		int strIndex = -1;
+		do {
+			strIndex++;
+			int lastIndex = strIndex;
+			strIndex = path.indexOf(File.separatorChar, strIndex);
+			if (strIndex != -1) {
+				String sub = path.substring(lastIndex, strIndex);
+				if (sub.length() > 0) {
+					sb.append(sub);
+					sb.append(' ');
+					sb.append(File.separatorChar);
+					sb.append(' ');
+				}
+			} else {
+				// If the data ends with file separator, lastIndex points to
+				// end-of-data. If not, the rest of the data is appended without
+				// further white spaces
+				if (lastIndex < path.length()) {
+					String sub = path.substring(lastIndex);
+					sb.append(sub);
+				}
+			}
+		} while (strIndex != -1);
+		return sb.toString();
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineEvents.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Event listener interface
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+/**
+ * Event listener interface
+ * 
+ */
+public interface TraceCompilerEngineEvents {
+
+	/**
+	 * Posts an error event to TraceCompiler
+	 * 
+	 * @param exception
+	 *            the error data
+	 */
+	public void postError(TraceCompilerException exception);
+
+	/**
+	 * Posts an error event to TraceCompiler
+	 * 
+	 * @param message
+	 *            the error message
+	 * @param source
+	 *            the error source
+	 * @param postEvent
+	 *            defines is error event also posted to trace event view
+	 */
+	public void postErrorMessage(String message, Object source, boolean postEvent);
+
+	/**
+	 * Posts a warning event to TraceCompiler
+	 * 
+	 * @param message
+	 *            the warning message
+	 * @param source
+	 *            the warning source
+	 */
+	public void postWarningMessage(String message, Object source);
+
+	/**
+	 * Posts an info event to TraceCompiler
+	 * 
+	 * @param message
+	 *            the info message
+	 * @param source
+	 *            the info source
+	 */
+	public void postInfoMessage(String message, Object source);
+
+	/**
+	 * Posts a critical assertion failed event
+	 * 
+	 * @param message
+	 *            the message
+	 * @param source
+	 *            the source of the assertion
+	 * @throws TraceCompilerException 
+	 */
+	public void postCriticalAssertionFailed(String message, Object source) throws TraceCompilerException;
+
+	/**
+	 * Posts an assertion failed event
+	 * 
+	 * @param message
+	 *            the message
+	 * @param source
+	 *            the source of the assertion
+	 */
+	public void postAssertionFailed(String message, Object source);
+
+	/**
+	 * Gets the processing error
+	 * 
+	 * @return the error
+	 */
+	public boolean hasErrorHappened();
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineGlobals.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,255 @@
+/*
+* Copyright (c) 2008-2010 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:
+*
+* Access point to the exported interfaces of TraceCompiler engine
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import com.nokia.tracecompiler.TraceCompilerLogger;
+import com.nokia.tracecompiler.engine.source.SourceEngine;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.plugin.TraceCompilerPlugin;
+import com.nokia.tracecompiler.source.SourceConstants;
+
+/**
+ * Access point to the exported interfaces of TraceCompiler engine
+ * 
+ */
+public class TraceCompilerEngineGlobals {
+
+	/**
+	 * Max group ID
+	 */
+	public static final int MAX_GROUP_ID = 65535; // CodForChk_Dis_Magic
+
+	/**
+	 * Max trace ID
+	 */
+	public static final int MAX_TRACE_ID = 65535; // CodForChk_Dis_Magic
+
+	/**
+	 * TraceCompiler engine instance
+	 */
+	private static TraceCompilerEngine instance;
+	
+	/**
+	 * default licence
+	 */
+	static String defaultLicence;
+	
+	/**
+	 * default licence
+	 */
+	static String defaultLicenceWithHash;
+	
+	/**
+	 * Constructor is hidden
+	 */
+	private TraceCompilerEngineGlobals() {
+	}
+
+	/**
+	 * Starts TraceCompiler engine.
+	 * @throws TraceCompilerException 
+	 */
+	public static void start() throws TraceCompilerException {
+		if (instance == null) {
+			instance = new TraceCompilerEngine();
+			instance.start();
+		}
+	}
+
+	/**
+	 * Shuts down the TraceCompiler instance
+	 * @throws TraceCompilerException 
+	 */
+	public static void shutdown() throws TraceCompilerException {
+		if (instance != null) {
+			instance.shutdown();
+			instance = null;
+		}
+	}
+
+	/**
+	 * Gets the configuration interface. The configuration interface is not
+	 * available until view has been registered.
+	 * 
+	 * @return the configuration
+	 */
+	public static TraceCompilerEngineConfiguration getConfiguration() {
+		return instance.getConfiguration();
+	}
+
+	/**
+	 * Gets the trace model
+	 * 
+	 * @return the model
+	 */
+	public static TraceModel getTraceModel() {
+		return instance.getModel();
+	}
+
+	/**
+	 * Gets the source engine
+	 * 
+	 * @return the source engine
+	 */
+	public static SourceEngine getSourceEngine() {
+		return instance.getSourceEngine();
+	}
+
+	/**
+	 * Gets the trace compiler interface
+	 * 
+	 * @return trace compiler
+	 */
+	public static TraceCompilerEngineInterface getTraceCompiler() {
+		return instance.getTraceCompiler();
+	}
+
+	/**
+	 * Gets the events interface
+	 * 
+	 * @return the events interface
+	 */
+	public static TraceCompilerEngineEvents getEvents() {
+		if (instance != null) {
+			return instance.getEvents();
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * Called by a plug-in to register itself
+	 * 
+	 * @param plugin
+	 *            the plugin to be registered
+	 */
+	public static void registerPlugin(TraceCompilerPlugin plugin) {
+		instance.registerPlugin(plugin);
+	}
+
+	/**
+	 * Called by a plug-in to unregister itself
+	 * 
+	 * @param plugin
+	 *            the plugin to be unregistered
+	 */
+	public static void unregisterPlugin(TraceCompilerPlugin plugin) {
+		if (instance != null) {
+			instance.unregisterPlugin(plugin);
+		}
+	}
+
+	/**
+	 * Called by the view plug-in to register the view
+	 * 
+	 * @param view
+	 *            the view
+	 * @throws TraceCompilerException 
+	 */
+	public static void setView(TraceCompilerEngineView view) throws TraceCompilerException {
+		instance.setView(view);
+	}
+
+	/**
+	 * Gets the source context manager
+	 * 
+	 * @return the context manager
+	 */
+	public static SourceContextManager getSourceContextManager() {
+		return instance.getSourceContextManager();
+	}
+
+	/**
+	 * Get project path
+	 * 
+	 * @return project path
+	 */
+	public static String getProjectPath() {
+		String projetcPath = instance.getProjectPath();
+		return projetcPath;
+	}
+
+	/**
+	 * Set project path
+	 * 
+	 * @param path
+	 *            the path
+	 */
+	public static void setProjectPath(String path) {
+		instance.setProjectPath(path);
+	}
+	
+	/**
+	 * get default licence from com/nokia/tracecompiler/licence.lic
+	 * c++ comment format
+	 * @param boolean cppCommented
+	 *  if true, it returns the licence in cpp comment \/** ... **\/
+	 *  else it retuen the licence in a # comment ## ... ##
+	 * @return String licence
+	 */
+	public static String getDefaultLicence(boolean cppCommented) {
+		String licenceResourceName;
+		if (cppCommented) {
+			if (defaultLicence == null) {
+				licenceResourceName = "/com/nokia/tracecompiler/licence.lic"; //$NON-NLS-1$
+				defaultLicence = readLicence(licenceResourceName);
+			}
+			return defaultLicence;
+		} else {
+			if (defaultLicenceWithHash == null) {
+				licenceResourceName = "/com/nokia/tracecompiler/licence_hash.lic"; //$NON-NLS-1$
+				defaultLicenceWithHash = readLicence(licenceResourceName);
+			}
+			return defaultLicenceWithHash;
+		}
+	}
+
+	/**
+	 * read the provided resource file and return the text in it.
+	 */
+	private static String readLicence(String aLicenceResourceName) {
+		String licenceText = null;
+		InputStream is = instance.getClass().getResourceAsStream(aLicenceResourceName); 
+		if (is != null) {
+			InputStreamReader isr = new InputStreamReader(is);
+			BufferedReader br = new BufferedReader(isr);
+			StringBuffer sb = new StringBuffer();
+			String line;
+			try {
+				while ((line = br.readLine()) != null) {
+					sb.append(line + SourceConstants.LINE_FEED);
+				}
+				licenceText = sb.toString();
+				br.close();
+				isr.close();
+				is.close();
+			} catch (IOException e) {
+				TraceCompilerLogger.printWarning(Messages.getString("TraceCompilerErrorMessages.LicenceFileError") + e.getMessage()); //$NON-NLS-1$
+			}
+		}
+		return licenceText;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineInterface.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2008 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:
+*
+* TraceCompiler interface
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+/**
+ * TraceCompiler interface
+ * 
+ */
+public interface TraceCompilerEngineInterface {
+
+	/**
+	 * Opens the trace project related to given source file
+	 * 
+	 * @param modelName
+	 *            the name for the model
+	 * @throws TraceCompilerException
+	 *             if startup fails
+	 * @throws Exception 
+	 */
+	public void openProject(String modelName)
+			throws Exception; //this include TraceCompilerException
+
+	/**
+	 * Exports the trace project
+	 * 
+	 * @throws TraceCompilerException
+	 *             if export fails
+	 */
+	public void exportProject() throws TraceCompilerException;
+
+	/**
+	 * Closes the trace project
+	 * @throws TraceCompilerException 
+	 */
+	public void closeProject() throws TraceCompilerException;
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceCompilerEngineView.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Interface implemented by the view of TraceCompiler
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+/**
+ * Interface implemented by the view of TraceCompiler. The view is implemented
+ * as a separate plug-in, which is registered via
+ * {@link TraceCompilerEngineGlobals#setView(TraceCompilerView)}
+ * 
+ * @see com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals#setView(TraceCompilerView)
+ */
+public interface TraceCompilerEngineView {
+
+	/**
+	 * Gets the configuration interface
+	 * 
+	 * @return the configuration interface
+	 */
+	public TraceCompilerEngineConfiguration getConfiguration();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceLocation.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,491 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Represents a location of a trace within a source document
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.source.SourceParserResult;
+import com.nokia.tracecompiler.engine.source.SourceParserRule;
+import com.nokia.tracecompiler.engine.source.SourceProperties;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerErrorParameters;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceObject;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceLocation;
+import com.nokia.tracecompiler.source.SourceLocationListener;
+
+/**
+ * Represents a location of a trace within a source document. The locations of a
+ * document are updated by TraceLocationUpdater when document is changed
+ * 
+ */
+public class TraceLocation extends SourceLocation implements LocationProperties {
+
+	/**
+	 * Source which owns this location
+	 */
+	private SourceProperties source;
+
+	/**
+	 * Name of the trace as parsed from source
+	 */
+	private String originalName;
+
+	/**
+	 * Name after conversion to valid trace name
+	 */
+	private String convertedName;
+
+	/**
+	 * Text of the trace as parsed from source
+	 */
+	private String traceText;
+
+	/**
+	 * The tag of the parser that found this trace location
+	 */
+	private String tag;
+
+	/**
+	 * Content changed flag
+	 */
+	private boolean contentChanged;
+
+	/**
+	 * Name changed flag
+	 */
+	private boolean nameChanged;
+
+	/**
+	 * The location list
+	 */
+	private TraceLocationList list;
+
+	/**
+	 * The parameters
+	 */
+	private List<String> parameters;
+
+	/**
+	 * Parser-specific data associated with this location
+	 */
+	private List<String> parserData;
+
+	/**
+	 * Rule which defines how the parameters found from source are interpreted
+	 */
+	private SourceParserRule parserRule;
+
+	/**
+	 * Flag, which determines if this location has changed after last convert
+	 * operation
+	 */
+	private boolean changedAfterConvert = true;
+
+	/**
+	 * Last notified validity code
+	 */
+	private TraceCompilerErrorCode notifiedValidity = TraceCompilerErrorCode.OK;
+
+	/**
+	 * Last notified validity parameters
+	 */
+	private TraceCompilerErrorParameters notifiedValidityParameters;
+
+	/**
+	 * Parser error code
+	 */
+	private TraceCompilerErrorCode parserErrorCode = TraceCompilerErrorCode.OK;
+
+	/**
+	 * Parser error parameters
+	 */
+	private TraceCompilerErrorParameters parserErrorParameters;
+
+	/**
+	 * Converter error code
+	 */
+	private TraceCompilerErrorCode converterErrorCode = TraceCompilerErrorCode.OK;
+
+	/**
+	 * Converter error parameters
+	 */
+	private TraceCompilerErrorParameters converterErrorParameters;
+
+	/**
+	 * Creates a new location
+	 * 
+	 * @param source
+	 *            the source where the location is associated
+	 * @param offset
+	 *            the offset to the trace within the source document
+	 * @param length
+	 *            the length of the trace
+	 */
+	public TraceLocation(SourceProperties source, int offset, int length) {
+		super(source.getSourceParser(), offset, length);
+		this.source = source;
+	}
+
+	/**
+	 * Sets the content changed flag. If <i>changed</i> is false this also sets
+	 * the name changed flag to false
+	 * 
+	 * @param changed
+	 *            the new changed flag
+	 */
+	public void setContentChanged(boolean changed) {
+		this.contentChanged = changed;
+		if (!changed) {
+			nameChanged = false;
+		}
+	}
+
+	/**
+	 * Checks if the content has changed.
+	 * 
+	 * @return the content changed flag
+	 */
+	public boolean isContentChanged() {
+		return contentChanged;
+	}
+
+	/**
+	 * Checks if the name has changed.
+	 * 
+	 * @return the name changed flag
+	 */
+	public boolean isNameChanged() {
+		return contentChanged && nameChanged;
+	}
+
+	/**
+	 * Gets the trace this location is associated to or null if unrelated
+	 * 
+	 * @return the trace
+	 */
+	public Trace getTrace() {
+		Trace retval = null;
+		if (list != null) {
+			TraceObject object = list.getOwner();
+			if (object instanceof Trace) {
+				retval = (Trace) object;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets the name of the trace as parsed from source
+	 * 
+	 * @return the name of the trace
+	 */
+	public String getOriginalName() {
+		return originalName;
+	}
+
+	/**
+	 * Gets the name of the trace after conversion to valid name
+	 * 
+	 * @return the name of the trace
+	 */
+	public String getConvertedName() {
+		return convertedName;
+	}
+
+	/**
+	 * Gets the text of the trace
+	 * 
+	 * @return the text of the trace
+	 */
+	public String getTraceText() {
+		return traceText;
+	}
+
+	/**
+	 * Returns the source properties this location belongs to
+	 * 
+	 * @return source properties
+	 */
+	public SourceProperties getSource() {
+		return source;
+	}
+
+	/**
+	 * Sets the location list which owns this location
+	 * 
+	 * @param list
+	 *            the location list
+	 */
+	public void setLocationList(TraceLocationList list) {
+		this.list = list;
+	}
+
+	/**
+	 * Gets the location list this location belongs to
+	 * 
+	 * @return the list
+	 */
+	public TraceLocationList getLocationList() {
+		return list;
+	}
+
+	/**
+	 * Sets the parser rule that will be used to parse the data of this
+	 * location. Must be called before setData
+	 * 
+	 * @param rule
+	 *            the rule used to parse the data
+	 */
+	public void setParserRule(SourceParserRule rule) {
+		parserRule = rule;
+	}
+
+	/**
+	 * Gets the parser rule that found this location
+	 * 
+	 * @return the parser rule
+	 */
+	public SourceParserRule getParserRule() {
+		return parserRule;
+	}
+
+	/**
+	 * Sets the trace tag that was found from source
+	 * 
+	 * @param tag
+	 *            the trace tag
+	 */
+	public void setTag(String tag) {
+		this.tag = tag;
+	}
+
+	/**
+	 * Gets the trace tag
+	 * 
+	 * @return the tag
+	 */
+	public String getTag() {
+		return tag;
+	}
+
+	/**
+	 * Sets the trace data
+	 * 
+	 * @param list
+	 *            the list of parameters
+	 */
+	public void setData(ArrayList<String> list) {
+		try {
+			SourceParserResult result = parserRule.parseParameters(tag, list);
+			setData(result.originalName, result.convertedName,
+					result.traceText, result.parameters, result.parserData);
+			parserRule.getLocationParser().processNewLocation(this);
+			parserErrorCode = TraceCompilerErrorCode.OK;
+			parserErrorParameters = null;
+			converterErrorCode = TraceCompilerErrorCode.OK;
+			converterErrorParameters = null;
+		} catch (TraceCompilerException e) {
+			parserErrorCode = (TraceCompilerErrorCode) e.getErrorCode();
+			parserErrorParameters = e.getErrorParameters();
+		}
+	}
+
+	/**
+	 * Sets the trace name and parameter list
+	 * 
+	 * @param originalName
+	 *            the name parsed from source
+	 * @param convertedName
+	 *            the name after conversion
+	 * @param traceText
+	 *            the text parsed from source
+	 * @param parameters
+	 *            the list of parameters parsed from source
+	 * @param parserData
+	 *            list of parser-specific data
+	 */
+	private void setData(String originalName, String convertedName,
+			String traceText, List<String> parameters, List<String> parserData) {
+		if (!convertedName.equals(this.convertedName)) {
+			this.convertedName = convertedName;
+			nameChanged = true;
+		}
+		this.originalName = originalName;
+		//remove line feed if the trace text spans multiple lines.
+		if (traceText != null ) {
+			this.traceText = traceText.replaceAll(SourceConstants.LINE_FEED, ""); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		this.parameters = parameters;
+		this.parserData = parserData;
+	}
+
+	/**
+	 * Removes the parameter at given index
+	 * 
+	 * @param index
+	 *            the index
+	 */
+	public void removeParameterAt(int index) {
+		// NOTE: Does not cause validity callbacks
+		// This is currently only used temporarily when removing a parameter
+		// from trace. This is needed to correctly update the source code
+		if (parameters != null && index >= 0 && index < parameters.size()) {
+			parameters.remove(index);
+		}
+	}
+
+	/**
+	 * Gets the number of parameters found from the source code
+	 * 
+	 * @return the number of parameters
+	 */
+	public int getParameterCount() {
+		return parameters != null ? parameters.size() : 0;
+	}
+
+	/**
+	 * Gets the parameter at given index
+	 * 
+	 * @param index
+	 *            the parameter index
+	 * @return the parameter at the index
+	 */
+	public String getParameter(int index) {
+		return parameters.get(index);
+	}
+
+	/**
+	 * Gets the parameters
+	 * 
+	 * @return iterator over the parameters
+	 */
+	public Iterator<String> getParameters() {
+		List<String> list = null;
+		if (parameters != null) {
+			list = parameters;
+		} else {
+			list = Collections.emptyList();
+		}
+		return list.iterator();
+	}
+
+	/**
+	 * Gets the parser-specific data
+	 * 
+	 * @return the parser data
+	 */
+	public List<String> getParserData() {
+		return parserData;
+	}
+
+	/**
+	 * Gets the current location validity code.
+	 * 
+	 * @return the validity code
+	 */
+	public TraceCompilerErrorCode getValidityCode() {
+		return notifiedValidity;
+	}
+
+	/**
+	 * Gets the parameters associated with the current location validity code.
+	 * 
+	 * @return the validity code
+	 */
+	public TraceCompilerErrorParameters getValidityParameters() {
+		return notifiedValidityParameters;
+	}
+
+	/**
+	 * Creates a notification if validity has changed. This is initially called
+	 * from the location list when a location is added to it and after that from
+	 * notifyLocationChanged.
+	 */
+	void runValidityCheck() {
+		TraceCompilerErrorCode code;
+		TraceCompilerErrorParameters parameters;
+		if (parserErrorCode != TraceCompilerErrorCode.OK) {
+			code = parserErrorCode;
+			parameters = parserErrorParameters;
+		} else if (converterErrorCode != TraceCompilerErrorCode.OK) {
+			code = converterErrorCode;
+			parameters = converterErrorParameters;
+		} else {
+			code = TraceCompilerErrorCode.TRACE_DOES_NOT_EXIST;
+			parameters = null;
+			if (parserRule != null) {
+				code = parserRule.getLocationParser().checkLocationValidity(
+						this);
+			}
+		}
+		if (code != notifiedValidity) {
+			notifiedValidity = code;
+			notifiedValidityParameters = parameters;
+			Iterator<SourceLocationListener> itr = getListeners();
+			while (itr.hasNext()) {
+				SourceLocationListener listener = itr.next();
+				if (listener instanceof SourceLocationListener) {
+					((SourceLocationListener) listener)
+							.locationValidityChanged(this);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Sets the converter error code and runs the validity check to notify
+	 * listeners about change in error code
+	 * 
+	 * @param errorCode
+	 *            the new error code
+	 * @param parameters
+	 *            the error parameters
+	 */
+	void setConverterErrorCode(TraceCompilerErrorCode errorCode,
+			TraceCompilerErrorParameters parameters) {
+		converterErrorCode = errorCode;
+		converterErrorParameters = parameters;
+		runValidityCheck();
+	}
+
+	/**
+	 * Flag, which determines if the location has changed since last convert
+	 * operation
+	 * 
+	 * @return the flag
+	 */
+	public boolean hasChangedAfterConvert() {
+		return changedAfterConvert;
+	}
+
+	/**
+	 * Called when the location has been converted. Sets the changed after
+	 * convert flag to false
+	 */
+	public void locationConverted() {
+		changedAfterConvert = false;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceLocationConverter.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,679 @@
+/*
+ * Copyright (c) 2008-2010 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:
+ *
+ * Location converter monitors locations and converts them to traces if necessary.
+ *
+ */
+package com.nokia.tracecompiler.engine;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+import com.nokia.tracecompiler.TraceCompilerConstants;
+import com.nokia.tracecompiler.TraceCompilerLogger;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.project.ProjectConstants;
+import com.nokia.tracecompiler.engine.project.ProjectEngine;
+import com.nokia.tracecompiler.engine.project.SortedProperties;
+import com.nokia.tracecompiler.engine.project.TraceIDCache;
+import com.nokia.tracecompiler.engine.rules.PerformanceEventRuleBase;
+import com.nokia.tracecompiler.engine.rules.StateTraceRule;
+import com.nokia.tracecompiler.engine.source.SourceParserRule;
+import com.nokia.tracecompiler.engine.source.SourceProperties;
+import com.nokia.tracecompiler.engine.source.SourceParserRule.ParameterConversionResult;
+import com.nokia.tracecompiler.engine.source.SourceParserRule.TraceConversionResult;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceGroup;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceModelPersistentExtension;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.project.FormattingUtils;
+import com.nokia.tracecompiler.project.GroupNames;
+import com.nokia.tracecompiler.project.ProjectUtils;
+import com.nokia.tracecompiler.source.SourceConstants;
+
+/**
+ * Location converter monitors locations and converts them to traces if
+ * necessary.
+ * 
+ */
+public final class TraceLocationConverter {
+
+	/**
+	 * Number of deprecated groups
+	 */
+	final static int NUMBER_OF_DEPRECATED_GROUPS = 3;
+
+	/**
+	 * Deprecated group name map
+	 */
+	Map<String, String> deprecatedGroupNameMap = new HashMap<String, String>(
+			NUMBER_OF_DEPRECATED_GROUPS);
+
+	/**
+	 * Trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param model
+	 *            the trace model
+	 */
+	TraceLocationConverter(TraceModel model) {
+		this.model = model;
+		initializeDeprecatedGroupNameMap();
+	}
+
+	/**
+	 * Initialize deprecated group name map
+	 */
+	private void initializeDeprecatedGroupNameMap() {
+		deprecatedGroupNameMap.put(GroupNames.TRACE_API,
+				GroupNames.TRACE_BORDER);
+		deprecatedGroupNameMap.put(GroupNames.TRACE_DEBUG,
+				GroupNames.TRACE_DUMP);
+		deprecatedGroupNameMap.put(GroupNames.TRACE_DETAILED,
+				GroupNames.TRACE_INTERNALS);
+	}
+
+	/**
+	 * Source opened notification
+	 * 
+	 * @param properties
+	 *            the source properties
+	 * @throws TraceCompilerException 
+	 */
+	void sourceOpened(SourceProperties properties) throws TraceCompilerException {
+		//make sure all errors are reported AFTER processing a file
+		TraceCompilerEngineGlobals.getSourceContextManager()
+				.setConverting(true);
+		model.startProcessing();
+		try {
+			// Load fixed group and trace ids from definition file to model
+			//no errors are reported here 
+			if (model.getFixedIds() == null) {
+				loadFixedIdsFromDefinitionFileToModel();
+			}
+
+			for (TraceLocation loc : properties) {
+				autoConvertLocation(loc);
+			}
+			// If there are duplicates or unused traces, they are removed
+			// Note that this will work across source files although this
+			// function is processing only one file.
+			// If a trace is created, all locations from all open source files
+			// are linked to that trace and thus it will be removed as
+			// duplicate.
+			removeDuplicateTraces();
+
+		} finally {
+			model.processingComplete();
+			SourceContextManager manager = TraceCompilerEngineGlobals
+					.getSourceContextManager();
+			manager.setConverting(false);
+			manager.setContext(null);
+		}
+	}
+
+	/**
+	 * Load fixed Ids from definiton file to properties
+	 * 
+	 */
+	private void loadFixedIdsFromDefinitionFileToModel() {
+		TraceIDCache cache = model.getExtension(TraceIDCache.class);
+
+		// Create trace Id cache if it does not exist
+		try {
+			if (cache == null) {
+				String path;
+				path = ProjectUtils.getLocationForFile(model,
+						ProjectEngine.traceFolderName,
+						ProjectConstants.FIXED_ID_DEFINITIONS_FILE_NAME, false);
+				if (path != null) {
+					cache = new TraceIDCache(new File(path).getParent());
+					model.addExtension(cache);
+				}
+			}
+			if (cache != null) {
+				File cacheFile = new File(cache.getAbsolutePath());
+				// Try to load Ids from trace Id cache file
+				try {
+					SortedProperties fixedIds = new SortedProperties();
+					if (cacheFile.exists()) {
+						String thisLine;
+						boolean allOldFixedIdsAreValid = true;
+						String group = model.GROUP_PROPERTY_PREFIX;
+						FileInputStream fis = new FileInputStream(cacheFile);
+						BufferedReader myInput = new BufferedReader(
+								new InputStreamReader(fis));
+						// Read the old fixed id definition file
+						while ((thisLine = myInput.readLine()) != null) {
+							if (thisLine.indexOf(group) != -1) {
+								thisLine = thisLine.substring(group.length(),
+										thisLine.length());
+								if (!searchForOldGroupIds(thisLine)) {						
+									String msg  = Messages.getString("TraceLocationConverter.GroupIdValueError"); //$NON-NLS-1$
+									TraceCompilerEngineGlobals.getEvents().postWarningMessage(msg, null);
+									// We need only one old invalid id to make all of them invalid
+									allOldFixedIdsAreValid = false;
+									break;
+								}
+							}
+						}
+						fis.close();
+						
+						if (allOldFixedIdsAreValid) {
+							// Create file input stream again
+							FileInputStream newFis = new FileInputStream(cacheFile);
+							fixedIds.load(newFis);
+							// Load fixed Ids from properties to model
+							model.setFixedIds(fixedIds);
+							newFis.close();
+						}
+						
+					}
+				} catch (IOException e) {
+					// If there is a problem with the cache file, just delete it
+					// make sure the model fixed ids is null
+					model.setFixedIds(null);
+					cacheFile.delete();
+					// We do not raise an exception but we need to report a info
+					TraceCompilerLogger.printWarning(Messages.getString("TraceLocationConverter.FixedIdProblemWarningBeginText") + cacheFile.toString() + Messages.getString("TraceLocationConverter.FixedIdProblemWarningMiddleText") + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+		} catch (TraceCompilerException e) {
+			// This exception can probably be ignored
+			TraceCompilerLogger.printWarning("Could not create ID cache : " + e.getMessage()); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Searches the fixed_id file to see if there are any old definitions
+	 * 
+	 * @param string
+	 *            of text from the fixed_id files
+	 * @return boolean 
+	 */
+	public static boolean searchForOldGroupIds(String str) {
+		
+		boolean oldGroupIdValid = true;
+
+		//get group name from the string
+		int index = str.indexOf(SourceConstants.ASSIGN_WITH_OUT_SPACES);
+		if (index == -1) {
+			//not valid string, so ignore it, just return success
+			return true;
+		}
+
+		String groupName = str.substring(0, index);
+
+		//get group id
+		str = str.substring(str.indexOf(SourceConstants.HEX_PREFIX) + 2, str
+				.length());
+
+		int groupId = -1;
+
+		try {
+			groupId = Integer.parseInt(str.trim(),
+					TraceCompilerConstants.HEX_RADIX);
+		} catch (NumberFormatException e) {
+			//it's not an hex number so fail
+			oldGroupIdValid = false;
+		}
+
+		//get group id from ost header file
+		int fileGroupId = GroupNames.getIdByName(groupName);
+
+		if (fileGroupId != 0) {
+			//found 1
+			if (fileGroupId != groupId) //group id has changed, so old one can't be used
+				oldGroupIdValid = false;
+		} else {
+			if ((GroupNames.USER_GROUP_ID_FIRST > groupId)
+					|| (groupId > GroupNames.USER_GROUP_ID_LAST)) //not within new user defined Ids
+				oldGroupIdValid = false;
+		}
+
+		return oldGroupIdValid;
+	}
+
+	/**
+	 * Converts the given location to trace if parser supports auto-conversion
+	 * 
+	 * @param location
+	 *            the location
+	 */
+	private void autoConvertLocation(TraceLocation location) {
+		// Stores the context of the location to the context manager.
+		TraceCompilerEngineGlobals.getSourceContextManager().setContext(
+				location.getParser().getContext(location.getOffset()));
+		Trace trace = location.getTrace();
+		if (trace == null) {
+			// If the trace does not exist, the parser determines if the
+			// location can be converted
+			if (location.getParserRule().getLocationParser()
+					.isLocationConverted(location)) {
+				try {
+					convertLocation(location, null, true);
+				} catch (TraceCompilerException e) {
+					// If converter fails, the error code is stored into the
+					// location. The location notifies all validity listeners
+					// about the change
+					location.setConverterErrorCode((TraceCompilerErrorCode) e
+							.getErrorCode(), e.getErrorParameters());
+				}
+			}
+		} else {
+			// If the trace already exists in the model, it is updated
+			// based on the source file contents
+			updateLocation(location);
+		}
+	}
+
+	/**
+	 * Recreates the trace from changed location when source is saved
+	 * 
+	 * @param location
+	 *            the location to be checked
+	 */
+	private void updateLocation(TraceLocation location) {
+		// Parser determines if the location can be converted
+		if (location.getParserRule().getLocationParser().isLocationConverted(
+				location)) {
+			try {
+				Trace trace = location.getTrace();
+				// If a location has changed, the old trace is removed
+				// and a new one created. Persistent extensions are moved to the
+				// new trace
+				Iterator<TraceModelPersistentExtension> extensions = null;
+				if (trace != null) {
+					extensions = trace
+							.getExtensions(TraceModelPersistentExtension.class);
+					trace.getGroup().removeTrace(trace);
+				}
+				convertLocation(location, extensions, true);
+
+				// Check that the location is inside a function. Otherwise throw
+				// an error because the code is unreachable
+				if (location.getFunctionName() == null) {
+					throw new TraceCompilerException(
+							TraceCompilerErrorCode.UNREACHABLE_TRACE_LOCATION);
+				}
+
+			} catch (TraceCompilerException e) {
+				// If converter fails, the error code is stored into the
+				// location. The location notifies all validity listeners about
+				// the change
+				location.setConverterErrorCode((TraceCompilerErrorCode) e
+						.getErrorCode(), e.getErrorParameters());
+			}
+		}
+	}
+
+	/**
+	 * Removes all duplicate traces from the model
+	 * @throws TraceCompilerException 
+	 */
+	private void removeDuplicateTraces() throws TraceCompilerException {
+		boolean groupRemoved = true;
+		while (groupRemoved) {
+			groupRemoved = false;
+			for (TraceGroup group : model) {
+				removeDuplicateTracesFromGroup(group);
+				if (!group.hasTraces()) {
+					model.removeGroup(group);
+					groupRemoved = true;
+					break;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Removes duplicate traces from a trace group
+	 * 
+	 * @param group
+	 *            the group
+	 * @throws TraceCompilerException 
+	 */
+	private void removeDuplicateTracesFromGroup(TraceGroup group) throws TraceCompilerException {
+		boolean traceRemoved = true;
+		while (traceRemoved) {
+			traceRemoved = false;
+			for (Trace trace : group) {
+				TraceLocationList list = trace
+						.getExtension(TraceLocationList.class);
+				if (list != null) {
+					if (list.getLocationCount() > 1) {
+						// All the locations are marked as duplicates and the
+						// trace is deleted
+						TraceCompilerErrorCode code = TraceCompilerErrorCode.TRACE_HAS_MULTIPLE_LOCATIONS;
+						for (LocationProperties loc : list) {
+							((TraceLocation) loc).setConverterErrorCode(code,
+									null);
+						}
+						group.removeTrace(trace);
+						traceRemoved = true;
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Converts a location to a Trace object.
+	 * 
+	 * @param location
+	 *            the location to be converted
+	 * @param extensions
+	 *            persistent extensions to be added to the new trace
+	 * @param autoConvert
+	 *            true if converting without user interaction
+	 * @return the new trace
+	 * @throws TraceCompilerException
+	 *             if conversion fails
+	 */
+	private Trace convertLocation(TraceLocation location,
+			Iterator<TraceModelPersistentExtension> extensions,
+			boolean autoConvert) throws TraceCompilerException {
+		Trace trace = null;
+		// If the parser has failed, the validity code is not OK and the
+		// location cannot be converted. Traces marked with no-trace error code
+		// have not yet been converted, so that is OK. Traces that have
+		// duplicate ID's error code can be parsed, since the duplicates might
+		// no longer exist.
+		if (!autoConvert
+				|| location.getValidityCode() == TraceCompilerErrorCode.OK
+				|| location.getValidityCode() == TraceCompilerErrorCode.TRACE_DOES_NOT_EXIST
+				|| location.getValidityCode() == TraceCompilerErrorCode.TRACE_HAS_MULTIPLE_LOCATIONS) {
+			// The parser does the actual conversion
+			SourceParserRule rule = location.getParserRule();
+			TraceConversionResult result = rule.getLocationParser()
+					.convertLocation(location);
+			// After parser has finished, the trace is created.
+			trace = convertWithoutUI(result, extensions);
+
+			if (trace != null) {
+				model.startProcessing();
+				try {
+					createParametersFromConversionResult(location, result,
+							trace);
+					// Runs a location validity check and notifies listeners
+					// that location is now OK
+					location.setConverterErrorCode(TraceCompilerErrorCode.OK,
+							null);
+				} catch (TraceCompilerException e) {
+					// If parameters cannot be created, the trace is removed
+					TraceGroup group = trace.getGroup();
+					trace.getGroup().removeTrace(trace);
+					if (!group.hasTraces()) {
+						group.getModel().removeGroup(group);
+					}
+					throw e;
+				} finally {
+					model.processingComplete();
+				}
+			}
+		}
+		return trace;
+	}
+
+	/**
+	 * Converts a location to trace without UI
+	 * 
+	 * @param result
+	 *            the conversion result from parser
+	 * @param extensions
+	 *            persistent extensions to be added to the new trace
+	 * @return the converted trace
+	 * @throws TraceCompilerException
+	 *             if location properties are not valid
+	 */
+	private Trace convertWithoutUI(TraceConversionResult result,
+			Iterator<TraceModelPersistentExtension> extensions)
+			throws TraceCompilerException {
+		Trace trace = null;
+		if (result.group != null) {
+			String groupName = result.group;
+			TraceGroup group = handleGroup(groupName);
+			trace = handleTrace(result, extensions, group);
+		} else {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.GROUP_NOT_SELECTED);
+		}
+		return trace;
+	}
+
+	/**
+	 * Handle trace
+	 * 
+	 * @param result
+	 *            the conversion result from parser
+	 * @param extensions
+	 *            persistent extensions to be added to the new trace
+	 * @param group
+	 *            the group where trace belongs to
+	 * @return the trace
+	 * @throws TraceCompilerException
+	 */
+	private Trace handleTrace(TraceConversionResult result,
+			Iterator<TraceModelPersistentExtension> extensions, TraceGroup group)
+			throws TraceCompilerException {
+		// First try to find Id to trace from fixed Ids
+		Trace trace = null;
+		Properties fixedIds = model.getFixedIds();
+		String groupName = result.group;
+		String traceName = result.name;
+		int groupId = group.getID();
+		String groupIdString = SourceConstants.HEX_PREFIX
+				+ Integer.toString(groupId, model.HEX_RADIX).toUpperCase();
+		int traceId = 0;
+		if (fixedIds != null) {
+			String tracePropertyName = groupName + model.GROUP_ID_PREFIX
+					+ groupIdString + model.GROUP_ID_SUFFIX
+					+ SourceConstants.UNDERSCORE + traceName;
+			String value = fixedIds.getProperty(model.TRACE_PROPERTY_PREFIX
+					+ tracePropertyName);
+			if (value != null) {
+				try {
+					traceId = Integer.decode(value).intValue();
+				} catch (NumberFormatException e) {
+					// Corrupted, assign a proper Id later on
+					traceId = 0;
+				}
+			}
+		}
+		// If there was no fixed Id to this trace, get Id from model
+		if (traceId == 0) {
+			traceId = model.getNextTraceId(group);
+		}
+
+		String text = result.text;
+		model.getVerifier().checkTraceProperties(group, null, traceId,
+				traceName, text);
+		TraceModelExtension[] extArray = createExtensionArray(result,
+				extensions);
+		trace = model.getFactory().createTrace(group, traceId, traceName, text,
+				extArray);
+
+		if ((trace.getExtension(StateTraceRule.class) == null)
+				&& (group.getName()
+						.equals("TRACE_STATE"))) { //$NON-NLS-1$
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.INVALID_USAGE_OF_TRACE_STATE_GROUP_NAME);
+		} else if ((trace.getExtension(PerformanceEventRuleBase.class) == null)
+				&& (group.getName()
+						.equals("TRACE_PERFORMANCE"))) { //$NON-NLS-1$
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.INVALID_USAGE_OF_TRACE_PERFORMACE_GROUP_NAME);
+		}
+
+		return trace;
+	}
+
+	/**
+	 * Handle group. Try to fnd group from model. If it does not exist then
+	 * create new group.
+	 * 
+	 * @param groupName
+	 *            the name of the group
+	 * @return the handled group
+	 * @throws TraceCompilerException
+	 */
+	private TraceGroup handleGroup(String groupName)
+			throws TraceCompilerException {
+		String deprecatedGroupName = null;
+		
+		// Convert deprecated group name to valid group name if needed
+		if (deprecatedGroupNameMap.containsKey(groupName)) {
+			deprecatedGroupName = groupName;
+			groupName = deprecatedGroupNameMap.get(groupName);
+		}
+
+		// If auto-convert flag is set, the location is converted without
+		// user interaction. A new trace group is created if not found
+		TraceGroup group = model.findGroupByName(groupName);
+		if (group == null) {
+			
+			// Print warning related to deprecated group name change if needed
+			if (deprecatedGroupName != null) {
+				String message = Messages
+						.getString("TraceLocationConverter.DeprecatedGroupIdWarningStart");//$NON-NLS-1$
+				message += SourceConstants.SPACE + deprecatedGroupName
+						+ SourceConstants.SPACE;
+				message += Messages
+						.getString("TraceLocationConverter.DeprecatedGroupIdWarningMiddle");//$NON-NLS-1$
+				message += SourceConstants.SPACE + groupName
+						+ SourceConstants.SPACE;
+				message += Messages
+						.getString("TraceLocationConverter.DeprecatedGroupIdWarningEnd");//$NON-NLS-1$
+				TraceCompilerLogger.printWarning(message);
+			}
+
+			int groupId = 0;
+			Properties fixedIds = model.getFixedIds();
+
+			// First try to find Id to group from fixed Ids
+			if (fixedIds != null) {
+				String value = fixedIds.getProperty(model.GROUP_PROPERTY_PREFIX
+						+ groupName);
+				if (value != null) {
+					try {
+						groupId = Integer.decode(value).intValue();
+					} catch (NumberFormatException e) {
+						// Corrupted, assign a proper Id later on
+						groupId = 0;
+					}
+				}
+			}
+			// If there was no fixed Id to this group, get Id from model
+			if (groupId == 0) {
+				groupId = FormattingUtils.getGroupID(model, groupName);
+			}
+			model.getVerifier().checkTraceGroupProperties(model, null, groupId,
+					groupName);
+			group = model.getFactory().createTraceGroup(groupId, groupName,
+					null);
+		}
+
+		return group;
+	}
+
+	/**
+	 * Combines extensions into one array
+	 * 
+	 * @param result
+	 *            the conversion result
+	 * @param extensions
+	 *            the persistent extensions from old trace
+	 * @return the combined array of extensions
+	 */
+	private TraceModelExtension[] createExtensionArray(
+			TraceConversionResult result,
+			Iterator<TraceModelPersistentExtension> extensions) {
+		TraceModelExtension[] extArray = null;
+		ArrayList<TraceModelExtension> ext = null;
+		if (result.extensions != null) {
+			ext = new ArrayList<TraceModelExtension>();
+			ext.addAll(result.extensions);
+		}
+		if (extensions != null) {
+			if (ext == null) {
+				ext = new ArrayList<TraceModelExtension>();
+			}
+			while (extensions.hasNext()) {
+				ext.add(extensions.next());
+			}
+		}
+		if (ext != null) {
+			extArray = new TraceModelExtension[ext.size()];
+			ext.toArray(extArray);
+		}
+		return extArray;
+	}
+
+	/**
+	 * Creates the trace parameters based on trace conversion result
+	 * 
+	 * @param converted
+	 *            the location that was converted
+	 * @param result
+	 *            the conversion result
+	 * @param trace
+	 *            the trace
+	 * @throws TraceCompilerException
+	 *             if parameters cannot be created
+	 */
+	private void createParametersFromConversionResult(TraceLocation converted,
+			TraceConversionResult result, Trace trace)
+			throws TraceCompilerException {
+		if (result.parameters != null) {
+			for (int i = 0; i < result.parameters.size(); i++) {
+				int id = trace.getNextParameterID();
+				ParameterConversionResult res = result.parameters.get(i);
+				boolean warning = false;
+				if (res.type == null) {
+					warning = true;
+					res.type = TraceParameter.HEX32;
+				}
+				model.getVerifier().checkTraceParameterProperties(trace, null,
+						id, res.name, res.type);
+				TraceModelExtension[] extArray = null;
+				if (res.extensions != null) {
+					extArray = new TraceModelExtension[res.extensions.size()];
+					res.extensions.toArray(extArray);
+				}
+				TraceParameter param = model.getFactory().createTraceParameter(
+						trace, id, res.name, res.type, extArray);
+				if (warning) {
+					String msg = Messages
+							.getString("TraceCompiler.UnknownTypeWarning"); //$NON-NLS-1$
+					TraceCompilerEngineGlobals.getEvents().postWarningMessage(
+							msg, param);
+				}
+			}
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceLocationList.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2007 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:
+*
+* List of trace locations
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import java.util.ArrayList;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+/**
+ * List of trace locations.
+ * 
+ */
+public class TraceLocationList extends LocationListBase {
+
+	/**
+	 * Location list listeners
+	 */
+	private ArrayList<TraceLocationListListener> listeners = new ArrayList<TraceLocationListListener>();
+
+	/**
+	 * List title, returned by getTitle
+	 */
+	private String listTitle;
+
+	/**
+	 * Constructor
+	 */
+	TraceLocationList() {
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param listTitle
+	 *            the title of this location list
+	 */
+	TraceLocationList(String listTitle) {
+		this.listTitle = listTitle;
+	}
+
+	/**
+	 * Adds a location to this list.
+	 * 
+	 * @param location
+	 *            the location to be added
+	 * @throws TraceCompilerException 
+	 */
+	void addLocation(TraceLocation location) throws TraceCompilerException {
+		if (TraceCompilerEngineConfiguration.ASSERTIONS_ENABLED) {
+			if (contains(location)) {
+				//this can only happen if there is a programming error
+				TraceCompilerEngineGlobals.getEvents().postCriticalAssertionFailed(
+						"Duplicate trace location", //$NON-NLS-1$
+						location.getConvertedName());
+				throw new TraceCompilerException(null);
+			}
+		}
+		location.setLocationList(this);
+		add(location);
+		fireLocationAdded(location);
+		location.runValidityCheck();
+	}
+
+	/**
+	 * Removes a location from this list.
+	 * 
+	 * @param location
+	 *            the location to be removed
+	 */
+	void removeLocation(TraceLocation location) {
+		if (remove(location)) {
+			fireLocationRemoved(location);
+			location.setLocationList(null);
+		}
+	}
+
+	/**
+	 * Adds a location list listener to this object
+	 * 
+	 * @param listener
+	 *            the listener interface
+	 */
+	public void addLocationListListener(TraceLocationListListener listener) {
+		listeners.add(listener);
+	}
+
+	/**
+	 * Removes the location list listener
+	 * 
+	 * @param listener
+	 *            the listener interface
+	 */
+	public void removeLocationListListener(TraceLocationListListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * Creates locationAdded event to location list listeners
+	 * 
+	 * @param location
+	 *            the location that was added
+	 */
+	private void fireLocationAdded(TraceLocation location) {
+		for (TraceLocationListListener l : listeners) {
+			l.locationAdded(location);
+		}
+	}
+
+	/**
+	 * Creates locationRemoved event to location list listeners
+	 * 
+	 * @param location
+	 *            the location that was added
+	 */
+	void fireLocationRemoved(TraceLocation location) {
+		for (TraceLocationListListener l : listeners) {
+			l.locationRemoved(location);
+		}
+	}
+
+	/**
+	 * Gets the list title or null
+	 * 
+	 * @return the list title
+	 */
+	public String getListTitle() {
+		return listTitle;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceLocationListListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Listener for trace location lists
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+/**
+ * Listener for trace location lists
+ * 
+ */
+public interface TraceLocationListListener {
+
+	/**
+	 * Location was added to this list
+	 * 
+	 * @param location
+	 *            the new location
+	 */
+	public void locationAdded(TraceLocation location);
+
+	/**
+	 * Location was removed from this list
+	 * 
+	 * @param location
+	 *            the location that was removed
+	 */
+	public void locationRemoved(TraceLocation location);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/TraceLocationMap.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Maps trace locations into traces and vice versa
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.engine.source.SourceProperties;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+
+/**
+ * Maps trace locations into traces and vice versa.
+ * 
+ */
+final class TraceLocationMap {
+
+	/**
+	 * List of unrelated traces
+	 */
+	private TraceLocationList unrelated = new TraceLocationList();
+
+	/**
+	 * Parser groups
+	 */
+	private HashMap<String, TraceLocationList> parserGroups = new HashMap<String, TraceLocationList>();
+
+	/**
+	 * The trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * Global list of locations, used for verification purposes with
+	 * GLOBAL_LOCATION_ASSERTS configuration flag
+	 */
+	private ArrayList<TraceLocation> globalList;
+
+	/**
+	 * Creates a location mapper
+	 * 
+	 * @param model
+	 *            the trace model
+	 */
+	public TraceLocationMap(TraceModel model) {
+		if (TraceCompilerEngineConfiguration.GLOBAL_LOCATION_ASSERTS) {
+			globalList = new ArrayList<TraceLocation>();
+		}
+		this.model = model;
+		model.addModelListener(new LocationMapModelListener(this));
+		model.addExtension(unrelated);
+	}
+
+	/**
+	 * Adds the locations from the source file to the map
+	 * 
+	 * @param source
+	 *            properties of the source to be added
+	 * @throws TraceCompilerException 
+	 */
+	void addSource(SourceProperties source) throws TraceCompilerException {
+		for (TraceLocation location : source) {
+			if (TraceCompilerEngineConfiguration.GLOBAL_LOCATION_ASSERTS) {
+				if (globalList.contains(location)) {
+					TraceCompilerEngineGlobals.getEvents().postAssertionFailed(
+							"Location already in global list", //$NON-NLS-1$
+							location.getConvertedName());
+				} else {
+					globalList.add(location);
+				}
+			}
+			// Generates locationAdded event via TraceLocationListListener
+			addNewLocationToTrace(location);
+		}
+	}
+
+	/**
+	 * Adds a location to trace or to the unrelated list if a trace cannot be
+	 * found.
+	 * 
+	 * @param location
+	 *            the location to be added
+	 * @throws TraceCompilerException 
+	 */
+	private void addNewLocationToTrace(TraceLocation location) throws TraceCompilerException {
+		TraceLocationList list;
+		Trace trace = model.findTraceByName(location.getOriginalName());
+		if (trace != null) {
+			list = trace.getExtension(TraceLocationList.class);
+			if (list == null) {
+				list = new TraceLocationList();
+				trace.addExtension(list);
+			}
+		} else {
+			String name = location.getParserRule().getLocationParser()
+					.getLocationGroup();
+			if (name == null) {
+				list = unrelated;
+			} else {
+				list = parserGroups.get(name);
+				if (list == null) {
+					list = new TraceLocationList(name);
+					model.addExtension(list);
+					parserGroups.put(name, list);
+				}
+			}
+		}
+		list.addLocation(location);
+	}
+
+	/**
+	 * Moves the locations from trace to unrelated list
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @throws TraceCompilerException 
+	 */
+	void moveToUnrelated(Trace trace) throws TraceCompilerException {
+		TraceLocationList list = trace.getExtension(TraceLocationList.class);
+		if (list != null) {
+			trace.removeExtension(list);
+			for (LocationProperties loc : list) {
+				unrelated.addLocation((TraceLocation) loc);
+			}
+		}
+	}
+
+	/**
+	 * Moves locations from unrelated to the given trace
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @throws TraceCompilerException 
+	 */
+	void moveFromUnrelated(Trace trace) throws TraceCompilerException {
+		String name = trace.getName();
+		TraceLocationList list = null;
+		Iterator<LocationProperties> itr = unrelated.iterator();
+		while (itr.hasNext()) {
+			TraceLocation location = (TraceLocation) itr.next();
+			if (name.equals(location.getOriginalName())) {
+				list = trace.getExtension(TraceLocationList.class);
+				if (list == null) {
+					list = new TraceLocationList();
+					trace.addExtension(list);
+				}
+				// NOTE: This must replicate the behavior of
+				// TraceLocationList.removeLocation
+				itr.remove();
+				unrelated.fireLocationRemoved(location);
+				list.addLocation(location);
+			}
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/ViewAdapter.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2008 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:
+*
+* View adapter
+*
+*/
+package com.nokia.tracecompiler.engine;
+
+
+/**
+ * View adapter implements the view interface.
+ * 
+ */
+public class ViewAdapter implements TraceCompilerEngineView {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engi.TraceCompilerEngineView#getConfiguration()
+	 */
+	public TraceCompilerEngineConfiguration getConfiguration() {
+		// This can be null, the configuration delegate checks it
+		return null;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/EventEngine.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,239 @@
+/*
+* Copyright (c) 2010 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:
+*
+* Implements TraceCompilerEvents to forward events to the event router plug-in
+*
+*/
+package com.nokia.tracecompiler.engine.event;
+
+import com.nokia.tracecompiler.TraceCompilerGlobals;
+import com.nokia.tracecompiler.TraceCompilerLogger;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineEvents;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceLocationBase;
+
+/**
+ * Implements TraceCompilerEvents to forward events to the event router plug-in
+ * 
+ */
+public final class EventEngine implements TraceCompilerEngineEvents {
+
+	/**
+	 * Info event type
+	 */
+	public final static int INFO = 1; // CodForChk_Dis_Magic
+
+	/**
+	 * Warning event type
+	 */
+	public final static int WARNING = 2; // CodForChk_Dis_Magic
+
+	/**
+	 * Error event type
+	 */
+	public final static int ERROR = 3; // CodForChk_Dis_Magic
+
+	/**
+	 * Critical assertion failure event type
+	 */
+	public final static int ASSERT_CRITICAL = 4; // CodForChk_Dis_Magic
+
+	/**
+	 * Non-critical assertion failure event type
+	 */
+	public final static int ASSERT_NORMAL = 5; // CodForChk_Dis_Magic
+	
+
+	/**
+	 * indicates if an error happened for all files
+	 */
+	private boolean globalProcessingError = false;
+	
+
+
+	/**
+	 * Constructor
+	 * 
+	 * @param model
+	 *            the trace model
+	 */
+	public EventEngine(TraceModel model) {
+	}
+
+	/**
+	 * check if an error happened
+	 * 
+	 * @return the error
+	 */
+	public boolean hasErrorHappened() {
+		return globalProcessingError;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
+	 *      postError(com.nokia.tracecompiler.engine.TraceCompilerException)
+	 */
+	public void postError(TraceCompilerException exception) {
+		String message = TraceCompilerEngineErrorMessages.getErrorMessage(exception);
+		if (message != null && message.length() > 0) {
+			postErrorMessage(message, exception.getErrorSource(), exception.isEventWantedToPost());
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#postErrorMessage(java.lang.String, java.lang.Object, boolean)
+	 */
+	public void postErrorMessage(String message, Object source, boolean postEvent) {
+		
+		if (postEvent) {
+			postEvent(ERROR, message, source);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
+	 *      postWarningMessage(java.lang.String, java.lang.Object)
+	 */
+	public void postWarningMessage(String message, Object source) {
+		postEvent(WARNING, message, source);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
+	 *      postInfoMessage(java.lang.String, java.lang.Object)
+	 */
+	public void postInfoMessage(String message, Object source) {
+		postEvent(INFO, message, source);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
+	 *      postAssertionFailed(java.lang.String, java.lang.Object)
+	 */
+	public void postAssertionFailed(String message, Object source) {
+		message = "Assertion failed. Reason: " //$NON-NLS-1$
+				+ message;
+		postEvent(ASSERT_NORMAL, message, source);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
+	 *      postCriticalAssertionFailed(java.lang.String, java.lang.Object)
+	 */
+	public void postCriticalAssertionFailed(String message, Object source) throws TraceCompilerException {
+		message = "Critical assertion failure, the project has been closed. Reason: " //$NON-NLS-1$
+				+ message;
+		// Closes the trace project and shows an error message
+		TraceCompilerEngineGlobals.getTraceCompiler().closeProject();
+		postEvent(ASSERT_CRITICAL, message, source);
+	}
+
+
+	/**
+	 * Print an event to console
+	 * @param type
+	 *            event type
+	 * @param message
+	 *            event message
+	 * @param source
+	 *            event source
+	 */
+	private void postEvent(int type, String message, Object source) {
+		switch (type) {
+		case INFO:
+				if (TraceCompilerGlobals.isVebose()) {
+					printEvent(type, message, source);
+
+					// This means that the component has been processed. Let's
+					// print one space to ensure that parse_mmp.pl will print
+					// out something.
+				} else if (message.contains(
+						"Dictionary File written")) { //$NON-NLS-1$
+					System.out.print(" "); //$NON-NLS-1$
+				} else if (!message
+						.contains("No files were written")) { //$NON-NLS-1$
+					// If we get "no files written" message, let's dismiss it ->
+					// parse_mmp.pl won't print out anything
+					printEvent(type, message, source);
+				}
+			break;
+		case WARNING:
+		case ERROR:
+		case ASSERT_NORMAL:
+		case ASSERT_CRITICAL:
+			printEvent(type, message, source);
+			break;
+		}		
+	}
+
+	/**
+	 * Prints event
+	 * @param type error type
+	 * @param message
+	 *            event message
+	 * @param source
+	 *            event source
+	 */
+	private void printEvent(int type, String message, Object source) {
+		if (message == null) {
+			message = Messages.getString("EventEngine.unknowError"); //$NON-NLS-1$
+		}
+		String fullMessage = ""; //$NON-NLS-1$
+
+		
+		if (source instanceof SourceLocationBase) {
+			SourceLocationBase location = (SourceLocationBase) source;
+			fullMessage = location.getFileName() + Messages.getString("EventEngine.lineNumberPrefix") + location.getLineNumber() + SourceConstants.COLON + SourceConstants.SPACE; //$NON-NLS-1$
+		} else if (source instanceof String) {
+			message = (String) source;
+		}
+		fullMessage = fullMessage + message;
+		
+		switch (type) {
+		case INFO:
+			TraceCompilerLogger.printInfo(fullMessage);
+			break;
+		case WARNING:
+		case ASSERT_NORMAL:
+			TraceCompilerLogger.printWarning(fullMessage);
+			break;
+		case ERROR:
+		case ASSERT_CRITICAL:
+			globalProcessingError = true;
+			TraceCompilerLogger.printError(fullMessage);
+			break;
+		default:
+			break;
+		}
+	}
+	
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/Messages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2010 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:
+*
+* Localized strings for engine package
+*
+*/
+package com.nokia.tracecompiler.engine.event;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+
+	/**
+	 * Bundle name
+	 */
+	private static final String BUNDLE_NAME = "com.nokia.tracecompiler.engine.event.messages"; //$NON-NLS-1$
+
+	/**
+	 * Bundle
+	 */
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Prevents construction
+	 */
+	private Messages() {
+	}
+	
+	/**
+	 * Gets localized string based on key
+	 * 
+	 * @param key
+	 *            the resource key
+	 * @return the localized resource
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/messages.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,2 @@
+EventEngine.lineNumberPrefix=, line 
+EventEngine.unknowError=Unknown error happened, Please report to trace team.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+TraceCompiler event router implementation
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckFormattedTraceExists.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Kernel #endif flag check
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+/**
+ * Trace activation length check template element
+ * 
+ */
+public final class CheckFormattedTraceExists extends TemplateCheckBase {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.TemplateCheckBase#check()
+	 */
+	@Override
+	boolean check() {
+		return writer.getCurrentTraceFormatted().length() > 0;
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckIsBufferSizeDynamic.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Dynamic buffer size check
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+/**
+ * Dynamic buffer size check
+ * 
+ */
+public final class CheckIsBufferSizeDynamic extends TemplateCheckBase {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.TemplateCheckBase#check()
+	 */
+	@Override
+	boolean check() {
+		return writer.isBufferSizeDynamic();
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckIsKernelModeEndifNeeded.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Kernel #endif flag check
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+/**
+ * __KERNEL_MODE__ #endif flag check
+ * 
+ */
+public final class CheckIsKernelModeEndifNeeded extends TemplateCheckBase {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.TemplateCheckBase#check()
+	 */
+	@Override
+	boolean check() {
+		return writer.isKernelModeEndifNeeded();
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckIsKernelModeFlagNeeded.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Kernel #endif flag check
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+import com.nokia.tracecompiler.source.SymbianConstants;
+
+/**
+ * Check if __KERNEL_MODE__ flags needs to be added
+ * 
+ */
+public final class CheckIsKernelModeFlagNeeded extends TemplateCheckBase {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.TemplateCheckBase#check()
+	 */
+	@Override
+	boolean check() {
+		boolean retval;
+		if (writer.getCurrentTraceFormatted().contains(
+				SymbianConstants.CONST_TDESC16_REF)) {
+			retval = true;
+			writer.setKernelModeEndifNeeded(true);
+		} else {
+			retval = false;
+			writer.setKernelModeEndifNeeded(false);
+		}
+		return retval;
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckIsTraceBufferBuilt.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Trace buffer flag check
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+/**
+ * Trace buffer flag check
+ * 
+ */
+public final class CheckIsTraceBufferBuilt extends TemplateCheckBase {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.TemplateCheckBase#check()
+	 */
+	@Override
+	boolean check() {
+		return writer.isTraceBufferBuilt();
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckIsTraceFormatDuplicate.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Checks if a trace format exists
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+/**
+ * Checks if a trace format exists
+ * 
+ */
+public final class CheckIsTraceFormatDuplicate extends TemplateCheckBase {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.TemplateCheckBase#check()
+	 */
+	@Override
+	boolean check() {
+		return writer.isTraceFormatDuplicate();
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/CheckParameterNeedsAlignment.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Checks if parameter needs 32-bit alignment
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+/**
+ * Checks if parameter needs 32-bit alignment
+ * 
+ */
+final class CheckParameterNeedsAlignment extends TemplateCheckBase {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.TemplateCheckBase#check()
+	 */
+	@Override
+	boolean check() {
+		return writer.isParameterAlignmentNeeded();
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/ComplexHeaderRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rule which specifies that a trace cannot be represented by the normal trace API macros
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+import com.nokia.tracecompiler.model.TraceObjectRule;
+
+/**
+ * Rule which specifies that a trace cannot be represented by the normal trace
+ * API macros
+ * 
+ */
+public interface ComplexHeaderRule extends TraceObjectRule {
+
+	/**
+	 * Returns true if an ext-function needs to be written for this trace
+	 * 
+	 * @return function flag
+	 */
+	public boolean needsFunction();
+
+	/**
+	 * Gets an extension to be added to the trace ID define
+	 * 
+	 * @return the extension
+	 */
+	public String getTraceIDDefineExtension();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/HeaderConstants.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Constants for header engine package
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+/**
+ * Constants for header engine package
+ * 
+ */
+interface HeaderConstants {
+
+	/**
+	 * Number of parent paths to check when locating include directory
+	 */
+	int INC_SEARCH_DEPTH = 3; // CodForChk_Dis_Magic
+
+	/**
+	 * Trace header extension
+	 */
+	String TRACE_HEADER_EXTENSION = "Traces.h"; //$NON-NLS-1$
+
+	/**
+	 * Main trace header name
+	 */
+	String TRACE_HEADER_NAME = "OstTraceDefinitions.h"; //$NON-NLS-1$
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/HeaderEngine.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,289 @@
+/*
+* Copyright (c) 2008-2010 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:
+*
+* Header engine manages the trace header file that is included into source code
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.engine.LocationListBase;
+import com.nokia.tracecompiler.engine.LocationProperties;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineBase;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineEvents;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.project.ProjectEngine;
+import com.nokia.tracecompiler.file.FileCompareOutputStream;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceGroup;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.plugin.TraceHeaderContribution;
+import com.nokia.tracecompiler.plugin.TraceHeaderContribution.TraceHeaderContributionType;
+import com.nokia.tracecompiler.project.ProjectUtils;
+import com.nokia.tracecompiler.project.TraceProjectAPI;
+import com.nokia.tracecompiler.source.SourceUtils;
+
+/**
+ * Header engine manages the trace header file that is included into source
+ * code. This implements the plug-in interface to get notifications about
+ * project file opening and closing
+ * 
+ */
+public final class HeaderEngine extends TraceCompilerEngineBase {
+
+	/**
+	 * Trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param model
+	 *            trace model
+	 */
+	public HeaderEngine(TraceModel model) {
+		this.model = model;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngine#projectOpened()
+	 */
+	@Override
+	public void projectOpened() {
+		TraceHeader header = model.getExtension(TraceHeader.class);
+		if (header == null) {
+			String fileName = null;
+			try {
+				fileName = ProjectUtils.getLocationForFile(model,
+						ProjectEngine.traceFolderName,
+						HeaderConstants.TRACE_HEADER_NAME, false);
+			} catch (TraceCompilerException e) {
+				// Model should always be open when traceProjectOpened is called
+			}
+			if (fileName != null) {
+				header = new TraceHeader(fileName, false);
+				model.addExtension(header);
+			} else {
+				String msg = Messages
+						.getString("HeaderEngine.FailedToAttachHeader"); //$NON-NLS-1$
+				TraceCompilerEngineGlobals.getEvents().postErrorMessage(msg, null, true);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engin.TraceCompilererEngine#projectClosing()
+	 */
+	@Override
+	public void projectClosed() {
+		model.removeExtensions(TraceHeader.class);
+	}
+
+	/**
+	 * Gets the name for the trace header file based on given source
+	 * 
+	 * @param sourceFile
+	 *            the source file name
+	 * @return the header file name
+	 */
+	public String getHeaderFileName(String sourceFile) {
+		String retval = null;
+		if (model != null) {
+			// The header file name is the source file name with extension
+			// replaced by Traces.h
+			File f = new File(sourceFile);
+			retval = removeFileExtension(f.getName())
+					+ HeaderConstants.TRACE_HEADER_EXTENSION;
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engi.TraceCompilerlerEngine#projectExporting()
+	 */
+	@Override
+	public void exportProject() throws TraceCompilerException {
+		if (model.isValid() && model.hasTraces()) {
+			TraceHeader header = model.getExtension(TraceHeader.class);
+			if (header != null) {
+				// Headers for each source are written first
+				String path = header.getPath();
+				ArrayList<String> fileNames = new ArrayList<String>();
+				collectSourceFilesFromTraces(fileNames);
+				for (String fileName : fileNames) {
+					String target = path + File.separator + fileName;
+					writeHeaderFile(target);
+				}
+				// The main header is written after everything else succeeds
+				writeMainHeaderFile(header);
+			}
+		}
+	}
+
+	/**
+	 * Collects the source file names from traces
+	 * 
+	 * @param fileNames
+	 *            the file names
+	 */
+	private void collectSourceFilesFromTraces(ArrayList<String> fileNames) {
+		for (TraceGroup group : model) {
+			for (Trace trace : group) {
+				Iterator<LocationListBase> itr = trace
+						.getExtensions(LocationListBase.class);
+				while (itr.hasNext()) {
+					LocationListBase base = itr.next();
+					for (LocationProperties loc : base) {
+						String locFileName = loc.getFileName();
+						if (locFileName != null) {
+							addFileToList(fileNames, locFileName);
+						}
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Adds a file to list if it does not exist
+	 * 
+	 * @param fileNames
+	 *            the list
+	 * @param locFileName
+	 *            the file
+	 */
+	private void addFileToList(ArrayList<String> fileNames, String locFileName) {
+		locFileName = removeFileExtension(locFileName);
+		if (!fileNames.contains(locFileName)) {
+			fileNames.add(locFileName);
+		}
+	}
+
+	/**
+	 * Removes the file extension from file name
+	 * 
+	 * @param fileName
+	 *            the file name
+	 * @return name without extension
+	 */
+	private String removeFileExtension(String fileName) {
+		int index = fileName.lastIndexOf('.');
+		int sep1 = fileName.lastIndexOf('/');
+		int sep2 = fileName.lastIndexOf('\\');
+		if (index > sep1 && index > sep2) {
+			fileName = fileName.substring(0, index);
+		}
+		return fileName;
+	}
+
+	/**
+	 * Writes the header to given target
+	 * 
+	 * @param target
+	 *            the target file
+	 * @throws TraceCompilerException
+	 *             if writing fails
+	 */
+	private void writeHeaderFile(String target) throws TraceCompilerException {
+		// The TraceHeader stored into the model is not used when writing
+		// headers, since a separate header is written for each source file
+		TraceHeader header = new TraceHeader(target, true);
+		try {
+			header.setOwner(model);
+			TraceHeaderWriter writer = new TraceHeaderWriter(header);
+			TraceCompilerEngineEvents events = TraceCompilerEngineGlobals.getEvents();
+			if (writer.write()) {
+				header.postFileWrittenEvent(header.getAbsolutePath());
+			} else {
+				String msg = Messages
+						.getString("HeaderEngine.TraceHeaderNotChangedPrefix"); //$NON-NLS-1$
+				events.postInfoMessage(msg + header.getAbsolutePath(), null);
+			}
+		} finally {
+			// The header owner must be reset to null, since that makes
+			// unregisters it from the model
+			header.setOwner(null);
+		}
+	}
+
+	/**
+	 * Writes the main header file to given target
+	 * 
+	 * @param header
+	 *            the header
+	 * @throws TraceCompilerException
+	 *             if writing fails
+	 */
+	private void writeMainHeaderFile(TraceHeader header)
+			throws TraceCompilerException {
+		// The TraceHeader stored into the model is not used when writing
+		// headers, since a separate header is written for each source file
+		TraceCompilerEngineEvents events = TraceCompilerEngineGlobals.getEvents();
+		String path = header.getAbsolutePath();
+		try {
+			if (writeMainHeader(path)) {
+				header.postFileWrittenEvent(path);
+			} else {
+				String msg = Messages
+						.getString("HeaderEngine.TraceHeaderNotChangedPrefix"); //$NON-NLS-1$
+				events.postInfoMessage(msg + path, null);
+			}
+		} catch (IOException e) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.CANNOT_WRITE_PROJECT_FILE, e);
+		}
+	}
+
+	/**
+	 * Writes the main header to given target
+	 * 
+	 * @param target
+	 *            the target
+	 * @return true if written, false if the file already had the same content
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private boolean writeMainHeader(String target) throws IOException {
+		File f = new File(target);
+		FileCompareOutputStream stream = new FileCompareOutputStream(f);
+		String licence = TraceCompilerEngineGlobals.getDefaultLicence(true);
+		if (licence != null) {
+			stream.write(licence.getBytes());
+		}
+		stream.write(SourceUtils.createHeaderGuard(f.getName()).getBytes());
+		TraceProjectAPI api = model.getExtension(TraceProjectAPI.class);
+		if (api instanceof TraceHeaderContribution) {
+			String[] content = ((TraceHeaderContribution) api)
+					.getContribution(TraceHeaderContributionType.MAIN_HEADER_CONTENT);
+			if (content != null && content.length == 1) {
+				stream.write(content[0].getBytes());
+			}
+		}
+		return stream.writeFile();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/HeaderTemplate.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,443 @@
+/*
+* Copyright (c) 2010 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:
+*
+* Header file template definition
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+import com.nokia.tracecompiler.engine.header.TraceHeaderWriter.HeaderTemplateElementType;
+import com.nokia.tracecompiler.plugin.TraceAPIFormatter.TraceFormatType;
+import com.nokia.tracecompiler.plugin.TraceHeaderContribution.TraceHeaderContributionType;
+import com.nokia.tracecompiler.source.SymbianConstants;
+
+/**
+ * Header file template definition
+ * 
+ */
+interface HeaderTemplate {
+	
+	/**
+	 * Tag written to trace header
+	 */
+	String HEADER_COMMENT_CREATED_BY = "// Created by TraceCompiler"; //$NON-NLS-1$
+	
+	/**
+	 * Empty template
+	 */
+	Object[] EMPTY_TEMPLATE = {};
+
+	/**
+	 * Sets line count to 1
+	 */
+	Object SET_LINES_PACKED = new SetNewLineCount(1);
+
+	/**
+	 * Sets line count to 2
+	 */
+	Object SET_LINES_MIDDLE = new SetNewLineCount(2); // CodForChk_Dis_Magic
+
+	/**
+	 * Sets line count to 3
+	 */
+	Object SET_LINES_LOOSE = new SetNewLineCount(3); // CodForChk_Dis_Magic
+
+	/**
+	 * Template for empty trace macros
+	 */
+	Object[] EMPTY_TRACE_FUNCTION_EXISTS_TEMPLATE = {
+			HeaderTemplateElementType.NEW_LINE, "#define ", //$NON-NLS-1$
+			HeaderTemplateElementType.FORMATTED_TRACE };
+
+	/**
+	 * Empty trace macro template switch. This formats the trace using
+	 * TraceFormatType.EmptyPreprocessorDefinition and checks if the definition
+	 * has already been written using CheckIsTraceFormatDuplicate switch
+	 */
+	Object[] EMPTY_TRACE_FUNCTION_TEMPLATE = {
+			TraceFormatType.EMPTY_MACRO,
+			new TemplateChoice(CheckIsTraceFormatDuplicate.class,
+					EMPTY_TEMPLATE, EMPTY_TRACE_FUNCTION_EXISTS_TEMPLATE), };
+
+	/**
+	 * Template for trace activation check
+	 */
+	Object[] TRACE_FUNCTION_ACTIVATION_CHECK = {
+			"TBool retval = ", //$NON-NLS-1$
+			TraceFormatType.TRACE_ACTIVATION,
+			// Checks if the TraceActivation format exists
+			new TemplateChoice(CheckFormattedTraceExists.class, new Object[] {
+					HeaderTemplateElementType.FORMATTED_TRACE, ";", //$NON-NLS-1$
+					HeaderTemplateElementType.NEW_LINE, "if ( retval )", //$NON-NLS-1$
+					HeaderTemplateElementType.OPEN_BRACE }, new Object[] {
+					"EFalse;", HeaderTemplateElementType.NEW_LINE }), //$NON-NLS-1$
+	};
+
+	/**
+	 * Template if no activation check is needed
+	 */
+	Object[] TRACE_FUNCTION_NO_ACTIVATION_CHECK = { "TBool retval;", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE };
+
+	/**
+	 * Template for trace functions
+	 */
+	Object[] TRACE_FUNCTION_EXISTS_TEMPLATE = {
+			SET_LINES_PACKED,
+			HeaderTemplateElementType.BUILD_TRACE_BUFFER_CHECK,
+			// If the trace contains TDesC16 parameter, __KERNEL_MODE__ flag is
+			// added to it
+			new TemplateChoice(CheckIsKernelModeFlagNeeded.class, new Object[] {
+					"#ifndef __KERNEL_MODE__", //$NON-NLS-1$
+					HeaderTemplateElementType.NEW_LINE }, EMPTY_TEMPLATE),
+			"inline TBool ", //$NON-NLS-1$
+			HeaderTemplateElementType.FORMATTED_TRACE,
+			HeaderTemplateElementType.OPEN_BRACE,
+			// If the trace is buffered activation check is written
+			new TemplateChoice(CheckIsTraceBufferBuilt.class,
+					TRACE_FUNCTION_ACTIVATION_CHECK,
+					TRACE_FUNCTION_NO_ACTIVATION_CHECK),
+			HeaderTemplateElementType.TRACE_FUNCTION_BODY, // Parameters + API
+			HeaderTemplateElementType.CLOSE_EXTRA_BRACES,
+			"return retval;", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			HeaderTemplateElementType.CLOSE_BRACE,
+			// The __KERNEL_MODE__ #ifdef added above needs to be closed
+			new TemplateChoice(
+					CheckIsKernelModeEndifNeeded.class,
+					new Object[] { "#endif", HeaderTemplateElementType.NEW_LINE }, //$NON-NLS-1$
+					EMPTY_TEMPLATE), SET_LINES_LOOSE,
+			HeaderTemplateElementType.NEW_LINE };
+
+	/**
+	 * Trace function template switch. This formats the trace using
+	 * TraceFormatType.Header and checks if the definition has already been
+	 * written using TRACE_FORMAT_EXISTS_TEMPLATE_INDEX switch
+	 */
+	Object[] TRACE_FUNCTION_TEMPLATE = {
+			TraceFormatType.HEADER,
+			new TemplateChoice(CheckIsTraceFormatDuplicate.class,
+					EMPTY_TEMPLATE, TRACE_FUNCTION_EXISTS_TEMPLATE) };
+
+	/**
+	 * Template for trace ID's
+	 */
+	Object[] TRACE_ID_TEMPLATE = {
+			"#define ", //$NON-NLS-1$
+			HeaderTemplateElementType.TRACE_NAME,
+			" 0x", //$NON-NLS-1$
+			HeaderTemplateElementType.TRACE_ID_HEX,
+			HeaderTemplateElementType.NEW_LINE };
+
+	/**
+	 * Main header template
+	 */
+	Object[] HEADER_TEMPLATE = {
+			SET_LINES_PACKED,
+			HeaderTemplateElementType.LICENCE_TEXT,
+			HeaderTemplateElementType.NEW_LINE,
+			HEADER_COMMENT_CREATED_BY, " ", //$NON-NLS-1$
+			HeaderTemplateElementType.TRACE_COMPILER_VERSION,
+			HeaderTemplateElementType.NEW_LINE,
+			"// DO NOT EDIT, CHANGES WILL BE LOST", //$NON-NLS-1$
+			SET_LINES_MIDDLE,
+			HeaderTemplateElementType.NEW_LINE,
+			HeaderTemplateElementType.HEADER_GUARD,
+			HeaderTemplateElementType.NEW_LINE,
+			SET_LINES_PACKED,
+			TraceHeaderContributionType.GLOBAL_DEFINES,
+			SET_LINES_MIDDLE,
+			HeaderTemplateElementType.NEW_LINE,
+			SET_LINES_PACKED,
+			TraceHeaderContributionType.GLOBAL_INCLUDES,
+			SET_LINES_MIDDLE,
+			HeaderTemplateElementType.NEW_LINE,
+			SET_LINES_PACKED,
+			new TemplateIterator(IteratorTraces.class, TRACE_ID_TEMPLATE),
+			SET_LINES_LOOSE,
+			HeaderTemplateElementType.NEW_LINE,
+			// Trace functions
+			new TemplateIterator(IteratorComplexTraces.class,
+					TRACE_FUNCTION_TEMPLATE),
+			// End of header guard
+			SET_LINES_MIDDLE, "#endif", HeaderTemplateElementType.NEW_LINE, //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE, "// End of file", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE };
+
+	/**
+	 * Template for parameter with fixed size
+	 */
+	Object[] FIXED_PARAMETER_TEMPLATE = { "*( ( ", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_TYPE, "* )ptr ) = ", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_NAME, ";", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE, "ptr += sizeof ( ", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_TYPE, " );", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE };
+
+	/**
+	 * Template for parameter with fixed size and length check
+	 */
+	Object[] FIXED_PARAMETER_TEMPLATE_WITH_LENGTH_CHECK = {
+			"// Check that there are enough space to next parameter", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			"if ((length + sizeof ( ", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_TYPE,
+			" )) <= KOstMaxDataLength)", //$NON-NLS-1$
+			HeaderTemplateElementType.OPEN_BRACE,
+			FIXED_PARAMETER_TEMPLATE,
+			"length += sizeof ( ", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_TYPE,
+			" );", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			HeaderTemplateElementType.CLOSE_BRACE};	
+	
+	/**
+	 * Template for writing 32-bit alignment for parameters
+	 */
+	Object[] DYNAMIC_PARAMETER_ALIGNMENT_TEMPLATE = {
+			"// Fillers are written to get 32-bit alignment", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			"while ( length", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_INDEX,
+			"++ < lengthAligned", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_INDEX,
+			" )", //$NON-NLS-1$
+			HeaderTemplateElementType.OPEN_BRACE,
+			"*ptr++ = 0;", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			HeaderTemplateElementType.CLOSE_BRACE };
+
+	/**
+	 * Template for parameter with dynamic size
+	 */
+	Object[] DYNAMIC_PARAMETER_TEMPLATE = {
+			"if (length", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_INDEX,
+			" > 0)", //$NON-NLS-1$
+			HeaderTemplateElementType.OPEN_BRACE,
+			"// Number of elements is written before data", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			"// In case of Unicode string, number of elements is half of length", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			"*( ( TUint32* )ptr ) = length", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_INDEX,
+			" / (", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_NAME,
+			".Size() / ", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_NAME,
+			".Length());", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			"ptr += sizeof ( TUint32 );", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			"memcpy( ptr, ", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_NAME,
+			".Ptr(), length", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_INDEX,
+			" );", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			"ptr += length", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_INDEX,
+			";", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			new TemplateChoice(CheckParameterNeedsAlignment.class,
+					DYNAMIC_PARAMETER_ALIGNMENT_TEMPLATE, EMPTY_TEMPLATE),
+			HeaderTemplateElementType.NEW_LINE,
+			"length += sizeof ( TUint32 ) + lengthAligned", //$NON-NLS-1$
+			HeaderTemplateElementType.PARAMETER_INDEX,
+			";", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,			
+			HeaderTemplateElementType.CLOSE_BRACE,
+			"else if (length + sizeof ( TUint32 ) <= KOstMaxDataLength)",  //$NON-NLS-1$
+			HeaderTemplateElementType.OPEN_BRACE,
+			HeaderTemplateElementType.NEW_LINE,
+			"*( ( TUint32* )ptr ) = 0;",  //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			"ptr += sizeof ( TUint32 );",  //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			"length += sizeof ( TUint32 );",  //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			HeaderTemplateElementType.CLOSE_BRACE};
+
+	/**
+	 * Template to allocate the buffer for parameters if buffer size is fixed
+	 */
+	Object[] FIXED_BUFFER_ALLOCATION_TEMPLATE = { "TUint8 data[ ", //$NON-NLS-1$
+			HeaderTemplateElementType.FIXED_BUFFER_SIZE, " ];", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE, "TUint8* ptr = data;", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE};
+
+	/**
+	 * Template to allocate the buffer for parameters if buffer size is dynamic
+	 */
+	Object[] DYNAMIC_BUFFER_ALLOCATION_TEMPLATE = {
+			// KOstMaxDataLength is defined in opensystemtrace.h
+			"TUint8 data[ KOstMaxDataLength ];", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE, "TUint8* ptr = data;", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE, "// Set length to zero and calculate it againg", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE, "// when adding parameters", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE, "length = 0;", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE };
+
+	/**
+	 * Template to allocate buffer for trace data
+	 */
+	Object[] BUFFER_ALLOCATION_TEMPLATE = { new TemplateChoice(
+			CheckIsBufferSizeDynamic.class, DYNAMIC_BUFFER_ALLOCATION_TEMPLATE,
+			FIXED_BUFFER_ALLOCATION_TEMPLATE) };
+
+	/**
+	 * Template to length variable definition
+	 */
+	Object[] LENGTH_VARIABLE_DEFINITION_TEMPLATE = {	
+			"TInt length = 0;", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE };
+
+	/**
+	 * Beging template to length variable increase
+	 */
+	Object[] LENGTH_VARIABLE_INCREASE_TEMPLATE_BEGIN = {
+			"// Increase length because of fixed size parameters", //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE,
+			"length += "};	 //$NON-NLS-1$
+
+	/**
+	 * End template to length variable increase
+	 */
+	Object[] LENGTH_VARIABLE_INCREASE_TEMPLATE_END = {	
+			";",	 //$NON-NLS-1$	
+			HeaderTemplateElementType.NEW_LINE };
+	
+	/**
+	 * Template to calculate the length for a dynamic parameter
+	 */
+	Object[] DYNAMIC_PARAMETER_LENGTH_TEMPLATE = {
+	"// Check that parameter lenght is not too long", //$NON-NLS-1$
+	HeaderTemplateElementType.NEW_LINE,
+	"TInt length", //$NON-NLS-1$
+	HeaderTemplateElementType.PARAMETER_INDEX,
+	" = ", //$NON-NLS-1$
+	SymbianConstants.PARAMETER_DECLARATION_PREFIX,
+	HeaderTemplateElementType.PARAMETER_INDEX, ".Size();", //$NON-NLS-1$
+	HeaderTemplateElementType.NEW_LINE,
+		"if ((length + length", //$NON-NLS-1$
+	HeaderTemplateElementType.PARAMETER_INDEX,
+	" + sizeof ( TUint32 )) > KOstMaxDataLength)", //$NON-NLS-1$
+	HeaderTemplateElementType.OPEN_BRACE,
+	"length", //$NON-NLS-1$
+	HeaderTemplateElementType.PARAMETER_INDEX,	
+	" = KOstMaxDataLength - (length + sizeof ( TUint32 ));", //$NON-NLS-1$	
+	HeaderTemplateElementType.NEW_LINE,
+	HeaderTemplateElementType.CLOSE_BRACE,
+	HeaderTemplateElementType.NEW_LINE,
+	"TInt lengthAligned", //$NON-NLS-1$
+	HeaderTemplateElementType.PARAMETER_INDEX,
+	" = ( length", //$NON-NLS-1$
+	HeaderTemplateElementType.PARAMETER_INDEX,
+	" + 3 ) & ~3;", //$NON-NLS-1$
+	HeaderTemplateElementType.NEW_LINE,	
+	"if (lengthAligned", //$NON-NLS-1$
+	HeaderTemplateElementType.PARAMETER_INDEX,
+	" > 0)", //$NON-NLS-1$
+	HeaderTemplateElementType.OPEN_BRACE,
+	"length = length + sizeof ( TUint32 ) + lengthAligned", //$NON-NLS-1$
+	HeaderTemplateElementType.PARAMETER_INDEX,
+	";", //$NON-NLS-1$
+	HeaderTemplateElementType.NEW_LINE,
+	HeaderTemplateElementType.CLOSE_BRACE,
+	HeaderTemplateElementType.NEW_LINE };
+
+	/**
+	 * Template for the optimized single dynamic parameter case, where buffer is
+	 * not needed
+	 */
+	Object[] SINGLE_DYNAMIC_PARAMETER_TEMPLATE = {
+			"TInt size = ", //$NON-NLS-1$
+		    SymbianConstants.PARAMETER_DECLARATION_PREFIX, "1.Size();", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "// BTrace assumes that parameter size is atleast 4 bytes", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "if (size % 4 == 0)", //$NON-NLS-1$
+		    HeaderTemplateElementType.OPEN_BRACE,
+		    "TUint8* ptr = ( TUint8* )aParam1.Ptr();", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "// Data is written directly and length is determined from trace message length", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    HeaderTemplateElementType.CLOSE_BRACE,
+		    HeaderTemplateElementType.NEW_LINE,
+		    "else", //$NON-NLS-1$
+		    HeaderTemplateElementType.OPEN_BRACE,
+		    "TUint8 data[ KOstMaxDataLength ];", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "TUint8* ptr = data;", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "if (size > KOstMaxDataLength)", //$NON-NLS-1$
+		    HeaderTemplateElementType.OPEN_BRACE,
+		    "size = KOstMaxDataLength;", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    HeaderTemplateElementType.CLOSE_BRACE,
+		    HeaderTemplateElementType.NEW_LINE,
+		    "TInt sizeAligned = ( size + 3 ) & ~3;", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,		    
+		    "memcpy( ptr, ", //$NON-NLS-1$
+		    SymbianConstants.PARAMETER_DECLARATION_PREFIX, "1.Ptr(), size );", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "ptr += size;", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "// Fillers are written to get 32-bit alignment", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "while ( size++ < sizeAligned )", //$NON-NLS-1$
+		    HeaderTemplateElementType.OPEN_BRACE,
+		    "*ptr++ = 0;", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    HeaderTemplateElementType.CLOSE_BRACE,
+			HeaderTemplateElementType.NEW_LINE,
+		    "ptr -= sizeAligned;", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "size = sizeAligned;", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "// Data is written directly and length is determined from trace message length", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    "retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );", //$NON-NLS-1$
+		    HeaderTemplateElementType.NEW_LINE,
+		    HeaderTemplateElementType.CLOSE_BRACE,
+			HeaderTemplateElementType.NEW_LINE};
+
+	/**
+	 * Template for buffered parameters
+	 */
+	Object[] BUFFERED_PARAMETERS_TEMPLATE = { HeaderTemplateElementType.TRACE_FUNCTION_PARAMETERS };
+
+	/**
+	 * Template when the trace buffer needs to be allocated
+	 */
+	Object[] BUILD_TRACE_BUFFER_TEMPLATE = {
+			new TemplateIterator(IteratorParameters.class,
+					BUFFERED_PARAMETERS_TEMPLATE),
+			"ptr -= ", //$NON-NLS-1$
+			new TemplateChoice(CheckIsBufferSizeDynamic.class,
+					new Object[] { "length;" }, new Object[] { //$NON-NLS-1$
+					HeaderTemplateElementType.FIXED_BUFFER_SIZE, ";" }), //$NON-NLS-1$
+			HeaderTemplateElementType.NEW_LINE };
+
+	/**
+	 * Template for trace parameters.
+	 */
+	Object[] PARAMETERS_TEMPLATE = { new TemplateChoice(
+			CheckIsTraceBufferBuilt.class, BUILD_TRACE_BUFFER_TEMPLATE,
+			SINGLE_DYNAMIC_PARAMETER_TEMPLATE) };
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/IteratorComplexTraces.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Iterator for complex traces
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+import java.io.IOException;
+
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceGroup;
+import com.nokia.tracecompiler.model.TraceModel;
+
+/**
+ * Iterator for complex traces
+ * 
+ */
+public final class IteratorComplexTraces extends TemplateIteratorEntry {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.TemplateIteratorEntry#
+	 *      iterate(java.lang.Object[])
+	 */
+	@Override
+	void iterate(Object[] template) throws IOException {
+		TraceModel model = writer.getHeader().getOwner().getModel();
+		for (TraceGroup group : model) {
+			for (Trace trace : group) {
+				ComplexHeaderRule rule = trace
+						.getExtension(ComplexHeaderRule.class);
+				if (rule != null && rule.needsFunction()) {
+					if (writer.startTrace(trace)) {
+						writer.writeTemplate(template);
+					}
+				}
+			}
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/IteratorParameters.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Parameter iterator
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.model.TraceParameter;
+
+/**
+ * Parameter iterator
+ * 
+ */
+public final class IteratorParameters extends TemplateIteratorEntry {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.TemplateIteratorEntry#iterate()
+	 */
+	@Override
+	public void iterate(Object[] template) throws IOException {
+		Iterator<TraceParameter> itr = writer.getCurrentTrace().getParameters();
+		while (itr.hasNext()) {
+			writer.startParameter(itr.next());
+			writer.writeTemplate(template);
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/IteratorTraces.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Iterator for all traces
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+import java.io.IOException;
+
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceGroup;
+import com.nokia.tracecompiler.model.TraceModel;
+
+/**
+ * Iterator for all traces
+ * 
+ */
+public final class IteratorTraces extends TemplateIteratorEntry {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.TemplateIteratorEntry#
+	 *      iterate(java.lang.Object[])
+	 */
+	@Override
+	void iterate(Object[] template) throws IOException {
+		TraceModel model = writer.getHeader().getOwner().getModel();
+		for (TraceGroup group : model) {
+			for (Trace trace : group) {
+				if (writer.startTrace(trace)) {
+					writer.writeTemplate(template);
+				}
+			}
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/Messages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Localization for header package
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Localization for header package
+ * 
+ */
+class Messages {
+
+	/**
+	 * Bundle name
+	 */
+	private static final String BUNDLE_NAME = "com.nokia.tracecompiler.engine.header.messages"; //$NON-NLS-1$
+
+	/**
+	 * Bundle
+	 */
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Prevents construction
+	 */
+	private Messages() {
+	}
+
+	/**
+	 * Gets localized string based on key
+	 * 
+	 * @param key
+	 *            the resource key
+	 * @return the localized resource
+	 */
+	public static String getString(String key) {
+		String value;
+		try {
+			value = RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			value = '!' + key + '!';
+		}
+		return value;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/SetNewLineCount.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Changes the new line count
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+/**
+ * Changes the new line count
+ * 
+ */
+public final class SetNewLineCount {
+
+	/**
+	 * Line feed count
+	 */
+	private int count;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param count
+	 *            the line feed count
+	 */
+	SetNewLineCount(int count) {
+		this.count = count;
+	}
+
+	/**
+	 * Gets the count
+	 * 
+	 * @return the count
+	 */
+	final int getLineCount() {
+		return count;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TemplateCheckBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Template iterator
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+/**
+ * Check function for TemplateChoice
+ * 
+ */
+abstract class TemplateCheckBase {
+
+	/**
+	 * Header writer
+	 */
+	protected TraceHeaderWriter writer;
+
+	/**
+	 * Sets the writer
+	 * 
+	 * @param writer
+	 *            the writer to set
+	 */
+	final void setWriter(TraceHeaderWriter writer) {
+		this.writer = writer;
+	}
+
+	/**
+	 * Runs the check
+	 * 
+	 * @return the result
+	 */
+	abstract boolean check();
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TemplateChoice.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Template iterator
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+/**
+ * If-check in template
+ * 
+ */
+class TemplateChoice {
+
+	/**
+	 * Templates to be used if check is true
+	 */
+	private Object[] templateTrue;
+
+	/**
+	 * Templates to be used if check is false
+	 */
+	private Object[] templateFalse;
+
+	/**
+	 * Choice class
+	 */
+	private Class<? extends TemplateCheckBase> choiceClass;
+
+	/**
+	 * Constructors
+	 * 
+	 * @param choiceClass
+	 *            the class which does the check
+	 * @param templateTrue
+	 *            the template to be used if check is true
+	 * @param templateFalse
+	 *            the template to be used if check is false
+	 */
+	TemplateChoice(Class<? extends TemplateCheckBase> choiceClass,
+			Object[] templateTrue, Object[] templateFalse) {
+		this.choiceClass = choiceClass;
+		this.templateTrue = templateTrue;
+		this.templateFalse = templateFalse;
+	}
+
+	/**
+	 * Gets the choice class
+	 * 
+	 * @return the class
+	 */
+	Class<? extends TemplateCheckBase> getChoiceClass() {
+		return choiceClass;
+	}
+
+	/**
+	 * Gets the template if choice returns true
+	 * 
+	 * @return the template
+	 */
+	Object[] getTrueTemplate() {
+		return templateTrue;
+	}
+
+	/**
+	 * Gets the template if choice returns false
+	 * 
+	 * @return the template
+	 */
+	Object[] getFalseTemplate() {
+		return templateFalse;
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TemplateIterator.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Template iterator
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+/**
+ * Template iterator
+ * 
+ */
+final class TemplateIterator {
+
+	/**
+	 * Iterator class
+	 */
+	private Class<? extends TemplateIteratorEntry> iteratorClass;
+
+	/**
+	 * Template to be run by the iterator
+	 */
+	private Object[] template;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iteratorClass
+	 *            the iterator class
+	 * @param template
+	 *            the template
+	 */
+	TemplateIterator(Class<? extends TemplateIteratorEntry> iteratorClass,
+			Object[] template) {
+		this.iteratorClass = iteratorClass;
+		this.template = template;
+	}
+
+	/**
+	 * Gets the iterator class
+	 * 
+	 * @return the class
+	 */
+	final Class<? extends TemplateIteratorEntry> getIteratorClass() {
+		return iteratorClass;
+	}
+
+	/**
+	 * Gets the template
+	 * 
+	 * @return the template
+	 */
+	final Object[] getTemplate() {
+		return template;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TemplateIteratorEntry.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Iterator base class
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+import java.io.IOException;
+
+/**
+ * Iterator base class
+ * 
+ */
+abstract class TemplateIteratorEntry {
+
+	/**
+	 * Header writer
+	 */
+	protected TraceHeaderWriter writer;
+
+	/**
+	 * Sets the writer
+	 * 
+	 * @param writer
+	 *            the writer to set
+	 */
+	final void setWriter(TraceHeaderWriter writer) {
+		this.writer = writer;
+	}
+
+	/**
+	 * Runs the iterator on given template
+	 * 
+	 * @param template
+	 *            the template
+	 * @throws IOException
+	 *             if operation fails
+	 */
+	abstract void iterate(Object[] template) throws IOException;
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TraceHeader.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Representation of a header file that gets included into sources
+*
+*/
+package com.nokia.tracecompiler.engine.header;
+
+import com.nokia.tracecompiler.project.TraceProjectFile;
+
+/**
+ * Representation of a header file that gets included into sources when traces
+ * are added.
+ * 
+ */
+final class TraceHeader extends TraceProjectFile {
+
+	/**
+	 * Title shown in UI
+	 */
+	private static final String TITLE = Messages.getString("TraceHeader.Title"); //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 * 
+	 * @param target
+	 *            target path
+	 * @param hasModelName
+	 *            true if model name should be used with the file
+	 */
+	TraceHeader(String target, boolean hasModelName) {
+		super(target, hasModelName);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectFile#getFileExtension()
+	 */
+	@Override
+	protected String getFileExtension() {
+		String retval;
+		if (hasModelName) {
+			retval = HeaderConstants.TRACE_HEADER_EXTENSION;
+		} else {
+			retval = ""; //$NON-NLS-1$
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectFile#getTitle()
+	 */
+	@Override
+	public String getTitle() {
+		return TITLE;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/TraceHeaderWriter.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,1401 @@
+/*
+ * Copyright (c) 2009-2010 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:
+ *
+ * Writes the TraceHeader to a file
+ *
+ */
+package com.nokia.tracecompiler.engine.header;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.nokia.tracecompiler.TraceCompilerLogger;
+import com.nokia.tracecompiler.engine.LocationListBase;
+import com.nokia.tracecompiler.engine.LocationProperties;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceLocation;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.source.SourceFormatter;
+import com.nokia.tracecompiler.engine.source.TraceFormattingRule;
+import com.nokia.tracecompiler.engine.source.TraceParameterFormattingRule;
+import com.nokia.tracecompiler.file.FileCompareOutputStream;
+import com.nokia.tracecompiler.file.FileUtils;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceGroup;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.plugin.TraceFormatConstants;
+import com.nokia.tracecompiler.plugin.TraceHeaderContribution;
+import com.nokia.tracecompiler.plugin.TraceAPIFormatter.TraceFormatType;
+import com.nokia.tracecompiler.plugin.TraceHeaderContribution.TraceHeaderContributionType;
+import com.nokia.tracecompiler.rules.FillerParameterRule;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceExcludedArea;
+import com.nokia.tracecompiler.source.SourceParser;
+import com.nokia.tracecompiler.source.SourceUtils;
+import com.nokia.tracecompiler.source.SymbianConstants;
+import com.nokia.tracecompiler.utils.TraceCompilerVersion;
+
+/**
+ * Writes the TraceHeader to a file
+ * 
+ */
+final class TraceHeaderWriter {
+
+	/**
+	 * return type text of a generated OstTraceGenx function.
+	 */
+	private static final String INLINE_TBOOL = "inline TBool";
+
+	/**
+	 * open bracket in a type cast
+	 */
+	private static final String BEGINCAST = "OBR"; //$NON-NLS-1$
+	
+	/**
+	 * closing bracket in a type cast
+	 */
+	private static final String ENDCAST = "CBR"; //$NON-NLS-1$
+
+	/**
+	 * REF replaces & in a function guard
+	 */
+	private static final String REF = "REF"; //$NON-NLS-1$
+
+	/**
+	 * & character
+	 */
+	private static final String AMPERSANT = "&"; //$NON-NLS-1$
+
+	/**
+	 * closing bracket
+	 */
+	private static final String CLOSING_BRACKET = ")"; //$NON-NLS-1$
+
+	/**
+	 * open bracket
+	 */
+	private static final String OPEN_BRACKET = "("; //$NON-NLS-1$
+
+	/**
+	 * TUint32 definition
+	 */
+	private static final String TUINT32_DEF = "TUint32 "; //$NON-NLS-1$
+
+	/**
+	 * TInt32 definition
+	 */
+	private static final String TINT32_DEF = "TInt32 "; //$NON-NLS-1$
+
+	/**
+	 * TUint definition
+	 */
+	private static final String TUINT_DEF = "TUint "; //$NON-NLS-1$
+
+	/**
+	 * TInt definition
+	 */
+	private static final String TINT_DEF = "TInt "; //$NON-NLS-1$
+
+	/**
+	 * Length variable defined flag
+	 */
+	private boolean lenghtVariableDefined = false;
+	
+	
+	/**
+	 * List of dynamic elements that can be used from the templates
+	 * 
+	 */
+	enum HeaderTemplateElementType {
+
+		/**
+		 * Licence text
+		 */
+		LICENCE_TEXT,
+		
+		/**
+		 * TraceCompiler version number
+		 */
+		TRACE_COMPILER_VERSION,
+
+		/**
+		 * Header guard based on file name
+		 */
+		HEADER_GUARD,
+
+		/**
+		 * Opening brace
+		 */
+		OPEN_BRACE,
+
+		/**
+		 * Closing brace
+		 */
+		CLOSE_BRACE,
+
+		/**
+		 * New line and indent based on open brace count
+		 */
+		NEW_LINE,
+
+		/**
+		 * Writes currentTraceFormatted
+		 */
+		FORMATTED_TRACE,
+
+		/**
+		 * Adds all closing braces except the one that closes the function
+		 */
+		CLOSE_EXTRA_BRACES,
+
+		/**
+		 * Type of current parameter
+		 */
+		PARAMETER_TYPE,
+
+		/**
+		 * Name of current parameter
+		 */
+		PARAMETER_NAME,
+
+		/**
+		 * Name of current trace
+		 */
+		TRACE_NAME,
+
+		/**
+		 * ID of current trace
+		 */
+		TRACE_ID_HEX,
+
+		/**
+		 * Calls a function to add the trace buffer initialization code
+		 */
+		BUILD_TRACE_BUFFER_CHECK,
+
+		/**
+		 * Calls a function to add the function body
+		 */
+		TRACE_FUNCTION_BODY,
+
+		/**
+		 * Calls a function to add function parameters
+		 */
+		TRACE_FUNCTION_PARAMETERS,
+
+		/**
+		 * Writes the fixedBufferSize member variable
+		 */
+		FIXED_BUFFER_SIZE,
+
+		/**
+		 * Writes the dynamicBufferSize member variable
+		 */
+		DYNAMIC_BUFFER_SIZE,
+
+		/**
+		 * Index of the parameter being processed
+		 */
+		PARAMETER_INDEX
+	}
+
+	/**
+	 * Group ID shift bits
+	 */
+	private static final int GROUP_SHIFT = 16; // CodForChk_Dis_Magic
+
+	/**
+	 * Number of bytes in parameter
+	 */
+	private static final int BYTES_IN_PARAMETER = 4; // CodForChk_Dis_Magic
+
+	/**
+	 * Indent
+	 */
+	private static final String INDENT = "    "; //$NON-NLS-1$
+
+	/**
+	 * The header file to be updated
+	 */
+	private TraceHeader header;
+
+	/**
+	 * Output stream for the header
+	 */
+	private OutputStream headerOutput;
+
+	/**
+	 * Temporary flag that specifies if a trace requires a trace buffer or it
+	 * can be represented by the default trace macros
+	 */
+	private boolean buildTraceBuffer;
+
+	/**
+	 * Temporary variable for fixed size
+	 */
+	private int fixedBufferSize;
+
+	/**
+	 * Dynamic size flag
+	 */
+	private boolean dynamicBufferSizeFlag;
+
+	/**
+	 * Flag which is set it trace needs #endif for __KERNEL_MODE__
+	 */
+	private boolean needsKernelEndif;
+
+	/**
+	 * Used via HeaderTemplateElementType.FORMATTED_TRACE
+	 */
+	private String currentTraceFormatted;
+
+	/**
+	 * Type of current parameter
+	 */
+	private String currentParameterType;
+
+	/**
+	 * Name of current parameter
+	 */
+	private String currentParameterName;
+
+	/**
+	 * Index of current parameter
+	 */
+	private int currentParameterIndex;
+
+	/**
+	 * Number of opened brackets
+	 */
+	private int openBraceCount;
+
+	/**
+	 * Trace being processed
+	 */
+	private Trace currentTrace;
+
+	/**
+	 * Parameter being processed
+	 */
+	private TraceParameter currentParameter;
+
+	/**
+	 * List of trace functions already in the header
+	 */
+	private ArrayList<String> traceDeclarations = new ArrayList<String>();
+
+	/**
+	 * Number of sequential new lines
+	 */
+	private int newLineCount;
+
+	/**
+	 * Number of allowed sequential new lines
+	 */
+	private int maxNewLines;
+
+	/**
+	 * Indicates that writing a function to the header file is going
+	 */
+	private boolean firstOpenBraceFound;
+	
+	/**
+	 * boolean indication that we are buffering a function text
+	 */
+	private boolean bufferingFunction;
+
+	/**
+	 * While writing a function to the header file, it's gathered to this
+	 * member. The member is then checked if the function parameters contain
+	 * TInt or TUint values. If so, the function is replicated so that TInt is
+	 * replaced by TInt32 and TUint with TUint32.
+	 */
+	private StringBuilder functionText = new StringBuilder();
+
+	/**
+	 * Number of brackets seen when writing a function. When it gets to 0, the
+	 * function in previousFunction variable is complete and can be written.
+	 */
+	private int numberOfBrackets;
+		
+	/**
+	 * string to hold the function guard
+	 */
+	private String ostTraceGenxFunGuard;
+
+	/**
+	 * Creates a new header writer
+	 * 
+	 * @param header
+	 *            the header to be written
+	 */
+	TraceHeaderWriter(TraceHeader header) {
+		this.header = header;
+	}
+
+	/**
+	 * Writes the header
+	 * 
+	 * @return true if header was written, false if it matched the existing
+	 *         header
+	 * @throws TraceCompilerException
+	 *             if writing fails
+	 */
+	boolean write() throws TraceCompilerException {
+		boolean headerWritten = false;
+		try {
+			openBraceCount = 0;
+			createHeader();
+			writeTemplate(HeaderTemplate.HEADER_TEMPLATE);
+			headerWritten = closeHeader();
+		} catch (IOException e) {
+			e.printStackTrace();
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.CANNOT_WRITE_PROJECT_FILE, e);
+		} finally {
+			traceDeclarations.clear();
+			if (headerOutput != null) {
+				try {
+					headerOutput.close();
+				} catch (IOException e) {
+				}
+			}
+			headerOutput = null;
+		}
+		return headerWritten;
+	}
+
+	/**
+	 * Creates the header file
+	 * 
+	 * @throws IOException
+	 *             if creation fails
+	 */
+	private void createHeader() throws IOException {
+		File file = new File(header.getAbsolutePath());
+		if (file.exists()) {
+			// If header exists, data is written to a byte array and compared
+			// with existing file. If they are the same, the file is not
+			// updated.
+			headerOutput = new FileCompareOutputStream(file);
+		} else {
+			// If header does not exist, the data is written directly to file
+			headerOutput = FileUtils.createOutputStream(file);
+		}
+	}
+
+	/**
+	 * Closes the header file. If data was written to a byte buffer this
+	 * compares the contents of the buffer with the existing file and re-writes
+	 * the file if contents do not match.
+	 * 
+	 * @return true if header was written, false if it matched the existing
+	 *         header
+	 * @throws IOException
+	 *             if closing fails
+	 */
+	private boolean closeHeader() throws IOException {
+		boolean headerWritten = true;
+		if (headerOutput instanceof FileCompareOutputStream) {
+			headerWritten = ((FileCompareOutputStream) headerOutput)
+					.writeFile();
+		}
+		headerOutput.close();
+		headerOutput = null;
+		return headerWritten;
+	}
+
+	/**
+	 * Writes a template to the stream
+	 * 
+	 * @param template
+	 *            the template
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	void writeTemplate(Object[] template) throws IOException {
+		for (Object o : template) {
+			if (o instanceof String) {
+				write((String) o);
+			} else if (o instanceof TraceHeaderContributionType) {
+				writeHeaderContributions((TraceHeaderContributionType) o);
+			} else if (o instanceof HeaderTemplateElementType) {
+				writeTemplateElement((HeaderTemplateElementType) o);
+			} else if (o instanceof Object[]) {
+				// Template within template
+				writeTemplate((Object[]) o);
+			} else if (o instanceof TemplateChoice) {
+				TemplateChoice choice = (TemplateChoice) o;
+				// Gets the array index from template
+				Class<? extends TemplateCheckBase> c = choice.getChoiceClass();
+				try {
+					// Creates a switch-case object based on array index
+					TemplateCheckBase check = c.newInstance();
+					check.setWriter(this);
+					// Gets the case from the switch-case object and uses it to
+					// get the correct template
+					if (check.check()) {
+						writeTemplate(choice.getTrueTemplate());
+					} else {
+						writeTemplate(choice.getFalseTemplate());
+					}
+				} catch (InstantiationException e) {
+				} catch (IllegalAccessException e) {
+				}
+			} else if (o instanceof TemplateIterator) {
+				Class<? extends TemplateIteratorEntry> c = ((TemplateIterator) o)
+						.getIteratorClass();
+				try {
+					// Creates an iterator object based on array index
+					TemplateIteratorEntry itr = c.newInstance();
+					itr.setWriter(this);
+					itr.iterate(((TemplateIterator) o).getTemplate());
+				} catch (InstantiationException e) {
+				} catch (IllegalAccessException e) {
+				}
+			} else if (o instanceof SetNewLineCount) {
+				maxNewLines = ((SetNewLineCount) o).getLineCount();
+			} else if (o instanceof TraceFormatType) {
+				// Stores the formatted trace, but does not write anything
+				// HeaderTemplateElementType.FORMATTED_TRACE writes the trace
+				currentTraceFormatted = SourceFormatter.formatTrace(
+						currentTrace, (TraceFormatType) o);
+			}
+		}
+	}
+
+	/**
+	 * Writes an element from the HeaderTemplateElementType enumeration
+	 * 
+	 * @param type
+	 *            the element type
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeTemplateElement(HeaderTemplateElementType type)
+			throws IOException { // CodForChk_Dis_ComplexFunc
+		switch (type) {
+		case NEW_LINE:
+			writeNewLine();
+			break;
+		case OPEN_BRACE:
+			writeOpenBrace();
+			break;
+		case CLOSE_BRACE:
+			writeCloseBrace();
+			break;
+		case PARAMETER_INDEX:
+			write(String.valueOf(currentParameterIndex));
+			break;
+		case PARAMETER_TYPE:
+			write(currentParameterType);
+			break;
+		case PARAMETER_NAME:
+			write(currentParameterName);
+			break;
+		case FORMATTED_TRACE:
+			writeFormattedTrace(currentTraceFormatted);
+			break;
+		case TRACE_NAME:
+			write(currentTrace.getName());
+			break;
+		case TRACE_ID_HEX:
+			writeTraceID();
+			break;
+		case FIXED_BUFFER_SIZE:
+			write(String.valueOf(fixedBufferSize));
+			break;
+		case TRACE_FUNCTION_BODY:
+			writeFunctionBody(currentTrace);
+			break;
+		case TRACE_FUNCTION_PARAMETERS:
+			writeParameter(currentParameter);
+			break;
+		case BUILD_TRACE_BUFFER_CHECK:
+			buildTraceBuffer = traceNeedsBuffer(currentTrace);
+			break;
+		case HEADER_GUARD:
+			write(SourceUtils.createHeaderGuard(header.getFileName()));
+			break;
+		case TRACE_COMPILER_VERSION:
+			write(TraceCompilerVersion.getVersion());
+			break;
+		case CLOSE_EXTRA_BRACES:
+			while (openBraceCount > 1) {
+				writeCloseBrace();
+			}
+			break;
+		case LICENCE_TEXT:
+		    writeLicence();
+		    break;
+		}
+	}
+
+	/**
+	 * Writes the trace ID to header
+	 * 
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeTraceID() throws IOException {
+		int gid = currentTrace.getGroup().getID() << GROUP_SHIFT;
+		write(Integer.toHexString(gid | currentTrace.getID()));
+		ComplexHeaderRule rule = currentTrace
+				.getExtension(ComplexHeaderRule.class);
+		if (rule != null) {
+			String ext = rule.getTraceIDDefineExtension();
+			if (ext != null) {
+				write(ext);
+			}
+		}
+	}
+
+	/**
+	 * Writes the header contributions from plug-in's
+	 * 
+	 * @param type
+	 *            the contribution type
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeHeaderContributions(TraceHeaderContributionType type)
+			throws IOException {
+		Iterator<String> contributions = getContributions(type);
+		boolean written = false;
+		while (contributions.hasNext()) {
+			writeContribution(contributions.next(), type);
+			written = true;
+		}
+		if (written) {
+			writeNewLine();
+		}
+	}
+
+	/**
+	 * Gets a list of contributions from plug-in's
+	 * 
+	 * @param type
+	 *            the contribution type
+	 * @return the contributions
+	 */
+	private Iterator<String> getContributions(TraceHeaderContributionType type) {
+		Iterator<TraceHeaderContribution> contributions = header.getOwner()
+				.getExtensions(TraceHeaderContribution.class);
+		ArrayList<String> list = new ArrayList<String>();
+		while (contributions.hasNext()) {
+			String[] s = contributions.next().getContribution(type);
+			if (s != null) {
+				for (String element : s) {
+					list.add(element);
+				}
+			}
+		}
+		return list.iterator();
+	}
+
+	/**
+	 * Writes a contribution to the stream
+	 * 
+	 * @param contribution
+	 *            the contribution
+	 * @param type
+	 *            the contribution type
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeContribution(String contribution,
+			TraceHeaderContributionType type) throws IOException {
+		switch (type) {
+		case GLOBAL_DEFINES:
+			writeDefine(contribution);
+			break;
+		case GLOBAL_INCLUDES:
+			writeSystemInclude(contribution);
+			break;
+		case MAIN_HEADER_CONTENT:
+			// Handled by HeaderEngine
+			break;
+		}
+	}
+	
+	/**
+	 * write start of function guard
+	 * @throws IOException
+	 */
+	private void writeStartFunctionGuard() throws IOException {
+		Pattern p = Pattern.compile("inline\\s+TBool\\s+([^\\(]+)\\s*\\((.*)\\)\\s*\\{"); //$NON-NLS-1$
+		String guard = null;
+		String functionName = null;
+		
+		// Get the function definition line
+		int startIndex = functionText.indexOf(SourceConstants.OPENING_BRACE) + 1;
+		String funcDef = functionText.substring(0, startIndex);
+		
+		Matcher m = p.matcher(funcDef);
+		if (m.matches()) {
+			//get function name
+			functionName = m.group(1);
+			if (functionName == null || functionName.length() == 0) {
+				throw new IOException(Messages.getString("TraceHeader.internalError1")); //$NON-NLS-1$
+			}
+			//get raw parameters
+			String parameters = m.group(2);
+			if (parameters == null || parameters.length() == 0) {//there must be at least TraceID
+				throw new IOException(Messages.getString("TraceHeader.internalError2")); //$NON-NLS-1$
+			}
+			
+			functionName = functionName.trim();
+			parameters = parameters.trim();
+			//remove parameters names
+			guard = parameters.replaceAll("(\\S+,)|(\\S+\\s*$)", ""); //$NON-NLS-1$ //$NON-NLS-2$
+			//replace repeated spaces by one space
+			guard = guard.replaceAll("\\s+", SourceConstants.SPACE).trim(); //$NON-NLS-1$
+			//replace space by underscore
+			guard = guard.replace(SourceConstants.SPACE, SourceConstants.UNDERSCORE);
+			//replace ampersant by REF
+			guard = guard.replace(AMPERSANT, REF);
+			//replace ( by OBR
+			guard = guard.replace(OPEN_BRACKET, BEGINCAST);
+			//replace ) by CBR
+			guard = guard.replace(CLOSING_BRACKET, ENDCAST);
+		} else {
+			throw new IOException(Messages.getString("TraceHeader.internalError3")); //$NON-NLS-1$
+		}
+		
+		guard = SourceConstants.DOUBLE_UNDERSCORE 
+				+ functionName.toUpperCase()
+				+ SourceConstants.UNDERSCORE
+				+ guard.toUpperCase()
+				+ SourceConstants.DOUBLE_UNDERSCORE;
+		
+		ostTraceGenxFunGuard = guard;
+		write( SourceConstants.IFNDEF + SourceConstants.SPACE_CHAR + ostTraceGenxFunGuard);
+		write(SourceConstants.LINE_FEED);
+		write( SourceConstants.DEFINE +SourceConstants.SPACE_CHAR + ostTraceGenxFunGuard);
+		write(SourceConstants.LINE_FEED);
+		write(SourceConstants.LINE_FEED);
+	}
+
+	/**
+	 * write end of function guard
+	 * @throws IOException
+	 */
+	private void writeEndFunctionGuard() throws IOException {
+		if (ostTraceGenxFunGuard != null) {
+			write(SourceConstants.LINE_FEED);
+			write(SourceConstants.LINE_FEED);
+			write(SourceConstants.ENDIF 
+					+ SourceConstants.SPACE_CHAR
+					+ SourceConstants.FORWARD_SLASH_CHAR
+					+ SourceConstants.FORWARD_SLASH_CHAR
+					+ SourceConstants.SPACE_CHAR
+					+ ostTraceGenxFunGuard);
+			write(SourceConstants.LINE_FEED);
+		}
+	}
+	/**
+	 * Writes the function body to the stream
+	 * 
+	 * @param trace
+	 *            the trace to be written
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeFunctionBody(Trace trace) throws IOException {
+		writeTraceBufferAllocation(trace);
+		writeTemplate(HeaderTemplate.PARAMETERS_TEMPLATE);
+		// If buffer is not used (single descriptor parameter), trace line is
+		// already written in template
+		if (isTraceBufferBuilt()) {
+			writeTraceLine(trace);
+		}
+	}
+
+	/**
+	 * Writes trace buffer allocation code to the function
+	 * 
+	 * @param trace
+	 *            the trace to be written
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeTraceBufferAllocation(Trace trace) throws IOException {
+		// If buffer is not used (single descriptor parameter), this function
+		// does nothing
+		if (isTraceBufferBuilt()) {
+			Iterator<TraceParameter> parameters = trace.getParameters();
+			lenghtVariableDefined = false;
+			int fixedSizeParametersTotalSize = 0;
+			while (parameters.hasNext()) {
+				TraceParameter parameter = parameters.next();
+				TraceParameterFormattingRule sourceRule = parameter
+						.getExtension(TraceParameterFormattingRule.class);
+				if (sourceRule == null || sourceRule.isShownInSource()
+						|| sourceRule instanceof FillerParameterRule) {
+					// Fillers do not increment parameter index
+					if (!(sourceRule instanceof FillerParameterRule)) {
+						currentParameterIndex++;
+					}
+					int paramSize = SourceUtils
+							.mapParameterTypeToSize(parameter);
+					// calculateParameterSize returns 0 for dynamic parameters,
+					// but 4 extra bytes need to be reserved for the length
+					if (paramSize == 0) {
+						paramSize = BYTES_IN_PARAMETER;
+					}
+					fixedBufferSize += paramSize;
+					fixedSizeParametersTotalSize += paramSize;
+					if (SourceUtils.isParameterSizeDynamic(parameter)) {
+
+						// Define length variable only once
+						if (lenghtVariableDefined == false) {
+							writeTemplate(HeaderTemplate.LENGTH_VARIABLE_DEFINITION_TEMPLATE);
+							lenghtVariableDefined = true;
+						}
+
+						// Increase length variable if needed
+						// This is needed in case that there has been fixed size
+						// parameter
+						// before dynamic parameter
+						if (fixedSizeParametersTotalSize - paramSize > 0) {
+							fixedSizeParametersTotalSize -= paramSize;
+							writeTemplate(HeaderTemplate.LENGTH_VARIABLE_INCREASE_TEMPLATE_BEGIN);
+							write(String.valueOf(fixedSizeParametersTotalSize));
+							writeTemplate(HeaderTemplate.LENGTH_VARIABLE_INCREASE_TEMPLATE_END);
+						}
+
+						fixedSizeParametersTotalSize = 0;
+
+						writeTemplate(HeaderTemplate.DYNAMIC_PARAMETER_LENGTH_TEMPLATE);
+						dynamicBufferSizeFlag = true;
+					}
+				}
+			}
+			writeTemplate(HeaderTemplate.BUFFER_ALLOCATION_TEMPLATE);
+			currentParameterIndex = 0;
+		}
+	}
+
+	/**
+	 * Writes the given parameter to the header
+	 * 
+	 * @param parameter
+	 *            the parameter
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	void writeParameter(TraceParameter parameter) throws IOException {
+		TraceParameterFormattingRule sourceRule = parameter
+				.getExtension(TraceParameterFormattingRule.class);
+		if (sourceRule == null || sourceRule.isShownInSource()
+				|| sourceRule instanceof FillerParameterRule) {
+			String paramType = SourceUtils
+					.mapParameterTypeToSymbianType(parameter);
+			if (SourceUtils.isParameterSizeDynamic(parameter)) {
+				currentParameterIndex++;
+				currentParameterName = SymbianConstants.PARAMETER_DECLARATION_PREFIX
+						+ currentParameterIndex;
+				writeTemplate(HeaderTemplate.DYNAMIC_PARAMETER_TEMPLATE);
+			} else {
+				currentParameterType = paramType;
+				if (sourceRule instanceof FillerParameterRule) {
+					currentParameterName = "0"; //$NON-NLS-1$
+					writeTemplate(HeaderTemplate.FIXED_PARAMETER_TEMPLATE);
+				} else {
+					currentParameterIndex++;
+					currentParameterName = SymbianConstants.PARAMETER_DECLARATION_PREFIX
+							+ currentParameterIndex;
+					if (lenghtVariableDefined == true) {
+						writeTemplate(HeaderTemplate.FIXED_PARAMETER_TEMPLATE_WITH_LENGTH_CHECK);
+					} else {
+						writeTemplate(HeaderTemplate.FIXED_PARAMETER_TEMPLATE);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Writes the trace line to the function
+	 * 
+	 * @param trace
+	 *            the trace to be written
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeTraceLine(Trace trace) throws IOException {
+		StringBuffer sb;
+		StringBuffer bufferData = new StringBuffer();
+		StringBuffer lengthData = new StringBuffer();
+		if (isBufferSizeDynamic()) {
+			sb = writeBufferedTraceLine(trace, bufferData, lengthData);
+		} else {
+			// If buffer size is 4, the buffer can be traced using the
+			// the 32-bit parameter trace macro instead of data macro
+			if (fixedBufferSize / BYTES_IN_PARAMETER == 1) {
+				sb = writePackedTraceLine(trace, bufferData);
+			} else {
+				sb = writeBufferedTraceLine(trace, bufferData, lengthData);
+			}
+		}
+		int index = sb.indexOf(TraceFormatConstants.DATA_BUFFER_FORMAT);
+		if (index >= 0) {
+			sb.replace(index, index
+					+ TraceFormatConstants.DATA_BUFFER_FORMAT.length(),
+					bufferData.toString());
+		}
+		index = sb.indexOf(TraceFormatConstants.DATA_LENGTH_FORMAT);
+		if (index >= 0) {
+			sb.replace(index, index
+					+ TraceFormatConstants.DATA_LENGTH_FORMAT.length(),
+					lengthData.toString());
+		}
+		String s = sb.toString();
+		write("retval = "); //$NON-NLS-1$
+		writeFormattedTrace(s);
+		writeNewLine();
+	}
+
+	/**
+	 * Writes a trace line when the parameters can be fitted into a direct API
+	 * call
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @param bufferData
+	 *            the buffer
+	 * @return formatted trace
+	 */
+	private StringBuffer writePackedTraceLine(Trace trace,
+			StringBuffer bufferData) {
+		StringBuffer sb;
+		// The formatting rule is used to get the API macro
+		sb = new StringBuffer(SourceFormatter.formatTrace(trace,
+				TraceFormatType.TRACE_PACKED));
+		TraceFormattingRule rule = trace
+				.getExtension(TraceFormattingRule.class);
+		if (rule == null) {
+			rule = trace.getModel().getExtension(TraceFormattingRule.class);
+		}
+		int index = sb.indexOf(TraceFormatConstants.PARAM_COUNT_FORMAT);
+		if (index >= 0) {
+			// Single parameter is supported
+			sb.replace(index, index
+					+ TraceFormatConstants.PARAM_COUNT_FORMAT.length(), rule
+					.mapParameterCountToSource(trace, 1));
+		}
+		bufferData.append("*( ( TUint32* )ptr )"); //$NON-NLS-1$
+		return sb;
+	}
+
+	/**
+	 * Writes a trace line when the trace contains more data that the API
+	 * supports
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @param bufferData
+	 *            the trace buffer
+	 * @param lengthData
+	 *            the trace length buffer
+	 * @return the formatted trace
+	 */
+	private StringBuffer writeBufferedTraceLine(Trace trace,
+			StringBuffer bufferData, StringBuffer lengthData) {
+		StringBuffer sb;
+		// Buffer parameter
+		// *( ( TUint32* )ptr ), *( ( TUint32* )( ptr + 4 ) ), ..., ptr + x
+		sb = new StringBuffer(SourceFormatter.formatTrace(trace,
+				TraceFormatType.TRACE_BUFFER));
+		if (isTraceBufferBuilt()) {
+			bufferData.append("ptr"); //$NON-NLS-1$
+			if (isBufferSizeDynamic()) {
+				// In case of dynamic buffer, the length has been calculated
+				// into length variable
+				lengthData.append("length"); //$NON-NLS-1$
+			} else {
+				// Fixed size case
+				lengthData.append(String.valueOf(fixedBufferSize));
+			}
+		} else {
+			// In case of no-buffer, the size variable contain the data size
+			bufferData.append("ptr"); //$NON-NLS-1$
+			lengthData.append("size"); //$NON-NLS-1$
+		}
+		return sb;
+	}
+
+	/**
+	 * Writes a formatted trace to the stream. This removes the newline from the
+	 * trace if it exists
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeFormattedTrace(String trace) throws IOException {
+		if (trace.endsWith(SourceConstants.LINE_FEED)) {
+			write(trace.substring(0, trace.length()
+					- SourceConstants.LINE_FEED.length()));
+		} else {
+			write(trace);
+		}
+	}
+
+	/**
+	 * Increases indent and writes a new line, brace, new line combination
+	 * 
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeOpenBrace() throws IOException {
+		openBraceCount++;
+		writeNewLine();
+		write(SourceConstants.OPENING_BRACE);
+		writeNewLine();
+	}
+
+	/**
+	 * Write brace, decreases indent and writes a new line
+	 * 
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeCloseBrace() throws IOException {
+		write(SourceConstants.CLOSING_BRACE);
+		openBraceCount--;
+		writeNewLine();
+	}
+	
+	/**
+	 * write licence Text
+	 * @throws IOException if write fails
+	 */
+	private void writeLicence() throws IOException {
+		String licence = null;
+		SourceParser parser = null;
+		//first get any of the traces belonging to this header
+		TraceModel model = header.getOwner().getModel();
+		for (TraceGroup group : model) {
+			for (Trace trace : group) {
+				Iterator<LocationListBase> itr = trace.getExtensions(LocationListBase.class);
+				// The trace must have at least one location that belong to this header
+				while (itr.hasNext() && parser == null) {
+					LocationListBase list = itr.next();
+					for (LocationProperties loc : list) {
+						if (isValidTraceForHeader(loc.getFileName())) {
+								parser = ((TraceLocation)loc).getParser();
+								break;
+						}
+					}
+				}
+				if (parser!= null)  {
+					break;
+				}
+			}
+			if (parser != null) {
+				break;
+			}
+		}
+		
+		if (parser!= null) {
+		List<SourceExcludedArea> excludedAreas = parser.getExcludedAreas();
+		//try to find licence from the source
+		if (!excludedAreas.isEmpty()) {
+			SourceExcludedArea sourceExcludedArea = excludedAreas.get(0);
+			int offset = sourceExcludedArea.getOffset();
+			int type = sourceExcludedArea.getType();
+			int length = sourceExcludedArea.getLength();
+			if (offset == 0 && type == SourceExcludedArea.MULTILINE_COMMENT) {
+				String data = sourceExcludedArea.getParser().getData(offset, length);
+				if (data.contains("Copyright")) { //$NON-NLS-1$
+					// licence found write it
+					TraceCompilerLogger.printInfo("Add Licence text from: " + sourceExcludedArea.getFileName() + " to : " + header.getAbsolutePath()); //$NON-NLS-1$
+					licence = data;
+					write(licence);
+				}
+			}	
+		}
+		}
+		
+		if (licence == null) {
+			//get default licence from the licence file
+			licence = TraceCompilerEngineGlobals.getDefaultLicence(true);
+			
+			if(licence != null) {
+				TraceCompilerLogger.printInfo("Add default EPL Licence to : " + header.getAbsolutePath()); //$NON-NLS-1$
+				write(licence);
+			}
+		}
+	}
+
+	/**
+	 * Writes a new line and indent to the stream
+	 * 
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeNewLine() throws IOException {
+		int newLines = newLineCount;
+		while (newLines < maxNewLines) {
+			write(SourceConstants.LINE_FEED);
+			for (int i = 0; i < openBraceCount; i++) {
+				write(INDENT);
+			}
+			newLines++;
+		}
+		newLineCount = maxNewLines;
+	}
+
+	/**
+	 * Writes a define to stream
+	 * 
+	 * @param name
+	 *            the name for the define
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeDefine(String name) throws IOException {
+		write(SourceConstants.DEFINE);
+		write(SourceConstants.SPACE);
+		write(name);
+		writeNewLine();
+	}
+
+	/**
+	 * Writes include to header
+	 * 
+	 * @param name
+	 *            the header name
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeSystemInclude(String name) throws IOException {
+		write(SourceConstants.INCLUDE);
+		write(SourceConstants.SPACE);
+		write("<"); //$NON-NLS-1$
+		write(name);
+		write(">"); //$NON-NLS-1$
+		writeNewLine();
+	}
+
+	/**
+	 * Writes data to a stream
+	 * 
+	 * @param data
+	 *            the string of data
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void write(String data) throws IOException {
+		// Check if function starts
+		if (data.contains(INLINE_TBOOL) || bufferingFunction) {
+			bufferingFunction = true;
+			functionText.append(data);
+		} else {
+			headerOutput.write(data.getBytes());
+		}
+			newLineCount = 0;
+
+		//try to duplicate function if the current function processing is complete and duplicate is needed.
+		writeAndDuplicateFunction(data);
+	}
+
+	/**
+	 * Duplicates the function if needed
+	 * 
+	 * @param data
+	 *            data String
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	private void writeAndDuplicateFunction(String data) throws IOException {
+			// This assumes there is only one start or end bracket in one line!
+			if (data.contains(SourceConstants.OPENING_BRACE)) {
+				firstOpenBraceFound = true;
+				numberOfBrackets++;
+			} else if (data.contains(SourceConstants.CLOSING_BRACE)) {
+				numberOfBrackets--;
+
+				// Function ends
+				if (numberOfBrackets == 0 && firstOpenBraceFound) {
+					firstOpenBraceFound = false;
+					bufferingFunction = false;
+					//write start function guard
+					writeStartFunctionGuard();
+					//write the function
+					headerOutput.write(functionText.toString().getBytes());
+					//write end function guard
+					writeEndFunctionGuard();
+
+					//process duplicate if needed
+					// Get the function definition line
+					int startIndex = functionText.indexOf(SourceConstants.OPENING_BRACE);
+					String funcDef = functionText.substring(0, startIndex);
+
+					// Replace TInt with TInt32 and TUint with TUint32 from the
+					// header and write the function back again
+					if (funcDef.contains(TINT_DEF)
+							|| funcDef.contains(TUINT_DEF)) {
+						//replace and duplicate
+						funcDef = funcDef.replace(TINT_DEF, TINT32_DEF);
+						funcDef = funcDef.replace(TUINT_DEF, TUINT32_DEF);
+						functionText.replace(0, startIndex, funcDef);
+						
+						//write start function guard for duplicate
+						write(SourceConstants.LINE_FEED);
+						write(SourceConstants.LINE_FEED);
+						writeStartFunctionGuard();
+						
+						//write duplicate function
+						headerOutput.write(functionText.toString().getBytes());
+						
+						//write end function guard for duplicate
+						writeEndFunctionGuard();
+					}
+
+					functionText.setLength(0);
+				}
+			}
+	}
+
+	/**
+	 * Checks if a trace needs a buffer or it can be represented with regular
+	 * trace macros.
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @return true if trace needs a buffer
+	 */
+	private boolean traceNeedsBuffer(Trace trace) {
+		// A single dynamic parameter can be passed through the regular
+		// API macros. In that case the parameter length is determined
+		// by the trace message length
+		Iterator<TraceParameter> parameters = trace.getParameters();
+		boolean needsBuffer = false;
+		boolean dynamicFound = false;
+		while (parameters.hasNext() && !needsBuffer) {
+			TraceParameter parameter = parameters.next();
+			if (isParameterVisible(parameter)) {
+				if (SourceUtils.isParameterSizeDynamic(parameter)) {
+					if (dynamicFound) {
+						needsBuffer = true;
+					} else {
+						dynamicFound = true;
+					}
+				} else {
+					needsBuffer = true;
+				}
+			}
+		}
+		return needsBuffer;
+	}
+
+	/**
+	 * Checks if a parameter is visible
+	 * 
+	 * @param parameter
+	 *            the parameter to be checked
+	 * @return true if visible, false if not
+	 */
+	private boolean isParameterVisible(TraceParameter parameter) {
+		boolean retval;
+		TraceParameterFormattingRule sourceRule = parameter
+				.getExtension(TraceParameterFormattingRule.class);
+		if (sourceRule == null || sourceRule.isShownInSource()) {
+			retval = true;
+		} else {
+			retval = false;
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets the formatted trace
+	 * 
+	 * @return the trace
+	 */
+	String getCurrentTraceFormatted() {
+		return currentTraceFormatted;
+	}
+
+	/**
+	 * Checks if trace is already formatted to header
+	 * 
+	 * @return true if formatted
+	 */
+	boolean isTraceFormatDuplicate() {
+		boolean retval;
+		if (traceDeclarations.contains(currentTraceFormatted)) {
+			retval = true;
+		} else {
+			traceDeclarations.add(currentTraceFormatted);
+			retval = false;
+		}
+		return retval;
+	}
+
+	/**
+	 * Checks if the buffer size for current trace is fixed
+	 * 
+	 * @return the flag
+	 */
+	boolean isTraceBufferFixed() {
+		return fixedBufferSize != 0;
+	}
+
+	/**
+	 * Checks if the buffer is built
+	 * 
+	 * @return the flag
+	 */
+	boolean isTraceBufferBuilt() {
+		return buildTraceBuffer;
+	}
+
+	/**
+	 * Gets the current trace
+	 * 
+	 * @return the trace
+	 */
+	Trace getCurrentTrace() {
+		return currentTrace;
+	}
+
+	/**
+	 * Gets the header
+	 * 
+	 * @return the header
+	 */
+	TraceHeader getHeader() {
+		return header;
+	}
+
+	/**
+	 * Starts writing a trace
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @return true if trace can be written, false if not
+	 */
+	boolean startTrace(Trace trace) {
+		boolean validTrace = false;
+		Iterator<LocationListBase> itr = trace
+				.getExtensions(LocationListBase.class);
+		// The trace must have at least one location that belong to this header
+		while (itr.hasNext() && !validTrace) {
+			LocationListBase list = itr.next();
+			for (LocationProperties loc : list) {
+				validTrace = isValidTraceForHeader(loc.getFileName());
+				if (validTrace) {
+					break;
+				}
+			}
+		}
+		if (validTrace) {
+			currentTrace = trace;
+			fixedBufferSize = 0;
+			dynamicBufferSizeFlag = false;
+			buildTraceBuffer = false;
+			currentTraceFormatted = null;
+			currentParameterName = null;
+			currentParameterType = null;
+			currentParameterIndex = 0;
+		}
+		return validTrace;
+	}
+
+	/**
+	 * Checks if the location belongs to this header
+	 * 
+	 * @param locFileName
+	 *            the location
+	 * @return true if location belongs here
+	 */
+	private boolean isValidTraceForHeader(String locFileName) {
+		boolean valid = false;
+		if (locFileName != null) {
+			int index = locFileName.lastIndexOf('.');
+			if (index >= 0) {
+				locFileName = locFileName.substring(0, index);
+			}
+			if (locFileName.equals(header.getProjectName())) {
+				valid = true;
+			}
+		}
+		return valid;
+	}
+
+	/**
+	 * Starts writing a parameter
+	 * 
+	 * @param parameter
+	 *            the parameter
+	 */
+	void startParameter(TraceParameter parameter) {
+		currentParameterName = null;
+		currentParameterType = null;
+		currentParameter = parameter;
+	}
+
+	/**
+	 * Sets the kernel mode #endif needed flag
+	 * 
+	 * @param flag
+	 *            the flag
+	 */
+	void setKernelModeEndifNeeded(boolean flag) {
+		needsKernelEndif = flag;
+	}
+
+	/**
+	 * Gets the kernel mode endif needed flag
+	 * 
+	 * @return the flag
+	 */
+	boolean isKernelModeEndifNeeded() {
+		return needsKernelEndif;
+	}
+
+	/**
+	 * Returns the dynamic buffer size flag
+	 * 
+	 * @return true if buffer size is dynamic
+	 */
+	boolean isBufferSizeDynamic() {
+		return dynamicBufferSizeFlag;
+	}
+
+	/**
+	 * Checks if current parameter needs alignment
+	 * 
+	 * @return true if needed
+	 */
+	boolean isParameterAlignmentNeeded() {
+		return SourceUtils.isParameterAlignementNeeded(currentParameter
+				.getType());
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/messages.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,8 @@
+TraceHeader.Title=Trace Header
+HeaderEngine.TraceHeaderNotChangedPrefix=No changes were made to 
+HeaderEngine.FailedToAttachHeader=Failed to attach trace header to project
+TraceHeader.internalError1=TraceCompiler internal: Error parsing OstTraceGenx function name.
+TraceHeader.internalError2=TraceCompiler internal: Error parsing OstTraceGenx function parameters.
+TraceHeader.internalError3=TraceCompiler internal: TraceCompiler could not identify OstTraceGenx function.
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/header/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,4 @@
+<html><body>
+Maintains the trace header, which contains inline functions 
+for traces that cannot be represented by the normal trace API.
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/messages.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,110 @@
+TraceCompiler.UnknownTypeWarning=Parameter type is unknown. Hex, 32-bit used
+TraceLocationConverter.GroupIdValueError=TC has detected a fixed_id.defintions using different Group Id values. This file will be regenerated with the correct values.
+TraceLocationConverter.DeprecatedGroupIdWarningStart=Deprecated group
+TraceLocationConverter.DeprecatedGroupIdWarningMiddle=detected. Updating to
+TraceLocationConverter.DeprecatedGroupIdWarningEnd=in dictionary. Please update source code!
+TraceLocationConverter.FixedIdProblemWarningBeginText=Found problems with the old fixed id message : 
+TraceLocationConverter.FixedIdProblemWarningMiddleText=. Therfore deleting it.
+TraceLocationMap.SourceWithTraceRemoved=Source file with traces was removed
+TraceCompilerErrorMessages.SourceNotEditable=Source cannot be edited
+TraceCompilerErrorMessages.DuplicateGroupID=Group ID conflict. Please close all the source files, delete traceid and tracecompiler cache files. Then reopen source file.
+TraceCompilerErrorMessages.DuplicateTraceID=Trace ID is already in use
+TraceCompilerErrorMessages.DuplicateGroupName=Group name is already in use
+TraceCompilerErrorMessages.DuplicateTraceName=Trace name is already in use
+TraceCompilerErrorMessages.DuplicateConstantValue=Enum text is already in use
+TraceCompilerErrorMessages.DuplicateConstantID=Enum value is already in use
+TraceCompilerErrorMessages.DuplicateConstantTableName=Enum type is already in use
+TraceCompilerErrorMessages.DuplicateConstantTableID=Enum ID is already in use
+TraceCompilerErrorMessages.DuplicateParameterName=Parameter name is already in use
+TraceCompilerErrorMessages.DuplicateParameterID=Parameter ID is already in use
+TraceCompilerErrorMessages.InvalidGroupName=Invalid group name
+TraceCompilerErrorMessages.InvalidTraceName=Invalid trace name
+TraceCompilerErrorMessages.InvalidGroupID=Invalid group ID
+TraceCompilerErrorMessages.InvalidGroupIDStart=Group ID must be between 
+TraceCompilerErrorMessages.InvalidGroupIDMiddle=\ and 
+TraceCompilerErrorMessages.InvalidGroupIDEnd=
+TraceCompilerErrorMessages.InvalidTraceID=Invalid trace ID
+TraceCompilerErrorMessages.InvalidTraceIDStart=Trace ID must be between 
+TraceCompilerErrorMessages.InvalidTraceIDMiddle=\ and 
+TraceCompilerErrorMessages.InvalidTraceIDEnd=
+TraceCompilerErrorMessages.InvalidModelPropertiesForExport=Before exporting, the trace compiler needs to be run once to generate UID and name for the component.
+TraceCompilerErrorMessages.InvalidProjectName=Project name is not valid
+TraceCompilerErrorMessages.InvalidSourceLocation=Cursor location is not valid
+TraceCompilerErrorMessages.InvalidParameterName=Parameter name is not valid
+TraceCompilerErrorMessages.InvalidParameterNameInReturnValue=Return parameter name is not valid. Parameter was not added to exit trace.
+TraceCompilerErrorMessages.InvalidConstantValue=Enum text is not valid
+TraceCompilerErrorMessages.InvalidParameterType=Parameter type is not supported
+TraceCompilerErrorMessages.InvalidParameterTypePrefix=Parameter type 
+TraceCompilerErrorMessages.InvalidParameterTypePostfix=\ is not supported
+TraceCompilerErrorMessages.InvalidDirectoryPrefix=
+TraceCompilerErrorMessages.InvalidDirectoryPostfix=\ is not a valid directory
+TraceCompilerErrorMessages.InvalidDirectory=Directory is not valid
+TraceCompilerErrorMessages.InvalidConstantTableName=Enum type is not valid. Please select a valid enum from the source code and try again.
+TraceCompilerErrorMessages.ConstantTableNotPartOfProject=The file where enum exist is not part of project. You can parse enums only from files that are part of the project. If you want parse enum from external file, you can copy and paste that enum to some file in your project and parse it from there. After you have parsed enum you can delete it from your project.  
+TraceCompilerErrorMessages.FileDoesNotExistPrefix=
+TraceCompilerErrorMessages.FileDoesNotExistPostfix=\ does not exist
+TraceCompilerErrorMessages.InvalidTraceData=Invalid trace text
+TraceCompilerErrorMessages.InvalidTraceFile=Trace project file is not valid
+TraceCompilerErrorMessages.GroupNotSelected=Group was not selected
+TraceCompilerErrorMessages.NoFunctionsToInstrumentPrefix=None of the functions from open files could be instrumented with 
+TraceCompilerErrorMessages.NoFunctionsToInstrument=Currently open files do not have any functions that can be instrumented
+TraceCompilerErrorMessages.NoFunctionsToInstrumentPostfix=\ template
+TraceCompilerErrorMessages.ParameterFormatMismatch=Parameter count does not match the format specification
+TraceCompilerErrorMessages.ParameterFormatNotSupported=Parameter format is not supported
+TraceCompilerErrorMessages.ParameterFormatNotSupportedPrefix=Parameter format 
+TraceCompilerErrorMessages.ParameterFormatNotSupportedPostfix=\ is not supported
+TraceCompilerErrorMessages.MultipleErrorsInOperation=Multiple errors during operation. See event viewer for details
+TraceCompilerErrorMessages.ParameterAddNotAllowed=Parameters cannot be added to the trace
+TraceCompilerErrorMessages.EmptyParameterName=Parameter did not have a name and was not added to trace
+TraceCompilerErrorMessages.SourceNotOpen=Source file needs to be opened first
+TraceCompilerErrorMessages.ParameterRemoveNotAllowed=The parameter cannot be removed
+TraceCompilerErrorMessages.ConstantTableNotSelected=Enum was not selected
+TraceCompilerErrorMessages.ConstantTableParseFailed=Failed to parse enum
+TraceCompilerErrorMessages.CannotDeleteSelectedObject=The selected object cannot be deleted
+TraceCompilerErrorMessages.CannotUpdateTraceIntoSource=Trace could not be updated to source code
+TraceCompilerErrorMessages.CannotParseFunctionParameters=None of the function parameters could be added to the function entry trace
+TraceCompilerErrorMessages.CannotOpenProjectFile=Cannot open project file. Check that the directory is not read-only
+TraceCompilerErrorMessages.CannotWriteProjectFile=Cannot write project file. Check that the directory is not read-only
+TraceCompilerErrorMessages.CannotOpenSourceFile=Source file could not be opened
+TraceCompilerErrorMessages.ParameterTemplateInUse=Another parameter already uses the selected template
+TraceCompilerErrorMessages.InvalidTraceTextFormat=Trace text format is not valid
+TraceCompilerErrorMessages.InvalidTraceNameFormat=Trace name format is not valid
+TraceCompilerErrorMessages.InsertTraceDoesNotWork=Data traces cannot be inserted to source
+TraceCompilerErrorMessages.TraceLocationNotSelected=Source location was not selected
+TraceCompilerErrorMessages.TraceHasMultipleLocations=Trace is used from multiple places
+TraceCompilerErrorMessages.LocationCouldNotBeParsed=Location could not be parsed
+TraceCompilerErrorMessages.UnreachableTraceLocation=Trace is in unreachable part of the code
+TraceCompilerErrorMessages.NameFormatMissingFunction=Missing function name tag {$FN} from trace name
+TraceCompilerErrorMessages.TraceNotSelected=Trace was not selected
+TraceCompilerErrorMessages.TraceProjectNotOpen=Trace project is not open
+TraceCompilerErrorMessages.TraceHasNoLocations=Trace is not used from source files and will be removed when a source is saved
+TraceCompilerErrorMessages.NoTracesToDelete=No traces to delete
+TraceCompilerErrorMessages.NoTracesToExport=Project does not have any traces -> No files were written
+TraceCompilerErrorMessages.FileDoesNotExist=File does not exist
+TraceCompilerErrorMessages.NoTraceGroups=Cannot add a new trace before a trace group has been created
+TraceCompilerErrorMessages.UnexpectedException=Unknown error occurred
+TraceCompilerErrorMessages.NotEnoughParameters=Trace does not have enough parameters
+TraceCompilerErrorMessages.NoContextForLocation=Class / function name for trace could not be determined
+TraceCompilerErrorMessages.TraceDoesNotExist=Trace will be created when the source file is saved
+TraceCompilerErrorMessages.TraceNeedsConversionPrefix=Trace needs conversion
+TraceCompilerErrorMessages.ParameterCountMismatch=Parameter count in source does not match the parameter count in trace
+TraceCompilerErrorMessages.ParameterCountDoesNotMatchApi=The number of parameters in source does not match the API macro
+TraceCompilerErrorMessages.ParameterFormatNotSupportedInMacro=Extension macro needs to be used with this parameter format type
+TraceCompilerErrorMessages.ParameterFormatUnnecessaryExtMacro=Trace does not need to use extension macro
+TraceCompilerErrorMessages.ParameterFormatNotSupportedInMacroPrefix=Extension macro needs to be used with parameter 
+TraceCompilerErrorMessages.ParameterFormatNotSupportedInMacroPostfix=
+TraceCompilerErrorMessages.ParameterFormatNotSupportedInArrayPrefix=Parameter format 
+TraceCompilerErrorMessages.ParameterFormatNotSupportedInArrayPostfix=\ cannot be used as an array
+TraceCompilerErrorMessages.ParameterFormatNotSupportedInArray=Parameter format cannot be used as an array
+TraceCompilerErrorMessages.PropertyFileElementNotSupportedPrefix=Property file element 
+TraceCompilerErrorMessages.PropertyFileElementNotSupportedPostfix=\ is not supported and was ignored
+TraceCompilerErrorMessages.PropertyFileElementMisplacedPrefix=Property file element 
+TraceCompilerErrorMessages.PropertyFileElementMisplacedPostfix=\ was unexpected
+TraceCompilerErrorMessages.PropertyFileAttributeInvalidPrefix=Property file attribute 
+TraceCompilerErrorMessages.PropertyFileAttributeInvalidPostfix=\ did not have a valid value
+TraceCompilerErrorMessages.RunOutOfGroupIDs=Run out of Group IDs. You can try to reuse unused group ids by deleting fixed id definition file.
+TraceCompilerErrorMessages.RunOutOfTraceIDs=Run out of Trace IDs. You can try to reuse unused trace ids by deleting fixed id definition file.
+TraceCompilerErrorMessages.VarArgListParameterFound=Parameters were not added to the trace because one of the variables is a variable argument list.
+TraceCompilerErrorMessages.InvalidUsageOfTraceStateGroupName=Invalid group name. TRACE_STATE group name is reserved for state traces only.
+TraceCompilerErrorMessages.InvalidUsageOfTracePerformanceGroupName=Invalid group name. TRACE_PERFORMANCE group name is reserved for performance traces only.
+TraceCompilerErrorMessages.LicenceFileError=Failed to read licence file. 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Contains the main control logic of TraceCompiler.
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/plugin/PluginEngine.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,198 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Export plugin manager, which delegates calls to plug-ins
+*
+*/
+package com.nokia.tracecompiler.engine.plugin;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineBase;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineConfiguration;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.model.TraceObjectPropertyVerifier;
+import com.nokia.tracecompiler.plugin.TraceAPIPlugin;
+import com.nokia.tracecompiler.plugin.TraceCompilerExport;
+import com.nokia.tracecompiler.plugin.TraceCompilerPlugin;
+
+/**
+ * Plugin engine, which delegates calls to plug-ins
+ * 
+ */
+public final class PluginEngine extends TraceCompilerEngineBase {
+
+	/**
+	 * List of plug-ins
+	 */
+	private ArrayList<TraceCompilerPlugin> plugins = new ArrayList<TraceCompilerPlugin>();
+
+	/**
+	 * Property verifier
+	 */
+	private PluginTracePropertyVerifier verifier = new PluginTracePropertyVerifier(
+			this);
+
+	/**
+	 * Trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * Project open flag
+	 */
+	private boolean projectOpen;
+
+	/**
+	 * Sets the trace model. This is not set in constructor, since plug-in
+	 * engine is created before the model
+	 * 
+	 * @param model
+	 *            the trace model
+	 */
+	public void setModel(TraceModel model) {
+		this.model = model;
+	}
+
+	/**
+	 * Gets the started flag
+	 * 
+	 * @return true if started, false if not
+	 */
+	public boolean isProjectOpen() {
+		return projectOpen;
+	}
+
+	/**
+	 * Adds a plugin
+	 * 
+	 * @param plugin
+	 *            the plugin to be added
+	 */
+	public void add(TraceCompilerPlugin plugin) {
+		plugins.add(plugin);
+		if (plugin instanceof TraceAPIPlugin) {
+			TraceAPIPlugin api = (TraceAPIPlugin) plugin;
+			TraceAPIPluginManager manager = model
+					.getExtension(TraceAPIPluginManager.class);
+			manager.addFormatters(api.getFormatters());
+			manager.addParsers(api.getParsers());
+		}
+	}
+
+	/**
+	 * Removes a plugin
+	 * 
+	 * @param plugin
+	 *            the plugin to be removed
+	 */
+	public void remove(TraceCompilerPlugin plugin) {
+		// Formatters / parsers are not removed. Currently this is not a
+		// problem since plug-in's are removed only on shutdown
+		plugins.remove(plugin);
+	}
+
+	/**
+	 * Gets the property verifier interface
+	 * 
+	 * @return the verifier
+	 */
+	public TraceObjectPropertyVerifier getVerifier() {
+		return verifier;
+	}
+
+	/**
+	 * Checks if there are plug-ins
+	 * 
+	 * @return true if plug-ins exist
+	 */
+	public boolean hasPlugins() {
+		return !plugins.isEmpty();
+	}
+
+	/**
+	 * Gets the plug-ins
+	 * 
+	 * @return the plug-ins
+	 */
+	Iterator<TraceCompilerPlugin> getPlugins() {
+		return plugins.iterator();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngineBase#exportProject()
+	 */
+	@Override
+	public void exportProject() throws TraceCompilerException {
+		if (model.hasTraces()) {
+			for (TraceCompilerPlugin plugin : plugins) {
+				if (plugin instanceof TraceCompilerExport) {
+					try {
+						((TraceCompilerExport) plugin).exportTraceProject();
+					} catch (TraceCompilerException e) {
+						TraceCompilerEngineGlobals.getEvents().postError(e);
+							throw e;
+					}
+				}
+			}
+		} else {
+			TraceCompilerEngineGlobals.getEvents().postInfoMessage(
+					TraceCompilerEngineErrorMessages.getErrorMessage(
+							TraceCompilerErrorCode.NO_TRACES_TO_EXPORT, null),
+					null);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngine#projectOpened()
+	 */
+	@Override
+	public void projectOpened() {
+		if (!projectOpen) {
+			for (TraceCompilerPlugin plugin : plugins) {
+				plugin.traceProjectOpened(model);
+			}
+			projectOpen = true;
+		} else {
+			if (TraceCompilerEngineConfiguration.ASSERTIONS_ENABLED) {
+				TraceCompilerEngineGlobals.getEvents().postAssertionFailed(
+						"PluginEngine.traceProjectOpened", null); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngine#projectClosing()
+	 */
+	@Override
+	public void projectClosed() {
+		if (projectOpen) {
+			for (TraceCompilerPlugin plugin : plugins) {
+				plugin.traceProjectClosed();
+			}
+			projectOpen = false;
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/plugin/PluginTracePropertyVerifier.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,336 @@
+/*
+* Copyright (c) 2008-2010 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:
+*
+* Property verifier for trace objects
+*
+*/
+package com.nokia.tracecompiler.engine.plugin;
+
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.RangeErrorParameters;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceConstantTable;
+import com.nokia.tracecompiler.model.TraceConstantTableEntry;
+import com.nokia.tracecompiler.model.TraceGroup;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.model.TraceObjectPropertyVerifier;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.plugin.TraceCompilerPlugin;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceUtils;
+import com.nokia.tracecompiler.project.*;
+
+/**
+ * Property verifier for trace objects
+ * 
+ */
+public final class PluginTracePropertyVerifier implements TraceObjectPropertyVerifier {
+
+	/**
+	 * Valid data character range start
+	 */
+	private static final int DATA_CHAR_START = 0x20; // CodForChk_Dis_Magic
+
+	/**
+	 * Valid data character range end
+	 */
+	private static final int DATA_CHAR_END = 0x7E; // CodForChk_Dis_Magic
+	/**
+	 * TAB character
+	 */
+	private static final int TAB =  0x9;  // CodForChk_Dis_Magic
+
+	/**
+	 * Plugin engine
+	 */
+	private PluginEngine pluginEngine;
+
+	/**
+	 * Constructor. Empty public constructor is needed by test class.
+	 */
+	public PluginTracePropertyVerifier() {
+		
+	}
+	
+	/**
+	 * Constructor
+	 * 
+	 * @param engine
+	 *            plug-in engine
+	 */
+	PluginTracePropertyVerifier(PluginEngine engine) {
+		this.pluginEngine = engine;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
+	 *      checkConstantProperties(com.nokia.tracecompiler.model.TraceConstantTable,
+	 *      com.nokia.tracecompiler.model.TraceConstantTableEntry, int,
+	 *      java.lang.String)
+	 */
+	public void checkConstantProperties(TraceConstantTable table,
+			TraceConstantTableEntry entry, int id, String value)
+			throws TraceCompilerException {
+		if (!SourceUtils.isValidName(value)) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.INVALID_CONSTANT_VALUE);
+		}
+		if (table != null) {
+			// If table exists, the value and ID must be unique
+			TraceConstantTableEntry old = table.findEntryByID(id);
+			if (old != null && old != entry) {
+				throw new TraceCompilerException(
+						TraceCompilerErrorCode.DUPLICATE_CONSTANT_ID);
+			}
+			old = table.findEntryByName(value);
+			if (old != null && old != entry) {
+				throw new TraceCompilerException(
+						TraceCompilerErrorCode.DUPLICATE_CONSTANT_VALUE);
+			}
+		}
+		Iterator<TraceCompilerPlugin> itr = pluginEngine.getPlugins();
+		while (itr.hasNext()) {
+			TraceCompilerPlugin provider = itr.next();
+			if (provider instanceof TraceObjectPropertyVerifier) {
+				((TraceObjectPropertyVerifier) provider)
+						.checkConstantProperties(table, entry, id, value);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
+	 *      checkConstantTableProperties(com.nokia.tracecompiler.model.TraceModel,
+	 *      com.nokia.tracecompiler.model.TraceConstantTable, int,
+	 *      java.lang.String)
+	 */
+	public void checkConstantTableProperties(TraceModel model,
+			TraceConstantTable table, int id, String tableName)
+			throws TraceCompilerException {
+		if (!SourceUtils.isValidName(tableName)) {
+			 throw new TraceCompilerException(
+			 TraceCompilerErrorCode.INVALID_CONSTANT_TABLE_NAME, false);
+		}
+		TraceConstantTable old = model.findConstantTableByID(id);
+		if (old != null && old != table) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.DUPLICATE_CONSTANT_TABLE_ID);
+		}
+		old = model.findConstantTableByName(tableName);
+		if (old != null && old != table) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.DUPLICATE_CONSTANT_TABLE_NAME);
+		}
+		Iterator<TraceCompilerPlugin> itr = pluginEngine.getPlugins();
+		while (itr.hasNext()) {
+			TraceCompilerPlugin provider = itr.next();
+			if (provider instanceof TraceObjectPropertyVerifier) {
+				((TraceObjectPropertyVerifier) provider)
+						.checkConstantTableProperties(model, table, id,
+								tableName);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
+	 *      checkTraceGroupProperties(com.nokia.tracecompiler.model.TraceModel,
+	 *      com.nokia.tracecompiler.model.TraceGroup, int, java.lang.String)
+	 */
+	public void checkTraceGroupProperties(TraceModel model, TraceGroup group,
+			int id, String name) throws TraceCompilerException {
+		if (!SourceUtils.isValidName(name)) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.INVALID_GROUP_NAME);
+		} else if ((id < 0) || (id > TraceCompilerEngineGlobals.MAX_GROUP_ID)) {
+			RangeErrorParameters params = new RangeErrorParameters();
+			params.start = 0;
+			params.end = TraceCompilerEngineGlobals.MAX_GROUP_ID;
+			params.isHex = true;
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.INVALID_GROUP_ID, params);
+		} else {
+			TraceGroup old = model.findGroupByID(id);
+			// this condition is to check that user defined group ids are unique.
+			// system defined group ids at present are not required to be unique.
+			if ((old != null) && (old != group) && (id >= GroupNames.USER_GROUP_ID_FIRST  ) && (id <= GroupNames.USER_GROUP_ID_LAST )) {
+				throw new TraceCompilerException(
+						TraceCompilerErrorCode.DUPLICATE_GROUP_ID);
+			}
+			old = model.findGroupByName(name);
+			if (old != null && old != group) {
+				throw new TraceCompilerException(
+						TraceCompilerErrorCode.DUPLICATE_GROUP_NAME);
+			}
+		}
+		Iterator<TraceCompilerPlugin> itr = pluginEngine.getPlugins();
+		while (itr.hasNext()) {
+			TraceCompilerPlugin provider = itr.next();
+			if (provider instanceof TraceObjectPropertyVerifier) {
+				((TraceObjectPropertyVerifier) provider)
+						.checkTraceGroupProperties(model, group, id, name);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
+	 *      checkTraceModelProperties(com.nokia.tracecompiler.model.TraceModel,
+	 *      int, java.lang.String, java.lang.String)
+	 */
+	public void checkTraceModelProperties(TraceModel model, int id,
+			String name, String path) throws TraceCompilerException {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
+	 *      checkTraceParameterProperties(com.nokia.tracecompiler.model.Trace,
+	 *      com.nokia.tracecompiler.model.TraceParameter, int, java.lang.String,
+	 *      java.lang.String)
+	 */
+	public void checkTraceParameterProperties(Trace owner,
+			TraceParameter parameter, int id, String name, String type)
+			throws TraceCompilerException {
+		if (!SourceUtils.isValidParameterName(name)) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.INVALID_PARAMETER_NAME);
+		}
+		TraceParameter old = owner.findParameterByID(id);
+		if (old != null && old != parameter) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.DUPLICATE_PARAMETER_ID);
+		}
+		old = owner.findParameterByName(name);
+		if (old != null && old != parameter) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.DUPLICATE_PARAMETER_NAME);
+		}
+		Iterator<TraceCompilerPlugin> itr = pluginEngine.getPlugins();
+		while (itr.hasNext()) {
+			TraceCompilerPlugin provider = itr.next();
+			if (provider instanceof TraceObjectPropertyVerifier) {
+				((TraceObjectPropertyVerifier) provider)
+						.checkTraceParameterProperties(owner, parameter, id,
+								name, type);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
+	 *      checkTraceProperties(com.nokia.tracecompiler.model.TraceGroup,
+	 *      com.nokia.tracecompiler.model.Trace, int, java.lang.String,
+	 *      java.lang.String)
+	 */
+	public void checkTraceProperties(TraceGroup group, Trace trace, int id,
+			String name, String data) throws TraceCompilerException {
+		if (!isValidData(data)) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.INVALID_TRACE_DATA);
+		} else if (!SourceUtils.isValidName(name)) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.INVALID_TRACE_NAME);
+		} else if ((id < 0) || (id > TraceCompilerEngineGlobals.MAX_TRACE_ID)) {
+			RangeErrorParameters params = new RangeErrorParameters();
+			params.start = 0;
+			params.end = TraceCompilerEngineGlobals.MAX_TRACE_ID;
+			params.isHex = true;
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.INVALID_TRACE_ID, params);
+		} else {
+			// Verifies the trace name is globally unique
+			Trace old = TraceCompilerEngineGlobals.getTraceModel().findTraceByName(
+					name);
+			if (old != trace && old != null) {
+				throw new TraceCompilerException(
+						TraceCompilerErrorCode.DUPLICATE_TRACE_NAME);
+			}
+			if (group != null) {
+				// If group exists, the trace ID and text must be unique within
+				// the group
+				old = group.findTraceByID(id);
+				if (old != trace && old != null) {
+					// Trace ID's must be unique within group
+					throw new TraceCompilerException(
+							TraceCompilerErrorCode.DUPLICATE_TRACE_ID);
+				}
+			}
+		}
+		Iterator<TraceCompilerPlugin> itr = pluginEngine.getPlugins();
+		while (itr.hasNext()) {
+			TraceCompilerPlugin provider = itr.next();
+			if (provider instanceof TraceObjectPropertyVerifier) {
+				((TraceObjectPropertyVerifier) provider).checkTraceProperties(
+						group, trace, id, name, data);
+			}
+		}
+	}
+
+	/**
+	 * Checks the validity of data
+	 * 
+	 * @param data
+	 *            the data
+	 * @return true if valid
+	 */
+	private boolean isValidData(String data) {
+		boolean retval;
+		if (data != null) {
+			retval = true;
+			for (int i = 0; i < data.length() && retval; i++) {
+				char c = data.charAt(i);
+				// Unescaped quotes are not allowed
+				if (c == SourceConstants.QUOTE_CHAR
+						&& (i == 0 || data.charAt(i - 1) != SourceConstants.BACKSLASH_CHAR)) {
+					retval = false;
+				} else {
+					retval = isValidDataChar(c);
+				}
+			}
+		} else {
+			retval = false;
+		}
+		return retval;
+	}
+
+	/**
+	 * Checks data character validity
+	 * 
+	 * @param c
+	 *            character
+	 * @return true if valid
+	 */
+	private boolean isValidDataChar(char c) {
+		// Special and extended characters are not allowed, except TAB
+		return c >= DATA_CHAR_START && c <= DATA_CHAR_END || c == TAB;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/plugin/TraceAPIPluginManager.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Trace API plug-in manager interface
+*
+*/
+package com.nokia.tracecompiler.engine.plugin;
+
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.plugin.TraceAPIFormatter;
+import com.nokia.tracecompiler.plugin.TraceAPIParser;
+
+/**
+ * Trace API plug-in manager interface
+ * 
+ */
+public interface TraceAPIPluginManager extends TraceModelExtension {
+
+	/**
+	 * Adds the formatter API's from the plug-in
+	 * 
+	 * @param formatters
+	 *            the formatters
+	 */
+	public void addFormatters(TraceAPIFormatter[] formatters);
+
+	/**
+	 * Adds the parser API's from the plug-in
+	 * 
+	 * @param parsers
+	 *            the parsers
+	 */
+	public void addParsers(TraceAPIParser[] parsers);
+
+	/**
+	 * Sets the default API to the model.
+	 */
+	public void createDefaultAPI();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/plugin/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Plug-in manager and related classes
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/Messages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Localization for project package
+*
+*/
+package com.nokia.tracecompiler.engine.project;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Localization for project package
+ * 
+ */
+class Messages {
+
+	/**
+	 * Bundle name
+	 */
+	private static final String BUNDLE_NAME = "com.nokia.tracecompiler.engine.project.messages"; //$NON-NLS-1$
+
+	/**
+	 * Bundle
+	 */
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Prevents construction
+	 */
+	private Messages() {
+	}
+
+	/**
+	 * Gets localized string based on key
+	 * 
+	 * @param key
+	 *            the resource key
+	 * @return the localized resource
+	 */
+	public static String getString(String key) {
+		String value;
+		try {
+			value = RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			value = '!' + key + '!';
+		}
+		return value;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/ProjectConstants.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Constant values related to project files
+*
+*/
+package com.nokia.tracecompiler.engine.project;
+
+/**
+ * Constant values related to project files
+ * 
+ */
+public interface ProjectConstants {
+
+	/**
+	 * Title of the cache file
+	 */
+	String FIXED_ID_DEFINITION_FILE_TITLE = Messages
+			.getString("ProjectConstants.FixedIdDefinitionFileTitle"); //$NON-NLS-1$
+
+	/**
+	 * Cache file extension
+	 */
+	String CACHE_FILE_NAME = "tracecompiler.cache"; //$NON-NLS-1$
+
+	/**
+	 * Fixed ID file extension
+	 */
+	String FIXED_ID_DEFINITIONS_FILE_NAME = "fixed_id.definitions"; //$NON-NLS-1$
+
+	/**
+	 * Extension for the file within zip file
+	 */
+	String FILE_EXTENSION = ".xml"; //$NON-NLS-1$
+
+	/**
+	 * Less than escape sequence
+	 */
+	String LT = "&lt;"; //$NON-NLS-1$
+
+	/**
+	 * Greater than escape sequence
+	 */
+	String GT = "&gt;"; //$NON-NLS-1$
+
+	/**
+	 * Indent
+	 */
+	String INDENT = "  "; //$NON-NLS-1$
+
+	/**
+	 * End a tag
+	 */
+	String END_TAG = ">"; //$NON-NLS-1$
+
+	/**
+	 * Start of end tag
+	 */
+	String START_END_TAG = "</"; //$NON-NLS-1$
+
+	/**
+	 * End tag with line feed
+	 */
+	String END_TAG_LF = ">\r\n"; //$NON-NLS-1$
+
+	/**
+	 * Start a tag
+	 */
+	String START_TAG = "<"; //$NON-NLS-1$
+
+	/**
+	 * Extension tag
+	 */
+	String EXTENSION_TAG = "extension"; //$NON-NLS-1$
+
+	/**
+	 * Data tag
+	 */
+	String DATA_TAG = "data"; //$NON-NLS-1$
+
+	/**
+	 * Name tag
+	 */
+	String NAME_TAG = "name"; //$NON-NLS-1$
+
+	/**
+	 * Object ID tag
+	 */
+	String ID_TAG = "id"; //$NON-NLS-1$
+
+	/**
+	 * Constant table entry tag
+	 */
+	String CONSTANT_TABLE_ENTRY_TAG = "entry"; //$NON-NLS-1$
+
+	/**
+	 * Parameter tag
+	 */
+	String PARAMETER_TAG = "parameter"; //$NON-NLS-1$
+
+	/**
+	 * Trace text tag
+	 */
+	String TRACE_TEXT_TAG = "text"; //$NON-NLS-1$
+
+	/**
+	 * Trace tag
+	 */
+	String TRACE_TAG = "trace"; //$NON-NLS-1$
+
+	/**
+	 * Parameter type tag
+	 */
+	String PARAMETER_TYPE_TAG = "type"; //$NON-NLS-1$
+
+	/**
+	 * Constant table tag
+	 */
+	String CONSTANT_TABLE_TAG = "table"; //$NON-NLS-1$
+
+	/**
+	 * Group tag
+	 */
+	String GROUP_TAG = "group"; //$NON-NLS-1$
+
+	/**
+	 * Model tag
+	 */
+	String MODEL_TAG = "model"; //$NON-NLS-1$
+
+	/**
+	 * Location tag
+	 */
+	String LOCATION_TAG = "location"; //$NON-NLS-1$
+
+	/**
+	 * File tag
+	 */
+	String LOCATION_FILE_TAG = "file"; //$NON-NLS-1$
+
+	/**
+	 * Line tag
+	 */
+	String LOCATION_LINE_TAG = "line"; //$NON-NLS-1$
+
+	/**
+	 * Class name tag
+	 */
+	String LOCATION_CLASS_NAME_TAG = "class"; //$NON-NLS-1$
+
+	/**
+	 * Function name tag
+	 */
+	String LOCATION_FUNCTION_NAME_TAG = "function"; //$NON-NLS-1$
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/ProjectEngine.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Trace project file manager
+*
+*/
+package com.nokia.tracecompiler.engine.project;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Enumeration;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineBase;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.plugin.TraceAPIPluginManager;
+import com.nokia.tracecompiler.file.FileUtils;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.project.GroupNames;
+import com.nokia.tracecompiler.project.ProjectUtils;
+
+/**
+ * Trace project engine
+ * 
+ */
+public final class ProjectEngine extends TraceCompilerEngineBase {
+
+	/**
+	 * Parameters for create project
+	 */
+	private class CreateProjectParameters {
+
+		/**
+		 * Trace project path
+		 */
+		String traceProjectPath;
+
+		/**
+		 * Trace project name
+		 */
+		String traceProjectName;
+
+		/**
+		 * Trace project ID
+		 */
+		int traceProjectID;
+
+	}
+
+	/**
+	 * Default project ID
+	 */
+	private static final int DEFAULT_PROJECT_ID = 0x0; // CodForChk_Dis_Magic
+
+	/**
+	 * Trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * Trace directory name
+	 */
+	public static String traceFolderName;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param model
+	 *            the trace model
+	 */
+	public ProjectEngine(TraceModel model) {
+		this.model = model;
+	}
+
+	/**
+	 * Opens trace project
+	 * 
+	 * @param projectPath
+	 *            the path to the project to be opened
+	 * @param modelName
+	 *            the name for the model or null to use directory name
+	 * @throws TraceCompilerException
+	 *             if opening fails
+	 */
+	public void openTraceProject(String projectPath, String modelName)
+			throws TraceCompilerException {
+		if (projectPath != null) {
+			CreateProjectParameters parameters = createParameters(projectPath,
+					modelName);
+
+			// Create empty project
+			if (model.getExtension(TraceCompilerProject.class) == null) {
+				createEmptyProjectFile(parameters);
+			}
+		} else {
+			
+			// If fileName is null, there's no open source files. In
+			// that the project cannot be created
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.SOURCE_NOT_OPEN);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngine#projectOpened()
+	 */
+	@Override
+	public void projectOpened() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngine#projectClosed()
+	 */
+	@Override
+	public void projectClosed() {
+		model.removeExtensions(TraceCompilerProject.class);
+		model.removeExtensions(TraceIDCache.class);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngine#exportProject()
+	 */
+	@Override
+	public void exportProject() {
+		try {
+
+			// The fixed id definitions file is updated even there are no traces
+			// in case that old fixed id definitions file exist
+			syncFixedIdDefinitionsFile();
+		} catch (TraceCompilerException e) {
+		}
+	}
+
+	/**
+	 * Updated fixed id definitions file
+	 * 
+	 * @throws TraceCompilerException
+	 *             if update fails
+	 */
+	private void syncFixedIdDefinitionsFile() throws TraceCompilerException {
+		TraceIDCache cache = model.getExtension(TraceIDCache.class);
+		// Create trace Id cache if it does not exist
+		if (cache == null) {
+			String path = ProjectUtils.getLocationForFile(model,
+					ProjectEngine.traceFolderName,
+					ProjectConstants.FIXED_ID_DEFINITIONS_FILE_NAME, false);
+			if (path != null) {
+				cache = new TraceIDCache(new File(path).getParent());
+				model.addExtension(cache);
+			}
+		}
+		if (cache != null) {
+			File cacheFile = new File(cache.getAbsolutePath());
+
+			// The fixed id definitions file is updated in case that there are
+			// traces in model
+			if (model.hasTraces()) {
+				// Try to save Ids to fixed Id definition file
+				try {
+					SortedProperties ids = new SortedProperties();
+					// Save Ids from model to fixed Id properties
+					model.saveIDs(ids);
+
+					// If there are some fixed Ids in that are not used anymore,
+					// keep also those Ids in defininiton file, but mark those
+					// ids as obsolete
+					ids = handleObsoleteIds(ids);
+
+					// Rewrites the trace Id cache file
+					OutputStream fos = FileUtils.createOutputStream(cacheFile);
+					ids.store(fos,
+							ProjectConstants.FIXED_ID_DEFINITION_FILE_TITLE);
+					fos.close();
+					cache.postFileWrittenEvent(cache.getAbsolutePath());
+				} catch (IOException e) {
+					cacheFile.delete();
+				}
+			}
+		}
+	}
+
+	/**
+	 * Handle obsolete Ids
+	 * 
+	 * @param ids
+	 *            Ids
+	 */
+	private SortedProperties handleObsoleteIds(SortedProperties ids) {
+		SortedProperties fixedIds = model.getFixedIds();
+		if (fixedIds != null) {
+			Enumeration<Object> fixedIdKeys = fixedIds.keys();
+			while (fixedIdKeys.hasMoreElements()) {
+				String fixedIdKey = (String) fixedIdKeys.nextElement();
+				if (!ids.containsKey(fixedIdKey)) {
+					String value = fixedIds.getProperty(fixedIdKey);
+					boolean markAsObsolete = true;
+					// In case of groups we only mark user defined
+					// groups as obsolete
+					if (fixedIdKey.startsWith(model.GROUP_PROPERTY_PREFIX)) {
+						int valueAsInt = 0;
+						try {
+							valueAsInt = Integer.decode(value).intValue();
+						} catch (NumberFormatException e) {
+							// Corrupted.
+							valueAsInt = 0;
+						}
+						if (valueAsInt < GroupNames.USER_GROUP_ID_FIRST) {
+							markAsObsolete = false;
+						}
+					}
+					if (markAsObsolete) {
+						// If OBSOLETE tag text already exit, do not
+						// add that again
+						if (fixedIdKey
+								.startsWith(model.OBSOLETE_PROPERTY_PREFIX)) {
+							ids.setProperty(fixedIdKey, value);
+						} else {
+							ids.setProperty(model.OBSOLETE_PROPERTY_PREFIX
+									+ fixedIdKey, value);
+						}
+					}
+				}
+			}
+		}
+		return ids;
+	}
+
+	/**
+	 * Creates the parameters for new project
+	 * 
+	 * @param projectPath
+	 *            the project path
+	 * @param projectName
+	 *            the name for the project
+	 * @return the parameters
+	 */
+	private CreateProjectParameters createParameters(String projectPath,
+			String projectName) {
+		CreateProjectParameters queryData = new CreateProjectParameters();
+		queryData.traceProjectPath = projectPath + File.separator
+				+ ProjectEngine.traceFolderName;
+		queryData.traceProjectName = projectName;
+		queryData.traceProjectID = DEFAULT_PROJECT_ID;
+		return queryData;
+	}
+
+	/**
+	 * Creates the project file from query results
+	 * 
+	 * @param queryData
+	 *            the query result
+	 * @throws TraceCompilerException 
+	 */
+	private void createEmptyProjectFile(CreateProjectParameters queryData) throws TraceCompilerException {
+		model.setName(queryData.traceProjectName);
+		model.setID(queryData.traceProjectID);
+		String componentName = model.getName();
+		TraceCompilerProject file = new TraceCompilerProject(
+				queryData.traceProjectPath, componentName);
+		createAPI(file);
+	}
+
+	/**
+	 * Creates the project API
+	 * 
+	 * @param file
+	 *            the project file
+	 */
+	private void createAPI(TraceCompilerProject file) {
+		model.addExtension(file);
+		TraceAPIPluginManager plugin = model
+				.getExtension(TraceAPIPluginManager.class);
+		plugin.createDefaultAPI();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/SortedProperties.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,198 @@
+/*
+* Copyright (c) 2008-2010 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:
+*
+* Sorted properties
+*
+*/
+package com.nokia.tracecompiler.engine.project;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Properties;
+import java.util.Vector;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+
+/**
+ * Sorted properties
+ * 
+ */
+public final class SortedProperties extends Properties {
+
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = 746540919659257261L;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.util.Hashtable#keys()
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public synchronized Enumeration<Object> keys() {
+		Enumeration<Object> keysEnum = super.keys();
+		Vector keyList = new Vector();
+		while (keysEnum.hasMoreElements()) {
+			keyList.add(keysEnum.nextElement());
+		}
+		Collections.sort(keyList);
+		return keyList.elements();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.util.Properties#store(java.io.OutputStream, java.lang.String)
+	 */
+	@Override
+	public synchronized void store(OutputStream out, String comments)
+			throws IOException {
+		BufferedWriter awriter;
+		awriter = new BufferedWriter(new OutputStreamWriter(out, "8859_1")); //$NON-NLS-1$
+		String licence = TraceCompilerEngineGlobals.getDefaultLicence(false);
+		if (licence != null) {
+			out.write(licence.getBytes());
+		}
+		if (comments != null)
+			writeln(awriter, "#" + comments); //$NON-NLS-1$
+
+		for (Enumeration<Object> e = keys(); e.hasMoreElements();) {
+			String key = (String) e.nextElement();
+			String val = (String) get(key);
+			key = saveConvert(key, true);
+
+			/*
+			 * No need to escape embedded and trailing spaces for value, hence
+			 * pass false to flag.
+			 */
+			val = saveConvert(val, false);
+			writeln(awriter, key + "=" + val); //$NON-NLS-1$
+		}
+		awriter.flush();
+	}
+
+	/**
+	 * Converts unicodes to encoded &#92;uxxxx and escapes special characters
+	 * with a preceding slash
+	 * 
+	 * @param theString
+	 *            the string to be convert
+	 * @param escapeSpace
+	 *            the escape space flag
+	 * @return the coverted string
+	 */
+	private String saveConvert(String theString, boolean escapeSpace) { // CodForChk_Dis_ComplexFunc
+		int len = theString.length();
+		int bufLen = len * 2; // CodForChk_Dis_Magic
+		if (bufLen < 0) {
+			bufLen = Integer.MAX_VALUE;
+		}
+		StringBuffer outBuffer = new StringBuffer(bufLen);
+
+		for (int x = 0; x < len; x++) {
+			char aChar = theString.charAt(x);
+			// Handle common case first, selecting largest block that
+			// avoids the specials below
+			if ((aChar > 61) && (aChar < 127)) { // CodForChk_Dis_Magic
+				if (aChar == '\\') {
+					outBuffer.append('\\');
+					outBuffer.append('\\');
+					continue;
+				}
+				outBuffer.append(aChar);
+				continue;
+			}
+			switch (aChar) {
+			case ' ':
+				if (x == 0 || escapeSpace)
+					outBuffer.append('\\');
+				outBuffer.append(' ');
+				break;
+			case '\t':
+				outBuffer.append('\\');
+				outBuffer.append('t');
+				break;
+			case '\n':
+				outBuffer.append('\\');
+				outBuffer.append('n');
+				break;
+			case '\r':
+				outBuffer.append('\\');
+				outBuffer.append('r');
+				break;
+			case '\f':
+				outBuffer.append('\\');
+				outBuffer.append('f');
+				break;
+			case '=': // Fall through
+			case ':': // Fall through
+			case '#': // Fall through
+			case '!':
+				outBuffer.append('\\');
+				outBuffer.append(aChar);
+				break;
+			default:
+				if ((aChar < 0x0020) || (aChar > 0x007e)) { // CodForChk_Dis_Magic
+					outBuffer.append('\\');
+					outBuffer.append('u');
+					outBuffer.append(toHex((aChar >> 12) & 0xF)); // CodForChk_Dis_Magic
+					outBuffer.append(toHex((aChar >> 8) & 0xF)); // CodForChk_Dis_Magic
+					outBuffer.append(toHex((aChar >> 4) & 0xF)); // CodForChk_Dis_Magic
+					outBuffer.append(toHex(aChar & 0xF)); // CodForChk_Dis_Magic
+				} else {
+					outBuffer.append(aChar);
+				}
+			}
+		}
+		return outBuffer.toString();
+	}
+
+	/**
+	 * Convert a nibble to a hex character
+	 * 
+	 * @param nibble
+	 *            the nibble to convert
+	 * @return the hex character
+	 */
+	private static char toHex(int nibble) {
+		return hexDigit[(nibble & 0xF)]; // CodForChk_Dis_Magic
+	}
+
+	/**
+	 * A table of hex digits
+	 */
+	private static final char[] hexDigit = { '0', '1', '2', '3', '4', '5', '6',
+			'7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+
+	/**
+	 * Write line
+	 * 
+	 * @param bw
+	 *            the buffered writer that used to write
+	 * @param s
+	 *            the string what to write
+	 * @throws IOException
+	 */
+	private static void writeln(BufferedWriter bw, String s) throws IOException {
+		bw.write(s);
+		bw.newLine();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/TraceCompilerProject.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2008 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:
+*
+* TraceCompiler project file properties
+*
+*/
+package com.nokia.tracecompiler.engine.project;
+
+import com.nokia.tracecompiler.project.TraceProjectFile;
+
+/**
+ * TraceCompiler project file properties
+ * 
+ */
+final class TraceCompilerProject extends TraceProjectFile {
+
+	/**
+	 * Title shown in UI
+	 */
+	private static final String TITLE = Messages
+			.getString("TraceCompilerProject.Title"); //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 * 
+	 * @param absolutePath
+	 *            the path to the file, including file name
+	 */
+	TraceCompilerProject(String absolutePath) {
+		super(absolutePath, true);
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param path
+	 *            the path to the file
+	 * @param name
+	 *            the file name
+	 */
+	TraceCompilerProject(String path, String name) {
+		super(path, name);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectFile#getFileExtension()
+	 */
+	@Override
+	protected String getFileExtension() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectFile#getTitle()
+	 */
+	@Override
+	public String getTitle() {
+		return TITLE;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/TraceIDCache.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Cache file for storing trace and group identifiers
+*
+*/
+package com.nokia.tracecompiler.engine.project;
+
+import com.nokia.tracecompiler.project.TraceProjectFile;
+
+/**
+ * Cache file for storing trace and group identifiers
+ * 
+ */
+public final class TraceIDCache extends TraceProjectFile {
+
+	/**
+	 * Title shown in UI
+	 */
+	private static final String TITLE = Messages
+			.getString("TraceIDCache.Title"); //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 * 
+	 * @param cachePath
+	 *            path to the cache file
+	 */
+	public TraceIDCache(String cachePath) {
+		super(cachePath, ""); //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectFile#getFileExtension()
+	 */
+	@Override
+	protected String getFileExtension() {
+		return ProjectConstants.FIXED_ID_DEFINITIONS_FILE_NAME;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectFile#getTitle()
+	 */
+	@Override
+	public String getTitle() {
+		return TITLE;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/messages.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,5 @@
+ProjectFileParser.SourceFileDoesNotExist=Source file referenced by traces does not exist
+ProjectFileParser.ErrorWhileProcessing=An error occurred while processing the project file
+TraceCompilerProject.Title=Project File
+TraceIDCache.Title=Trace ID Cache File
+ProjectConstants.FixedIdDefinitionFileTitle=Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/project/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+TraceCompiler project file management
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/DocumentElementWrapper.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Extension wrapper for XML document element
+*
+*/
+package com.nokia.tracecompiler.engine.propertyfile;
+
+import org.w3c.dom.Element;
+
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceObject;
+
+/**
+ * Extension wrapper for XML document element
+ * 
+ */
+final class DocumentElementWrapper implements TraceModelExtension {
+
+	/**
+	 * Owner
+	 */
+	private TraceObject owner;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param element
+	 *            the document element
+	 */
+	DocumentElementWrapper(Element element) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#getOwner()
+	 */
+	public TraceObject getOwner() {
+		return owner;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#setOwner(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void setOwner(TraceObject owner) {
+		this.owner = owner;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/EnumElementParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Parser for enum element
+*
+*/
+package com.nokia.tracecompiler.engine.propertyfile;
+
+import org.w3c.dom.Element;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceConstantTable;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+
+/**
+ * Parser for enum element
+ * 
+ */
+final class EnumElementParser implements PropertyFileElementParser {
+
+	/**
+	 * Property file parser
+	 */
+	private final PropertyFileParser propertyFileParser;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param propertyFileParser
+	 *            the parser
+	 */
+	EnumElementParser(PropertyFileParser propertyFileParser) {
+		this.propertyFileParser = propertyFileParser;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.propertyfile.PropertyFileElementParser#
+	 *      parse(java.lang.Object, org.w3c.dom.Element)
+	 */
+	public void parse(Object owner, Element element)
+			throws TraceCompilerException {
+		TraceModel model = TraceCompilerEngineGlobals.getTraceModel();
+		String name = element
+				.getAttribute(PropertyFileConstants.NAME_ATTRIBUTE);
+		int id = model.getNextConstantTableID();
+		model.getVerifier().checkConstantTableProperties(model, null, id, name);
+		// Document element reference is stored to the model
+		TraceModelExtension[] exts = new TraceModelExtension[] { new DocumentElementWrapper(
+				element) };
+		TraceConstantTable table = model.getFactory().createConstantTable(id,
+				name, exts);
+		propertyFileParser.parseChildren(table, element);
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/FileElementParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2008 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:
+*
+* FIle element parser
+*
+*/
+package com.nokia.tracecompiler.engine.propertyfile;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.w3c.dom.Element;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.project.ProjectEngine;
+import com.nokia.tracecompiler.engine.source.SourceEngine;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+/**
+ * File element parser
+ * 
+ */
+final class FileElementParser implements PropertyFileElementParser {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.propertyfile.PropertyFileElementParser#
+	 *      parse(java.lang.Object, org.w3c.dom.Element)
+	 */
+	public void parse(Object owner, Element element)
+			throws TraceCompilerException {
+		String filePath = element.getTextContent();
+		SourceEngine sourceEngine = TraceCompilerEngineGlobals.getSourceEngine();
+		ArrayList<String> list = sourceEngine.getNonSourceFiles();
+
+		String projectPath = TraceCompilerEngineGlobals.getProjectPath();
+
+		File file = new File(projectPath + File.separatorChar
+				+ ProjectEngine.traceFolderName + File.separatorChar + filePath);
+
+		try {
+			filePath = file.getCanonicalPath();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		if (!list.contains(filePath)) {
+			sourceEngine.addNonSourceFile(filePath);
+		}
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/Messages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Localization for property file package
+*
+*/
+package com.nokia.tracecompiler.engine.propertyfile;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Localization for property file package
+ * 
+ */
+class Messages {
+
+	/**
+	 * Bundle name
+	 */
+	private static final String BUNDLE_NAME = "com.nokia.tracecompiler.engine.propertyfile.messages"; //$NON-NLS-1$
+
+	/**
+	 * Bundle
+	 */
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Prevents construction
+	 */
+	private Messages() {
+	}
+
+	/**
+	 * Gets localized string based on key
+	 * 
+	 * @param key
+	 *            the resource key
+	 * @return the localized resource
+	 */
+	public static String getString(String key) {
+		String value;
+		try {
+			value = RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			value = '!' + key + '!';
+		}
+		return value;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/PropertyFileConstants.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,118 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Constants for property file engine
+*
+*/
+package com.nokia.tracecompiler.engine.propertyfile;
+
+
+/**
+ * Constants for property file engine
+ * 
+ */
+public interface PropertyFileConstants {
+
+	/**
+	 * File name
+	 */
+	String PROPERTY_FILE_NAME = "trace.properties"; //$NON-NLS-1$
+
+	/**
+	 * Number of backup files to keep
+	 */
+	int BACKUP_COUNT = 10; // CodForChk_Dis_Magic
+
+	/**
+	 * Last of the backup headers
+	 */
+	String LAST_BACKUP = "9.properties.bak"; //$NON-NLS-1$
+
+	/**
+	 * Backup extension
+	 */
+	String BACKUP_EXTENSION = ".bak"; //$NON-NLS-1$
+
+	/**
+	 * Root element name
+	 */
+	String ROOT_ELEMENT = "trace_properties"; //$NON-NLS-1$
+
+	/**
+	 * Enum element name
+	 */
+	String ENUM_ELEMENT = "enum"; //$NON-NLS-1$
+
+	/**
+	 * Struct element name
+	 */
+	String STRUCT_ELEMENT = "struct"; //$NON-NLS-1$
+
+	/**
+	 * Component element name
+	 */
+	String COMPONENT_ELEMENT = "component"; //$NON-NLS-1$
+
+	/**
+	 * Component element name
+	 */
+	String GROUP_ELEMENT = "group"; //$NON-NLS-1$
+
+	/**
+	 * Trace element name
+	 */
+	String TRACE_ELEMENT = "trace"; //$NON-NLS-1$
+
+	/**
+	 * Value element name
+	 */
+	String VALUE_ELEMENT = "value"; //$NON-NLS-1$
+
+	/**
+	 * Property element name
+	 */
+	String PROPERTY_ELEMENT = "property"; //$NON-NLS-1$
+
+	/**
+	 * File element name
+	 */
+	String FILE_ELEMENT = "file"; //$NON-NLS-1$
+	
+	/**
+	 * Name attribute
+	 */
+	String NAME_ATTRIBUTE = "name"; //$NON-NLS-1$
+
+	/**
+	 * Format attribute
+	 */
+	String FORMAT_ATTRIBUTE = "format"; //$NON-NLS-1$
+
+	/**
+	 * ID attribute
+	 */
+	String ID_ATTRIBUTE = "id"; //$NON-NLS-1$
+
+	/**
+	 * Type attribute
+	 */
+	String TYPE_ATTRIBUTE = "type"; //$NON-NLS-1$
+
+	/**
+	 * Size attribute
+	 */
+	String SIZE_ATTRIBUTE = "size"; //$NON-NLS-1$
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/PropertyFileElementParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Property file element parser interface
+*
+*/
+package com.nokia.tracecompiler.engine.propertyfile;
+
+import org.w3c.dom.Element;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+/**
+ * Property file element parser interface
+ * 
+ */
+interface PropertyFileElementParser {
+
+	/**
+	 * Parses the given element
+	 * 
+	 * @param owner
+	 *            the owning object
+	 * @param element
+	 *            the element to be parsed
+	 * @throws TraceCompilerException
+	 *             if parser fails
+	 */
+	void parse(Object owner, Element element) throws TraceCompilerException;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/PropertyFileEngine.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Property file management engine
+*
+*/
+package com.nokia.tracecompiler.engine.propertyfile;
+
+import java.io.File;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineBase;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.project.ProjectEngine;
+import com.nokia.tracecompiler.file.FileUtils;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.project.ProjectUtils;
+import com.nokia.tracecompiler.source.SourceConstants;
+
+/**
+ * Property file management engine
+ * 
+ */
+public final class PropertyFileEngine extends TraceCompilerEngineBase {
+
+	/**
+	 * Trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param model
+	 *            the trace model
+	 */
+	public PropertyFileEngine(TraceModel model) {
+		this.model = model;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngine#projectOpened()
+	 */
+	@Override
+	public void projectOpened() throws TraceCompilerException {
+		TracePropertyFile propertyFile = model
+				.getExtension(TracePropertyFile.class);
+		if (propertyFile == null) {
+			String fileName = null;
+			try {
+				fileName = ProjectUtils.getLocationForFile(model,
+						ProjectEngine.traceFolderName,
+						PropertyFileConstants.PROPERTY_FILE_NAME, false);
+			} catch (TraceCompilerException e) {
+				// Model should always be open when traceProjectOpened is
+				// called
+			}
+			if (fileName != null) {
+				propertyFile = parsePropertyFile(fileName);
+			}
+		}
+		if (propertyFile == null) {
+			String msg = Messages
+					.getString("PropertyFileEngine.FailedToAttachFile"); //$NON-NLS-1$
+			TraceCompilerEngineGlobals.getEvents().postErrorMessage(msg, null, true);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngine#projectClosing()
+	 */
+	@Override
+	public void projectClosed() {
+		model.removeExtensions(TracePropertyFile.class);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngine#exportProject()
+	 */
+	@Override
+	public void exportProject() {
+	}
+
+	/**
+	 * Parses the property file
+	 * 
+	 * @param fileName
+	 *            the file path
+	 * @return the property file
+	 */
+	private TracePropertyFile parsePropertyFile(String fileName) {
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		factory.setValidating(false);
+		DocumentBuilder builder;
+		TracePropertyFile propertyFile = null;
+		try {
+			builder = factory.newDocumentBuilder();
+			File file = new File(fileName);
+			if (file.exists()) {
+				try {
+					PropertyFileParser parser = new PropertyFileParser(model,
+							fileName, builder);
+					parser.parse();
+					propertyFile = new TracePropertyFile(file.getParent(),
+							parser.getDocument());
+				} catch (TraceCompilerException e) {
+					// Problem parsing document -> Backup and create new
+					TraceCompilerEngineGlobals.getEvents().postError(e);
+					createBackup(fileName);
+				}
+			}
+			if (propertyFile == null) {
+				propertyFile = new TracePropertyFile(file.getParent(), builder
+						.newDocument());
+			}
+			model.addExtension(propertyFile);
+		} catch (ParserConfigurationException e) {
+		}
+		return propertyFile;
+	}
+
+	/**
+	 * Creates a backup of the property file
+	 * 
+	 * @param path
+	 *            the file to be backed up
+	 */
+	private void createBackup(String path) {
+		boolean backup = false;
+		File file = new File(path);
+		if (file.exists()) {
+			boolean allexist = true;
+			// Checks the existing backup files and renames the old file to
+			// largest available number starting from 0
+			File f = null;
+			for (int i = 0; i < PropertyFileConstants.BACKUP_COUNT && allexist; i++) {
+				f = new File(path + i + PropertyFileConstants.BACKUP_EXTENSION);
+				if (!f.exists()) {
+					backup = FileUtils.copyFile(file, f);
+					allexist = false;
+				}
+			}
+			if (allexist) {
+				// If all backups from 0 to 9 exist, the old ones are moved
+				// back 1 step. The new file is renamed to *9.h
+				for (int i = 0; i < PropertyFileConstants.BACKUP_COUNT; i++) {
+					f = new File(path + i
+							+ PropertyFileConstants.BACKUP_EXTENSION);
+					if (i == 0) {
+						f.delete();
+					} else {
+						f.renameTo(new File(path + (i - 1)
+								+ PropertyFileConstants.BACKUP_EXTENSION));
+					}
+				}
+				f = new File(path + PropertyFileConstants.LAST_BACKUP);
+				backup = FileUtils.copyFile(file, f);
+			}
+			if (f != null && backup) {
+				String msg = Messages
+						.getString("PropertyFileEngine.PropertyFileBackUpPrefix") //$NON-NLS-1$
+						+ FileUtils.convertSeparators(
+								SourceConstants.FORWARD_SLASH_CHAR, f
+										.getAbsolutePath(), false);
+				TraceCompilerEngineGlobals.getEvents().postInfoMessage(msg, null);
+			}
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/PropertyFileParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Parser for trace property files
+*
+*/
+package com.nokia.tracecompiler.engine.propertyfile;
+
+import java.util.HashMap;
+
+import javax.xml.parsers.DocumentBuilder;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.StringErrorParameters;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.project.ProjectFileParser;
+
+/**
+ * Parser for trace property files
+ * 
+ */
+final class PropertyFileParser extends ProjectFileParser {
+
+	/**
+	 * DOM document representing the property file
+	 */
+	private Document document;
+
+	/**
+	 * Parsers for document elements
+	 */
+	private HashMap<String, PropertyFileElementParser> elementParsers = new HashMap<String, PropertyFileElementParser>();
+
+	/**
+	 * Document builder
+	 */
+	private DocumentBuilder builder;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param model
+	 *            the trace model
+	 * @param fileName
+	 *            the property file name
+	 * @param builder
+	 *            document builder
+	 * @throws TraceCompilerException
+	 *             if parser cannot be created
+	 */
+	protected PropertyFileParser(TraceModel model, String fileName,
+			DocumentBuilder builder) throws TraceCompilerException {
+		super(model, fileName);
+		this.builder = builder;
+		elementParsers.put(PropertyFileConstants.ENUM_ELEMENT,
+				new EnumElementParser(this));
+		elementParsers.put(PropertyFileConstants.VALUE_ELEMENT,
+				new ValueElementParser());
+		elementParsers.put(PropertyFileConstants.FILE_ELEMENT,
+				new FileElementParser());
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.ProjectFileParser#createParser()
+	 */
+	@Override
+	protected void createParser() throws TraceCompilerException {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.ProjectFileParser#parse()
+	 */
+	@Override
+	public void parse() throws TraceCompilerException {
+		try {
+			document = builder.parse(projectFile);
+			Element rootElement = PropertyFileUtils.findRoot(document);
+			if (rootElement != null) {
+				parseChildren(model, rootElement);
+			} else {
+				throw new TraceCompilerException(
+						TraceCompilerErrorCode.INVALID_PROJECT_FILE);
+			}
+		} catch (TraceCompilerException e) {
+			throw e;
+		} catch (Exception e) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.INVALID_PROJECT_FILE, e);
+		}
+	}
+
+	/**
+	 * Parses child elements of given element
+	 * 
+	 * @param owner
+	 *            the owning object
+	 * @param element
+	 *            the element
+	 */
+	void parseChildren(Object owner, Element element) {
+		NodeList list;
+		list = element.getChildNodes();
+		for (int i = 0; i < list.getLength(); i++) {
+			Node node = list.item(i);
+			if (node.getNodeType() == Node.ELEMENT_NODE) {
+				parseElement(owner, (Element) node);
+			}
+		}
+	}
+
+	/**
+	 * Parses an element
+	 * 
+	 * @param owner
+	 *            the owning trace object
+	 * @param element
+	 *            the element to be parsed
+	 */
+	private void parseElement(Object owner, Element element) {
+		String name = element.getNodeName();
+		PropertyFileElementParser parser = elementParsers.get(name);
+		if (parser != null) {
+			try {
+				parser.parse(owner, element);
+			} catch (TraceCompilerException e) {
+				String msg = TraceCompilerEngineErrorMessages.getErrorMessage(e);
+				TraceCompilerEngineGlobals.getEvents().postWarningMessage(msg,
+						e.getErrorSource());
+			}
+		} else {
+			postElementNotSupportedWarning(name);
+		}
+	}
+
+	/**
+	 * Posts element not supported warning
+	 * 
+	 * @param name
+	 *            the element name
+	 */
+	private void postElementNotSupportedWarning(String name) {
+		StringErrorParameters parameter = new StringErrorParameters();
+		parameter.string = name;
+		String msg = TraceCompilerEngineErrorMessages.getErrorMessage(
+				TraceCompilerErrorCode.PROPERTY_FILE_ELEMENT_NOT_SUPPORTED,
+				parameter);
+		TraceCompilerEngineGlobals.getEvents().postWarningMessage(msg, null);
+	}
+
+	/**
+	 * Gets the document representing the property file
+	 * 
+	 * @return the document
+	 */
+	Document getDocument() {
+		return document;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/PropertyFileUtils.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Utility functions for property file
+*
+*/
+package com.nokia.tracecompiler.engine.propertyfile;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * Utility functions for property file
+ * 
+ */
+final class PropertyFileUtils {
+
+	/**
+	 * Finds the root element from property file document
+	 * 
+	 * @param document
+	 *            the document
+	 * @return the root element
+	 */
+	static Element findRoot(Document document) {
+		NodeList list = document.getChildNodes();
+		Element rootElement = null;
+		for (int i = 0; i < list.getLength(); i++) {
+			Node root = list.item(i);
+			if (root.getNodeType() == Node.ELEMENT_NODE) {
+				if (root.getNodeName().equalsIgnoreCase(
+						PropertyFileConstants.ROOT_ELEMENT)) {
+					rootElement = (Element) root;
+				}
+			}
+		}
+		return rootElement;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/TracePropertyFile.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Trace property file properties
+*
+*/
+package com.nokia.tracecompiler.engine.propertyfile;
+
+import org.w3c.dom.Document;
+
+import com.nokia.tracecompiler.project.TraceProjectFile;
+
+/**
+ * Trace property file properties
+ * 
+ */
+final class TracePropertyFile extends TraceProjectFile {
+
+	/**
+	 * Title shown in UI
+	 */
+	private static final String PROPERTY_FILE = Messages
+			.getString("TracePropertyFile.Title"); //$NON-NLS-1$
+
+	/**
+	 * Creates a new property file
+	 * 
+	 * @param filePath
+	 *            path to the file
+	 * @param document
+	 *            the document representing the property file
+	 */
+	TracePropertyFile(String filePath, Document document) {
+		super(filePath, ""); //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectFile#getFileExtension()
+	 */
+	@Override
+	protected String getFileExtension() {
+		return PropertyFileConstants.PROPERTY_FILE_NAME;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectFile#getTitle()
+	 */
+	@Override
+	public String getTitle() {
+		return PROPERTY_FILE;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/ValueElementParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Value element parser
+*
+*/
+package com.nokia.tracecompiler.engine.propertyfile;
+
+import org.w3c.dom.Element;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.StringErrorParameters;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceConstantTable;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+
+/**
+ * Value element parser
+ * 
+ */
+final class ValueElementParser implements PropertyFileElementParser {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.propertyfile.PropertyFileElementParser#
+	 *      parse(java.lang.Object, org.w3c.dom.Element)
+	 */
+	public void parse(Object owner, Element element)
+			throws TraceCompilerException {
+		// Value element must be parsed within context of TraceConstantTable
+		// Struct has not yet been implemented
+		if (owner instanceof TraceConstantTable) {
+			parseConstantTableEntry((TraceConstantTable) owner, element);
+		} else {
+			StringErrorParameters parameter = new StringErrorParameters();
+			parameter.string = PropertyFileConstants.VALUE_ELEMENT;
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.PROPERTY_FILE_ELEMENT_MISPLACED,
+					parameter, null);
+		}
+	}
+
+	/**
+	 * Parses a constant table entry
+	 * 
+	 * @param table
+	 *            the constant table
+	 * @param element
+	 *            the table entry
+	 * @throws TraceCompilerException
+	 *             if entry is not valid
+	 */
+	private void parseConstantTableEntry(TraceConstantTable table,
+			Element element) throws TraceCompilerException {
+		String idstr = element.getAttribute(PropertyFileConstants.ID_ATTRIBUTE);
+		if (idstr != null) {
+			try {
+				int id = Integer.parseInt(idstr);
+				String value = element.getTextContent();
+				table.getModel().getVerifier().checkConstantProperties(table,
+						null, id, value);
+				// Document element reference is stored to the model
+				TraceModelExtension[] exts = new TraceModelExtension[] { new DocumentElementWrapper(
+						element) };
+				table.getModel().getFactory().createConstantTableEntry(table,
+						id, value, exts);
+			} catch (NumberFormatException e) {
+				StringErrorParameters parameter = new StringErrorParameters();
+				parameter.string = PropertyFileConstants.ID_ATTRIBUTE;
+				throw new TraceCompilerException(
+						TraceCompilerErrorCode.PROPERTY_FILE_ATTRIBUTE_INVALID,
+						parameter, null);
+			}
+		}
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/propertyfile/messages.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,5 @@
+TracePropertyFile.Title=Property File
+PropertyFileEngine.FailedToAttachFile=Failed to attach property file to project
+PropertyFileEngine.PropertyFileBackUpPrefix=Property file back-up created to 
+TraceObjectPropertyList.Title=Properties
+TraceObjectPropertyImpl.NameValueSeparator=: 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ArrayParameterRuleImpl.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Rule which defines a parameter as array type
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.model.TraceModelPersistentExtension;
+import com.nokia.tracecompiler.rules.ArrayParameterRule;
+
+/**
+ * Rule which defines a parameter as array type
+ * 
+ */
+final class ArrayParameterRuleImpl extends RuleBase implements
+		ArrayParameterRule, TraceModelPersistentExtension {
+
+	/**
+	 * Storage name for array parameter
+	 */
+	static final String STORAGE_NAME = "Array"; //$NON-NLS-1$
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#getData()
+	 */
+	public String getData() {
+		return ""; //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#getStorageName()
+	 */
+	public String getStorageName() {
+		return STORAGE_NAME;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#
+	 *      setData(java.lang.String)
+	 */
+	public boolean setData(String data) {
+		return true;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutoAddFunctionParametersRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,298 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Trace rule for automatically adding function parameters to a trace
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import java.util.ArrayList;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.StringErrorParameters;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.header.ComplexHeaderRule;
+import com.nokia.tracecompiler.engine.source.TraceParameterFormattingRule;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceConstantTable;
+import com.nokia.tracecompiler.model.TraceObjectRuleCreateObject;
+import com.nokia.tracecompiler.model.TraceObjectRuleRemoveOnCreate;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceContext;
+import com.nokia.tracecompiler.source.SourceParameter;
+import com.nokia.tracecompiler.source.SourceParserException;
+import com.nokia.tracecompiler.source.SourceUtils;
+import com.nokia.tracecompiler.source.TypeMapping;
+
+/**
+ * Trace rule for automatically adding function parameters to a trace
+ * 
+ */
+public final class AutoAddFunctionParametersRule extends RuleBase implements
+		TraceObjectRuleCreateObject, TraceObjectRuleRemoveOnCreate {
+
+	/**
+	 * Warning about value-to-pointer conversion
+	 */
+	private static final String VALUE_TO_POINTER_WARNING = Messages
+			.getString("AutoAddFunctionParametersRule.UnrecognizedTypeWarning"); //$NON-NLS-1$
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.nokia.tracecompiler.model.TraceObjectRuleCreateObject#createObject()
+	 */
+	public void createObject() throws TraceCompilerException {
+		SourceContext context = TraceCompilerEngineGlobals.getSourceContextManager()
+				.getContext();
+		Trace trace = (Trace) getOwner();
+		if (context != null) {
+			boolean valid = false;
+			ArrayList<SourceParameter> list = tokenizeParameters(context);
+
+			trace.getModel().startProcessing();
+			try {
+				createParameters(trace, list);
+			} finally {
+				trace.getModel().processingComplete();
+			}
+			// At least one parameter must be parsed from source except for function entry extension
+			valid = trace.getParameterCount() > 0 || trace.getExtension(EntryTraceRule.class) != null;
+
+			if (!valid) {
+				String msg = TraceCompilerEngineErrorMessages.getErrorMessage(
+						TraceCompilerErrorCode.CANNOT_PARSE_FUNCTION_PARAMETERS,
+						null);
+				TraceCompilerEngineGlobals.getEvents().postWarningMessage(msg, trace);
+				// Removes the complex rule -> Function is not generated and
+				// source does not compile
+				trace.removeExtensions(ComplexHeaderRule.class);
+			}
+		} else {
+			String msg = TraceCompilerEngineErrorMessages.getErrorMessage(
+					TraceCompilerErrorCode.NO_CONTEXT_FOR_LOCATION, null);
+			TraceCompilerEngineGlobals.getEvents().postErrorMessage(msg, null, true);
+			// Removes the complex rule -> Function is not generated and
+			// source does not compile
+			trace.removeExtensions(ComplexHeaderRule.class);
+		}
+	}
+
+	/**
+	 * Creates the parameters to the trace
+	 * 
+	 * @param owner
+	 *            the trace
+	 * @param list
+	 *            the parameter list parsed from source
+	 * @throws TraceCompilerException 
+	 */
+	private void createParameters(Trace owner, ArrayList<SourceParameter> list) throws TraceCompilerException {
+
+		// If any of the parameters is "...", clear the whole parameter list
+		for (SourceParameter param : list) {
+			String type = param.getType();
+			if (type != null
+					&& type.equals(SourceConstants.VARIABLE_ARG_LIST_INDICATOR)) {
+				list.clear();
+				
+				
+				String msg = TraceCompilerEngineErrorMessages.getErrorMessage(
+						TraceCompilerErrorCode.VAR_ARG_LIST_PARAMETER_FOUND,
+						null);
+				TraceCompilerEngineGlobals.getEvents().postWarningMessage(msg, owner);
+				break;
+			}
+		}
+
+		StringBuilder str = new StringBuilder();
+		for (SourceParameter param : list) {
+			TraceParameter parameter = createParameter(owner, param);
+			if (parameter != null) {
+				str.append(SourceConstants.PARAMETER_SEPARATOR);
+				TraceParameterFormattingRule rule = parameter
+						.getExtension(TraceParameterFormattingRule.class);
+				if (rule != null) {
+					str.append(rule.mapNameToSource(param.getName()));
+				} else {
+					str.append(param.getName());
+				}
+			}
+			// The location will be referenced by event handlers if
+			// they need it. Otherwise it will be removed from the
+			// source
+			param.getSourceLocation().dereference();
+		}
+		// The header extension is stored in case of complex function entry
+		// trace
+		EntryTraceRule entryRule = owner.getExtension(EntryTraceRule.class);
+		ComplexHeaderRuleImpl complex = owner
+				.getExtension(ComplexHeaderRuleImpl.class);
+		if (entryRule != null && complex != null) {
+			complex.setTraceIDDefineExtension(str.toString());
+		}
+	}
+
+	/**
+	 * Processes the parameters of given source context
+	 * 
+	 * @param context
+	 *            the context
+	 * @return list of parameters
+	 * @throws TraceCompilerException 
+	 */
+	private ArrayList<SourceParameter> tokenizeParameters(SourceContext context) throws TraceCompilerException {
+		ArrayList<SourceParameter> list = new ArrayList<SourceParameter>();
+		try {
+			context.parseParameters(list);
+		} catch (SourceParserException e) {
+			TraceCompilerException exception = new TraceCompilerException(
+					TraceCompilerErrorCode.UNEXPECTED_EXCEPTION, e);
+			TraceCompilerEngineGlobals.getEvents().postError(
+					exception);
+			list = null;
+		}
+		return list;
+	}
+
+	/**
+	 * Creates a TraceParameter based on parameter parsed from source
+	 * 
+	 * @param owner
+	 *            the owning trace object
+	 * @param param
+	 *            the parameter found from source
+	 * @return the parameter
+	 */
+	private TraceParameter createParameter(Trace owner, SourceParameter param) {
+		TraceConstantTable foundTable = RuleUtils.findConstantTableByType(owner
+				.getModel(), param);
+		TraceParameter parameter = null;
+		if (foundTable == null) {
+			TypeMapping type = SourceUtils.mapSymbianTypeToParameterType(param);
+			if (type != null) {
+				if (!type.isVoid()) {
+					parameter = createParameter(owner, param, type);
+				}
+			} else {
+				StringErrorParameters params = new StringErrorParameters();
+				params.string = param.getType();
+				TraceCompilerException exception = new TraceCompilerException(
+						TraceCompilerErrorCode.INVALID_PARAMETER_TYPE,
+						params, param.getSourceLocation());
+				TraceCompilerEngineGlobals.getEvents().postError(
+						exception);
+			}
+		} else {
+			parameter = createParameter(owner, param, foundTable);
+		}
+		return parameter;
+	}
+
+	/**
+	 * Processes a non-void parameter type that was not associated with a
+	 * constant table
+	 * 
+	 * @param owner
+	 *            the owner for the parameter
+	 * @param param
+	 *            the parameter found from source
+	 * @param type
+	 *            the parameter type as parsed by source package
+	 * @return the parameter
+	 */
+	private TraceParameter createParameter(Trace owner, SourceParameter param,
+			TypeMapping type) {
+		String name = param.getName();
+		TraceParameter retval = null;
+		if (name == null || name.length() == 0) {
+			String s = TraceCompilerEngineErrorMessages.getErrorMessage(
+					TraceCompilerErrorCode.EMPTY_PARAMETER_NAME, null);
+			TraceCompilerEngineGlobals.getEvents().postWarningMessage(s,
+					param.getSourceLocation());
+		} else {
+			try {
+				retval = RuleUtils.createParameterFromType(owner, name, type);
+				if (retval != null && type.valueToPointer) {
+					// Posts a warning about value-to-pointer conversion
+					TraceCompilerEngineGlobals.getEvents()
+							.postWarningMessage(VALUE_TO_POINTER_WARNING,
+									param.getSourceLocation());
+				}
+			} catch (TraceCompilerException e) {
+				// Changes the source of the error to the location that failed
+				TraceCompilerException exception = new TraceCompilerException(e.getErrorCode(), e
+						.getErrorParameters(), param
+						.getSourceLocation());
+				TraceCompilerEngineGlobals.getEvents().postError(
+						exception);
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Processes a non-void parameter type that was associated with a constant
+	 * table
+	 * 
+	 * @param owner
+	 *            the owner for the parameter
+	 * @param param
+	 *            the parameter found from source
+	 * @param table
+	 *            the constant table the parameter was associated to
+	 * @return the parameter
+	 */
+	private TraceParameter createParameter(Trace owner, SourceParameter param,
+			TraceConstantTable table) {
+		String name = param.getName();
+		TraceParameter retval = null;
+		if (name == null || name.length() == 0) {
+			String s = TraceCompilerEngineErrorMessages.getErrorMessage(
+					TraceCompilerErrorCode.EMPTY_PARAMETER_NAME, null);
+			TraceCompilerEngineGlobals.getEvents().postWarningMessage(s,
+					param.getSourceLocation());
+		} else {
+			try {
+				retval = RuleUtils.createParameterFromConstantTable(owner,
+						name, table);
+			} catch (TraceCompilerException e) {
+				// Changes the source of the error to the location that failed
+				TraceCompilerException exception = new TraceCompilerException(e.getErrorCode(), e
+						.getErrorParameters(), param
+						.getSourceLocation());
+				TraceCompilerEngineGlobals.getEvents().postError(
+						exception);
+			}
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.nokia.tracecompiler.model.TraceObjectRuleRemoveOnCreate#canBeRemoved()
+	 */
+	public boolean canBeRemoved() {
+		// This is not copied to exit trace -> Can be removed
+		return true;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutoAddParameterRuleBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for the auto-add parameter rules
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.utils.TraceMultiplierRule;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceObjectRule;
+import com.nokia.tracecompiler.model.TraceObjectRuleCreateObject;
+import com.nokia.tracecompiler.model.TraceObjectRuleRemoveOnCreate;
+import com.nokia.tracecompiler.model.TraceObjectUtils;
+
+/**
+ * Base class for the auto-add parameter rules
+ * 
+ */
+abstract class AutoAddParameterRuleBase extends RuleBase implements
+		TraceObjectRuleCreateObject, TraceObjectRuleRemoveOnCreate {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectRuleCreateObject#createObject()
+	 */
+	public void createObject() throws TraceCompilerException {
+		TraceObjectRule rule = getRule();
+		TraceModelExtension[] extensions = null;
+		if (rule != null) {
+			extensions = new TraceModelExtension[] { rule };
+		}
+		Trace owner = (Trace) getOwner();
+		int id = owner.getNextParameterID();
+		String name = TraceObjectUtils.modifyDuplicateParameterName(owner,
+				getName()).getData();
+		String type = getType();
+		try {
+			owner.getModel().getVerifier().checkTraceParameterProperties(owner,
+					null, id, name, type);
+			owner.getModel().getFactory().createTraceParameter(owner, id, name,
+					type, extensions);
+		} catch (TraceCompilerException e) {
+			TraceCompilerEngineGlobals.getEvents().postError(e);
+				throw e;
+		}
+	}
+
+	/**
+	 * Gets the name for the new parameter
+	 * 
+	 * @return the parameter name
+	 */
+	protected abstract String getName();
+
+	/**
+	 * Gets the new parameter type
+	 * 
+	 * @return the type
+	 */
+	protected abstract String getType();
+
+	/**
+	 * Gets the rule for the parameter
+	 * 
+	 * @return the rule
+	 */
+	protected abstract TraceObjectRule getRule();
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectRuleRemoveOnCreate#canBeRemoved()
+	 */
+	public boolean canBeRemoved() {
+		// If the owner has a multiplier, this needs to be moved to it using the
+		// CopyAndRemoveExtensionRule
+		return getOwner().getExtension(TraceMultiplierRule.class) == null;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutoAddReturnParameterRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Trace rule for automatically adding function return value to exit trace
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import java.util.ArrayList;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.utils.TraceMultiplierRule;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceConstantTable;
+import com.nokia.tracecompiler.model.TraceObjectRuleCreateObject;
+import com.nokia.tracecompiler.model.TraceObjectRuleRemoveOnCreate;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.source.SourceContext;
+import com.nokia.tracecompiler.source.SourceParserException;
+import com.nokia.tracecompiler.source.SourceReturn;
+import com.nokia.tracecompiler.source.SourceUtils;
+import com.nokia.tracecompiler.source.TypeMapping;
+
+/**
+ * Trace rule for automatically adding function return value to exit trace
+ * 
+ */
+public final class AutoAddReturnParameterRule extends RuleBase implements
+		TraceObjectRuleCreateObject, TraceObjectRuleRemoveOnCreate {
+
+	/**
+	 * Parameter name
+	 */
+	static final String PARAMETER_NAME = "retval"; //$NON-NLS-1$
+
+	/**
+	 * The number of handled return statements
+	 */
+	private static int numberOfHandledReturnStatements = 0;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectRuleCreateObject#
+	 *      createObject(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void createObject() throws TraceCompilerException {
+		// If owner has a multiplier (entry trace), the trace is not added to it
+		Trace owner = (Trace) getOwner();
+		if (owner.getExtension(TraceMultiplierRule.class) == null) {
+			SourceContext context = TraceCompilerEngineGlobals
+					.getSourceContextManager().getContext();
+			if (!context.isVoid()) {
+				TraceConstantTable table = RuleUtils.findConstantTableByType(
+						owner.getModel(), context);
+				if (table != null) {
+					createParameter(owner, table);
+				} else {
+					createParameter(owner, context);
+				}
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectRuleRemoveOnCreate#canBeRemoved()
+	 */
+	public boolean canBeRemoved() {
+		// If the owner has a multiplier, this needs to be moved to it using the
+		// CopyAndRemoveExtensionRule
+		return getOwner().getExtension(TraceMultiplierRule.class) == null;
+	}
+
+	/**
+	 * Creates a return parameter that was not associated with a constant table
+	 * 
+	 * @param owner
+	 *            the owner for the parameter
+	 * @param context
+	 *            the context specifying the parameter type 
+	 */
+	private void createParameter(Trace owner, SourceContext context) {
+		TypeMapping type = SourceUtils.mapSymbianTypeToParameterType(context);
+		String return_value_name = PARAMETER_NAME;
+		ArrayList<SourceReturn> returnList = new ArrayList<SourceReturn>();
+
+		// Find out return value name
+		try {
+			context.parseReturnValues(returnList);
+			if (numberOfHandledReturnStatements <= (returnList.size() - 1)) {
+				return_value_name = returnList.get(
+						numberOfHandledReturnStatements).getReturnStatement();
+			}
+
+			numberOfHandledReturnStatements++;
+		} catch (SourceParserException e) {
+			String msg = Messages
+					.getString("RuleUtils.FailedToParseReturnValues"); //$NON-NLS-1$
+			String cname = context.getClassName();
+			String source;
+			if (cname != null) {
+				source = cname + "::" + context.getFunctionName(); //$NON-NLS-1$;
+			} else {
+				source = context.getFunctionName();
+			}
+			TraceCompilerEngineGlobals.getEvents().postErrorMessage(msg, source, true);
+		}
+
+		try {
+			if (!type.needsCasting) {
+				// If an extension header is generated, the parameter needs to
+				// be cast, since the return statement may contain anything.
+				type.needsCasting = type.type != TraceParameter.HEX32
+						&& type.type != TraceParameter.SDEC32
+						&& type.type != TraceParameter.UDEC32;
+			}
+			RuleUtils.createParameterFromType(owner, return_value_name, type);
+
+		} catch (TraceCompilerException e) {
+
+			if (e.getErrorCode() == TraceCompilerErrorCode.INVALID_PARAMETER_NAME) {
+				String msg = TraceCompilerEngineErrorMessages
+						.getErrorMessage(
+								TraceCompilerErrorCode.INVALID_PARAMETER_NAME_IN_RETURN_VALUE,
+								null);
+
+				TraceCompilerEngineGlobals.getEvents().postWarningMessage(msg, owner);
+			} else {
+				TraceCompilerException exception = new TraceCompilerException(e.getErrorCode(), e
+						.getErrorParameters(), null);
+				TraceCompilerEngineGlobals.getEvents().postError(
+						exception);
+			}
+		}
+	}
+
+	/**
+	 * Creates a return parameter that was associated with a constant table
+	 * 
+	 * @param owner
+	 *            the owner for the parameter
+	 * @param table
+	 *            the constant table the parameter was associated to
+	 */
+	private void createParameter(Trace owner, TraceConstantTable table) {
+		try {
+			RuleUtils.createParameterFromConstantTable(owner, PARAMETER_NAME,
+					table);
+		} catch (TraceCompilerException e) {
+			TraceCompilerException exception = new TraceCompilerException(e.getErrorCode(), e
+					.getErrorParameters(), null);
+			TraceCompilerEngineGlobals.getEvents().postError(
+					exception);
+		}
+	}
+
+	/**
+	 * Reset static variables
+	 */
+	static void resetNumberOfHandledReturnStatements() {
+		numberOfHandledReturnStatements = 0;
+	}
+
+	/**
+	 * Increase number of handled return statements
+	 */
+	static void increaseNumberOfHandledReturnStatements() {
+		numberOfHandledReturnStatements++;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutoAddThisPtrRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Creation rule for this parameter
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceObjectRule;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.source.SourceContext;
+
+/**
+ * Creation rule for "this pointer" parameter
+ * 
+ */
+public final class AutoAddThisPtrRule extends AutoAddParameterRuleBase {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.AutoAddParameterRuleBase#createObject()
+	 */
+	@Override
+	public void createObject() throws TraceCompilerException {
+		SourceContext context = TraceCompilerEngineGlobals.getSourceContextManager()
+				.getContext();
+		if (context != null && !RuleUtils.isStaticFunction(context)) {
+			super.createObject();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.AutoAddParameterRuleBase#getName()
+	 */
+	@Override
+	protected String getName() {
+		return ThisPointerParameterTemplate.PARAMETER_NAME;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.AutoAddParameterRuleBase#getRule()
+	 */
+	@Override
+	protected TraceObjectRule getRule() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.AutoAddParameterRuleBase#getType()
+	 */
+	@Override
+	protected String getType() {
+		return TraceParameter.HEX32;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutoAddValueRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Creation rule for value parameter
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceObjectRule;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.source.SourceContext;
+
+/**
+ * Creation rule for "value" parameter
+ * 
+ */
+public final class AutoAddValueRule extends AutoAddParameterRuleBase {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.AutoAddParameterRuleBase#createObject()
+	 */
+	@Override
+	public void createObject() throws TraceCompilerException {
+		SourceContext context = TraceCompilerEngineGlobals.getSourceContextManager()
+				.getContext();
+		if (context != null) {
+			super.createObject();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.AutoAddParameterRuleBase#getName()
+	 */
+	@Override
+	protected String getName() {
+		return ValueParameterTemplate.PARAMETER_NAME;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.AutoAddParameterRuleBase#getRule()
+	 */
+	@Override
+	protected TraceObjectRule getRule() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.AutoAddParameterRuleBase#getType()
+	 */
+	@Override
+	protected String getType() {
+		return TraceParameter.SDEC32;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/AutomaticTraceTextRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rule which specifies that trace does not have user-defined text
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.source.SourceContext;
+
+/**
+ * Rule which specifies that trace does not have user-defined text
+ * 
+ */
+public abstract class AutomaticTraceTextRule extends RuleBase {
+
+	/**
+	 * Formats a trace according to given source context
+	 * 
+	 * @param context
+	 *            the context
+	 * @return the trace
+	 */
+	public abstract String formatTrace(SourceContext context);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ClassNameWrapper.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Wrapper for Class and name
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.model.TraceModelPersistentExtension;
+
+/**
+ * Wrapper for persistent extension class and name
+ * 
+ */
+class ClassNameWrapper {
+
+	/**
+	 * Constructor
+	 * 
+	 * @param name
+	 *            the name
+	 * @param clasz
+	 *            the class
+	 */
+	ClassNameWrapper(String name,
+			Class<? extends TraceModelPersistentExtension> clasz) {
+		this.name = name;
+		this.clasz = clasz;
+	}
+
+	/**
+	 * Name for the class
+	 */
+	String name;
+
+	/**
+	 * The class
+	 */
+	Class<? extends TraceModelPersistentExtension> clasz;
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ComplexHeaderRuleImpl.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2007 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 ComplexHeaderRule
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.header.ComplexHeaderRule;
+
+/**
+ * Implementation of ComplexHeaderRule
+ * 
+ */
+public final class ComplexHeaderRuleImpl extends RuleBase implements
+		ComplexHeaderRule {
+
+	/**
+	 * Trace ID define extension
+	 */
+	private String traceIDDefineExtension;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.ComplexHeaderRule#needsFunction()
+	 */
+	public boolean needsFunction() {
+		return true;
+	}
+
+	/**
+	 * Sets the data to be added to the trace ID define statement after the ID
+	 * 
+	 * @param traceIDDefineExtension
+	 *            the extension
+	 */
+	void setTraceIDDefineExtension(String traceIDDefineExtension) {
+		this.traceIDDefineExtension = traceIDDefineExtension;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.header.ComplexHeaderRule#getTraceIDDefineExtension()
+	 */
+	public String getTraceIDDefineExtension() {
+		return traceIDDefineExtension;
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/EndOfFunctionLocationRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Location rule for end of function
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.source.SourceLocationRule;
+
+/**
+ * Location rule for end of function
+ * 
+ */
+public final class EndOfFunctionLocationRule extends RuleBase implements
+		SourceLocationRule {
+
+	/**
+	 * Location rule offset. Should be large enough to cover a function
+	 */
+	private static final int OFFSET = 100000; // CodForChk_Dis_Magic
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceLocationRule#getType()
+	 */
+	public int getLocationType() {
+		return SourceLocationRule.CONTEXT_RELATIVE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceLocationRule#getOffset()
+	 */
+	public int getLocationOffset() {
+		return OFFSET;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceLocationRule#isRemovedAfterInsert()
+	 */
+	public boolean isRemovedAfterInsert() {
+		return true;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/EntryTraceRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Rule for entry traces
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.utils.TraceUtils;
+import com.nokia.tracecompiler.source.SourceContext;
+
+/**
+ * Rule for entry traces
+ * 
+ */
+public class EntryTraceRule extends AutomaticTraceTextRule {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.AutomaticTraceTextRule#
+	 *      formatTrace(com.nokia.tracecompiler.source.SourceContext)
+	 */
+	@Override
+	public String formatTrace(SourceContext context) {
+		return TraceUtils.formatTrace(RuleUtils.TEXT_FORMAT_BASE, context
+				.getClassName(), context.getFunctionName());
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ExitTracePropertyBuilder.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Creates exit traces from entry traces
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+/**
+ * Creates exit traces from entry traces
+ * 
+ */
+interface ExitTracePropertyBuilder {
+
+	/**
+	 * Gets the name for exit trace
+	 * 
+	 * @param entryName
+	 *            name of the entry trace
+	 * @return the name for exit trace
+	 */
+	String createExitName(String entryName);
+
+	/**
+	 * Gets the exit trace text based on entry trace
+	 * 
+	 * @param entryText
+	 *            entry trace text
+	 * @return the text for exit trace
+	 */
+	String createExitText(String entryText);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ExitTraceRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Rule for exit traces
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.utils.TraceUtils;
+import com.nokia.tracecompiler.source.SourceContext;
+
+/**
+ * Rule for exit traces
+ * 
+ */
+public class ExitTraceRule extends AutomaticTraceTextRule {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.AutomaticTraceTextRule#
+	 *      formatTrace(com.nokia.tracecompiler.source.SourceContext)
+	 */
+	@Override
+	public String formatTrace(SourceContext context) {
+		return TraceUtils.formatTrace(RuleUtils.TEXT_FORMAT_BASE, context
+				.getClassName(), context.getFunctionName());
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ExtensionBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for model extensions
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceObject;
+
+/**
+ * Base class for model extensions
+ * 
+ */
+public class ExtensionBase implements TraceModelExtension {
+
+	/**
+	 * The owning trace object
+	 */
+	private TraceObject owner;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#
+	 *      setOwner(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void setOwner(TraceObject owner) {
+		this.owner = owner;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#getOwner()
+	 */
+	public TraceObject getOwner() {
+		return owner;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/FillerParameterRuleImpl.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Filler parameter rule implementation
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.rules.FillerParameterRule;
+
+/**
+ * Filler parameter rule implementation. This returns false from isShownInSource
+ * 
+ */
+final class FillerParameterRuleImpl extends TraceParameterFormattingRuleBase
+		implements FillerParameterRule {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.TraceParameterFormattingRule#isShownInSource()
+	 */
+	@Override
+	public boolean isShownInSource() {
+		return false;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/Messages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Localized strings for rules package
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Localized strings for rules package
+ * 
+ */
+class Messages {
+
+	/**
+	 * Bundle name
+	 */
+	private static final String BUNDLE_NAME = "com.nokia.tracecompiler.engine.rules.messages"; //$NON-NLS-1$
+
+	/**
+	 * Bundle
+	 */
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Prevents construction
+	 */
+	private Messages() {
+
+	}
+
+	/**
+	 * Gets localized string based on key
+	 * 
+	 * @param key
+	 *            the resource key
+	 * @return the localized resource
+	 */
+	public static String getString(String key) {
+		String value;
+		try {
+			value = RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			value = '!' + key + '!';
+		}
+		return value;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ParameterTypeMappingRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Trace parameter rule for adding casting and pointer operations to source code
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.model.TraceModelPersistentExtension;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceUtils;
+import com.nokia.tracecompiler.source.TypeMapping;
+
+/**
+ * Trace parameter rule for adding casting and pointer operations to source code
+ * 
+ */
+final class ParameterTypeMappingRule extends TraceParameterFormattingRuleBase
+		implements TraceModelPersistentExtension {
+
+	/**
+	 * TTime.Int64() function
+	 */	
+	private static final String INT64_FUNCTION = ".Int64()"; //$NON-NLS-1$
+
+	/**
+	 * The type mapping
+	 */
+	private TypeMapping typeMapping;
+
+	/**
+	 * Storage name for this parameter
+	 */
+	static String STORAGE_NAME = "TypeMapping"; //$NON-NLS-1$
+
+	/**
+	 * Constructor for reflection
+	 */
+	ParameterTypeMappingRule() {
+		typeMapping = new TypeMapping(null);
+	}
+
+	/**
+	 * Creates a new type mapping rule
+	 * 
+	 * @param mapping
+	 *            the type mapping to be used
+	 */
+	ParameterTypeMappingRule(TypeMapping mapping) {
+		this.typeMapping = mapping;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.TraceParameterFormattingRuleBase#
+	 *      mapNameToSource(java.lang.String)
+	 */
+	@Override
+	public String mapNameToSource(String originalName) {
+		StringBuffer source = new StringBuffer();
+		if (typeMapping.type.equals(TraceParameter.TIME)) {
+			source.append(originalName);
+			source.append(INT64_FUNCTION);
+		} else {
+			if (typeMapping.needsCasting) {
+				source.append(SourceConstants.START_PARAMETERS);
+				TraceParameter param = (TraceParameter) getOwner();
+				source.append(SourceUtils.mapParameterTypeToSymbianType(param));
+				source.append(SourceConstants.END_PARAMETERS);
+			}
+			if (typeMapping.valueToPointer) {
+				source.append('&');
+			}
+			source.append(SourceConstants.START_PARAMETERS);
+			source.append(originalName);
+			source.append(SourceConstants.END_PARAMETERS);
+		}
+		return source.toString();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#getData()
+	 */
+	public String getData() {
+		StringBuffer sb = new StringBuffer();
+		if (typeMapping.needsCasting) {
+			sb.append('C');
+		}
+		if (typeMapping.valueToPointer) {
+			sb.append('V');
+		}
+		return sb.toString();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#getStorageName()
+	 */
+	public String getStorageName() {
+		return STORAGE_NAME;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#setData(java.lang.String)
+	 */
+	public boolean setData(String data) {
+		boolean retval = false;
+		if (data != null) {
+			for (int i = 0; i < data.length(); i++) {
+				char c = data.charAt(i);
+				switch (c) {
+				case 'C':
+					typeMapping.needsCasting = true;
+					retval = true;
+					break;
+				case 'V':
+					typeMapping.valueToPointer = true;
+					retval = true;
+					break;
+				}
+			}
+		}
+		return retval;
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/PerformanceEventRuleBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for performance event rules
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+
+/**
+ * Base class for performance event rules
+ * 
+ */
+public class PerformanceEventRuleBase extends RuleBase {
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/PerformanceEventStartRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Rule for performance timer entry trace
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+
+/**
+ * Rule for performance timer entry trace
+ * 
+ */
+public class PerformanceEventStartRule extends PerformanceEventRuleBase {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/PerformanceEventStopRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Performance timer exit trace rule
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+/**
+ * Performance timer exit trace rule
+ * 
+ */
+public final class PerformanceEventStopRule extends PerformanceEventRuleBase {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ReadOnlyObjectRuleImpl.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Read-only rule implementation
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.rules.ReadOnlyObjectRule;
+
+/**
+ * Read-only rule implementation
+ * 
+ */
+public final class ReadOnlyObjectRuleImpl extends RuleBase implements
+		ReadOnlyObjectRule {
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RuleBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for rules
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.model.TraceObjectRule;
+
+/**
+ * Base class for rules
+ * 
+ */
+public class RuleBase extends ExtensionBase implements TraceObjectRule {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RuleUtils.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,320 @@
+/*
+ * 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:
+ *
+ * Utility functions for rules package
+ *
+ */
+package com.nokia.tracecompiler.engine.rules;
+
+import java.util.Iterator;
+import java.util.List;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineConfiguration;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceConstantTable;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceObjectUtils;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.source.ParsedType;
+import com.nokia.tracecompiler.source.SourceContext;
+import com.nokia.tracecompiler.source.SourceParserException;
+import com.nokia.tracecompiler.source.SourceReturn;
+import com.nokia.tracecompiler.source.TypeMapping;
+
+/**
+ * Utility functions for rules package
+ * 
+ */
+public final class RuleUtils {
+
+	/**
+	 * Entry-exit template
+	 */
+	public static final int TYPE_ENTRY_EXIT = 0; // CodForChk_Dis_Magic
+
+	/**
+	 * Start-stop event template
+	 */
+	public static final int TYPE_PERF_EVENT = 1; // CodForChk_Dis_Magic
+
+	/**
+	 * State trace template
+	 */
+	public static final int TYPE_STATE_TRACE = 2; // CodForChk_Dis_Magic
+
+	/**
+	 * Trace name format base
+	 */
+	static final String NAME_FORMAT_BASE = "{$CN}_{$FN}"; //$NON-NLS-1$
+
+	/**
+	 * Trace text format base
+	 */
+	static final String TEXT_FORMAT_BASE = "{$cn}::{$fn}"; //$NON-NLS-1$
+
+	/**
+	 * Template titles
+	 */
+	private static final String[] ENTRY_TEMPLATE_TITLES = {
+			Messages.getString("RuleUtils.FunctionEntryTitle"), //$NON-NLS-1$
+			Messages.getString("RuleUtils.PerformanceEventTitle"), //$NON-NLS-1$
+			Messages.getString("RuleUtils.StateTraceTitle"), //$NON-NLS-1$
+	};
+
+	/**
+	 * Entry name prefixes
+	 */
+	public static final String[] ENTRY_NAME_PREFIXES = { "", //$NON-NLS-1$
+			"EVENT_", //$NON-NLS-1$
+			"STATE_" //$NON-NLS-1$
+	};
+
+	/**
+	 * Entry name suffixes
+	 */
+	public static final String[] ENTRY_NAME_SUFFIXES = { "_ENTRY", //$NON-NLS-1$
+			"_START", //$NON-NLS-1$
+			"" //$NON-NLS-1$
+	};
+
+	/**
+	 * Exit name prefixes
+	 */
+	private static final String[] EXIT_NAME_PREFIXES = { "", //$NON-NLS-1$
+			"EVENT_", //$NON-NLS-1$
+			"" //$NON-NLS-1$
+	};
+
+	/**
+	 * Exit name suffixes
+	 */
+	public static final String[] EXIT_NAME_SUFFIXES = { "_EXIT", //$NON-NLS-1$
+			"_STOP", //$NON-NLS-1$
+			"" //$NON-NLS-1$
+	};
+
+	/**
+	 * Gets an entry template title
+	 * 
+	 * @param type
+	 *            the template type
+	 * @return the template title
+	 */
+	static String getEntryTemplateTitle(int type) {
+		return ENTRY_TEMPLATE_TITLES[type];
+	}
+
+	/**
+	 * Creates exit name from entry name
+	 * 
+	 * @param entryName
+	 *            the entry name
+	 * @param type
+	 *            the type of entry
+	 * @return the exit name
+	 */
+	static String createExitName(String entryName, int type) {
+		// Strips the duplicate modifier from the name
+		entryName = TraceObjectUtils.removeDuplicateModifier(entryName);
+		StringBuffer sb = new StringBuffer();
+		if (entryName.startsWith(ENTRY_NAME_PREFIXES[type])) {
+			entryName = entryName.substring(ENTRY_NAME_PREFIXES[type].length());
+		}
+		if (entryName.endsWith(ENTRY_NAME_SUFFIXES[type])) {
+			entryName = entryName.substring(0, entryName.length()
+					- ENTRY_NAME_SUFFIXES[type].length());
+		}
+		sb.append(EXIT_NAME_PREFIXES[type]);
+		sb.append(entryName);
+		sb.append(EXIT_NAME_SUFFIXES[type]);
+		return sb.toString();
+	}
+
+	/**
+	 * Creates an entry trace name format from type
+	 * 
+	 * @param type
+	 *            the trace format type
+	 * @return the trace name format
+	 */
+	public static String createEntryTraceNameFormat(int type) {
+		StringBuffer sb = new StringBuffer();
+		if (type == TYPE_PERF_EVENT || type == TYPE_STATE_TRACE) {
+			sb.append(NAME_FORMAT_BASE);
+		} else {
+			sb.append(ENTRY_NAME_PREFIXES[type]);
+			sb.append(NAME_FORMAT_BASE);
+			sb.append(ENTRY_NAME_SUFFIXES[type]);
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Creates an exit trace name format based on type
+	 * 
+	 * @param type
+	 *            the format type
+	 * @return the trace name format
+	 */
+	public static String createExitTraceNameFormat(int type) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(EXIT_NAME_PREFIXES[type]);
+		sb.append(NAME_FORMAT_BASE);
+		sb.append(EXIT_NAME_SUFFIXES[type]);
+		return sb.toString();
+	}
+
+	/**
+	 * Gets the return statements from current context from the context manager.
+	 * 
+	 * @param returnStatements
+	 *            the list where the return statements are stored
+	 */
+	static void getCurrentContextReturns(List<SourceReturn> returnStatements) {
+		SourceContext context = TraceCompilerEngineGlobals.getSourceContextManager()
+				.getContext();
+		if (context != null) {
+			try {
+				context.parseReturnValues(returnStatements);
+			} catch (SourceParserException e) {
+				String msg = Messages
+						.getString("RuleUtils.FailedToParseReturnValues"); //$NON-NLS-1$
+				String cname = context.getClassName();
+				String source;
+				if (cname != null) {
+					source = cname + "::" + context.getFunctionName(); //$NON-NLS-1$;
+				} else {
+					source = context.getFunctionName();
+				}
+				TraceCompilerEngineGlobals.getEvents().postErrorMessage(msg, source,
+						true);
+			}
+		} else {
+			if (TraceCompilerEngineConfiguration.ASSERTIONS_ENABLED) {
+				TraceCompilerEngineGlobals.getEvents().postAssertionFailed(
+						"Function return not in function", null); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * Checks if the function is static. Currently this is just dummy, checking
+	 * that the class name exists and the function name is not New / NewL /
+	 * NewLC
+	 * 
+	 * @param context
+	 *            the context to be checked
+	 * @return true if static, false if not
+	 */
+	static boolean isStaticFunction(SourceContext context) {
+		boolean retval;
+		if (context.getClassName() == null) {
+			retval = true;
+		} else {
+			String fname = context.getFunctionName();
+			if (fname.equals("New") //$NON-NLS-1$
+					|| fname.equals("NewL") //$NON-NLS-1$
+					|| fname.equals("NewLC") //$NON-NLS-1$
+			) {
+				retval = true;
+			} else {
+				retval = false;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Locates a constant table based on type definition parsed from source
+	 * 
+	 * @param model
+	 *            the trace model
+	 * @param type
+	 *            the parameter type
+	 * @return the constant table or null if not found
+	 */
+	static TraceConstantTable findConstantTableByType(TraceModel model,
+			ParsedType type) {
+		Iterator<TraceConstantTable> tables = model.getConstantTables();
+		TraceConstantTable foundTable = null;
+		while (tables.hasNext() && foundTable == null) {
+			TraceConstantTable table = tables.next();
+			if (type.typeEquals(table.getName())) {
+				foundTable = table;
+			}
+		}
+		return foundTable;
+	}
+
+	/**
+	 * Creates a parameter based on TypeMapping definition
+	 * 
+	 * @param owner
+	 *            the parameter owner
+	 * @param name
+	 *            the parameter name
+	 * @param type
+	 *            the type mapping
+	 * @return the parameter
+	 * @throws TraceCompilerException
+	 *             if parameter cannot be created
+	 */
+	static TraceParameter createParameterFromType(Trace owner, String name,
+			TypeMapping type) throws TraceCompilerException {
+		int id = owner.getNextParameterID();
+		owner.getModel().getVerifier().checkTraceParameterProperties(owner,
+				null, id, name, type.type);
+		TraceModelExtension[] extensions = null;
+		if (type.needsCasting || type.valueToPointer
+				|| type.type.equals(TraceParameter.TIME)) {
+			extensions = new TraceModelExtension[1];
+			extensions[0] = new ParameterTypeMappingRule(type);
+		}
+		TraceParameter parameter = owner.getModel().getFactory()
+				.createTraceParameter(owner, id, name, type.type, extensions);
+		return parameter;
+	}
+
+	/**
+	 * Creates a parameter object from constant table
+	 * 
+	 * @param owner
+	 *            the parameter owner
+	 * @param name
+	 *            the name for the parameter
+	 * @param table
+	 *            the constant table
+	 * @return the parameter
+	 * @throws TraceCompilerException
+	 *             if parameter cannot be created
+	 */
+	static TraceParameter createParameterFromConstantTable(Trace owner,
+			String name, TraceConstantTable table) throws TraceCompilerException {
+		int id = owner.getNextParameterID();
+		owner.getModel().getVerifier().checkTraceParameterProperties(owner,
+				null, id, name, table.getType());
+		// Constant tables need a cast to constant table type
+		TypeMapping type = new TypeMapping(table.getType());
+		type.needsCasting = true;
+		TraceModelExtension[] extensions = new TraceModelExtension[1];
+		extensions[0] = new ParameterTypeMappingRule(type);
+		return owner.getModel().getFactory().createTraceParameter(owner, id,
+				name, table.getName(), extensions);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngine.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,383 @@
+/*
+* Copyright (c) 2007 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 TraceObjectRuleFactory interface
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineConfiguration;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineConfigurationListener;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.header.ComplexHeaderRule;
+import com.nokia.tracecompiler.engine.rules.osttrace.OstTraceFormatRule;
+import com.nokia.tracecompiler.engine.source.SourceParserRule;
+import com.nokia.tracecompiler.engine.source.TraceParameterFormattingRule;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceModelListener;
+import com.nokia.tracecompiler.model.TraceModelPersistentExtension;
+import com.nokia.tracecompiler.model.TraceModelResetListener;
+import com.nokia.tracecompiler.model.TraceObject;
+import com.nokia.tracecompiler.model.TraceObjectRuleFactory;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.project.TraceProjectAPI;
+import com.nokia.tracecompiler.rules.FillerParameterRule;
+import com.nokia.tracecompiler.source.SourceUtils;
+
+/**
+ * Provides rules for trace objects.
+ * 
+ */
+public class RulesEngine implements TraceObjectRuleFactory {
+
+	/**
+	 * Number of parameters in a simple trace
+	 */
+	private static final int SIMPLE_TRACE_MAX_PARAMETER_COUNT = 1;
+
+	/**
+	 * Trace model listener updates the fillers and complex type flagging when
+	 * traces and parameters are modified
+	 */
+	private TraceModelListener modelListener;
+
+	/**
+	 * Trace model reset listener uses modelValid to update the complex header
+	 * rules
+	 */
+	private TraceModelResetListener resetListener;
+
+	/**
+	 * Manager for plug-in API's
+	 */
+	private RulesEnginePluginManager pluginManager;
+
+	/**
+	 * Configuration listener for source format changes
+	 */
+	private TraceCompilerEngineConfigurationListener configurationListener = new RulesEngineConfigurationListener(
+			this);
+
+	/**
+	 * Trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * Constructor
+	 */
+	public RulesEngine() {
+		TraceCompilerEngineGlobals.getConfiguration().addConfigurationListener(
+				configurationListener);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectRuleFactory#
+	 *      createExtension(com.nokia.tracecompiler.model.TraceObject,
+	 *      java.lang.String)
+	 */
+	public TraceModelPersistentExtension createExtension(TraceObject target,
+			String name) {
+		TraceModelPersistentExtension retval = null;
+		ClassNameWrapper[] table = RulesEngineConstants.PERSISTENT_EXTENSIONS;
+		for (int i = 0; i < table.length && retval == null; i++) {
+			if (name.equals(table[i].name)) {
+				retval = createPersistentExtensionAt(target, i);
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Creates a persistent extension
+	 * 
+	 * @param target
+	 *            the target object
+	 * @param i
+	 *            index to the persistent extensions array
+	 * @return the extension
+	 */
+	private TraceModelPersistentExtension createPersistentExtensionAt(
+			TraceObject target, int i) {
+		ClassNameWrapper wrapper = RulesEngineConstants.PERSISTENT_EXTENSIONS[i];
+		TraceModelPersistentExtension retval = null;
+		TraceModelPersistentExtension o = target.getExtension(wrapper.clasz);
+		if (o == null) {
+			try {
+				retval = wrapper.clasz.newInstance();
+			} catch (Exception e) {
+				if (TraceCompilerEngineConfiguration.ASSERTIONS_ENABLED) {
+					TraceCompilerEngineGlobals.getEvents().postAssertionFailed(
+							"Invalid extension - " + wrapper.name, null); //$NON-NLS-1$
+				}
+			}
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectRuleFactory#
+	 *      preProcessNewRules(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void preProcessNewRules(TraceObject object) {
+		if (object instanceof TraceModel) {
+			// NOTE: This is only called once when builder is started
+			// There is no cleanup code
+			this.model = (TraceModel) object;
+			modelListener = new RulesEngineModelListener(this);
+			resetListener = new RulesEngineResetListener(this, model);
+			model.addModelListener(modelListener);
+			model.addResetListener(resetListener);
+			// Adds the plug-in trace parser / formatter manager to the model as
+			// extension. The plug-in manager delegates the formatters and
+			// parsers to this object when plug-in components register to
+			// TraceCompiler.
+			pluginManager = new RulesEnginePluginManager(this);
+			model.addExtension(pluginManager);
+			createTraceParsers();
+			createTraceAPIs();
+		}
+	}
+
+	/**
+	 * Creates the trace parsers and stores them to the model
+	 */
+	private void createTraceParsers() {
+		for (SourceParserRule element : RulesEngineConstants.TRACE_PARSERS) {
+			// Creates all source parsers specified in the constants
+			model.addExtension(element);
+		}
+	}
+
+	/**
+	 * Creates the default trace API's and adds them to the plug-in manager
+	 */
+	private void createTraceAPIs() {
+		for (TraceProjectAPI api : RulesEngineConstants.TRACE_APIS) {
+			pluginManager.addAPI(api);
+		}
+	}
+
+	/**
+	 * Creates the trace formatter and stores it to the model
+	 */
+	void setDefaultTraceAPI() {
+		// If the formatter did not exist in the project file, it is added based
+		// on the configuration default
+		if (model.getExtension(TraceProjectAPI.class) == null) {
+			String api = TraceCompilerEngineGlobals.getConfiguration().getText(
+					TraceCompilerEngineConfiguration.FORMATTER_NAME);
+			traceAPIChanged(api);
+		}
+	}
+
+	/**
+	 * API change notification
+	 * 
+	 * @param apiName
+	 *            the name of new api
+	 */
+	void traceAPIChanged(String apiName) {
+		TraceProjectAPI api = model.getExtension(TraceProjectAPI.class);
+		boolean found = false;
+		if (api != null) {
+			if (api.getName().equals(apiName)) {
+				found = true;
+			} else {
+				model.removeExtension(api);
+			}
+		}
+		if (!found) {
+			changeTraceAPI(apiName);
+		}
+	}
+
+	/**
+	 * Creates a trace API
+	 * 
+	 * @param apiName
+	 *            the name of the API to be created
+	 */
+	void changeTraceAPI(String apiName) {
+		if (apiName == null || apiName.length() == 0) {
+			apiName = OstTraceFormatRule.STORAGE_NAME;
+		}
+		Iterator<TraceProjectAPI> apis = pluginManager.getAPIs();
+		boolean apifound = false;
+		while (apis.hasNext()) {
+			TraceProjectAPI api = apis.next();
+			if (api.getName().equals(apiName)) {
+				model.addExtension(api);
+				apifound = true;
+			}
+		}
+		if (!apifound) {
+			// If API from configuration was not found, the first one is used
+			apis = pluginManager.getAPIs();
+			if (apis.hasNext()) {
+				model.addExtension(apis.next());
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectRuleFactory#
+	 *      postProcessNewRules(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void postProcessNewRules(TraceObject object) {
+	}
+
+	/**
+	 * Checks the count and types of parameters of given trace and flags it with
+	 * ComplexParameterRule if necessary
+	 * 
+	 * @param trace
+	 *            the trace
+	 */
+	void checkParameterTypes(Trace trace) {
+		// When converting traces from source, the converter takes care of
+		// flagging the traces as complex. The complex flag needs to be checked
+		// when trace are modified via UI
+		if (!TraceCompilerEngineGlobals.getSourceContextManager().isConverting()) {
+			boolean complex = false;
+			int count = trace.getParameterCount();
+			Iterator<TraceParameter> itr = trace.getParameters();
+			while (itr.hasNext() && !complex) {
+				TraceParameter parameter = itr.next();
+				TraceParameterFormattingRule rule = parameter
+						.getExtension(TraceParameterFormattingRule.class);
+				boolean isShown = true;
+				if (rule != null && !rule.isShownInSource()) {
+					isShown = false;
+				}
+				if (isShown) {
+					complex = !SourceUtils.isSimpleType(parameter);
+				} else {
+					count--;
+				}
+			}
+			// Any trace with more than one parameter is a complex trace
+			if (!complex && count > SIMPLE_TRACE_MAX_PARAMETER_COUNT) {
+				complex = true;
+			}
+			ComplexHeaderRule rule = trace
+					.getExtension(ComplexHeaderRule.class);
+			if (complex && rule == null) {
+				trace.addExtension(new ComplexHeaderRuleImpl());
+			} else if (!complex && rule != null) {
+				trace.removeExtension(rule);
+			}
+		}
+	}
+
+	/**
+	 * Adds fillers to align trace parameters to 32-bit boundaries.
+	 * 
+	 * @param trace
+	 *            the trace to be updated
+	 * @throws TraceCompilerException 
+	 */
+	void checkFillerParameters(Trace trace) throws TraceCompilerException {
+		// Flags the model so listeners don't perform intermediate updates
+		trace.getModel().startProcessing();
+		try {
+			// Removes all existing fillers
+			for (int i = 0; i < trace.getParameterCount(); i++) {
+				TraceParameter parameter = trace.getParameter(i);
+				if (parameter.getExtension(FillerParameterRule.class) != null) {
+					trace.removeParameterAt(i);
+					i--;
+				}
+			}
+			int bytesInBlock = 0;
+			int parameterIndex = 0;
+			for (; parameterIndex < trace.getParameterCount(); parameterIndex++) {
+				TraceParameter parameter = trace.getParameter(parameterIndex);
+				int paramSize = SourceUtils.mapParameterTypeToSize(parameter);
+				// Parameters are aligned to 32 bits. Parameter after
+				// end-of-string is aligned dynamically and thus no filler is
+				// created for it
+				if (paramSize == 0 || paramSize == 4 || paramSize == 8) { // CodForChk_Dis_Magic
+					if (bytesInBlock > 0) {
+						int fillerCount = 4 - bytesInBlock; // CodForChk_Dis_Magic
+						for (int i = 0; i < fillerCount; i++) {
+							createFillerParameter(trace, parameterIndex++);
+						}
+						bytesInBlock = 0;
+					}
+				} else if (paramSize == 2) { // CodForChk_Dis_Magic
+					if (bytesInBlock == 1 || bytesInBlock == 3) { // CodForChk_Dis_Magic
+						createFillerParameter(trace, parameterIndex++);
+						// If there was 1 existing byte and filler was added,
+						// the number of bytes in the block is now 4 including
+						// the 2-byte parameter. If there was 3 bytes, the
+						// filler brings it to 4 and the 16-bit parameter
+						// changes it to 2
+						bytesInBlock += 3; // CodForChk_Dis_Magic
+					} else {
+						bytesInBlock += 2; // CodForChk_Dis_Magic
+					}
+					if (bytesInBlock >= 4) { // CodForChk_Dis_Magic
+						bytesInBlock -= 4; // CodForChk_Dis_Magic
+					}
+				} else {
+					bytesInBlock++;
+					if (bytesInBlock == 4) { // CodForChk_Dis_Magic
+						bytesInBlock = 0;
+					}
+				}
+			}
+			// Adds fillers also the the end of the parameter list
+			if (bytesInBlock > 0) {
+				int fillerCount = 4 - bytesInBlock; // CodForChk_Dis_Magic
+				for (int i = 0; i < fillerCount; i++) {
+					createFillerParameter(trace, parameterIndex++);
+				}
+				bytesInBlock = 0;
+			}
+		} finally {
+			trace.getModel().processingComplete();
+		}
+	}
+
+	/**
+	 * Creates a filler parameter
+	 * 
+	 * @param trace
+	 *            the trace for the parameter
+	 * @param parameterIndex
+	 *            the index where the filler is inserted
+	 * @throws TraceCompilerException 
+	 */
+	private void createFillerParameter(Trace trace, int parameterIndex) throws TraceCompilerException {
+		trace.getModel().getFactory().createTraceParameter(parameterIndex,
+				trace, trace.getParameterCount(),
+				"Filler", //$NON-NLS-1$
+				TraceParameter.HEX8,
+				new TraceModelExtension[] { new FillerParameterRuleImpl() });
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngineConfigurationListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Configuration listener
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineConfiguration;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineConfigurationListener;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+
+/**
+ * Configuration listener for rule engine monitors the trace formatting
+ * 
+ */
+final class RulesEngineConfigurationListener implements
+		TraceCompilerEngineConfigurationListener {
+
+	/**
+	 * Rules engine
+	 */
+	private RulesEngine engine;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param engine
+	 *            the rules engine
+	 */
+	RulesEngineConfigurationListener(RulesEngine engine) {
+		this.engine = engine;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerConfigurationListener#configurationCreated()
+	 */
+	public void configurationCreated() {
+		if (TraceCompilerEngineConfiguration.ALLOW_FORMAT_CHANGE) {
+			engine.traceAPIChanged(TraceCompilerEngineGlobals.getConfiguration()
+					.getText(TraceCompilerEngineConfiguration.FORMATTER_NAME));
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngineConstants.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,58 @@
+/*
+* 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:
+*
+* Properties associated with formatting rules
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.rules.osttrace.OstTraceFormatRule;
+import com.nokia.tracecompiler.engine.rules.osttrace.OstTraceParserRule;
+import com.nokia.tracecompiler.engine.source.SourceParserRule;
+import com.nokia.tracecompiler.project.TraceProjectAPI;
+
+/**
+ * Constants for rules engine
+ * 
+ */
+interface RulesEngineConstants {
+
+	/**
+	 * Trace parsers
+	 */
+	SourceParserRule[] TRACE_PARSERS = { new OstTraceParserRule() };
+
+	/**
+	 * Printf parsers
+	 */
+	String[] PRINTF_PARSERS = { "RDebug::Print", //$NON-NLS-1$
+			"Kern::Printf" //$NON-NLS-1$
+	};
+
+	/**
+	 * List of supported API's
+	 */
+	TraceProjectAPI[] TRACE_APIS = { new OstTraceFormatRule() };
+
+	/**
+	 * Persistent extensions
+	 */
+	ClassNameWrapper[] PERSISTENT_EXTENSIONS = {
+			new ClassNameWrapper(ParameterTypeMappingRule.STORAGE_NAME,
+					ParameterTypeMappingRule.class),
+			new ClassNameWrapper(ArrayParameterRuleImpl.STORAGE_NAME,
+					ArrayParameterRuleImpl.class) };
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngineModelListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Trace model listener
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModelListener;
+import com.nokia.tracecompiler.model.TraceObject;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.rules.FillerParameterRule;
+
+/**
+ * Trace model listener
+ * 
+ */
+final class RulesEngineModelListener implements TraceModelListener {
+
+	/**
+	 * Rules engine
+	 */
+	private final RulesEngine engine;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param engine
+	 *            rules engine
+	 */
+	RulesEngineModelListener(RulesEngine engine) {
+		this.engine = engine;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      objectAdded(com.nokia.tracecompiler.model.TraceObject,
+	 *      com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectAdded(TraceObject owner, TraceObject object) {
+		// Updated in objectCreationComplete
+	}
+
+
+	/* (non-Javadoc)
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#objectRemoved(com.nokia.tracecompiler.model.TraceObject, com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectRemoved(TraceObject owner, TraceObject object) throws TraceCompilerException {
+		if (owner instanceof Trace && object instanceof TraceParameter) {
+			engine.checkParameterTypes((Trace) owner);
+			if (object.getExtension(FillerParameterRule.class) == null) {
+				engine.checkFillerParameters((Trace) owner);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      propertyUpdated(com.nokia.tracecompiler.model.TraceObject, int)
+	 */
+	public void propertyUpdated(TraceObject object, int property) throws TraceCompilerException {
+		if (object.getModel().isValid() && object.isComplete()
+				&& object instanceof TraceParameter
+				&& property == TraceModelListener.TYPE) {
+			Trace owner = ((TraceParameter) object).getTrace();
+			if (owner.isComplete()) {
+				engine.checkParameterTypes(owner);
+				engine.checkFillerParameters(owner);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      objectCreationComplete(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectCreationComplete(TraceObject object) throws TraceCompilerException {
+		if (object.getModel().isValid()) {
+			if (object instanceof TraceParameter) {
+				Trace owner = ((TraceParameter) object).getTrace();
+				if (owner.isComplete()) {
+					engine.checkParameterTypes(owner);
+					// When adding fillers, the check is not done
+					if (object.getExtension(FillerParameterRule.class) == null) {
+						engine.checkFillerParameters(owner);
+					}
+				}
+			} else if (object instanceof Trace) {
+				// When a trace with multiple parameters is created, the
+				// above branch does not get entered since the trace is not
+				// yet complete. Check is made after trace is complete
+				if (((Trace) object).getParameterCount() > 0) {
+					engine.checkParameterTypes((Trace) object);
+					engine.checkFillerParameters((Trace) object);
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEnginePluginManager.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Plug-in formatter / parser management
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.engine.plugin.TraceAPIPluginManager;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.model.TraceObject;
+import com.nokia.tracecompiler.plugin.TraceAPIFormatter;
+import com.nokia.tracecompiler.plugin.TraceAPIParser;
+import com.nokia.tracecompiler.project.TraceProjectAPI;
+import com.nokia.tracecompiler.project.TraceProjectAPIList;
+
+/**
+ * Plug-in formatter / parser management
+ * 
+ */
+final class RulesEnginePluginManager implements TraceAPIPluginManager,
+		TraceProjectAPIList {
+
+	/**
+	 * Rules engine
+	 */
+	private RulesEngine engine;
+
+	/**
+	 * Trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * List of API's
+	 */
+	private ArrayList<TraceProjectAPI> apis = new ArrayList<TraceProjectAPI>();
+
+	/**
+	 * Constructor
+	 * 
+	 * @param engine
+	 *            the plug-in engine
+	 */
+	RulesEnginePluginManager(RulesEngine engine) {
+		this.engine = engine;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.plugin.TraceAPIPluginManager#
+	 *      addFormatters(com.nokia.tracecompiler.plugin.TraceAPIFormatter[])
+	 */
+	public void addFormatters(TraceAPIFormatter[] formatters) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.plugin.TraceAPIPluginManager#
+	 *      addParsers(com.nokia.tracecompiler.plugin.TraceAPIParser[])
+	 */
+	public void addParsers(TraceAPIParser[] parsers) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.plugin.TraceAPIPluginManager#createDefaultAPI()
+	 */
+	public void createDefaultAPI() {
+		engine.setDefaultTraceAPI();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#getOwner()
+	 */
+	public TraceObject getOwner() {
+		return model;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#
+	 *      setOwner(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void setOwner(TraceObject owner) {
+		model = (TraceModel) owner;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectAPIList#getAPIs()
+	 */
+	public Iterator<TraceProjectAPI> getAPIs() {
+		return apis.iterator();
+	}
+
+	/**
+	 * Adds an API to the list
+	 * 
+	 * @param api
+	 *            the API
+	 */
+	void addAPI(TraceProjectAPI api) {
+		apis.add(api);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngineResetListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Model reset listener
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceGroup;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.model.TraceModelResetListener;
+import com.nokia.tracecompiler.project.TraceProjectAPI;
+
+/**
+ * Model reset listener
+ * 
+ */
+final class RulesEngineResetListener implements TraceModelResetListener {
+
+	/**
+	 * Rule engine
+	 */
+	private final RulesEngine engine;
+
+	/**
+	 * Trace model
+	 */
+	private final TraceModel model;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param engine
+	 *            rule engine
+	 * @param model
+	 *            the trace model
+	 */
+	RulesEngineResetListener(RulesEngine engine, TraceModel model) {
+		this.engine = engine;
+		this.model = model;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelResetListener#modelResetting()
+	 */
+	public void modelResetting() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelResetListener#modelReset()
+	 */
+	public void modelReset() {
+		model.removeExtensions(TraceProjectAPI.class);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelResetListener#modelValid(boolean)
+	 */
+	public void modelValid(boolean valid) throws TraceCompilerException {
+		if (valid) {
+			model.startProcessing();
+			try {
+				// Creates the trace API if it does not exist yet
+				engine.setDefaultTraceAPI();
+				// Adds filler parameters to correct places
+				for (TraceGroup group : model) {
+					for (Trace trace : group) {
+						engine.checkFillerParameters(trace);
+					}
+				}
+			} finally {
+				model.processingComplete();
+			}
+		}
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/SourceParserRuleBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,565 @@
+/*
+* Copyright (c) 2007 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 parser rule
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.nokia.tracecompiler.engine.TraceLocation;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.StringErrorParameters;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.source.SourceParserResult;
+import com.nokia.tracecompiler.engine.source.SourceParserRule;
+import com.nokia.tracecompiler.engine.utils.TraceUtils;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.project.TraceLocationParser;
+import com.nokia.tracecompiler.project.TraceProjectAPI;
+import com.nokia.tracecompiler.source.FormatMapping;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceExcludedArea;
+import com.nokia.tracecompiler.source.SourceIterator;
+import com.nokia.tracecompiler.source.SourceParser;
+import com.nokia.tracecompiler.source.SourceParserException;
+import com.nokia.tracecompiler.source.SourceUtils;
+
+/**
+ * Base class for parser rules. Instances of this class are added to the trace
+ * model. The source engine uses the parses it finds from the model to find
+ * trace locations from source files
+ * 
+ */
+public abstract class SourceParserRuleBase extends RuleBase implements
+		SourceParserRule, TraceLocationParser {
+
+	/**
+	 * Tag to be searched from source
+	 */
+	private String tag;
+
+	/**
+	 * Allowed tag suffixes
+	 */
+	private ArrayList<String> tagSuffixes = new ArrayList<String>();
+
+	/**
+	 * Default name for a parameter
+	 */
+	public static final String DEFAULT_PARAMETER_NAME = "arg"; //$NON-NLS-1$
+
+	/**
+	 * Pattern for trimming c++ cast operator away from trace parameters
+	 */
+	private Pattern cppCastTrimPattern = Pattern.compile("\\s*(.+<.+>)\\s*"); //$NON-NLS-1$
+
+	/**
+	 * Pattern for trimming c cast operator away from trace parameters
+	 */
+	private Pattern cCastTrimPattern = Pattern.compile("(\\([^(]+?\\))"); //$NON-NLS-1$
+
+	/**
+	 * Pattern for getting a valid token from parameter data
+	 */
+	private Pattern parameterNamePattern = Pattern
+			.compile("[a-zA-Z][a-zA-Z\\d]*"); //$NON-NLS-1$
+
+	/**
+	 * Symbian literal tags
+	 */
+	private String[] TRACE_TEXT_TAGS = { "_L8", //$NON-NLS-1$
+			"_T8", //$NON-NLS-1$
+			"_L", //$NON-NLS-1$
+			"_T" //$NON-NLS-1$
+	};	
+	
+	
+	/**
+	 * Constructor
+	 * 
+	 * @param tag
+	 *            the tag to be searched from source
+	 * @param tagSuffixes
+	 *            the list of allowed suffixes to the tag
+	 */
+	protected SourceParserRuleBase(String tag, String[] tagSuffixes) {
+		this.tag = tag;
+		// Adds the sub-formats to the parsers
+		if (tagSuffixes != null) {
+			int len = tagSuffixes.length;
+			for (int i = 0; i < len; i++) {
+				this.tagSuffixes.add(tagSuffixes[i]);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceParserRule#getSearchTag()
+	 */
+	public String getSearchTag() {
+		return tag;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceParserRule#
+	 *      isAllowedTagSuffix(java.lang.String)
+	 */
+	public boolean isAllowedTagSuffix(String tag) {
+		boolean retval = false;
+		if (tag != null) {
+			if (tag.length() == 0 && tagSuffixes.isEmpty()) {
+				retval = true;
+			} else {
+				for (int i = 0; i < tagSuffixes.size() && !retval; i++) {
+					String s = tagSuffixes.get(i);
+					if (s.length() == tag.length()) {
+						retval = true;
+						for (int j = 0; j < s.length() && retval; j++) {
+							char c1 = s.charAt(j);
+							// '?' can be any character
+							if (c1 != '?') {
+								retval = tag.charAt(j) == c1;
+							}
+						}
+					}
+				}
+			}
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceParserRule#getName()
+	 */
+	public String getName() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceParserRule#
+	 *      parseParameters(java.util.List)
+	 */
+	public SourceParserResult parseParameters(String tag, List<String> list)
+			throws TraceCompilerException {
+		SourceParserResult result = new SourceParserResult();
+		result.traceText = trimTraceText(list.get(0));
+		result.originalName = result.traceText;
+		result.convertedName = TraceUtils.convertName(
+				SourceUtils.removePrintfFormatting(result.traceText))
+				.toUpperCase();
+		result.parameters = list.subList(1, list.size());
+		return result;
+	}
+
+	/**
+	 * Converts a location to trace
+	 * 
+	 * @param location
+	 *            the location to be converted
+	 * @return the conversion result
+	 * @throws TraceCompilerException
+	 *             if conversion fails
+	 */
+	public TraceConversionResult convertLocation(TraceLocation location)
+			throws TraceCompilerException {
+		// All parameter types are supported by default -> false is passed to
+		// buildParameterTypeList.
+		List<FormatMapping> types = buildParameterTypeList(location
+				.getTraceText(), false);
+		// Parameter count must match the number of format elements in trace
+		// text -> true is passed to convertLocation by default
+		return convertLocation(location, true, types);
+	}
+	
+	/**
+	 * Converts a location to trace
+	 * 
+	 * @param location
+	 *            the location to be converted
+	 * @param useParametersFromLocation
+	 *            true if location parameters need to be checked
+	 * @param types
+	 *            the parameter types list
+	 * @return the conversion result
+	 * @throws TraceCompilerException
+	 *             if conversion fails
+	 */
+	protected TraceConversionResult convertLocation(TraceLocation location,
+			boolean useParametersFromLocation, List<FormatMapping> types)
+			throws TraceCompilerException {
+		TraceConversionResult result = new TraceConversionResult();
+		result.text = location.getTraceText();
+
+		// If trace text is in multiple lines, remove extra characters
+		int removableAreaBeging = -1;
+		for (int i = 0; i < result.text.length(); i++) {
+			char c = result.text.charAt(i);
+			if (c == SourceConstants.QUOTE_CHAR
+					&& (i == 0 || result.text.charAt(i - 1) != SourceConstants.BACKSLASH_CHAR)) {
+				if (removableAreaBeging != -1) {
+					String startString = result.text.substring(0,
+							removableAreaBeging);
+					String endString = result.text.substring(i + 1, result.text
+							.length());
+					result.text = startString + endString;
+					i = removableAreaBeging;
+					removableAreaBeging = -1;
+				} else {
+					removableAreaBeging = i;
+				}
+			}
+		}
+
+		result.name = location.getConvertedName();
+
+		// If location parameters are used, the count must match the number of
+		// formats parsed from the trace string.
+		if (!useParametersFromLocation
+				|| (types.size() == location.getParameterCount() && numberOfParametersInTagMatchSize(
+						location.getTag(), types.size()))) {
+			result.parameters = new ArrayList<ParameterConversionResult>(types
+					.size());
+			Iterator<String> itr = location.getParameters();
+			// The FormatMapping objects are converted to
+			// ParameterConversionResult objects:
+			// - Name is associated to the parameter
+			// - Extensions are created
+			for (int i = 0; i < types.size(); i++) {
+				FormatMapping mapping = types.get(i);
+				String name;
+				if (useParametersFromLocation) {
+					name = TraceUtils.convertName(trimParameter(itr.next(), i));
+				} else {
+					name = DEFAULT_PARAMETER_NAME + (i + 1);
+				}
+				ParameterConversionResult param = mapFormatToConversionResult(mapping);
+				param.name = modifyDuplicateName(result.parameters, name);
+				result.parameters.add(param);
+			}
+		} else {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.PARAMETER_FORMAT_MISMATCH, null,
+					location);
+		}
+		return result;
+	}
+
+	
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceParserRule#
+	 *      processNewLocation(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	public void processNewLocation(TraceLocation location) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceLocationParser#getLocationGroup()
+	 */
+	public String getLocationGroup() {
+		return null;
+	}
+
+	/**
+	 * Maps a format to conversion result
+	 * 
+	 * @param mapping
+	 *            the mapping
+	 * @return the conversion result
+	 */
+	protected ParameterConversionResult mapFormatToConversionResult(
+			FormatMapping mapping) {
+		ParameterConversionResult param = new ParameterConversionResult();
+		param.type = mapping.type;
+		if (mapping.isArray) {
+			param.extensions = new ArrayList<TraceModelExtension>();
+			param.extensions.add(new ArrayParameterRuleImpl());
+		}
+		return param;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceParserRule#
+	 *      findLocationComment(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	public SourceExcludedArea findLocationComment(TraceLocation location) {
+		SourceParser parser = location.getParser();
+		SourceExcludedArea excludedArea = null;
+		if (parser != null) {
+			try {
+				int offset = location.getOffset() + location.getLength();
+				SourceIterator itr = parser.createIterator(offset,
+						SourceParser.SKIP_WHITE_SPACES);
+				char c = itr.next();
+				if (c == ';') {
+					offset = itr.currentIndex();
+					c = itr.next();
+				}
+				boolean skippedReturn = false;
+				int commentStart = itr.currentIndex();
+				for (int i = offset; i < commentStart; i++) {
+					c = parser.getData(i);
+					if (c == '\n') {
+						skippedReturn = true;
+					}
+				}
+				// Comment must be on same line
+				if (!skippedReturn) {
+					excludedArea = parser.getExcludedArea(commentStart);
+				}
+				if (excludedArea == null) {
+					// If comment is not on same line, the previous line is
+					// checked
+					offset = parser.findStartOfLine(location.getOffset(), true,
+							true);
+					excludedArea = parser.getExcludedArea(offset - 1);
+				}
+			} catch (SourceParserException e) {
+			}
+		}
+		return excludedArea;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceParserRule#getLocationParser()
+	 */
+	public TraceLocationParser getLocationParser() {
+		return this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceLocationParser#
+	 *      isLocationConverted(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	public boolean isLocationConverted(TraceLocation location) {
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceLocationParser#
+	 *      checkLocationValidity(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	public TraceCompilerErrorCode checkLocationValidity(TraceLocation location) {
+		Trace trace = location.getTrace();
+		TraceCompilerErrorCode retval = TraceCompilerErrorCode.TRACE_DOES_NOT_EXIST;
+		if (trace != null) {
+			retval = TraceCompilerErrorCode.OK;
+		} else {
+			// If the API does not match the parser, the needs conversion flag
+			// is set
+			TraceProjectAPI api = getOwner().getModel().getExtension(
+					TraceProjectAPI.class);
+			if (!api.getName().equals(location.getParserRule().getName())) {
+				retval = TraceCompilerErrorCode.TRACE_NEEDS_CONVERSION;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Checks if the number of the parameters in the trace tag matches the size
+	 * of parameter list
+	 * 
+	 * @param tag
+	 *            the trace tag
+	 * @param size
+	 *            size of the parameter list
+	 * @return true is parameter count matches, false otherwise
+	 */
+	private boolean numberOfParametersInTagMatchSize(String tag, int size) {
+		boolean matches = true;
+		// Parse the last character of the tag to a integer
+		if (tag != null) {
+			try {
+
+				// Check the tag parameter count and compare it to the size of
+				// the parameter list
+				String tagParamStr = tag.substring(tag.length() - 1);
+				int tagParamCount = Integer.parseInt(tagParamStr);
+
+				if (tagParamCount != size) {
+					matches = false;
+				}
+			} catch (NumberFormatException e) {
+			}
+		}
+		return matches;
+	}
+
+	/**
+	 * Builds the parameter type array which is passed to convertLocation
+	 * 
+	 * @param text
+	 *            the trace text
+	 * @param simpleParameters
+	 *            true if only simple types are supported
+	 * @return the list of types
+	 * @throws TraceCompilerException
+	 *             if parser fails
+	 */
+	protected List<FormatMapping> buildParameterTypeList(String text,
+			boolean simpleParameters) throws TraceCompilerException {
+		Matcher matcher = SourceUtils.traceTextPattern.matcher(text);
+		ArrayList<FormatMapping> types = new ArrayList<FormatMapping>();
+		boolean found = true;
+		do {
+			found = matcher.find();
+			if (found) {
+				String tag = matcher.group();
+				FormatMapping mapping = SourceUtils
+						.mapFormatToParameterType(tag);
+				if (simpleParameters && !mapping.isSimple) {
+					StringErrorParameters param = new StringErrorParameters();
+					param.string = tag;
+					throw new TraceCompilerException(
+							TraceCompilerErrorCode.PARAMETER_FORMAT_NEEDS_EXT_MACRO,
+							param, null);
+				}
+				types.add(mapping);
+			}
+		} while (found);
+		return types;
+	}
+
+	/**
+	 * Changes a duplicate parameter name to unique
+	 * 
+	 * @param parameters
+	 *            the list of existing parameters
+	 * @param name
+	 *            the name
+	 * @return the modified name
+	 */
+	private String modifyDuplicateName(
+			List<ParameterConversionResult> parameters, String name) {
+		String retval = name;
+		for (ParameterConversionResult result : parameters) {
+			if (result.name.equals(name)) {
+				retval = name + (parameters.size() + 1);
+				break;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Trims extra stuff away from trace text
+	 * 
+	 * @param data
+	 *            the data to be trimmed
+	 * @return trimmed text
+	 */
+	protected String trimTraceText(String data) {
+		// Removes literal macros
+		for (String element : TRACE_TEXT_TAGS) {
+			if (data.startsWith(element)) {
+				data = data.substring(element.length());
+			}
+		}
+		data = data.trim();
+		// Removes the opening bracket and quotes
+		data = removeBrackets(data);
+		if (data.startsWith("\"") //$NON-NLS-1$
+				&& data.length() >= 2) { // CodForChk_Dis_Magic
+			data = data.substring(1, data.length() - 1);
+		}
+		return data;
+	}
+
+	/**
+	 * Removes the brackets around the given data
+	 * 
+	 * @param data
+	 *            the data
+	 * @return the modified data
+	 */
+	protected String removeBrackets(String data) {
+		boolean canRemove = true;
+		while (data.startsWith("(") //$NON-NLS-1$
+				&& data.endsWith(")") //$NON-NLS-1$
+				&& canRemove) {
+			// If closing bracket is found first, the first bracket cannot be
+			// removed.
+			// TODO: Does not work with for example ((Cast)abc).Func()
+			// -> (Cast)abc).Func(
+			for (int i = 1; i < data.length() - 1 && canRemove; i++) {
+				if (data.charAt(i) == '(') {
+					i = data.length();
+				} else if (data.charAt(i) == ')') {
+					canRemove = false;
+				}
+			}
+			if (canRemove) {
+				data = data.substring(1, data.length() - 1).trim();
+			}
+		}
+		return data;
+	}
+
+	/**
+	 * Trims extra stuff away from a parameter to create a parameter label
+	 * 
+	 * @param data
+	 *            the parameter data
+	 * @param index
+	 *            the parameter index. The index will be used as label if the
+	 *            label cannot be parsed
+	 * @return the parameter label
+	 */
+	protected String trimParameter(String data, int index) {
+		// Removes possible literal macros
+		data = trimTraceText(data);
+		// Removes casting operations.
+		Matcher matcher = cppCastTrimPattern.matcher(data);
+		data = removeBrackets(matcher.replaceFirst("")); //$NON-NLS-1$
+		matcher = cCastTrimPattern.matcher(data);
+		data = matcher.replaceFirst(""); //$NON-NLS-1$
+		// Finds the next valid token from the data
+		matcher = parameterNamePattern.matcher(data);
+		if (matcher.find()) {
+			data = matcher.group();
+		} else {
+			data = DEFAULT_PARAMETER_NAME + (index + 1);
+		}
+		return data;
+	}	
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/StartOfFunctionLocationRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Location rule for start of function
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.source.SourceLocationRule;
+
+/**
+ * Location rule for start of function
+ * 
+ */
+final class StartOfFunctionLocationRule extends RuleBase implements
+		SourceLocationRule {
+
+	/**
+	 * Location rule offset. Should be large enough to cover a function
+	 */
+	private static final int OFFSET = -100000; // CodForChk_Dis_Magic
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceLocationRule#getType()
+	 */
+	public int getLocationType() {
+		return SourceLocationRule.CONTEXT_RELATIVE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceLocationRule#getOffset()
+	 */
+	public int getLocationOffset() {
+		return OFFSET;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceLocationRule#isRemovedAfterInsert()
+	 */
+	public boolean isRemovedAfterInsert() {
+		return true;
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/StateTraceRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* 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:
+*
+* Rule for state traces
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.utils.TraceUtils;
+import com.nokia.tracecompiler.source.SourceContext;
+
+/**
+ * Rule for state traces
+ * 
+ */
+public class StateTraceRule extends AutomaticTraceTextRule {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.AutomaticTraceTextRule#
+	 *      formatTrace(com.nokia.tracecompiler.source.SourceContext)
+	 */
+	@Override
+	public String formatTrace(SourceContext context) {
+		return TraceUtils.formatTrace(RuleUtils.TEXT_FORMAT_BASE, context
+				.getClassName(), context.getFunctionName());
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ThisPointerParameterTemplate.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Template for "this" pointer parameter.
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+
+/**
+ * Template for "this" pointer parameter.
+ * 
+ */
+final class ThisPointerParameterTemplate  {
+
+	/**
+	 * Parameter name
+	 */
+	static final String PARAMETER_NAME = "this"; //$NON-NLS-1$
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/TraceFormatRuleBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2007 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 formatting rule
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.source.TraceFormattingRule;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.project.TraceProjectAPI;
+
+/**
+ * Base class for project API's. Instance of this is added to the model and
+ * affect all traces which do not have their own formatter.
+ * 
+ */
+public abstract class TraceFormatRuleBase extends RuleBase implements
+		TraceFormattingRule, TraceProjectAPI {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.TraceFormattingRule#
+	 *      mapNameToSource(com.nokia.tracecompiler.model.Trace)
+	 */
+	public String mapNameToSource(Trace trace) {
+		return trace.getName();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.TraceFormattingRule#
+	 *      mapParameterCountToSource(com.nokia.tracecompiler.model.Trace, int)
+	 */
+	public String mapParameterCountToSource(Trace trace, int count) {
+		return String.valueOf(count);
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/TraceParameterFormattingRuleBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for parameter formatting rules
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+import com.nokia.tracecompiler.engine.source.TraceParameterFormattingRule;
+
+/**
+ * Base class for parameter formatting rules
+ * 
+ */
+class TraceParameterFormattingRuleBase extends RuleBase implements
+		TraceParameterFormattingRule {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.TraceParameterFormattingRule#
+	 *      isShownInSource()
+	 */
+	public boolean isShownInSource() {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.TraceParameterFormattingRule#
+	 *      mapNameToSource(java.lang.String)
+	 */
+	public String mapNameToSource(String originalName) {
+		return originalName;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ValueParameterTemplate.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Template for "value" parameter.
+*
+*/
+package com.nokia.tracecompiler.engine.rules;
+
+
+/**
+ * Template for "value" parameter.
+ * 
+ */
+final class ValueParameterTemplate {
+
+	/**
+	 * Parameter name
+	 */
+	static final String PARAMETER_NAME = "value"; //$NON-NLS-1$
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/messages.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,11 @@
+AddFunctionParametersFlag.Title=Add function parameters
+AddThisPtrFlag.Title=Add "this" pointer parameter
+AddReturnParameterFlag.Title=Add return value to exit traces
+ArrayParameterFlag.Title=Array Parameter
+RuleUtils.FunctionEntryTitle=Function Entry-Exit
+RuleUtils.PerformanceEventTitle=Performance Event Entry-Exit
+RuleUtils.StateTraceTitle=State Trace
+FunctionReturnLocationMultiplierRule.InvalidReturnStatement=Exit trace was not added to source, since it might produce unwanted side effects
+RuleUtils.FailedToParseReturnValues=Failed to parse return values
+AutoAddFunctionParametersRule.UnrecognizedTypeWarning=Unrecognized type -> Traced as pointer
+AddMatchingTraceFlag.Title=Add exit traces
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/osttrace/OstConstants.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,67 @@
+/*
+* 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:
+*
+* Constants for OST parser and formatter
+*
+*/
+package com.nokia.tracecompiler.engine.rules.osttrace;
+
+/**
+ * Constants for OST parser and formatter
+ * 
+ */
+interface OstConstants {
+
+	/**
+	 * API tag for macros which have the preprocessor level parameter
+	 */
+	String PREPROCESSOR_LEVEL_TAG = "Def"; //$NON-NLS-1$
+
+	/**
+	 * API tag for function entry traces
+	 */
+	String FUNCTION_ENTRY_TAG = "FunctionEntry"; //$NON-NLS-1$
+
+	/**
+	 * API tag for function exit traces
+	 */
+	String FUNCTION_EXIT_TAG = "FunctionExit"; //$NON-NLS-1$
+
+	/**
+	 * API tag for performance event start
+	 */
+	String PERFORMANCE_EVENT_START_TAG = "EventStart"; //$NON-NLS-1$
+
+	/**
+	 * API tag for performance event stop
+	 */
+	String PERFORMANCE_EVENT_STOP_TAG = "EventStop"; //$NON-NLS-1$
+
+	/**
+	 * API tag for traces with user-defined data format
+	 */
+	String DATA_TRACE_TAG = "Data"; //$NON-NLS-1$
+	
+	/**
+	 * API tag for state traces
+	 */
+	String STATE_TRACE_TAG = "State"; //$NON-NLS-1$
+
+	/**
+	 * API tag for traces with extension parameters
+	 */
+	String EXTENSION_TRACE_TAG = "Ext"; //$NON-NLS-1$
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/osttrace/OstTraceFormatRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,348 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ * Formatting rule for OST traces
+ *
+ */
+package com.nokia.tracecompiler.engine.rules.osttrace;
+
+import com.nokia.tracecompiler.engine.header.ComplexHeaderRule;
+import com.nokia.tracecompiler.engine.rules.AutomaticTraceTextRule;
+import com.nokia.tracecompiler.engine.rules.EntryTraceRule;
+import com.nokia.tracecompiler.engine.rules.ExitTraceRule;
+import com.nokia.tracecompiler.engine.rules.PerformanceEventRuleBase;
+import com.nokia.tracecompiler.engine.rules.PerformanceEventStartRule;
+import com.nokia.tracecompiler.engine.rules.PerformanceEventStopRule;
+import com.nokia.tracecompiler.engine.rules.StateTraceRule;
+import com.nokia.tracecompiler.engine.rules.TraceFormatRuleBase;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceModelListener;
+import com.nokia.tracecompiler.model.TraceObject;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.plugin.TraceFormatConstants;
+import com.nokia.tracecompiler.plugin.TraceHeaderContribution;
+import com.nokia.tracecompiler.plugin.TraceAPIFormatter.TraceFormatType;
+import com.nokia.tracecompiler.source.SourceUtils;
+
+/**
+ * Formatting rule for OST traces.
+ * 
+ */
+public final class OstTraceFormatRule extends TraceFormatRuleBase implements
+		TraceHeaderContribution, TraceModelListener {
+
+	/**
+	 * Separator for parameters within trace text
+	 */
+	private static final String PARAMETER_VALUE_SEPARATOR = "="; //$NON-NLS-1$
+
+	/**
+	 * Separator for parameter name value
+	 */
+	private static final String PARAMETER_SEPARATOR = ";"; //$NON-NLS-1$
+
+	/**
+	 * String parameter tag
+	 */
+	private static final String STRING_PARAMETER_TAG = "%s"; //$NON-NLS-1$
+
+	/**
+	 * Hex parameter tag
+	 */
+	private static final String HEX_PARAMETER_TAG = "0x%x"; //$NON-NLS-1$
+
+	/**
+	 * SDEC parameter tag
+	 */
+	private static final String SDEC_PARAMETER_TAG = "%d"; //$NON-NLS-1$
+
+	/**
+	 * UDEC parameter tag
+	 */
+	private static final String UDEC_PARAMETER_TAG = "%u"; //$NON-NLS-1$	
+
+	/**
+	 * Category for traces
+	 */
+	private static final String TRACE_CATEGORY = "EXTRACT_GROUP_ID(aTraceID)"; //$NON-NLS-1$
+
+	/**
+	 * Name for storage
+	 */
+	public static final String STORAGE_NAME = "OstTraceFormat"; //$NON-NLS-1$
+
+	/**
+	 * OstTraceEventStart tag
+	 */
+	public static final String OST_TRACE_EVENT_START_TAG = "OstTraceEventStart"; //$NON-NLS-1$
+
+	/**
+	 * OstTraceEventStop tag
+	 */
+	public static final String OST_TRACE_EVENT_STOP_TAG = "OstTraceEventStop"; //$NON-NLS-1$
+
+	/**
+	 * Ext-function declaration format
+	 */
+	private static final String HEADER_FORMAT = "OstTraceGen" //$NON-NLS-1$
+			+ TraceFormatConstants.PARAM_COUNT_FORMAT // Number of parameters
+			+ "( TUint32 aTraceID" //$NON-NLS-1$
+			+ TraceFormatConstants.PARAMETERS_FORMAT // Trace parameters
+			+ " )"; //$NON-NLS-1$
+
+	/**
+	 * Activation query formatting
+	 */
+	private static final String ACTIVATION_FORMAT = "BTraceFiltered8( " //$NON-NLS-1$
+			+ TRACE_CATEGORY + ", " //$NON-NLS-1$
+			+ "EOstTraceActivationQuery, KOstTraceComponentID, aTraceID )"; //$NON-NLS-1$
+
+	/**
+	 * Buffered trace format
+	 */
+	private static final String TRACE_BUFFER_FORMAT = "OstSendNBytes( " //$NON-NLS-1$
+			+ TRACE_CATEGORY + ", " //$NON-NLS-1$
+			+ "EOstTrace, KOstTraceComponentID, aTraceID, " //$NON-NLS-1$
+			+ TraceFormatConstants.DATA_BUFFER_FORMAT // Trace data
+			+ ", " //$NON-NLS-1$
+			+ TraceFormatConstants.DATA_LENGTH_FORMAT // Trace data length
+			+ " );"; //$NON-NLS-1$
+
+	/**
+	 * Packed trace format
+	 */
+	private static final String TRACE_PACKED_FORMAT = "BTraceFilteredContext12( " //$NON-NLS-1$
+			+ TRACE_CATEGORY + ", " //$NON-NLS-1$
+			+ "EOstTrace, KOstTraceComponentID, aTraceID, " //$NON-NLS-1$
+			+ TraceFormatConstants.DATA_BUFFER_FORMAT // Trace data
+			+ " );"; //$NON-NLS-1$
+
+	/**
+	 * Template for the OstTraceDefinitions.h header file
+	 */
+	private static final String[] MAIN_HEADER_TEMPLATE = { "\r\n" //$NON-NLS-1$
+			+ "// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler\r\n" //$NON-NLS-1$
+			+ "// REMOVE BEFORE CHECK-IN TO VERSION CONTROL\r\n" //$NON-NLS-1$
+			+ "#define OST_TRACE_COMPILER_IN_USE\r\n" //$NON-NLS-1$
+			+ "#include <opensystemtrace.h>\r\n#endif\r\n" }; //$NON-NLS-1$
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectAPI#getName()
+	 */
+	public String getName() {
+		return STORAGE_NAME;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.TraceFormattingRule#
+	 * getFormat(com.nokia.tracecompiler.model.Trace,
+	 * com.nokia.tracecompiler.plugin.TraceAPIFormatter.TraceFormatType)
+	 */
+	public String getFormat(Trace trace, TraceFormatType formatType) { // CodForChk_Dis_ComplexFunc
+		String retval;
+		if (formatType == TraceFormatType.HEADER) {
+			retval = HEADER_FORMAT;
+		} else if (formatType == TraceFormatType.TRACE_BUFFER) {
+			retval = TRACE_BUFFER_FORMAT;
+		} else if (formatType == TraceFormatType.TRACE_PACKED) {
+			retval = TRACE_PACKED_FORMAT;
+		} else if (formatType == TraceFormatType.TRACE_ACTIVATION) {
+			retval = ACTIVATION_FORMAT;
+		} else {
+			retval = null;
+		}
+
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceFormatRule#
+	 * mapParameterCountToSource(com.nokia.tracecompiler.model.Trace, int)
+	 */
+	@Override
+	public String mapParameterCountToSource(Trace trace, int count) {
+		String retval;
+		ComplexHeaderRule rule = trace.getExtension(ComplexHeaderRule.class);
+		if (rule != null && rule.getTraceIDDefineExtension() != null || trace.getExtension(EntryTraceRule.class)!= null) {
+			// Uses the extension tag with extension headers
+			retval = OstConstants.EXTENSION_TRACE_TAG;
+		} else {
+			retval = String.valueOf(count);
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceHeaderContribution#
+	 * getContribution(com.nokia.tracecompiler.project.TraceHeaderContribution.
+	 * TraceHeaderContributionType)
+	 */
+	public String[] getContribution(TraceHeaderContributionType type) {
+		String[] retval = null;
+		if (type == TraceHeaderContributionType.GLOBAL_DEFINES) {
+			retval = new String[] { "KOstTraceComponentID 0x" //$NON-NLS-1$
+					+ Integer.toHexString(getOwner().getModel().getID()) };
+		} else if (type == TraceHeaderContributionType.MAIN_HEADER_CONTENT) {
+			retval = MAIN_HEADER_TEMPLATE;
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.nokia.tracecompiler.engine.rules.ExtensionBase#setOwner(com.nokia
+	 * .tracecompiler.model.TraceObject)
+	 */
+	@Override
+	public void setOwner(TraceObject owner) {
+		if (getOwner() != null) {
+			getOwner().getModel().removeModelListener(this);
+		}
+		super.setOwner(owner);
+		if (owner != null) {
+			owner.getModel().addModelListener(this);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 * objectAdded(com.nokia.tracecompiler.model.TraceObject,
+	 * com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectAdded(TraceObject owner, TraceObject object) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 * objectCreationComplete(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectCreationComplete(TraceObject object) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 * objectRemoved(com.nokia.tracecompiler.model.TraceObject,
+	 * com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectRemoved(TraceObject owner, TraceObject object) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 * propertyUpdated(com.nokia.tracecompiler.model.TraceObject, int)
+	 */
+	public void propertyUpdated(TraceObject object, int property) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.project.TraceProjectAPI#
+	 * formatTraceForExport(com.nokia.tracecompiler.model.Trace,
+	 * com.nokia.tracecompiler.project.TraceProjectAPI.TraceFormatFlags)
+	 */
+	public String formatTraceForExport(Trace trace, TraceFormatFlags flags) {
+		// TODO: This uses default formats
+		// -> Should be configurable
+		// > for entry traces
+		// < for exit traces
+		// Logic analyzer format for performance traces
+		String retval = trace.getTrace();
+		AutomaticTraceTextRule rule = trace
+				.getExtension(AutomaticTraceTextRule.class);
+		int parameterCount = trace.getParameterCount();
+		if (rule != null) {
+			if (rule instanceof EntryTraceRule) {
+				retval = "> " //$NON-NLS-1$
+						+ retval;
+			} else if (rule instanceof ExitTraceRule) {
+				retval = "< " //$NON-NLS-1$
+						+ retval;
+			} else if (rule instanceof StateTraceRule) {
+				if (parameterCount == 2) { // CodForChk_Dis_Magic
+					retval = retval + "Machine" + PARAMETER_VALUE_SEPARATOR //$NON-NLS-1$
+							+ STRING_PARAMETER_TAG + PARAMETER_SEPARATOR
+							+ "State" + PARAMETER_VALUE_SEPARATOR //$NON-NLS-1$
+							+ STRING_PARAMETER_TAG;
+				} else {
+					retval = retval
+							+ "Machine" + PARAMETER_VALUE_SEPARATOR //$NON-NLS-1$
+							+ STRING_PARAMETER_TAG + PARAMETER_SEPARATOR
+							+ "State" + PARAMETER_VALUE_SEPARATOR //$NON-NLS-1$
+							+ STRING_PARAMETER_TAG + PARAMETER_SEPARATOR
+							+ "Instance" + PARAMETER_VALUE_SEPARATOR //$NON-NLS-1$
+							+ HEX_PARAMETER_TAG;
+				}
+			}
+
+			if (parameterCount >= 1 && !(rule instanceof StateTraceRule)) {
+				TraceParameter param;
+				for (int i = 0; i < parameterCount; i++) {
+					param = trace.getParameter(i);
+					retval += PARAMETER_SEPARATOR + param.getName()
+							+ PARAMETER_VALUE_SEPARATOR
+							+ SourceUtils.mapParameterTypeToFormat(param);
+				}
+			}
+		} else {
+			PerformanceEventRuleBase perf = trace
+					.getExtension(PerformanceEventRuleBase.class);
+			if (perf != null) {
+				if (perf instanceof PerformanceEventStartRule) {
+					retval = retval + ">" + PARAMETER_SEPARATOR //$NON-NLS-1$
+							+ "Value" + PARAMETER_VALUE_SEPARATOR //$NON-NLS-1$
+							+ SDEC_PARAMETER_TAG;
+				} else if (perf instanceof PerformanceEventStopRule) {
+					retval = retval
+							+ "<" //$NON-NLS-1$
+							+ PARAMETER_SEPARATOR
+							+ "Value" + PARAMETER_VALUE_SEPARATOR //$NON-NLS-1$
+							+ SDEC_PARAMETER_TAG
+							+ PARAMETER_SEPARATOR
+							+ "Start Event Trace ID" + PARAMETER_VALUE_SEPARATOR //$NON-NLS-1$
+							+ UDEC_PARAMETER_TAG;
+				}
+			}
+		}
+		// If formatting is not supported the format characters and parameters
+		// are removed.
+		if (!flags.isFormattingSupported) {
+			int index = retval.indexOf(PARAMETER_SEPARATOR);
+			if (index > 0) {
+				retval = retval.substring(0, index);
+			}
+			retval = SourceUtils.removePrintfFormatting(retval).trim();
+		}
+		return retval;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/osttrace/OstTraceParserRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,645 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ * OST trace parser rule
+ *
+ */
+package com.nokia.tracecompiler.engine.rules.osttrace;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.nokia.tracecompiler.engine.TraceLocation;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.rules.AutoAddFunctionParametersRule;
+import com.nokia.tracecompiler.engine.rules.AutoAddReturnParameterRule;
+import com.nokia.tracecompiler.engine.rules.AutoAddThisPtrRule;
+import com.nokia.tracecompiler.engine.rules.AutoAddValueRule;
+import com.nokia.tracecompiler.engine.rules.AutomaticTraceTextRule;
+import com.nokia.tracecompiler.engine.rules.ComplexHeaderRuleImpl;
+import com.nokia.tracecompiler.engine.rules.EntryTraceRule;
+import com.nokia.tracecompiler.engine.rules.ExitTraceRule;
+import com.nokia.tracecompiler.engine.rules.PerformanceEventStartRule;
+import com.nokia.tracecompiler.engine.rules.PerformanceEventStopRule;
+import com.nokia.tracecompiler.engine.rules.ReadOnlyObjectRuleImpl;
+import com.nokia.tracecompiler.engine.rules.SourceParserRuleBase;
+import com.nokia.tracecompiler.engine.rules.StateTraceRule;
+import com.nokia.tracecompiler.engine.source.SourceParserResult;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.source.FormatMapping;
+import com.nokia.tracecompiler.source.SourceContext;
+import com.nokia.tracecompiler.source.SourceParser;
+
+/**
+ * OST trace parser rule
+ * 
+ */
+public final class OstTraceParserRule extends SourceParserRuleBase {
+
+	/**
+	 * PERFORMANCE group name
+	 */
+	private static final String PERFORMANCE_GROUP_NAME = "TRACE_PERFORMANCE"; //$NON-NLS-1$
+
+	/**
+	 * STATE group name
+	 */
+	private static final String STATE_GROUP_NAME = "TRACE_STATE"; //$NON-NLS-1$
+
+	/**
+	 * FLOW group name
+	 */
+	private static final String FLOW_GROUP_NAME = "TRACE_FLOW"; //$NON-NLS-1$
+
+	/**
+	 * Data trace parameter count
+	 */
+	private static final int DATA_PARAMETER_COUNT = 2; // CodForChk_Dis_Magic
+
+	/**
+	 * Entry Ext trace parameter count
+	 */
+	private static final int ENTRY_EXT_PARAMETER_COUNT = 1; // CodForChk_Dis_Magic
+
+	/**
+	 * Exit Ext trace parameter count
+	 */
+	private static final int EXIT_EXT_PARAMETER_COUNT = 2; // CodForChk_Dis_Magic
+
+	/**
+	 * Trace parameter index list
+	 */
+	class TraceParameterIndexList {
+
+		/**
+		 * Minimum number of parameters needed to decode traces
+		 */
+		int minParamCount;
+
+		/**
+		 * Preprocessor level index
+		 */
+		int levelIndex;
+
+		/**
+		 * Trace name index
+		 */
+		int nameIndex;
+
+		/**
+		 * Trace text index
+		 */
+		int textIndex;
+
+		/**
+		 * Trace group index in case group name is free-form
+		 */
+		int groupIndex;
+
+		/**
+		 * Trace group name in case group name is pre-determined by rules
+		 */
+		String groupName;
+	}
+
+	/**
+	 * List of flags related to OST API macro
+	 */
+	class TraceParameterFlagList {
+
+		/**
+		 * Data tag
+		 */
+		boolean hasDataTag;
+
+		/**
+		 * State tag
+		 */
+		boolean hasStateTag;
+
+		/**
+		 * Ext tag
+		 */
+		boolean hasExtTag;
+
+		/**
+		 * Event start tag
+		 */
+		boolean hasEventStartTag;
+
+		/**
+		 * Event stop
+		 */
+		boolean hasEventStopTag;
+
+		/**
+		 * Function entry
+		 */
+		boolean hasFunctionEntryTag;
+
+		/**
+		 * Function exit
+		 */
+		boolean hasFunctionExitTag;
+
+		/**
+		 * Constructor
+		 * 
+		 * @param tag
+		 *            the trace tag
+		 */
+		TraceParameterFlagList(String tag) {
+			hasDataTag = tag.indexOf(OstConstants.DATA_TRACE_TAG) > 0;
+			hasStateTag = tag.indexOf(OstConstants.STATE_TRACE_TAG) > 0;
+			hasExtTag = tag.indexOf(OstConstants.EXTENSION_TRACE_TAG) > 0;
+			hasEventStartTag = tag
+					.indexOf(OstConstants.PERFORMANCE_EVENT_START_TAG) > 0;
+			hasEventStopTag = tag
+					.indexOf(OstConstants.PERFORMANCE_EVENT_STOP_TAG) > 0;
+			hasFunctionEntryTag = tag.indexOf(OstConstants.FUNCTION_ENTRY_TAG) > 0;
+			hasFunctionExitTag = tag.indexOf(OstConstants.FUNCTION_EXIT_TAG) > 0;
+		}
+
+		/**
+		 * Checks if any of the flags is set
+		 * 
+		 * @return true if flag is set
+		 */
+		boolean hasFlags() {
+			return hasDataTag || hasStateTag || hasExtTag || hasEventStartTag
+					|| hasEventStopTag || hasFunctionEntryTag
+					|| hasFunctionExitTag;
+		}
+
+	}
+
+	/**
+	 * Offset to preprocessor level
+	 */
+	private static final int PREPROCESSOR_LEVEL_OFFSET = 0; // CodForChk_Dis_Magic
+
+	/**
+	 * Offset to group name if preprocessor level is not in use
+	 */
+	private static final int GROUP_NAME_OFFSET = 0; // CodForChk_Dis_Magic
+
+	/**
+	 * Offset to trace name if preprocessor level is not in use
+	 */
+	private static final int TRACE_NAME_OFFSET = 1; // CodForChk_Dis_Magic
+
+	/**
+	 * Offset to trace text if preprocessor level is not in use
+	 */
+	private static final int TRACE_TEXT_OFFSET = 2; // CodForChk_Dis_Magic
+
+	/**
+	 * Minimum number of parameters if preprocessor level is not in use
+	 */
+	private static final int MIN_PARAMETER_COUNT = 3; // CodForChk_Dis_Magic
+
+	/**
+	 * Parser tag
+	 */
+	private static final String OST_TRACE_PARSER_TAG = "OstTrace"; //$NON-NLS-1$
+
+	/**
+	 * OstTrace parser formats
+	 */
+	private final static String[] OST_TRACE_PARSER_FORMATS = { "0", //$NON-NLS-1$
+			"1", //$NON-NLS-1$
+			"Data", //$NON-NLS-1$
+			"Ext?", //$NON-NLS-1$
+			"FunctionEntry0", //$NON-NLS-1$
+			"FunctionEntry1", //$NON-NLS-1$
+			"FunctionEntryExt", //$NON-NLS-1$
+			"FunctionExit0", //$NON-NLS-1$
+			"FunctionExit1", //$NON-NLS-1$
+			"FunctionExitExt", //$NON-NLS-1$
+			"EventStart0", //$NON-NLS-1$
+			"EventStart1", //$NON-NLS-1$
+			"EventStop", //$NON-NLS-1$
+			"Def0", //$NON-NLS-1$
+			"Def1", //$NON-NLS-1$
+			"DefData", //$NON-NLS-1$
+			"DefExt?", //$NON-NLS-1$
+			"State0", //$NON-NLS-1$
+			"State1" //$NON-NLS-1$
+	};
+
+	/**
+	 * Creates a new OstTrace parser rule
+	 */
+	public OstTraceParserRule() {
+		super(OST_TRACE_PARSER_TAG, OST_TRACE_PARSER_FORMATS);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceParserRule#getName()
+	 */
+	@Override
+	public String getName() {
+		return OstTraceFormatRule.STORAGE_NAME;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.nokia.tracecompiler.engine.rules.SourceParserRuleBase#parseParameters(java.lang.String, java.util.List)
+	 */
+	@Override
+	public SourceParserResult parseParameters(String tag, List<String> list)
+			throws TraceCompilerException {
+		SourceParserResult result = new SourceParserResult();
+		TraceParameterIndexList indexList = getIndexList(tag);
+		if (list.size() >= indexList.minParamCount) {
+			// Name must exist
+			result.originalName = list.get(indexList.nameIndex);
+			result.convertedName = result.originalName;
+			// Text is optional
+			if (indexList.textIndex >= 0) {
+				result.traceText = trimTraceText(list.get(indexList.textIndex));
+			} else {
+				result.traceText = ""; //$NON-NLS-1$
+			}
+			// Group ID and preprocessor level are stored into the
+			// parser-specific data
+			result.parserData = new ArrayList<String>();
+			if (indexList.levelIndex >= 0) {
+				result.parserData.add(list.get(indexList.levelIndex));
+			}
+			if (indexList.groupIndex >= 0) {
+				result.parserData.add(list.get(indexList.groupIndex));
+			} else if (indexList.groupName != null) {
+				result.parserData.add(indexList.groupName);
+			}
+
+			// Extra parameters are converted to trace parameters
+			result.parameters = new ArrayList<String>();
+			for (int i = indexList.minParamCount; i < list.size(); i++) {
+				result.parameters.add(list.get(i));
+			}
+		} else {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.NOT_ENOUGH_PARAMETERS);
+		}
+		return result;
+	}
+
+	/**
+	 * Gets the parameter index list based on trace tag
+	 * 
+	 * @param tag
+	 *            the trace tag
+	 * @return the index list
+	 */
+	private TraceParameterIndexList getIndexList(String tag) {
+		TraceParameterIndexList indexes = new TraceParameterIndexList();
+		indexes.levelIndex = -1;
+		if (tag.indexOf(OstConstants.FUNCTION_ENTRY_TAG) > 0
+				|| tag.indexOf(OstConstants.FUNCTION_EXIT_TAG) > 0) {
+			indexes.minParamCount = 1; // Name is mandatory
+			indexes.textIndex = -1; // No trace text
+			indexes.nameIndex = 0; // Trace name at index 0
+			indexes.groupIndex = -1; // Group is fixed to TRACE_FLOW
+			indexes.groupName = FLOW_GROUP_NAME;
+		} else if (tag.indexOf(OstConstants.STATE_TRACE_TAG) > 0) {
+			indexes.minParamCount = 1; // Name is mandatory
+			indexes.textIndex = -1; // No trace text
+			indexes.nameIndex = 0; // Trace name at index 0
+			indexes.groupIndex = -1; // Group is fixed to TRACE_STATE
+			indexes.groupName = STATE_GROUP_NAME;
+		} else if (tag.indexOf(OstConstants.PERFORMANCE_EVENT_START_TAG) > 0) {
+			// Name and event name are mandatory
+			indexes.minParamCount = 2; // CodForChk_Dis_Magic
+			indexes.textIndex = 1; // Trace text at index 1
+			indexes.nameIndex = 0; // Trace name at index 0
+			indexes.groupIndex = -1; // Group is fixed to TRACE_PERFORMANCE
+			indexes.groupName = PERFORMANCE_GROUP_NAME;
+		} else if (tag.indexOf(OstConstants.PERFORMANCE_EVENT_STOP_TAG) > 0) {
+			// Name and event name are mandatory
+			indexes.minParamCount = 2; // CodForChk_Dis_Magic
+			indexes.textIndex = 1; // Trace text at index 1
+			indexes.nameIndex = 0; // Trace name at index 0
+			indexes.groupIndex = -1; // Group is fixed to TRACE_PERFORMANCE
+			indexes.groupName = PERFORMANCE_GROUP_NAME;
+		} else {
+			indexes.minParamCount = MIN_PARAMETER_COUNT;
+			indexes.textIndex = TRACE_TEXT_OFFSET;
+			indexes.nameIndex = TRACE_NAME_OFFSET;
+			indexes.groupIndex = GROUP_NAME_OFFSET;
+		}
+		// If the trace macro contains preprocessor level, the offsets are
+		// incremented by one
+		if (tag.indexOf(OstConstants.PREPROCESSOR_LEVEL_TAG) > 0) {
+			indexes.minParamCount++;
+			if (indexes.textIndex >= 0) {
+				indexes.textIndex++;
+			}
+			if (indexes.nameIndex >= 0) {
+				indexes.nameIndex++;
+			}
+			if (indexes.groupIndex >= 0) {
+				indexes.groupIndex++;
+			}
+			indexes.levelIndex = PREPROCESSOR_LEVEL_OFFSET;
+		}
+		return indexes;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.source.SourceParserRule#
+	 *      convertLocation(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	@Override
+	public TraceConversionResult convertLocation(TraceLocation location)
+			throws TraceCompilerException { // CodForChk_Dis_ComplexFunc
+		TraceParameterFlagList flags = checkParameterCount(location);
+
+		// Data tag does not have parameters
+		boolean checkParameters = !flags.hasDataTag;
+
+		List<FormatMapping> typeList;
+		if (flags.hasExtTag
+				&& (flags.hasFunctionEntryTag || flags.hasFunctionExitTag)) {
+			// Parameters are generated by AutoAdd rules
+			typeList = new ArrayList<FormatMapping>();
+			checkParameters = false;
+		} else if (!flags.hasFlags() || flags.hasDataTag || flags.hasExtTag) {
+			// If the Ext, Data or EventStart tag is present, all formats
+			// are supported. If no flags is set, only 32-bit formats are
+			// supported.
+			typeList = buildParameterTypeList(location.getTraceText(),
+					!flags.hasDataTag && !flags.hasExtTag);
+		} else if (flags.hasEventStartTag) {
+			// In case of Start1 tag value parameter is supported
+			typeList = new ArrayList<FormatMapping>();
+			// Check that does optional value exist
+			if (location.getParameterCount() == 1) {
+				FormatMapping mapping = new FormatMapping(TraceParameter.SDEC32);
+				mapping.isSimple = true;
+				typeList.add(mapping);
+			}
+			checkParameters = false;
+		} else if (flags.hasEventStopTag) {
+			// If the Event stop tag is presented, start event trace
+			// id parameter is supported
+			typeList = new ArrayList<FormatMapping>();
+			FormatMapping mapping = new FormatMapping(TraceParameter.UDEC32);
+			mapping.isSimple = true;
+			typeList.add(mapping);
+			checkParameters = false;
+
+		} else if (flags.hasStateTag) {
+			// If the State tag is presented, two ascii parameters are supported
+			// in case of State0 tag (parameter count = 2). In case of State1
+			// tag (parameter count = 3) two ascii and one 32-bit hex parameters
+			// are supported
+			typeList = new ArrayList<FormatMapping>();
+			FormatMapping mapping = new FormatMapping(TraceParameter.ASCII);
+			mapping.isSimple = true;
+			typeList.add(mapping);
+			mapping = new FormatMapping(TraceParameter.ASCII);
+			mapping.isSimple = true;
+			typeList.add(mapping);
+
+			// Check that does optional instance identifier exist
+			if (location.getParameterCount() == 3) { // CodForChk_Dis_Magic
+				mapping = new FormatMapping(TraceParameter.HEX32);
+				mapping.isSimple = true;
+				typeList.add(mapping);
+			}
+			checkParameters = false;
+		} else {
+			// If some other flag than Data, State, Ext or EventStart is set,
+			// only one 32-bit hex parameter is supported
+			typeList = new ArrayList<FormatMapping>();
+			if (location.getParameterCount() == 1) {
+				FormatMapping mapping = new FormatMapping(TraceParameter.HEX32);
+				mapping.isSimple = true;
+				typeList.add(mapping);
+			}
+		}
+		// If no flags or Ext flag is present, the parameter count needs to be
+		// verified
+		TraceConversionResult result = super.convertLocation(location,
+				checkParameters, typeList);
+		// If the extension or state tag is present, zero parameters or a single
+		// 32-bit parameter is not accepted because they do not need to generate
+		// a function into the header
+		if (((flags.hasExtTag && !flags.hasFunctionExitTag && !flags.hasFunctionEntryTag) || (flags.hasStateTag))
+				&& (typeList.size() == 0 || (typeList.size() == 1 && typeList
+						.get(0).isSimple))) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.PARAMETER_FORMAT_UNNECESSARY_EXT_MACRO);
+		}
+		// Ext-macros are tagged with the complex header rule, so the header
+		// gets written when traces are exported. Data-macros are tagged with
+		// read-only rule, so they are not updated via UI. Other special cases
+		// are flagged with corresponding rule.
+		// If trace text does not exist, it is created based on context
+		AutomaticTraceTextRule rule = null;
+		if (flags.hasDataTag) {
+			addRule(result, new ReadOnlyObjectRuleImpl());
+		} else if (flags.hasStateTag) {
+			addRule(result, new StateTraceRule());
+			addRule(result, new ComplexHeaderRuleImpl());
+		} else if (flags.hasEventStartTag) {
+			addRule(result, new PerformanceEventStartRule());
+			// If event value is not defined then event value 1 is automatically
+			// added to event start macros
+			if (location.getParameterCount() == 0) {
+				addRule(result, new AutoAddValueRule());
+			}
+		} else if (flags.hasEventStopTag) {
+			addRule(result, new PerformanceEventStopRule());
+			addRule(result, new ComplexHeaderRuleImpl());
+			// Event value 0 is automatically added to event stop macros
+			addRule(result, new AutoAddValueRule());
+		} else if (flags.hasFunctionEntryTag) {
+			if (flags.hasExtTag) {
+				// Entry trace may contain Ext tag. In that case the trace
+				// parameters are an instance variable and function parameters
+				// parsed from source. It is also flagged as complex, so the
+				// function gets generated to the trace header
+				addRule(result, new ComplexHeaderRuleImpl());
+				addRule(result, new AutoAddFunctionParametersRule());
+				addRule(result, new AutoAddThisPtrRule());
+			}
+			rule = new EntryTraceRule();
+			addRule(result, rule);
+		} else if (flags.hasFunctionExitTag) {
+			if (flags.hasExtTag) {
+				// Exit trace may contain Ext tag. In that case the trace has
+				// two parameters: instance variable and return statement
+				// It is also flagged as complex, so the function gets generated
+				// to the trace header
+				addRule(result, new ComplexHeaderRuleImpl());
+				addRule(result, new AutoAddThisPtrRule());
+				addRule(result, new AutoAddReturnParameterRule());
+			}
+			rule = new ExitTraceRule();
+			addRule(result, rule);
+		} else if (flags.hasExtTag) {
+			addRule(result, new ComplexHeaderRuleImpl());
+		}
+		if (rule != null) {
+			setAutoTextToTrace(location, result, rule);
+		}
+		List<String> parserData = location.getParserData();
+		result.group = parserData.get(parserData.size() - 1);
+		// The convert flag is reset to prevent further conversions
+		location.locationConverted();
+		return result;
+	}
+
+	/**
+	 * Uses the auto-text rule to create trace text
+	 * 
+	 * @param location
+	 *            the location
+	 * @param result
+	 *            the conversion result
+	 * @param rule
+	 *            the auto-text rule
+	 * @throws TraceCompilerException
+	 *             if update fails
+	 */
+	private void setAutoTextToTrace(TraceLocation location,
+			TraceConversionResult result, AutomaticTraceTextRule rule)
+			throws TraceCompilerException {
+		// The trace text comes from the auto-text rule
+		SourceParser parser = location.getParser();
+		SourceContext context = parser.getContext(location.getOffset());
+		if (context != null) {
+			result.text = rule.formatTrace(context);
+		} else {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.NO_CONTEXT_FOR_LOCATION);
+		}
+	}
+
+	/**
+	 * Checks parameter count
+	 * 
+	 * @param location
+	 *            the location
+	 * @return the location tag flags
+	 * @throws TraceCompilerException
+	 *             if parameter count is not valid
+	 */
+	private TraceParameterFlagList checkParameterCount(TraceLocation location)
+			throws TraceCompilerException {
+		TraceParameterFlagList flags = new TraceParameterFlagList(location
+				.getTag());
+
+		// If the trace has some tag, the parameter count is fixed
+		// Data has 2 parameters
+		// State has 2 or 3 parameters
+		// Function entry-exit has 0 or 1 parameters
+		// Event start has 0 or 1 parameters
+		// Event stop has 1 parameters
+		int parameterCount = location.getParameterCount();
+
+		// Entry trace may have zero or one parameter
+		// In case of Ext, it must have one parameter
+		if (flags.hasFunctionEntryTag
+				&& ((parameterCount > 1) || (flags.hasExtTag && (parameterCount != ENTRY_EXT_PARAMETER_COUNT)))) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.PARAMETER_COUNT_DOES_NOT_MATCH_API);
+		}
+
+		// Exit trace may have zero or one parameter
+		// In case of Ext, it must have two parameters
+		if (flags.hasFunctionExitTag
+				&& ((!flags.hasExtTag && (parameterCount > 1)) || (flags.hasExtTag && parameterCount != EXIT_EXT_PARAMETER_COUNT))) { // CodForChk_Dis_LengthyLine
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.PARAMETER_COUNT_DOES_NOT_MATCH_API);
+		}
+
+		// Event start may have zero or one parameter
+		if (flags.hasEventStartTag && (parameterCount > 1)) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.PARAMETER_COUNT_DOES_NOT_MATCH_API);
+		}
+
+		// Event stop have one parameters
+		if (flags.hasEventStopTag && (parameterCount != 1)) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.PARAMETER_COUNT_DOES_NOT_MATCH_API);
+		}
+
+		// Data trace has two parameters
+		if ((flags.hasDataTag && (parameterCount != DATA_PARAMETER_COUNT))) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.PARAMETER_COUNT_DOES_NOT_MATCH_API);
+		}
+
+		// State trace may have two or three parameter
+		if (flags.hasStateTag && (parameterCount < 2 || parameterCount > 3)) { // CodForChk_Dis_Magic
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.PARAMETER_COUNT_DOES_NOT_MATCH_API);
+		}
+
+		return flags;
+	}
+
+	/**
+	 * Adds a rule to result
+	 * 
+	 * @param result
+	 *            the result
+	 * @param rule
+	 *            the rule
+	 */
+	private void addRule(TraceConversionResult result, TraceModelExtension rule) {
+		if (result.extensions == null) {
+			result.extensions = new ArrayList<TraceModelExtension>();
+		}
+		result.extensions.add(rule);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.rules.SourceParserRuleBase#
+	 * isLocationConverted(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	@Override
+	public boolean isLocationConverted(TraceLocation location) {
+		boolean retval = location.hasChangedAfterConvert();
+		if (!retval) {
+			// Duplicate-location conversions need to be retried in case the
+			// location is no longer a duplicate
+			retval = (location.getValidityCode() == TraceCompilerErrorCode.TRACE_HAS_MULTIPLE_LOCATIONS);
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @seecom.nokia.tracecompiler.engine.rules.printf.PrintfTraceParserRule#
+	 * getLocationGroup()
+	 */
+	@Override
+	public String getLocationGroup() {
+		return null;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/osttrace/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Implementation for OST format specific rules
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,9 @@
+<html><body>
+Provides compile-time configuration of TraceCompiler behavior. 
+The features that can be adjusted via this package are:
+<ul>
+<li>Dialog templates</li>
+<li>Trace object rules</li>
+<li>Dialog flags</li>
+</ul>
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/Messages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2010 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:
+*
+* Localized strings for engine package
+*
+*/
+package com.nokia.tracecompiler.engine.source;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+
+	/**
+	 * Bundle name
+	 */	
+	private static final String BUNDLE_NAME = "com.nokia.tracecompiler.engine.source.messages"; //$NON-NLS-1$
+
+	/**
+	 * Bundle
+	 */
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Prevents construction
+	 */
+	private Messages() {
+	}
+
+	/**
+	 * Gets localized string based on key
+	 * 
+	 * @param key
+	 *            the resource key
+	 * @return the localized resource
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceEngine.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,220 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Source engine manages source documents that are opened to Eclipse UI
+*
+*/
+package com.nokia.tracecompiler.engine.source;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.source.SourceDocumentInterface;
+import com.nokia.tracecompiler.source.SourceDocumentMonitor;
+import com.nokia.tracecompiler.source.SourceDocumentProcessor;
+import com.nokia.tracecompiler.utils.DocumentFactory;
+
+/**
+ * Source engine manages source documents that are opened to Eclipse UI.
+ * 
+ */
+public class SourceEngine implements SourceDocumentProcessor,
+		Iterable<SourceProperties> {
+
+	/**
+	 * Document monitor
+	 */
+	private SourceDocumentMonitor documentMonitor;
+
+	/**
+	 * Trace model listener implementation
+	 */
+	private SourceEngineModelListener modelListener = new SourceEngineModelListener(
+			this);
+
+	/**
+	 * Trace model extension listener
+	 */
+	private SourceEngineModelExtensionListener extensionListener = new SourceEngineModelExtensionListener(
+			this);
+
+	/**
+	 * The callback interfaces are notified about source file changes
+	 */
+	private ArrayList<SourceListener> listeners = new ArrayList<SourceListener>();
+
+	/**
+	 * Running flag
+	 */
+	private boolean running;
+
+	/**
+	 * Trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * Source list
+	 */
+	private ArrayList<SourceProperties> tempList = new ArrayList<SourceProperties>();
+
+	/**
+	 * Read-only files
+	 */
+	private String[] READ_ONLY = { ".h" //$NON-NLS-1$
+	};
+
+	/**
+	 * Non-source file list
+	 */
+	private ArrayList<String> nonSourceFiles = new ArrayList<String>();
+
+	/**
+	 * Constructor
+	 * 
+	 * @param model
+	 *            the trace model
+	 */
+	public SourceEngine(TraceModel model) {
+		this.model = model;
+	}
+
+	/**
+	 * Starts this engine. Does nothing if already running
+	 * @throws Exception 
+	 */
+	public void start() throws Exception {
+		if (!running) {
+			documentMonitor = DocumentFactory.getDocumentMonitor();
+			documentMonitor.startMonitor(this);
+			running = true;
+			model.addModelListener(modelListener);
+			model.addExtensionListener(extensionListener);
+		}
+	}
+
+	/**
+	 * Shuts down the source engine. Does nothing if already stopped
+	 */
+	public void shutdown() {
+		if (running) {
+			documentMonitor.stopMonitor();
+			documentMonitor = null;
+			running = false;
+			model.removeModelListener(modelListener);
+			model.removeExtensionListener(extensionListener);
+		}
+	}
+
+	/**
+	 * Adds source listener callback interface
+	 * 
+	 * @param listener
+	 *            the new listener
+	 */
+	public void addSourceListener(SourceListener listener) {
+		listeners.add(listener);
+	}
+
+	/**
+	 * Removes a source listener
+	 * 
+	 * @param listener
+	 *            the listener to be removed
+	 */
+	public void removeSourceListener(SourceListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * Gets the sources
+	 * 
+	 * @return the sources
+	 */
+	public Iterator<SourceProperties> getSources() {
+		tempList.clear();
+		for (SourceDocumentInterface doc : documentMonitor) {
+			tempList.add((SourceProperties) doc.getOwner());
+		}
+		return tempList.iterator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Iterable#iterator()
+	 */
+	public Iterator<SourceProperties> iterator() {
+		return getSources();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentProcessor#
+	 *      sourceOpened(com.nokia.tracecompiler.source.SourceDocumentInterface)
+	 */
+	public void sourceOpened(SourceDocumentInterface source) throws TraceCompilerException {
+		SourceProperties properties = new SourceProperties(model,
+				documentMonitor.getFactory(), source);
+		// Headers are marked read-only
+		for (String s : READ_ONLY) {
+			String fileName = properties.getFileName();
+			if (fileName != null && fileName.endsWith(s)) {
+				properties.setReadOnly(true);
+				break;
+			}
+		}
+		properties.sourceOpened();
+		source.setOwner(properties);
+		for (SourceListener l : listeners) {
+			l.sourceOpened(properties);
+		}
+	}
+
+	/**
+	 * Adds a non-source file to this list.
+	 * 
+	 * @param filePath
+	 *            the non-source file path to added
+	 */
+	public void addNonSourceFile(String filePath) {
+		nonSourceFiles.add(filePath);
+	}
+
+	/**
+	 * Removes a non-source file from this list
+	 * 
+	 * @param filePath
+	 *            the non-source file path to be removed
+	 * @return true if removed
+	 */
+	public boolean removeNonSourceFile(String filePath) {
+		boolean retVal = nonSourceFiles.remove(filePath);
+		return retVal;
+	}
+
+	/**
+	 * Gets list of non-source files
+	 * 
+	 * @return the list of non-source file paths
+	 */
+	public ArrayList<String> getNonSourceFiles() {
+		return nonSourceFiles;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceEngineModelExtensionListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Trace model extension listener implementation for SourceEngine
+*
+*/
+package com.nokia.tracecompiler.engine.source;
+
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceModelExtensionListener;
+import com.nokia.tracecompiler.model.TraceObject;
+
+/**
+ * Trace model extension listener implementation for SourceEngine
+ * 
+ */
+final class SourceEngineModelExtensionListener implements
+		TraceModelExtensionListener {
+
+	/**
+	 * Constructor
+	 * 
+	 * @param engine
+	 *            the source engine
+	 */
+	SourceEngineModelExtensionListener(SourceEngine engine) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      extensionAdded(com.nokia.tracecompiler.model.TraceObject,
+	 *      com.nokia.tracecompiler.model.TraceModelExtension)
+	 */
+	public void extensionAdded(TraceObject object, TraceModelExtension extension) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      extensionRemoved(com.nokia.tracecompiler.model.TraceObject,
+	 *      com.nokia.tracecompiler.model.TraceModelExtension)
+	 */
+	public void extensionRemoved(TraceObject object,
+			TraceModelExtension extension) {
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceEngineModelListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Trace model listener implementation for SourceEngine
+*
+*/
+package com.nokia.tracecompiler.engine.source;
+
+import com.nokia.tracecompiler.model.TraceModelListener;
+import com.nokia.tracecompiler.model.TraceObject;
+
+/**
+ * Trace model listener implementation for SourceEngine
+ * 
+ */
+final class SourceEngineModelListener implements TraceModelListener {
+
+	/**
+	 * Constructor
+	 * 
+	 * @param engine
+	 *            the source engine
+	 */
+	SourceEngineModelListener(SourceEngine engine) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      objectAdded(com.nokia.tracecompiler.model.TraceObject,
+	 *      com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectAdded(TraceObject owner, TraceObject object) {
+		// Update is called from TraceCompiler engine
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      objectRemoved(com.nokia.tracecompiler.model.TraceObject,
+	 *      com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectRemoved(TraceObject owner, TraceObject object) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      objectCreationComplete(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectCreationComplete(TraceObject object) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      propertyUpdated(com.nokia.tracecompiler.model.TraceObject, int)
+	 */
+	public void propertyUpdated(TraceObject object, int property) {
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceFormatter.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,305 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ * Formatting rules are provided by Trace objects
+ *
+ */
+package com.nokia.tracecompiler.engine.source;
+
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.rules.StateTraceRule;
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.plugin.TraceFormatConstants;
+import com.nokia.tracecompiler.plugin.TraceAPIFormatter.TraceFormatType;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceUtils;
+import com.nokia.tracecompiler.source.SymbianConstants;
+
+/**
+ * Static functions for source formatting
+ * 
+ */
+public class SourceFormatter {
+
+	/**
+	 * Value parameter name
+	 */
+	public static final String VALUE_PARAMETER_NAME = "value"; //$NON-NLS-1$	
+
+	/**
+	 * Event start trace id parameter name
+	 */
+	public static final String EVENT_START_TRACE_ID_PARAMETER_NAME = "linkToStart"; //$NON-NLS-1$		
+
+	/**
+	 * Constructor is hidden
+	 */
+	private SourceFormatter() {
+	}
+
+	/**
+	 * Formats a trace to string format using the formatting rule from the trace
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @param formatType
+	 *            the type of format
+	 * @return the trace string
+	 */
+	public static String formatTrace(Trace trace, TraceFormatType formatType) {
+		return formatTrace(trace, null, formatType, null, false);
+	}
+
+	/**
+	 * Formats a trace to string format
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @param traceRule
+	 *            the formatting rule to be used
+	 * @param formatType
+	 *            the type of format
+	 * @param tags
+	 *            the tags for parameters or null if parameter names are used
+	 * @param fixedTags
+	 *            true if the <i>tags</i> iterator is fixed, false if the
+	 *            contents of <i>tags</i> should go through
+	 *            <code>SourceRule.mapNameToSource</code>
+	 * @return the trace string
+	 */
+	static String formatTrace(Trace trace, TraceFormattingRule traceRule,
+			TraceFormatType formatType, Iterator<String> tags, boolean fixedTags) {
+		StringBuffer data = new StringBuffer();
+		String format = null;
+		if (traceRule == null) {
+
+			// If rule is not explicitly provided, it is fetched from the trace
+			traceRule = trace.getExtension(TraceFormattingRule.class);
+			if (traceRule == null) {
+
+				// If trace does not have a formatting rule, the project API's
+				// should implement default rule
+				traceRule = trace.getModel().getExtension(
+						TraceFormattingRule.class);
+			}
+		}
+		if (traceRule != null) {
+			format = traceRule.getFormat(trace, formatType);
+		}
+		if (format != null && traceRule != null) {
+			data.append(format);
+			data.append(SourceConstants.LINE_FEED);
+			buildParameterList(trace, traceRule, data, formatType, tags,
+					fixedTags);
+
+			String traceName = traceRule.mapNameToSource(trace);
+			String traceGroupName = trace.getGroup().getName();
+
+			// %NAME% is replaced with rule-mapped trace name
+			replaceData(data, traceName, TraceFormatConstants.NAME_FORMAT);
+
+			// %GROUP% is replaced with group name
+			replaceData(data, traceGroupName, TraceFormatConstants.GROUP_FORMAT);
+
+			// %TEXT% is replaced with trace text
+			replaceData(data, "\"" + trace.getTrace() //$NON-NLS-1$
+					+ "\"", TraceFormatConstants.TEXT_FORMAT); //$NON-NLS-1$
+
+			// %FORMATTED_TRACE% is replaced with trace data
+			replaceData(data, trace.getTrace(),
+					TraceFormatConstants.FORMATTED_TRACE);
+
+			// Comment is inserted before the trace
+			int index = data.indexOf(TraceFormatConstants.COMMENT_FORMAT);
+			if (index >= 0) {
+				String comment = data.substring(index + 1);
+				data.delete(index, data.length());
+				data.insert(0, comment);
+				data.append(SourceConstants.LINE_FEED);
+			}
+		}
+
+		// If trace does not have formatting, it is not shown in source
+		return data.toString();
+	}
+
+	/**
+	 * Adds the parameters to the data buffer
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @param format
+	 *            the formatter from trace
+	 * @param data
+	 *            the data buffer where the formatted data is stored
+	 * @param formatType
+	 *            the format type to be applied
+	 * @param tags
+	 *            the tags for parameters or null if parameter names are used
+	 * @param fixedTags
+	 *            true if the <i>tags</i> iterator is fixed, false if the
+	 *            contents of <i>tags</i> should go through
+	 *            <code>SourceRule.mapNameToSource</code>
+	 */
+	private static void buildParameterList(Trace trace,
+			TraceFormattingRule format, StringBuffer data,
+			TraceFormatType formatType, Iterator<String> tags, boolean fixedTags) {
+
+		int count = trace.getParameterCount();
+
+		Iterator<TraceParameter> itr = trace.getParameters();
+		StringBuffer paramList = new StringBuffer();
+		// Index is incremented by one for each parameter that has been added to
+		// source
+		int parameterIndex = 0;
+		while (itr.hasNext()) {
+			TraceParameter param = itr.next();
+			TraceParameterFormattingRule rule = param
+					.getExtension(TraceParameterFormattingRule.class);
+			String name;
+			// Count and name may be adjusted by rules provided by parameters
+			if (rule != null) {
+				boolean isInSource = rule.isShownInSource();
+				// If the parameter iterator is explicitly provided, the
+				// parameter name is fetched from it. If the parameter list does
+				// not have enough tags (for example when a new parameter is
+				// added to trace) the name of the parameter is used. The source
+				// rule is used to map the parameter name to correct format
+				if (isInSource) {
+					name = getTagWithoutMapping(tags, param);
+					addParameter(paramList, param, name, ++parameterIndex,
+							formatType);
+				} else {
+					// If the parameter is not shown in source, it is skipped
+					count--;
+				}
+			} else {
+				// If the parameter is not associated with a source rule, it is
+				// added without mapping
+				name = getTagWithoutMapping(tags, param);
+				addParameter(paramList, param, name, ++parameterIndex,
+						formatType);
+			}
+		}
+		// %PC% is replaced with adjusted parameter count
+		// In case of packed trace, the header engine does the count mapping
+		if (formatType != TraceFormatType.TRACE_PACKED) {
+			String val = format.mapParameterCountToSource(trace, count);
+
+			if (trace.getExtension(StateTraceRule.class) != null
+					&& data.toString().startsWith("OstTraceState")) { //$NON-NLS-1$
+
+				// In case of State Trace macro value in trace macro is
+				// parameter count - 2
+				if (count > 1) {
+					val = String.valueOf(count - 2); // CodForChk_Dis_Magic
+				} else {
+					val = String.valueOf(count);
+				}
+			}
+			replaceData(data, val, TraceFormatConstants.PARAM_COUNT_FORMAT);
+		}
+		// %PARAMETERS% is replaced with parameter names
+		replaceData(data, paramList.toString(),
+				TraceFormatConstants.PARAMETERS_FORMAT);
+	}
+
+	/**
+	 * Gets the name for a parameter without source rule mapping. If the tags
+	 * iterator contains a valid entry, the name is fetched from it. If not, the
+	 * parameter name is used instead.
+	 * 
+	 * @param tags
+	 *            the list of tags
+	 * @param param
+	 *            the parameter
+	 * @return the parameter name
+	 */
+	private static String getTagWithoutMapping(Iterator<String> tags,
+			TraceParameter param) {
+		String name;
+		// If the parameter iterator is explicitly provided, the
+		// parameter name is fetched from it
+		if (tags != null && tags.hasNext()) {
+			name = tags.next();
+			// The list may contain 0-length items to represent
+			// that that parameter name should be used instead
+			if (name == null || name.length() == 0) {
+				name = param.getName();
+			}
+		} else {
+			name = param.getName();
+		}
+		return name;
+	}
+
+	/**
+	 * Adds a parameter to the parameter list
+	 * 
+	 * @param paramList
+	 *            the parameter list
+	 * @param param
+	 *            the parameter to be added
+	 * @param name
+	 *            a name replacement for the parameter
+	 * @param parameterIndex
+	 *            the index of the parameter
+	 * @param formatType
+	 *            the type of the format
+	 */
+	private static void addParameter(StringBuffer paramList,
+			TraceParameter param, String name, int parameterIndex,
+			TraceFormatType formatType) {
+		paramList.append(SourceConstants.PARAMETER_SEPARATOR);
+		if (formatType == TraceFormatType.HEADER) {
+			paramList.append(SourceUtils.mapParameterTypeToSymbianType(param));
+			paramList.append(SourceConstants.SPACE_CHAR);
+			paramList.append(SymbianConstants.PARAMETER_DECLARATION_PREFIX);
+			paramList.append(parameterIndex);
+		} else if (formatType == TraceFormatType.EMPTY_MACRO) {
+			paramList.append(SymbianConstants.PARAMETER_DECLARATION_PREFIX);
+			paramList.append(parameterIndex);
+		}
+	}
+
+	/**
+	 * Replaces data from the stringbuffer
+	 * 
+	 * @param data
+	 *            the data
+	 * @param replaceData
+	 *            the data to be used
+	 * @param replaceFormat
+	 *            the format to be replaced
+	 */
+	private static void replaceData(StringBuffer data, String replaceData,
+			String replaceFormat) {
+		TraceCompilerEngineGlobals.getEvents().postInfoMessage(Messages.getString("SourceFormatter.replaceAllBeginText") + replaceFormat + Messages.getString("SourceFormatter.replaceAllMiddleText") + replaceData , null); //$NON-NLS-1$ //$NON-NLS-2$
+
+		int replaceOffset = 0;
+		do {
+			replaceOffset = data.indexOf(replaceFormat, replaceOffset);
+			if (replaceOffset >= 0) {
+				data.replace(replaceOffset, replaceOffset
+						+ replaceFormat.length(), replaceData);
+				replaceOffset += replaceData.length();
+			}
+		} while (replaceOffset != -1);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Interface that is notified about changes in source documents
+*
+*/
+package com.nokia.tracecompiler.engine.source;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+
+/**
+ * Interface that is notified about changes in source documents managed by
+ * {@link SourceEngine}
+ * 
+ */
+public interface SourceListener {
+
+	/**
+	 * Event that is fired when a source is opened
+	 * 
+	 * @param properties
+	 *            the source properties
+	 * @throws TraceCompilerException 
+	 */
+	public void sourceOpened(SourceProperties properties) throws TraceCompilerException;
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceLocationRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rules for mapping trace model entries into source code
+*
+*/
+package com.nokia.tracecompiler.engine.source;
+
+import com.nokia.tracecompiler.model.TraceObjectRule;
+
+/**
+ * Rules for relocating traces in source code
+ * 
+ */
+public interface SourceLocationRule extends TraceObjectRule {
+
+	/**
+	 * Rule type for context-relative location
+	 */
+	int CONTEXT_RELATIVE = 1;
+
+	/**
+	 * Rule type for absolute location
+	 */
+	int ABSOLUTE = 2;
+
+	/**
+	 * Gets the rule type
+	 * 
+	 * @return rule type
+	 */
+	public int getLocationType();
+
+	/**
+	 * Gets the offset where the trace is inserted
+	 * 
+	 * @return the offset
+	 */
+	public int getLocationOffset();
+
+	/**
+	 * Flag which determines whether this locator should be removed from the
+	 * trace after the trace has been inserted to source. If this is left to the
+	 * trace, the trace is relocated every time it is inserted.
+	 * <p>
+	 * Note that if this returns false, the extension should also be persistent
+	 * so that the relocations work over TraceCompiler restarts.
+	 * 
+	 * @return true if this should be removed after insertion
+	 */
+	public boolean isRemovedAfterInsert();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceParserResult.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Result from parameter parsing
+*
+*/
+package com.nokia.tracecompiler.engine.source;
+
+import java.util.List;
+
+/**
+ * Result from parameter parsing
+ * 
+ */
+public class SourceParserResult {
+
+	/**
+	 * Trace name as parsed from source
+	 */
+	public String originalName;
+
+	/**
+	 * Parsed name after conversion to valid name
+	 */
+	public String convertedName;
+
+	/**
+	 * Trace text as parsed from source
+	 */
+	public String traceText;
+
+	/**
+	 * Parameters parsed from source
+	 */
+	public List<String> parameters;
+
+	/**
+	 * List of parser-specific data
+	 */
+	public List<String> parserData;
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceParserRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rule interface for tags to be searched from source files
+*
+*/
+package com.nokia.tracecompiler.engine.source;
+
+import java.util.List;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceObjectRule;
+import com.nokia.tracecompiler.project.TraceLocationParser;
+
+/**
+ * Rule interface for tags to be searched from source files
+ * 
+ */
+public interface SourceParserRule extends TraceObjectRule {
+
+	/**
+	 * Parameter conversion result
+	 */
+	public class ParameterConversionResult {
+
+		/**
+		 * Parameter name
+		 */
+		public String name;
+
+		/**
+		 * Parameter type
+		 */
+		public String type;
+
+		/**
+		 * Parameter extensions
+		 */
+		public List<TraceModelExtension> extensions;
+	}
+
+	/**
+	 * Trace location conversion result
+	 */
+	public class TraceConversionResult {
+
+		/**
+		 * Name of the group where the trace goes to
+		 */
+		public String group;
+
+		/**
+		 * Name for the trace
+		 */
+		public String name;
+
+		/**
+		 * Text for the trace
+		 */
+		public String text;
+
+		/**
+		 * List of parameters
+		 */
+		public List<ParameterConversionResult> parameters;
+
+		/**
+		 * Extensions for the trace
+		 */
+		public List<TraceModelExtension> extensions;
+
+	}
+
+	/**
+	 * Gets the name of this parser
+	 * 
+	 * @return the name
+	 */
+	public String getName();
+
+	/**
+	 * Gets the source tag to be located from source
+	 * 
+	 * @return the tag name
+	 */
+	public String getSearchTag();
+
+	/**
+	 * Checks if the trace tag suffix is allowed
+	 * 
+	 * @param tagSuffix
+	 *            the tag to be checked
+	 * @return true if allowed, false if not
+	 */
+	public boolean isAllowedTagSuffix(String tagSuffix);
+
+	/**
+	 * Parses a parameter list found from source
+	 * 
+	 * @param tag
+	 *            the location tag
+	 * @param list
+	 *            list of parameters
+	 * @return the parameter list
+	 * @throws TraceCompilerException
+	 *             if parameter list is not valid
+	 */
+	public SourceParserResult parseParameters(String tag, List<String> list)
+			throws TraceCompilerException;
+
+	/**
+	 * Gets the location parser interface
+	 * 
+	 * @return the location parser
+	 */
+	public TraceLocationParser getLocationParser();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceProperties.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,471 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ * Properties of a source document opened to Eclipse editor
+ *
+ */
+package com.nokia.tracecompiler.engine.source;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineConfiguration;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceLocation;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.source.SourceDocumentFactory;
+import com.nokia.tracecompiler.source.SourceDocumentInterface;
+import com.nokia.tracecompiler.source.SourceIterator;
+import com.nokia.tracecompiler.source.SourceParser;
+import com.nokia.tracecompiler.source.SourceParserException;
+import com.nokia.tracecompiler.source.SourcePropertyProvider;
+import com.nokia.tracecompiler.source.SourceStringSearch;
+
+/**
+ * Properties of a source document which contains trace locations
+ * 
+ */
+public class SourceProperties implements Iterable<TraceLocation> {
+
+	/**
+	 * Trace locations within the source
+	 */
+	private ArrayList<TraceLocation> locations = new ArrayList<TraceLocation>();
+
+	/**
+	 * Source parser
+	 */
+	private SourceParser sourceParser;
+
+	/**
+	 * Offset is stored in preProcess and reset in postProcess.
+	 */
+	private int firstChangedLocation = -1;
+
+	/**
+	 * Offset is stored in preProcess and reset in postProcess.
+	 */
+	private int firstUnchangedLocation = -1;
+
+	/**
+	 * The searchers for trace identifiers
+	 */
+	private ArrayList<SourceStringSearch> searchers = new ArrayList<SourceStringSearch>();
+
+	/**
+	 * Start index for calls to parseTrace
+	 */
+	private int searchStartIndex;
+
+	/**
+	 * Read-only flag
+	 */
+	private boolean readOnly;
+
+	/**
+	 * Creates source properties for given source document
+	 * 
+	 * @param model
+	 *            the trace model
+	 * @param framework
+	 *            the document framework
+	 * @param document
+	 *            the document
+	 */
+	SourceProperties(TraceModel model, SourceDocumentFactory framework,
+			SourceDocumentInterface document) {
+		sourceParser = new SourceParser(framework, document);
+		Iterator<SourceParserRule> parsers = model
+				.getExtensions(SourceParserRule.class);
+		while (parsers.hasNext()) {
+			// The rule defines what to search and how to interpret the
+			// parameters. It is stored into the searcher as search data
+			addParserRule(parsers.next());
+		}
+	}
+
+	/**
+	 * Gets the source parser
+	 * 
+	 * @return the parser
+	 */
+	public SourceParser getSourceParser() {
+		return sourceParser;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Iterable#iterator()
+	 */
+	public Iterator<TraceLocation> iterator() {
+		return locations.iterator();
+	}
+
+	/**
+	 * Gets the file name of this source
+	 * 
+	 * @return the name
+	 */
+	public String getFileName() {
+		String retval = null;
+		if (sourceParser != null) {
+			SourceDocumentInterface source = sourceParser.getSource();
+			if (source != null) {
+				SourcePropertyProvider provider = source.getPropertyProvider();
+				if (provider != null) {
+					retval = provider.getFileName();
+				}
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Sets the read-only flag for this source. Traces cannot be added to
+	 * read-only sources, but they can be parsed for data
+	 * 
+	 * @param readOnly
+	 *            the read-only flag
+	 */
+	void setReadOnly(boolean readOnly) {
+		this.readOnly = readOnly;
+	}
+
+	/**
+	 * Gets the read-only flag
+	 * 
+	 * @return read-only flag
+	 */
+	public boolean isReadOnly() {
+		return readOnly;
+	}
+
+	/**
+	 * Source opened notification
+	 */
+	void sourceOpened() {
+		updateTraces(0, sourceParser.getDataLength());
+	}
+
+	/**
+	 * Parses the document starting from given offset and locates the trace
+	 * entries from it. The first unchanged trace entry stops the search
+	 * 
+	 * @param startOffset
+	 *            the offset where to start the search
+	 * @param endOffset
+	 *            the offset where to end the search
+	 */
+	private void updateTraces(int startOffset, int endOffset) {
+		Iterator<SourceStringSearch> itr = searchers.iterator();
+		while (itr.hasNext()) {
+			SourceStringSearch searcher = itr.next();
+			searcher.resetSearch(startOffset, endOffset);
+			updateTraces(endOffset, searcher);
+		}
+	}
+
+	/**
+	 * Uses the given SourceSearch to parse traces
+	 * 
+	 * @param end
+	 *            the offset where parser should stop
+	 * @param searcher
+	 *            the searcher
+	 */
+	private void updateTraces(int end, SourceStringSearch searcher) {
+		int offset;
+		searchStartIndex = 0;
+		// If not updating, the entries contents are processed
+		do {
+			offset = searcher.findNext();
+			try {
+				if (offset != -1 && offset < end) {
+					String tag = isValidTrace(offset, searcher
+							.getSearchString().length(), searcher, false);
+					if (tag != null) {
+						parseTrace(offset, (SourceParserRule) searcher
+								.getSearchData(), tag);
+					}
+				}
+			} catch (SourceParserException e) {
+				TraceLocation location = new TraceLocation(this, offset,
+						offset + 80);
+				TraceCompilerEngineGlobals
+						.getEvents()
+						.postErrorMessage(
+								Messages
+										.getString("SourceProperties.parsingArrowAtBeginText") + location.getFilePath() + location.getFileName() + Messages.getString("SourceProperties.parsingArrownAtMiddleText") + location.getLineNumber(), null, true); //$NON-NLS-1$ //$NON-NLS-2$
+				// If the parameters cannot be parsed, the trace is
+				// not added to the array
+			}
+		} while (offset != -1 && offset < end);
+	}
+
+	/**
+	 * Parses a trace found from the document and adds it to the document's list
+	 * of positions. The position updater keeps the trace location up-to-date.
+	 * 
+	 * @param offset
+	 *            the offset to the trace
+	 * @param parserRule
+	 *            the parser to be attached to the location
+	 * @param locationTag
+	 *            the tag of the location
+	 * @throws SourceParserException
+	 *             if trace cannot be parsed
+	 */
+	private void parseTrace(int offset, SourceParserRule parserRule,
+			String locationTag) throws SourceParserException {
+		int arrayIndex = -1;
+		// Checks the changed locations. If a matching offset if found, the
+		// location is an existing one. In that case the location is not
+		// added to the array. If an offset larger than the new offset is
+		// found from the array, the location is inserted into that slot. If
+		// all locations within the array are smaller than the new offset,
+		// the new location is inserted before the first unchanged location.
+		// Since the locations in the array are ordered, the checking can
+		// always start from the latest location that has been found from
+		// the array. The caller of this function must set
+		// parseTraceStartIndex to 0 before starting a loop where this
+		// function is called. If firstUnchangedLocation is -1, this is the
+		// first time the file is being parsed and thus all locations are
+		// checked
+		boolean found = false;
+		int searchEndIndex;
+		int newSearchStartIndex = -1;
+		if (firstUnchangedLocation >= 0) {
+			searchEndIndex = firstUnchangedLocation;
+		} else {
+			searchEndIndex = locations.size();
+		}
+		for (int i = searchStartIndex; i < searchEndIndex && !found; i++) {
+			TraceLocation location = locations.get(i);
+			// Deleted locations are ignored. If a trace was replaced, the
+			// new offset will match the offset of the deleted one.
+			if (!location.isDeleted()) {
+				// If the offset of the trace matches an existing offset,
+				// the trace is old one. If the offset within the array is
+				// larger than the source offset, the trace found from
+				// source is new.
+				if (location.getOffset() == offset) {
+					found = true;
+					// Starts the next search from the value following the
+					// trace that was found
+					searchStartIndex = i + 1;
+					arrayIndex = -1;
+				} else if (location.getOffset() > offset) {
+					found = true;
+					// A new trace will be added into the current index, so
+					// the next search will start from the same location as
+					// was checked now. The index is updated after the trace has
+					// succesfully been created
+					newSearchStartIndex = i + 1;
+					arrayIndex = i;
+				}
+			}
+		}
+		// If trace was not found from the list, the trace is new and all
+		// traces following it are also new. The start index is set to point
+		// past the first unchanged location and thus the next search will
+		// ignore the above loop.
+		if (!found) {
+			arrayIndex = searchEndIndex;
+			searchStartIndex = firstUnchangedLocation + 1;
+		}
+		if (arrayIndex >= 0) {
+			// Creates a new location if it was not found
+			ArrayList<String> list = new ArrayList<String>();
+			int endOfTrace = sourceParser
+					.tokenizeParameters(offset, list, true);
+
+			TraceLocation location = new TraceLocation(this, offset, endOfTrace
+					- offset);
+
+			// The parser rules have been associated with the searchers. The
+			// parser rule that found the location is associated with the
+			// location and used to process its parameters
+			location.setTag(locationTag);
+			location.setParserRule(parserRule);
+			location.setData(list);
+
+			TraceCompilerEngineGlobals
+					.getEvents()
+					.postInfoMessage(
+							Messages
+									.getString("SourceProperties.newTraceLocationFoundBeginText") + location.getFilePath() + location.getFileName() + Messages.getString("SourceProperties.newTraceLocationFoundMiddleText") + location.getLineNumber() + Messages.getString("SourceProperties.newTraceLocationFoundEndText") + location.getTraceText(), null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+			locations.add(arrayIndex, location);
+			// The changed flag is set to newly added traces. If a location
+			// is added prior to the first changed location, the index of first
+			// changed location needs to be adjusted so that the flag gets
+			// cleared in postprocessing. Also the index of first unchanged
+			// location needs to be updated to reflect the changed array
+			if (firstUnchangedLocation >= 0) {
+				location.setContentChanged(true);
+				if (arrayIndex < firstChangedLocation) {
+					firstChangedLocation = arrayIndex;
+				}
+				firstUnchangedLocation++;
+			}
+			// Updates the search start index if trace creation was succesful
+			if (newSearchStartIndex >= 0) {
+				searchStartIndex = newSearchStartIndex;
+			}
+		}
+	}
+
+	/**
+	 * Checks that a trace is valid
+	 * 
+	 * @param offset
+	 *            offset to trace identifier
+	 * @param length
+	 *            length of trace
+	 * @param searcher
+	 *            the source searcher
+	 * @param checkMainTag
+	 *            true if the main search tag needs to be checked, false if only
+	 *            the tag suffix is checked
+	 * @return the trace tag or null if trace is not valid
+	 */
+	private String isValidTrace(int offset, int length,
+			SourceStringSearch searcher, boolean checkMainTag) {
+		String retval = null;
+		try {
+			int idlen = searcher.getSearchString().length();
+			int idend = offset + idlen;
+			if (checkMainTag) {
+				if (length >= idlen
+						&& searcher.isSearchStringMatch(sourceParser.getData(
+								offset, idlen))) {
+					// The previous character must be a separator or white space
+					if (offset == 0
+							|| !Character.isJavaIdentifierPart(sourceParser
+									.getData(offset - 1))) {
+						retval = getSearchTag(offset, idend);
+					}
+				}
+			} else {
+				// If main tag is not checked
+				retval = getSearchTag(offset, idend);
+			}
+			retval = verifyTag(searcher, retval, idlen);
+		} catch (Exception e) {
+			if (TraceCompilerEngineConfiguration.ASSERTIONS_ENABLED) {
+				TraceCompilerEngineGlobals.getEvents().postAssertionFailed(
+						"Trace validity check failed", e); //$NON-NLS-1$
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Verifies the tag against tag suffixes from parser
+	 * 
+	 * @param searcher
+	 *            the searcher
+	 * @param tag
+	 *            the tag include main tag and suffix
+	 * @param idlen
+	 *            the length of the main tag
+	 * @return the tag if it is valid, null if not
+	 */
+	private String verifyTag(SourceStringSearch searcher, String tag, int idlen) {
+		if (tag != null) {
+			// The trace suffix is verified by the parser. For example, if
+			// search data is "SymbianTrace" and the tag found from source
+			// is "SymbianTraceData1", the parser checks if "Data1" is a
+			// valid trace tag suffix.
+			if (!((SourceParserRule) searcher.getSearchData())
+					.isAllowedTagSuffix(tag.substring(idlen))) {
+				tag = null;
+			}
+		}
+		return tag;
+	}
+
+	/**
+	 * Gets the search tag between offset and next '(' character
+	 * 
+	 * @param offset
+	 *            the start of tag
+	 * @param idend
+	 *            the end of tag
+	 * @return the tag
+	 * @throws SourceParserException
+	 *             if parser fails
+	 */
+	private String getSearchTag(int offset, int idend)
+			throws SourceParserException {
+		// Locates the parameters starting from trace identifier
+		String retval = null;
+		SourceIterator srcitr = sourceParser.createIterator(idend - 1,
+				SourceParser.SKIP_ALL);
+		boolean found = false;
+		while (srcitr.hasNext() && !found) {
+			char c = srcitr.next();
+			if (c == ';') {
+				// Trace must have parameters
+				found = true;
+			} else if (c == '(') {
+				found = true;
+				// Stores the tag into location
+				retval = sourceParser.getData(offset, srcitr.previousIndex()
+						- offset + 1);
+			} else if (srcitr.hasSkipped()) {
+				// White spaces are not allowed within trace tag
+				found = true;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Checks if a trace can be inserted into given location
+	 * 
+	 * @param offset
+	 *            the offset to the location
+	 * @return true if location is valid
+	 */
+	boolean checkInsertLocation(int offset) {
+		boolean retval = true;
+		try {
+			offset = sourceParser.findStartOfLine(offset, false, true);
+			if (sourceParser.isInExcludedArea(offset)) {
+				retval = false;
+			}
+		} catch (SourceParserException e) {
+			retval = false;
+		}
+		return retval;
+	}
+
+	/**
+	 * Adds a new parser
+	 * 
+	 * @param rule
+	 *            the new parser rule
+	 */
+	void addParserRule(SourceParserRule rule) {
+		SourceStringSearch searcher = sourceParser.startStringSearch(rule
+				.getSearchTag(), 0, -1, SourceParser.MATCH_WORD_BEGINNING
+				| SourceParser.SKIP_ALL);
+		searcher.setSearchData(rule);
+		searchers.add(searcher);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/TraceFormattingRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Formatting rules are provided by Trace objects
+*
+*/
+package com.nokia.tracecompiler.engine.source;
+
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceObjectRule;
+import com.nokia.tracecompiler.plugin.TraceAPIFormatter.TraceFormatType;
+
+/**
+ * Formatting rules are stored into traces as extension. When inserting a trace
+ * to source the formatting rules are used to convert the trace into source file
+ * representation.
+ * 
+ */
+public interface TraceFormattingRule extends TraceObjectRule {
+
+	/**
+	 * Gets the format for given trace
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @param formatType
+	 *            the type of the format requested
+	 * @return the format
+	 */
+	public String getFormat(Trace trace, TraceFormatType formatType);
+
+	/**
+	 * Maps the trace name to name shown in source
+	 * 
+	 * @param trace
+	 *            the trace to be mapped
+	 * @return the name shown in source
+	 */
+	public String mapNameToSource(Trace trace);
+
+	/**
+	 * Maps the parameter count to source.
+	 * 
+	 * @param trace
+	 *            the trace
+	 * @param count
+	 *            the parameter count
+	 * @return mapped parameter count
+	 */
+	public String mapParameterCountToSource(Trace trace, int count);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/TraceParameterFormattingRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rule interface for parameters
+*
+*/
+package com.nokia.tracecompiler.engine.source;
+
+import com.nokia.tracecompiler.model.TraceObjectRule;
+
+/**
+ * Rule interface for parameters. Each parameter may provide replacement text
+ * for the %EXT% formatting.
+ * 
+ */
+public interface TraceParameterFormattingRule extends TraceObjectRule {
+
+	/**
+	 * Determines if this object should be shown in source
+	 * 
+	 * @return true if shown in source, false otherwise
+	 */
+	public boolean isShownInSource();
+
+	/**
+	 * Maps parameter name to name shown in source. Note that the original name
+	 * passed to this function is not necessarily the name returned by
+	 * getOwner().getName()
+	 * 
+	 * @param originalName
+	 *            the original name to be inserted to source
+	 * @return the name shown in source
+	 */
+	public String mapNameToSource(String originalName);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/messages.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,7 @@
+SourceFormatter.replaceAllBeginText=Replacing all : 
+SourceFormatter.replaceAllMiddleText=\ by 
+SourceProperties.newTraceLocationFoundBeginText=New TraceLocation found : 
+SourceProperties.newTraceLocationFoundEndText=. Trace text: 
+SourceProperties.newTraceLocationFoundMiddleText=. Line : 
+SourceProperties.parsingArrowAtBeginText=Parsing arror at 
+SourceProperties.parsingArrownAtMiddleText=. Line : 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Source engine monitors the source editors opened into Eclipse UI
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/utils/TraceMultiplierRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rule which can be used to create copies of new traces
+*
+*/
+package com.nokia.tracecompiler.engine.utils;
+
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceObjectRule;
+
+/**
+ * Rule which can be used to create copies of new traces
+ * 
+ */
+public interface TraceMultiplierRule extends TraceObjectRule {
+
+	/**
+	 * Gets copies of the given trace which is about to be inserted into given
+	 * context. The new trace is added first and the the copies will be inserted
+	 * after it in the order they are received from the iterator.
+	 * 
+	 * @param trace
+	 *            the new trace
+	 * @return a list of copies
+	 */
+	public Iterator<Trace> createCopies(Trace trace);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/utils/TraceUtils.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Utility functions related to traces
+*
+*/
+package com.nokia.tracecompiler.engine.utils;
+
+import com.nokia.tracecompiler.plugin.TraceFormatConstants;
+
+/**
+ * Utility functions related to traces
+ * 
+ */
+public final class TraceUtils {
+
+	/**
+	 * Underscore character
+	 */
+	private static final String UNDERSCORE = "_"; //$NON-NLS-1$
+
+	/**
+	 * Underscore character
+	 */
+	private static final char UNDERSCORE_CHAR = '_';
+
+	/**
+	 * Cannot be constructed
+	 */
+	private TraceUtils() {
+	}
+
+	/**
+	 * Formats a trace
+	 * 
+	 * @param format
+	 *            the format specification
+	 * @param cname
+	 *            the class name
+	 * @param fname
+	 *            the function name
+	 * @return the formatted trace
+	 */
+	public static String formatTrace(String format, String cname, String fname) {
+		StringBuffer sb = new StringBuffer(format);
+		int cnindex = sb
+				.indexOf(TraceFormatConstants.FORMAT_CLASS_NAME_NORMAL_CASE);
+		if (cnindex >= 0) {
+			if (cname != null) {
+				sb.replace(cnindex, cnindex
+						+ TraceFormatConstants.FORMAT_CLASS_NAME_NORMAL_CASE
+								.length(), cname);
+			} else {
+				sb.replace(cnindex, cnindex
+						+ TraceFormatConstants.FORMAT_CLASS_NAME_NORMAL_CASE
+								.length(), ""); //$NON-NLS-1$
+			}
+		}
+		int cnup = sb
+				.indexOf(TraceFormatConstants.FORMAT_CLASS_NAME_UPPER_CASE);
+		if (cnup >= 0) {
+			if (cname != null) {
+				sb.replace(cnup, cnup
+						+ TraceFormatConstants.FORMAT_CLASS_NAME_UPPER_CASE
+								.length(), cname.toUpperCase());
+			} else {
+				sb.replace(cnup, cnup
+						+ TraceFormatConstants.FORMAT_CLASS_NAME_UPPER_CASE
+								.length(), ""); //$NON-NLS-1$
+			}
+		}
+		int fnindex = sb
+				.indexOf(TraceFormatConstants.FORMAT_FUNCTION_NAME_NORMAL_CASE);
+		if (fnindex >= 0) {
+			sb.replace(fnindex, fnindex
+					+ TraceFormatConstants.FORMAT_FUNCTION_NAME_NORMAL_CASE
+							.length(), fname);
+		}
+		int fnup = sb
+				.indexOf(TraceFormatConstants.FORMAT_FUNCTION_NAME_UPPER_CASE);
+		if (fnup >= 0) {
+			sb.replace(fnup, fnup
+					+ TraceFormatConstants.FORMAT_FUNCTION_NAME_UPPER_CASE
+							.length(), fname.toUpperCase());
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Replaces invalid characters with '_'
+	 * 
+	 * @param name
+	 *            name to be converted
+	 * @return the converted name
+	 */
+	public static String convertName(String name) {
+		StringBuffer sb;
+		if (name.length() > 0) {
+			boolean underscore = false;
+			sb = new StringBuffer(name);
+			if (Character.isDigit(name.charAt(0))) {
+				sb.insert(0, UNDERSCORE_CHAR);
+			}
+			for (int i = 0; i < sb.length(); i++) {
+				char c = sb.charAt(i);
+				if (!Character.isLetterOrDigit(c)) {
+					if (!underscore) {
+						sb.setCharAt(i, UNDERSCORE_CHAR);
+						underscore = true;
+					} else {
+						sb.deleteCharAt(i);
+						i--;
+					}
+				} else {
+					underscore = false;
+				}
+			}
+			if (sb.length() > 0) {
+				if (sb.charAt(sb.length() - 1) == UNDERSCORE_CHAR) {
+					sb.deleteCharAt(sb.length() - 1);
+				}
+			} else {
+				sb.append(UNDERSCORE);
+			}
+		} else {
+			sb = new StringBuffer();
+		}
+		// If parameter value is NULL, it would be used as name
+		String s = sb.toString();
+		if (s.equals("NULL")) { //$NON-NLS-1$
+			s = "_NULL"; //$NON-NLS-1$
+		}
+		return s;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/utils/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Miscellaneus utility functions and interfaces that should not be in the public API
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/file/FileCompareOutputStream.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Output stream which compares the data to existing file before writing
+*
+*/
+package com.nokia.tracecompiler.file;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * Output stream which writes to a byte array. When writing is complete, the
+ * array contents are compared to existing file and the file is written only if
+ * there are changes
+ * 
+ */
+public class FileCompareOutputStream extends ByteArrayOutputStream {
+
+	/**
+	 * The header file
+	 */
+	private File file;
+
+	/**
+	 * Creates a new stream
+	 * 
+	 * @param file
+	 *            the header file
+	 */
+	public FileCompareOutputStream(File file) {
+		this.file = file;
+	}
+
+	/**
+	 * Writes the buffer to file if it has changed
+	 * 
+	 * @return true if header was written, false if it matched the existing
+	 *         header
+	 * @throws IOException
+	 *             if writing fails
+	 */
+	public boolean writeFile() throws IOException {
+		// Compares the file length to number of bytes in array
+		boolean writeHeader = true;
+		if (file.length() == count) {
+			FileInputStream fis = new FileInputStream(file);
+			byte[] temp = new byte[count];
+			fis.read(temp);
+			fis.close();
+			writeHeader = false;
+			// Compares the file content
+			for (int i = 0; i < count; i++) {
+				if (temp[i] != buf[i]) {
+					writeHeader = true;
+					i = count;
+				}
+			}
+		}
+		if (writeHeader) {
+			OutputStream fos = FileUtils.createOutputStream(file);
+			writeTo(fos);
+			fos.close();
+		}
+		return writeHeader;
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/file/FileUtils.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,218 @@
+/*
+* Copyright (c) 2008-2010 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:
+*
+* File utility functions
+*
+*/
+package com.nokia.tracecompiler.file;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import com.nokia.tracecompiler.source.SourceConstants;
+
+/**
+ * File utility functions
+ * 
+ */
+public final class FileUtils {
+
+	/**
+	 * File copy buffer size
+	 */
+	private static final int COPY_BUFFER_SIZE = 4096; // CodForChk_Dis_Magic
+
+	/**
+	 * cpp extension
+	 */
+	public final static String CPP_EXTENSION = "cpp"; //$NON-NLS-1$	
+
+	/**
+	 * c extension
+	 */
+	public final static String C_EXTENSION = "c"; //$NON-NLS-1$	
+
+	/**
+	 * Allowed files
+	 */
+	private final static String[] FILE_FILTERS = { ".cpp", //$NON-NLS-1$
+			".c", //$NON-NLS-1$
+			".inl", //$NON-NLS-1$
+			".h" //$NON-NLS-1$
+	};
+
+	/**
+	 * MMP file extension
+	 */
+	public static final String MMP = ".mmp"; //$NON-NLS-1$
+
+	/**
+	 * number of times trying to create a directy(ies)
+	 */
+	private static final int MAX_DIRECTORY_CREATION_TRIES = 5;
+	
+	/**
+	 * Time to sleep between tries to create a directory(ies)
+	 */
+	private static final int SLEEP_TIME_BETWEEN_DIRECTORY_CREATION_TRIES = 100;
+
+	
+	/**
+	 * Creates a file output stream. This creates directories and overwriting
+	 * possible read-only flag
+	 * 
+	 * @param file
+	 *            the file
+	 * @return the file output stream
+	 * @throws FileNotFoundException
+	 *             if file cannot be created
+	 */
+	public static OutputStream createOutputStream(File file)
+			throws FileNotFoundException {
+		File parent = file.getParentFile();
+		if (!parent.exists()) {
+			createDirectories(parent);
+		}
+		FileOutputStream fos;
+		try {
+			fos = new FileOutputStream(file);
+		} catch (IOException e) {
+			if (file.exists()) {
+				file.delete();
+			}
+			fos = new FileOutputStream(file);
+		}
+		return new BufferedOutputStream(fos);
+	}
+
+	/**
+	 * Creates a copy of a file
+	 * 
+	 * @param source
+	 *            the source file
+	 * @param target
+	 *            the target file
+	 * @return true if written successfully
+	 */
+	public static boolean copyFile(File source, File target) {
+		boolean backup = true;
+		try {
+			byte[] buf = new byte[COPY_BUFFER_SIZE];
+			FileInputStream fis = new FileInputStream(source);
+			OutputStream fos = createOutputStream(target);
+			int len;
+			do {
+				len = fis.read(buf);
+				if (len > 0) {
+					fos.write(buf, 0, len);
+				}
+			} while (len > 0);
+			fis.close();
+			fos.close();
+		} catch (Exception e) {
+			backup = false;
+		}
+		return backup;
+	}
+
+	/**
+	 * Converts file separator characters
+	 * 
+	 * @param separator
+	 *            separator to be used
+	 * @param path
+	 *            string to be converted
+	 * @param addLast
+	 *            true if the converted string should end with a separator
+	 * @return the converted string
+	 */
+	public static String convertSeparators(char separator, String path,
+			boolean addLast) {
+		path = path.replace(SourceConstants.FORWARD_SLASH_CHAR, separator);
+		path = path.replace(SourceConstants.BACKSLASH_CHAR, separator);
+		String sepStr = String.valueOf(separator);
+		if (addLast && !path.endsWith(sepStr)) {
+			path += separator;
+		} else if (!addLast && path.endsWith(sepStr)) {
+			path = path.substring(0, path.length() - 1);
+		}
+		return path;
+	}
+
+	/**
+	 * Checks if given file is allowed to be opened into TraceCompiler
+	 * 
+	 * @param fileName
+	 *            the file to be checked
+	 * @return true if filtered, false if not
+	 */
+	public static boolean isFileAllowed(String fileName) {
+		boolean allowed = false;
+		fileName = fileName.toLowerCase();
+		for (String filter : FILE_FILTERS) {
+			if (fileName.endsWith(filter)) {
+				allowed = true;
+				break;
+			}
+		}
+		return allowed;
+	}
+
+	/**
+	 * Create directories safely in a multiple instances case
+	 * @param path
+	 * @param access
+	 * @return boolean pass/fail
+	 */
+	public static boolean createDirectories(File path) {
+
+		boolean retVal = true;
+
+		int tries = 0;
+
+		if (path.exists()) {
+			return retVal;
+		}
+
+		// try few times
+		while (tries < MAX_DIRECTORY_CREATION_TRIES) {
+
+			retVal = path.mkdirs();
+			// mkdirs can fail for a number of reasons including the case where
+			// the directory is open by another process. The API does not make
+			// any difference so we assume the latter case (worst case)
+			if (!retVal) { // sleep for moment and try again.
+
+				tries++;
+
+				try {
+					Thread.sleep(SLEEP_TIME_BETWEEN_DIRECTORY_CREATION_TRIES);
+				} catch (InterruptedException e) {
+					// Do nothing
+				}
+			} else { // pass
+				break;
+			}
+		}
+
+		return retVal;
+
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/licence.lic	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,17 @@
+/*
+* This is Default Licence added by TraceCompiler
+* Copyright (c) 2010 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: 
+*
+*/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/licence_hash.lic	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,17 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/messages.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,65 @@
+TraceCompiler.componentUidIsNotValidExceptionText=Component UID is not valid : 
+TraceCompiler.invalidMmpExceptionText=Invalid mmp file : 
+TraceCompiler.invalidTraceCompilerArgumetsExceptionText=Invalid trace compiler arguments
+TraceCompiler.noSourceFilesExceptionText=No source files provided.
+TraceCompiler.settingComponentPath=Component path set to : 
+TraceCompiler.settingTracesPath=Traces path set to : 
+TraceCompiler.mkdirFailed=Failed to create directory/ies :
+TraceCompiler.TracesPathWriteProtected=Traces path is write protected :
+TraceCompilerLogger.errorPrefix=error: 
+TraceCompilerLogger.infoPrefix=info: 
+TraceCompilerLogger.warningPrefix=warning: 
+TraceCompilerModelListener.lineNumberPrefix=, line 
+TraceCompiler.UnsupportedSwitch=Unsupported switch : 
+TraceCompiler.projectNameMissing=Project name missing.
+TraceCompiler.mmpPathMissing=MMP path missing.
+TraceCompiler.tracesPathMissing=Traces path missing.
+TraceCompiler.fileListMissing=Input file list empty.
+TraceCompiler.sourceFileDoesNotExist=Source file does not exist : 
+TraceCompiler.veboseEnabled=Verbose mode enabled.
+TraceCompiler.StopOnErrorEnabled=Stop On Error enabled.
+TraceCompiler.CompNameSet=Project name set to : 
+TraceCompiler.MMPPathSet=MMP path set to : 
+TraceCompiler.UidStwich=--uid
+TraceCompiler.UidText=component uid.
+TraceCompiler.ProjectSwitch=--project
+TraceCompiler.ProjectText=project name.
+TraceCompiler.MmpSwitch= --mmp
+TraceCompiler.MmpText=mmp path
+TraceCompiler.TracesSwitch=--traces
+TraceCompiler.TracesText=traces folder path.
+TraceCompiler.VersionSwitchLong=--version
+TraceCompiler.VersionSwitchShort=-v
+TraceCompiler.VersionText=print TraceCompiler version.
+TraceCompiler.HelpSwicthLong=--help
+TraceCompiler.HelpSwitchShort=-h
+TraceCompiler.HelpText=print help
+TraceCompiler.VerboseSwitchLong=--verbose
+TraceCompiler.VerboseSwitchShort=-d
+TraceCompiler.VerboseText=print info messages.
+TraceCompiler.StopSwitchLong=--stopOnError
+TraceCompiler.StopSwitchShort=-s
+TraceCompiler.StopText=On error, stop at the end of the compilation unit.
+TraceCompiler.DisplayVersionText=TraceCompiler version 
+TraceCompiler.Options=Options:
+TraceCompiler.Value=value
+TraceCompiler.Usage=Usage: 
+TraceCompiler.UsageText=tracecompiler [options] source_file...]
+TraceCompiler.EndOfList=*ENDOFSOURCEFILES*
+TraceCompiler.MmpExtension=.mmp
+TraceCompiler.PluginPath=com/nokia/tracecompiler/decodeplugins
+TraceCompiler.DecodeText1=<DECODE_PLUGIN_NAME>
+TraceCompiler.DecodeText2=<DECODE_PLUGIN_CLASS_NAME>
+TraceCompiler.DecodePluginsNameSpace=com.nokia.tracecompiler.decodeplugins.
+TraceCompiler.Took= took 
+TraceCompiler.MS= ms
+TraceCompiler.DecodePlugin=Decode plugin 
+TraceCompiler.AddingFailed= adding failed
+TraceCompiler.Added= added
+TraceCompiler.DecodePluginFile=Decode plugin file
+TraceCompiler.DoesNotExist= does not exist
+TraceCompiler.BuildingTracesMess=Building traces...
+TraceCompiler.ReadingFilesMess=parameters read from stdin (empty lines allowed) ending with 
+TraceCompiler.ProjectCancelledMess=Project creation was cancelled
+TraceCompiler.BuildFailed=Build trace files failed.
+TraceCompiler.InvalidMMP2=Missing or can not access MMP path: 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/DuplicateParameterNameModifier.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Parameter name modifier
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Parameter name modifier
+ * 
+ */
+final class DuplicateParameterNameModifier extends DuplicateValueModifier {
+
+	/**
+	 * The parameter owner
+	 */
+	private Trace owner;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param owner
+	 *            the owner of the parameter
+	 * @param name
+	 *            the parameter name
+	 */
+	DuplicateParameterNameModifier(Trace owner, String name) {
+		super(name);
+		this.owner = owner;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectUtils.DuplicateValueModifier#
+	 *      findObject(java.lang.String)
+	 */
+	@Override
+	TraceObject findObject(String name) {
+		TraceObject retval;
+		if (owner != null) {
+			retval = owner.findParameterByName(name);
+		} else {
+			retval = null;
+		}
+		return retval;
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/DuplicateValueModifier.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for value modifiers
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Base class for value modifiers
+ * 
+ */
+abstract class DuplicateValueModifier implements TraceObjectModifier {
+
+	/**
+	 * Duplicate tag for values
+	 */
+	private static final String DUPLICATE_TAG = "DUP"; //$NON-NLS-1$
+
+	/**
+	 * Duplicate tag separator
+	 */
+	private static final char DUPLICATE_SEPARATOR = '_';
+
+	/**
+	 * Value
+	 */
+	private String value;
+
+	/**
+	 * Changed flag
+	 */
+	private boolean changed;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param value
+	 *            the value
+	 */
+	DuplicateValueModifier(String value) {
+		this.value = value;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectUtils.TraceObjectModifier#getData()
+	 */
+	public String getData() {
+		return value;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObjectUtils.TraceObjectModifier#hasChanged()
+	 */
+	public boolean hasChanged() {
+		return changed;
+	}
+
+	/**
+	 * Gets the separator character
+	 * 
+	 * @return the char
+	 */
+	protected char getSeparator() {
+		return DUPLICATE_SEPARATOR;
+	}
+
+	/**
+	 * Processes the name and modifies if there are duplicates
+	 */
+	void processName() {
+		int index = getStartIndex(value);
+		TraceObject object;
+		do {
+			object = findObject(value);
+			if (object != null) {
+				changed = true;
+				value = appendIndexToString(value, index);
+				index++;
+			}
+		} while (object != null);
+	}
+
+	/**
+	 * Gets the start index from given text
+	 * 
+	 * @param value
+	 *            the value to be parsed
+	 * @return the start index
+	 */
+	private int getStartIndex(String value) {
+		String valueStr = null;
+		if (value.startsWith(DUPLICATE_TAG)) {
+			for (int i = DUPLICATE_TAG.length(); i < value.length(); i++) {
+				char c = value.charAt(i);
+				if (!Character.isDigit(c)) {
+					valueStr = value.substring(DUPLICATE_TAG.length(), i);
+					i = value.length();
+				}
+			}
+		}
+		int retval = -1;
+		if (valueStr != null && valueStr.length() > 0) {
+			retval = Integer.parseInt(valueStr);
+		}
+		return retval;
+	}
+
+	/**
+	 * Appends an index value to given string replacing existing index if it
+	 * exists
+	 * 
+	 * @param value
+	 *            the string
+	 * @param index
+	 *            the index
+	 * @return the changed string
+	 */
+	private String appendIndexToString(String value, int index) {
+		StringBuffer newValue = new StringBuffer();
+		if (index >= 0) {
+			String indexStr = String.valueOf(index);
+			newValue.append(DUPLICATE_TAG);
+			newValue.append(String.valueOf(index + 1));
+			newValue.append(getSeparator());
+			newValue.append(value.substring(DUPLICATE_TAG.length()
+					+ indexStr.length() + 1)); // Add separator
+		} else {
+			newValue.append(DUPLICATE_TAG);
+			newValue.append("1"); //$NON-NLS-1$
+			newValue.append(getSeparator());
+			newValue.append(value);
+		}
+		return newValue.toString();
+	}
+
+	/**
+	 * Gets the duplicate modifier from beginning of given text
+	 * 
+	 * @param text
+	 *            the text
+	 * @return the modifier
+	 */
+	static String getModifier(String text) {
+		String retval = null;
+		if (text.startsWith(DUPLICATE_TAG)) {
+			for (int i = DUPLICATE_TAG.length(); i < text.length(); i++) {
+				char c = text.charAt(i);
+				if (!Character.isDigit(c)) {
+					retval = text.substring(0, i + 1); // Add separator
+					i = text.length();
+				}
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Finds the object from model
+	 * 
+	 * @param value
+	 *            the value
+	 * @return the object or null if not found
+	 */
+	abstract TraceObject findObject(String value);
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/Trace.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Represents the mapping of a trace ID into actual trace string
+*
+*/
+package com.nokia.tracecompiler.model;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * Represents the mapping of a trace ID into actual trace string. When a trace
+ * is decoded, the trace ID found from the binary trace file is converted to the
+ * text stored in this trace.
+ * 
+ */
+public class Trace extends TraceObject implements Iterable<TraceParameter> {
+
+	/**
+	 * The trace string
+	 */
+	private String trace = ""; //$NON-NLS-1$
+
+	/**
+	 * List of TraceParameter objects.
+	 */
+	private ArrayList<TraceParameter> parameters = new ArrayList<TraceParameter>();
+
+	/**
+	 * The trace group this trace belongs to
+	 */
+	private TraceGroup group;
+
+	/**
+	 * Creates a new trace and associates it with given TraceGroup
+	 * 
+	 * @param group
+	 *            the trace group
+	 */
+	Trace(TraceGroup group) {
+		setModel(group.getModel());
+		this.group = group;
+		group.addTrace(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObject#reset()
+	 */
+	@Override
+	void reset() {
+		super.reset();
+		for (TraceParameter parameter : parameters) {
+			// Model listeners are not notified on reset, but if the
+			// parameter itself implements a delete notification interface,
+			// it must be called to do appropriate cleanup
+			notifyOnDelete(parameter);
+			parameter.reset();
+		}
+		parameters.clear();
+	}
+
+	/**
+	 * Sets the trace string. Generates propertyUpdated event to model listeners
+	 * if the string changes
+	 * 
+	 * @see TraceModelListener#propertyUpdated(TraceObject, int)
+	 * @param trace
+	 *            the trace string
+	 * @throws TraceCompilerException 
+	 */
+	public void setTrace(String trace) throws TraceCompilerException {
+		if (trace == null) {
+			trace = ""; //$NON-NLS-1$
+		}
+		if (!trace.equals(this.trace)) {
+			this.trace = trace;
+			getModel().notifyPropertyUpdated(this, TraceModelListener.TRACE);
+		}
+	}
+
+	/**
+	 * Returns the trace string. This never returns null
+	 * 
+	 * @return the trace string
+	 */
+	public String getTrace() {
+		return trace;
+	}
+
+	/**
+	 * Returns the group to which this trace belongs
+	 * 
+	 * @return trace group
+	 */
+	public TraceGroup getGroup() {
+		return group;
+	}
+
+	/**
+	 * Adds a new parameter to the end of parameter list. Generates objectAdded
+	 * event to model listeners
+	 * 
+	 * @see TraceModelListener#objectAdded(TraceObject, TraceObject)
+	 * @param parameter
+	 *            the new parameter
+	 */
+	public void addParameter(TraceParameter parameter) {
+		parameters.add(parameter);
+		getModel().notifyObjectAdded(this, parameter);
+	}
+
+	/**
+	 * Inserts a new parameter to the given location. Generates objectAdded
+	 * event to model listeners
+	 * 
+	 * @see TraceModelListener#objectAdded(TraceObject, TraceObject)
+	 * @param index
+	 *            the index for new parameter
+	 * @param parameter
+	 *            the new parameter
+	 */
+	void insertParameter(int index, TraceParameter parameter) {
+		parameters.add(index, parameter);
+		getModel().notifyObjectAdded(this, parameter);
+	}
+
+	/**
+	 * Removes a parameter from this trace object. Generates a objectRemoved
+	 * event to model listeners if the parameter is actually removed
+	 * 
+	 * @see TraceModelListener#objectRemoved(TraceObject, TraceObject)
+	 * @param parameter
+	 *            the parameter to be removed
+	 * @throws TraceCompilerException 
+	 */
+	public void removeParameter(TraceParameter parameter) throws TraceCompilerException {
+		if (parameters.remove(parameter)) {
+			getModel().notifyObjectRemoved(this, parameter);
+			parameter.reset();
+		}
+	}
+
+	/**
+	 * Removes parameter at given index
+	 * 
+	 * @param index
+	 *            the index of the parameter
+	 * @throws TraceCompilerException 
+	 */
+	public void removeParameterAt(int index) throws TraceCompilerException {
+		if (index >= 0 && index < parameters.size()) {
+			TraceParameter parameter = parameters.get(index);
+			parameters.remove(index);
+			getModel().notifyObjectRemoved(this, parameter);
+			parameter.reset();
+		}
+	}
+
+	/**
+	 * Determines if this object has parameters.
+	 * 
+	 * @return true if this object has parameters
+	 */
+	public boolean hasParameters() {
+		return !parameters.isEmpty();
+	}
+
+	/**
+	 * Gets the number of parameters
+	 * 
+	 * @return the number of parameters
+	 */
+	public int getParameterCount() {
+		return parameters.size();
+	}
+
+	/**
+	 * Returns highest parameter ID + 1. Can be used to create an unique ID for
+	 * a new parameter.
+	 * 
+	 * @return the next parameter ID
+	 */
+	public int getNextParameterID() {
+		int max = 0;
+		for (TraceParameter parameter : parameters) {
+			int id = parameter.getID();
+			if (id > max) {
+				max = id;
+			}
+		}
+		return max + 1;
+	}
+
+	/**
+	 * Gets the parameter at given index
+	 * 
+	 * @param index
+	 *            the parameter index
+	 * @return the parameter at the index
+	 */
+	public TraceParameter getParameter(int index) {
+		return parameters.get(index);
+	}
+
+	/**
+	 * Returns the parameters of this object
+	 * 
+	 * @return iterator over the parameters
+	 */
+	public Iterator<TraceParameter> getParameters() {
+		return parameters.iterator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Iterable#iterator()
+	 */
+	public Iterator<TraceParameter> iterator() {
+		return parameters.iterator();
+	}
+
+	/**
+	 * Gets a parameter by ID
+	 * 
+	 * @param id
+	 *            the parameter ID
+	 * @return the parameter or null
+	 */
+	public TraceParameter findParameterByID(int id) {
+		TraceParameter retval = null;
+		for (TraceParameter parameter : parameters) {
+			if (parameter.getID() == id) {
+				retval = parameter;
+				break;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets a parameter by name
+	 * 
+	 * @param name
+	 *            the name of a parameter
+	 * @return the parameter or null
+	 */
+	public TraceParameter findParameterByName(String name) {
+		TraceParameter retval = null;
+		for (TraceParameter parameter : parameters) {
+			if (parameter.getName().equals(name)) {
+				retval = parameter;
+				break;
+			}
+		}
+		return retval;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceCompilerErrorParameters.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Parameters for errors
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Parameters for errors
+ * 
+ */
+public class TraceCompilerErrorParameters {
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceCompilerException.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Exceptions thrown by TraceCompiler engine
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Exceptions thrown by TraceCompiler engine
+ * 
+ */
+public class TraceCompilerException extends Exception {
+
+	/**
+	 * Error codes for TraceCompiler exceptions
+	 * 
+	 */
+	public interface TraceCompilerExceptionCode {
+	}
+
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = -2991616409482985157L; // CodForChk_Dis_Magic
+
+	/**
+	 * Error code
+	 */
+	private TraceCompilerExceptionCode errorCode;
+
+	/**
+	 * Error parameters
+	 */
+	private TraceCompilerErrorParameters parameters;
+
+	/**
+	 * Source object
+	 */
+	private Object source;
+
+	/**
+	 * Flag that defines will event related to exception posted to trace event view
+	 */
+	private boolean postEvent = true;
+	
+	/**
+	 * Constructor with error code
+	 * 
+	 * @param errorCode
+	 *            the error code
+	 */
+	public TraceCompilerException(TraceCompilerExceptionCode errorCode) {
+		this.errorCode = errorCode;
+	}
+	
+	/**
+	 * Constructor with error code and postEvent flag
+	 * 
+	 * @param errorCode
+	 *            the error code
+	 * @param postEvent
+	 *            flag that defines will event related to exception posted to trace event view   
+	 */
+	public TraceCompilerException(TraceCompilerExceptionCode errorCode, boolean postEvent) {
+		this.errorCode = errorCode;
+		this.postEvent = postEvent;
+	}
+
+	/**
+	 * Constructor with error code and parameters
+	 * 
+	 * @param errorCode
+	 *            the error code
+	 * @param parameters
+	 *            the error parameters
+	 */
+	public TraceCompilerException(TraceCompilerExceptionCode errorCode,
+			TraceCompilerErrorParameters parameters) {
+		this.errorCode = errorCode;
+		this.parameters = parameters;
+	}
+
+	/**
+	 * Constructor with error code, parameters and source object
+	 * 
+	 * @param errorCode
+	 *            the error code
+	 * @param parameters
+	 *            the error parameters
+	 * @param source
+	 *            the source object
+	 */
+	public TraceCompilerException(TraceCompilerExceptionCode errorCode,
+			TraceCompilerErrorParameters parameters, Object source) {
+		this.errorCode = errorCode;
+		this.parameters = parameters;
+		this.source = source;
+	}
+	
+	/**
+	 * Constructor with error code and root cause
+	 * 
+	 * @param errorCode
+	 *            the error code
+	 * @param cause
+	 *            the reason for this exception
+	 */
+	public TraceCompilerException(TraceCompilerExceptionCode errorCode,
+			Throwable cause) {
+		super(cause);
+		this.errorCode = errorCode;
+	}
+
+	/**
+	 * Gets the error code
+	 * 
+	 * @return error code
+	 */
+	public TraceCompilerExceptionCode getErrorCode() {
+		return errorCode;
+	}
+
+	/**
+	 * Gets the parameters related to the error
+	 * 
+	 * @return the parameters
+	 */
+	public TraceCompilerErrorParameters getErrorParameters() {
+		return parameters;
+	}
+
+	/**
+	 * Gets the source of this error
+	 * 
+	 * @return the source
+	 */
+	public Object getErrorSource() {
+		return source;
+	}
+
+	/**
+	 * Is event related to exception wanted to post to trace event view
+	 * 
+	 * @return true is event is wanted to post trace event view
+	 *         false is event is not wanted to post trace event view
+	 */
+	public boolean isEventWantedToPost() {
+		return postEvent;
+	}
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceConstantTable.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,253 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Integer-to-string mapping table for parameters
+*
+*/
+package com.nokia.tracecompiler.model;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * Integer-to-string mapping table for parameters
+ * 
+ */
+public class TraceConstantTable extends TraceObject implements
+		Iterable<TraceConstantTableEntry> {
+
+	/**
+	 * Table entries
+	 */
+	private ArrayList<TraceConstantTableEntry> entries = new ArrayList<TraceConstantTableEntry>();
+
+	/**
+	 * Table type
+	 */
+	private String type = TraceParameter.UDEC32;
+
+	/**
+	 * Parameter reference count
+	 */
+	private ArrayList<TraceParameter> parameterReferences = new ArrayList<TraceParameter>();
+
+	/**
+	 * Creates a new constant table
+	 * 
+	 * @param model
+	 *            the trace model
+	 */
+	TraceConstantTable(TraceModel model) {
+		setModel(model);
+		model.addConstantTable(this);
+	}
+
+	/**
+	 * Gets the type
+	 * 
+	 * @return the type
+	 */
+	public String getType() {
+		return type;
+	}
+
+	/**
+	 * Sets the constant type
+	 * 
+	 * @param type
+	 *            the parameter type
+	 */
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObject#setName(java.lang.String)
+	 */
+	@Override
+	public void setName(String name) throws TraceCompilerException {
+		super.setName(name);
+		// Note: Currently name changes are disabled when a table is referenced
+		// by parameters. If enabled at some point, a notification about this
+		// needs to be sent to the parameters
+	}
+
+	/**
+	 * Adds a constant table entry to this table. This is called from the
+	 * constant table entry constructor, to this is not public. Generates a
+	 * objectAdded event to model listeners
+	 * 
+	 * @see TraceModelListener#objectAdded(TraceObject, TraceObject)
+	 * @param entry
+	 *            the table entry
+	 */
+	void addEntry(TraceConstantTableEntry entry) {
+		entries.add(entry);
+		getModel().notifyObjectAdded(this, entry);
+	}
+
+	/**
+	 * Removes the given constant table entry. Creates a objectRemoved event to
+	 * the model listeners
+	 * 
+	 * @see TraceModelListener#objectRemoved(TraceObject, TraceObject)
+	 * @param entry
+	 *            the entry to be removed
+	 * @throws TraceCompilerException 
+	 */
+	public void removeEntry(TraceConstantTableEntry entry) throws TraceCompilerException {
+		if (entries.remove(entry)) {
+			getModel().notifyObjectRemoved(this, entry);
+			entry.reset();
+		}
+	}
+
+	/**
+	 * Gets the entry which has given ID
+	 * 
+	 * @param id
+	 *            the id
+	 * @return the entry or null
+	 */
+	public TraceConstantTableEntry findEntryByID(int id) {
+		TraceConstantTableEntry retval = null;
+		for (TraceConstantTableEntry entry : entries) {
+			if (entry.getID() == id) {
+				retval = entry;
+				break;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets the entry which has the given name
+	 * 
+	 * @param name
+	 *            the name
+	 * @return the entry or null
+	 */
+	public TraceConstantTableEntry findEntryByName(String name) {
+		TraceConstantTableEntry retval = null;
+		for (TraceConstantTableEntry entry : entries) {
+			if (entry.getName().equals(name)) {
+				retval = entry;
+				break;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets the constant table entries
+	 * 
+	 * @return the entries iterator
+	 */
+	public Iterator<TraceConstantTableEntry> getEntries() {
+		return entries.iterator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Iterable#iterator()
+	 */
+	public Iterator<TraceConstantTableEntry> iterator() {
+		return entries.iterator();
+	}
+
+	/**
+	 * Determines if there are any entries in this table
+	 * 
+	 * @return true if there are entries
+	 */
+	public boolean hasEntries() {
+		return !entries.isEmpty();
+	}
+
+	/**
+	 * Adds a parameter reference
+	 * 
+	 * @param parameter
+	 *            the parameter to be added
+	 */
+	void addParameterReference(TraceParameter parameter) {
+		parameterReferences.add(parameter);
+	}
+
+	/**
+	 * Removes a parameter reference
+	 * 
+	 * @param parameter
+	 *            the reference to be removed
+	 */
+	void removeParameterReference(TraceParameter parameter) {
+		parameterReferences.remove(parameter);
+	}
+
+	/**
+	 * Checks if there are parameter references
+	 * 
+	 * @return true if this table is referenced from parameters
+	 */
+	public boolean hasParameterReferences() {
+		return !parameterReferences.isEmpty();
+	}
+
+	/**
+	 * Gets the parameter references
+	 * 
+	 * @return the iterator of the references
+	 */
+	public Iterator<TraceParameter> getParameterReferences() {
+		return parameterReferences.iterator();
+	}
+
+	/**
+	 * Gets the largest constant ID + 1
+	 * 
+	 * @return the ID
+	 */
+	public int getNextEntryID() {
+		int max = 0;
+		for (TraceConstantTableEntry entry : entries) {
+			int id = entry.getID();
+			if (id > max) {
+				max = id;
+			}
+		}
+		return max + 1;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObject#reset()
+	 */
+	@Override
+	void reset() {
+		for (TraceConstantTableEntry entry : entries) {
+			// Model listeners are not notified on reset, but if the
+			// entry itself implements a delete notification interface,
+			// it must be called to do appropriate cleanup
+			notifyOnDelete(entry);
+			entry.reset();
+		}
+		super.reset();
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceConstantTableEntry.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2007 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:
+*
+* One entry in the integer-to-string mapping table
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * One entry in the integer-to-string mapping table
+ * 
+ */
+public class TraceConstantTableEntry extends TraceObject {
+
+	/**
+	 * Constant table that owns this parameter
+	 */
+	private TraceConstantTable table;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param table
+	 *            the constant table that owns this entry
+	 */
+	TraceConstantTableEntry(TraceConstantTable table) {
+		setModel(table.getModel());
+		this.table = table;
+		table.addEntry(this);
+	}
+
+	/**
+	 * Gets the table that owns this entry
+	 * 
+	 * @return the table
+	 */
+	public TraceConstantTable getTable() {
+		return table;
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceGroup.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Represents a logical collection of traces somehow related to each other
+*
+*/
+package com.nokia.tracecompiler.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+
+/**
+ * Represents a logical collection of traces somehow related to each other. Each
+ * trace group specifies a prefix that is attached to all trace lines made
+ * within that group.
+ * 
+ */
+public class TraceGroup extends TraceObject implements Iterable<Trace> {
+
+	/**
+	 * List of traces, sorted by ID
+	 */
+	private ArrayList<Trace> tracesByID = new ArrayList<Trace>();
+
+	/**
+	 * List of traces, sorted by name
+	 */
+	private ArrayList<Trace> tracesByName = new ArrayList<Trace>();
+
+	/**
+	 * Creates a new trace group and associates it with given trace model.
+	 * 
+	 * @param model
+	 *            the trace model
+	 */
+	TraceGroup(TraceModel model) {
+		setModel(model);
+		model.addGroup(this);
+	}
+
+	/**
+	 * Adds a trace to this group. Creates objectAdded event to model listeners
+	 * 
+	 * @see TraceModelListener#objectAdded(TraceObject, TraceObject)
+	 * @param trace
+	 *            the trace to be added
+	 */
+	void addTrace(Trace trace) {
+		// Sorted when ID is set to trace
+		tracesByID.add(trace);
+		// Sorted when name is set to trace
+		tracesByName.add(trace);
+		getModel().notifyObjectAdded(this, trace);
+	}
+
+	/**
+	 * Removes a trace from this group. Creates objectRemoved event to model
+	 * listeners
+	 * 
+	 * @see TraceModelListener#objectRemoved(TraceObject, TraceObject)
+	 * @param trace
+	 *            the trace to be removed
+	 * @throws TraceCompilerException 
+	 */
+	public void removeTrace(Trace trace) throws TraceCompilerException {
+		int index = Collections.binarySearch(tracesByID, trace,
+				TraceObjectUtils.traceObjectIDComparator);
+		if (index >= 0) {
+			tracesByID.remove(index);
+			index = Collections.binarySearch(tracesByName, trace,
+					TraceObjectUtils.traceObjectNameComparator);
+			tracesByName.remove(index);
+			getModel().notifyObjectRemoved(this, trace);
+			trace.reset();
+		}
+	}
+
+	/**
+	 * Determines if this group has traces.
+	 * 
+	 * @return true if the group contains traces
+	 */
+	public boolean hasTraces() {
+		return !tracesByID.isEmpty();
+	}
+
+	/**
+	 * Gets the number of traces in this group.
+	 * 
+	 * @return the number of traces
+	 */
+	public int getTraceCount() {
+		return tracesByID.size();
+	}
+
+	/**
+	 * Returns an iterator over the traces within this group.
+	 * 
+	 * @return the iterator
+	 */
+	public Iterator<Trace> getTraces() {
+		return tracesByID.iterator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Iterable#iterator()
+	 */
+	public Iterator<Trace> iterator() {
+		return tracesByID.iterator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObject#reset()
+	 */
+	@Override
+	void reset() {
+		// Reset removes constant table references
+		for (Trace trace : tracesByID) {
+			// Model listeners are not notified on reset, but if the
+			// trace itself implements a delete notification interface,
+			// it must be called to do appropriate cleanup
+			notifyOnDelete(trace);
+			trace.reset();
+		}
+		tracesByID.clear();
+		tracesByName.clear();
+		super.reset();
+	}
+
+	/**
+	 * Returns highest trace ID + 1. Can be used to create an unique ID for a
+	 * new trace.
+	 * 
+	 * @return the next trace ID
+	 */
+	public int getNextTraceID() {
+		int ret;
+		if (tracesByID.size() > 0) {
+			ret = tracesByID.get(tracesByID.size() - 1).getID() + 1;
+		} else {
+			ret = 1;
+		}
+		return ret;
+	}
+
+	/**
+	 * Gets the trace which has given ID
+	 * 
+	 * @param id
+	 *            the trace ID
+	 * @return the trace or null
+	 */
+	public Trace findTraceByID(int id) {
+		int index = Collections.binarySearch(tracesByID, id,
+				TraceObjectUtils.traceToIDComparator);
+		Trace retval;
+		if (index >= 0) {
+			retval = tracesByID.get(index);
+		} else {
+			retval = null;
+		}
+		return retval;
+	}
+
+	/**
+	 * Called by the model when a trace property is updated
+	 * 
+	 * @param source
+	 *            the trace that was changed
+	 * @param property
+	 *            the property that was changed
+	 */
+	void tracePropertyUpdated(TraceObject source, int property) {
+		if (property == TraceModelListener.NAME) {
+			Collections.sort(tracesByName,
+					TraceObjectUtils.traceObjectNameComparator);
+		} else if (property == TraceModelListener.ID) {
+			traceIDsUpdated();
+		}
+	}
+
+	/**
+	 * Sorts the trace array based on new ID configuration
+	 */
+	void traceIDsUpdated() {
+		Collections.sort(tracesByID, TraceObjectUtils.traceObjectIDComparator);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModel.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,997 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Trace model is a collection of trace groups
+*
+*/
+package com.nokia.tracecompiler.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Properties;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.project.SortedProperties;
+import com.nokia.tracecompiler.project.FormattingUtils;
+import com.nokia.tracecompiler.source.SourceConstants;
+
+/**
+ * Trace model is a collection of trace groups. Listener interfaces can be
+ * attached to a trace model to receive change notifications when traces are
+ * added, removed or modified.
+ * 
+ */
+public class TraceModel extends TraceObject implements Iterable<TraceGroup> {
+
+	/**
+	 * Group property prefix
+	 */
+	public final String GROUP_PROPERTY_PREFIX = "[GROUP]"; //$NON-NLS-1$
+
+	/**
+	 * Trace property prefix
+	 */
+	public final String TRACE_PROPERTY_PREFIX = "[TRACE]"; //$NON-NLS-1$
+
+	/**
+	 * Obsolete property prefix
+	 */
+	public final String OBSOLETE_PROPERTY_PREFIX = "[[OBSOLETE]]"; //$NON-NLS-1$
+
+	/**
+	 * Group Id prefix
+	 */
+	public final String GROUP_ID_PREFIX = "["; //$NON-NLS-1$
+
+	/**
+	 * Group Id suffix
+	 */
+	public final String GROUP_ID_SUFFIX = "]"; //$NON-NLS-1$	
+
+	/**
+	 * Factory object for creating other trace objects
+	 */
+	private TraceObjectFactory factory;
+
+	/**
+	 * Property verifier interface
+	 */
+	private TraceObjectPropertyVerifier verifier;
+
+	/**
+	 * List of trace groups
+	 */
+	private ArrayList<TraceGroup> groups = new ArrayList<TraceGroup>();
+
+	/**
+	 * List of traces, sorted by name
+	 */
+	private ArrayList<Trace> tracesByName = new ArrayList<Trace>();
+
+	/**
+	 * List of model listeners
+	 */
+	private ArrayList<TraceModelListener> modelListeners = new ArrayList<TraceModelListener>();
+
+	/**
+	 * List of extension listeners
+	 */
+	private ArrayList<TraceModelExtensionListener> extensionListeners = new ArrayList<TraceModelExtensionListener>();
+
+	/**
+	 * List of reset listeners
+	 */
+	private ArrayList<TraceModelResetListener> resetListeners = new ArrayList<TraceModelResetListener>();
+
+	/**
+	 * Processing listeners
+	 */
+	private ArrayList<TraceProcessingListener> processingListeners = new ArrayList<TraceProcessingListener>();
+
+	/**
+	 * List of constant tables
+	 */
+	private ArrayList<TraceConstantTable> constantTables = new ArrayList<TraceConstantTable>();
+
+	/**
+	 * Validity flag
+	 */
+	private boolean valid;
+
+	/**
+	 * Number of nested calls to startProcessing
+	 */
+	private int isProcessing;
+
+	/**
+	 * Model was changed during processing
+	 */
+	private boolean modelChangedDuringProcessing;
+
+	/**
+	 * Fixed Ids from fixed Ids definition file
+	 */
+	private SortedProperties fixedIds;
+
+	/**
+	 * Hex radix
+	 */
+	public int HEX_RADIX = 16; // CodForChk_Dis_Magic
+
+	/**
+	 * Constructor
+	 * 
+	 * @param factory
+	 *            the rule factory
+	 * @param verifier
+	 *            the property verifier
+	 * @throws TraceCompilerException 
+	 */
+	public TraceModel(TraceObjectRuleFactory factory,
+			TraceObjectPropertyVerifier verifier) throws TraceCompilerException {
+		// Stored for callback purposes
+		setModel(this);
+		this.factory = new TraceObjectFactory(this, factory);
+		this.verifier = verifier;
+	}
+
+	/**
+	 * Adds a new trace model listener to this model
+	 * 
+	 * @param listener
+	 *            the new listener
+	 */
+	public void addModelListener(TraceModelListener listener) {
+		modelListeners.add(listener);
+	}
+
+	/**
+	 * Removes a trace model listener. Does nothing if the listener is not found
+	 * 
+	 * @param listener
+	 *            the listener to be removed
+	 */
+	public void removeModelListener(TraceModelListener listener) {
+		modelListeners.remove(listener);
+	}
+
+	/**
+	 * Adds a new trace model extension listener to this model
+	 * 
+	 * @param listener
+	 *            the new listener
+	 */
+	public void addExtensionListener(TraceModelExtensionListener listener) {
+		extensionListeners.add(listener);
+	}
+
+	/**
+	 * Removes a trace model extension listener. Does nothing if the listener is
+	 * not found
+	 * 
+	 * @param listener
+	 *            the listener to be removed
+	 */
+	public void removeExtensionListener(TraceModelExtensionListener listener) {
+		extensionListeners.remove(listener);
+	}
+
+	/**
+	 * Adds a new trace model reset listener to this model
+	 * 
+	 * @param listener
+	 *            the new listener
+	 */
+	public void addResetListener(TraceModelResetListener listener) {
+		resetListeners.add(listener);
+	}
+
+	/**
+	 * Removes a trace model reset listener. Does nothing if the listener is not
+	 * found
+	 * 
+	 * @param listener
+	 *            the listener to be removed
+	 */
+	public void removeResetListener(TraceModelResetListener listener) {
+		resetListeners.remove(listener);
+	}
+
+	/**
+	 * Adds a new trace model listener to this model
+	 * 
+	 * @param listener
+	 *            the new listener
+	 */
+	public void addProcessingListener(TraceProcessingListener listener) {
+		processingListeners.add(listener);
+	}
+
+	/**
+	 * Removes a processing listener. Does nothing if the listener is not found
+	 * 
+	 * @param listener
+	 *            the listener to be removed
+	 */
+	public void removeProcessingListener(TraceProcessingListener listener) {
+		processingListeners.remove(listener);
+	}
+
+	/**
+	 * Returns highest group ID + 1. Can be used to create an unique ID for a
+	 * new trace group.
+	 * 
+	 * @return the next trace group ID
+	 * @throws TraceCompilerException
+	 */
+	public int getNextGroupID() throws TraceCompilerException {
+		int currentMaxGroupId = 0;
+		int nextGroupId = 0;
+		// Check if there are some fixed Ids
+		if (fixedIds != null) {
+			Enumeration<Object> keys = this.fixedIds.keys();
+			// Go through fixed Ids and check if there are fixed group Ids
+			while (keys.hasMoreElements()) {
+				String key = (String) keys.nextElement();
+				if (key.startsWith(GROUP_PROPERTY_PREFIX)
+						|| key.startsWith(OBSOLETE_PROPERTY_PREFIX
+								+ GROUP_PROPERTY_PREFIX)) {
+					// Fixed group Id found. Try to covert it to int value.
+					String value = fixedIds.getProperty(key);
+					int fixedId = 0;
+					try {
+						fixedId = Integer.decode(value).intValue();
+					} catch (NumberFormatException e) {
+						// Corrupted. Get next group Id later on.
+						currentMaxGroupId = 0;
+						break;
+					}
+					// Check if found fixed Id is bigger than current max group
+					// Id
+					if (fixedId > currentMaxGroupId) {
+						currentMaxGroupId = fixedId;
+					}
+				}
+			}
+		}
+
+		// If there were fixed group Ids. Set next group Id to be current max
+		// group Id + 1
+		if (currentMaxGroupId != 0) {
+			nextGroupId = currentMaxGroupId + 1;
+		}
+
+		// Get current max group id in model
+		int maxGroupIdInModel = 0;
+		for (TraceGroup group : groups) {
+			int groupIdInModel = group.getID();
+			if (groupIdInModel > maxGroupIdInModel) {
+				maxGroupIdInModel = groupIdInModel;
+			}
+		}
+
+		// If next group Id is zero or smaller than current max group id in
+		// model + 1. Set it be same as current max group id in model + 1. This
+		// is done in case that we have added more than one new group after last
+		// fixed Id update
+		if (nextGroupId == 0 || nextGroupId < maxGroupIdInModel + 1) {
+			nextGroupId = maxGroupIdInModel + 1;
+		}
+
+		// Check that next group Id is not bigger than max group Id
+		if (nextGroupId > TraceCompilerEngineGlobals.MAX_GROUP_ID) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.RUN_OUT_OF_GROUP_IDS);
+		}
+
+		return nextGroupId;
+	}
+
+	/**
+	 * Returns highest constant table ID + 1. Can be used to create an unique ID
+	 * for a new constant table.
+	 * 
+	 * @return the next constant table ID
+	 */
+	public int getNextConstantTableID() {
+		int max = 0;
+		for (TraceConstantTable table : constantTables) {
+			int id = table.getID();
+			if (id > max) {
+				max = id;
+			}
+		}
+		return max + 1;
+	}
+
+	/**
+	 * Removes a trace group from this model. Create groupRemoved event to model
+	 * listeners
+	 * 
+	 * @param group
+	 *            the group to be removed
+	 * @throws TraceCompilerException 
+	 */
+	public void removeGroup(TraceGroup group) throws TraceCompilerException {
+		if (groups.remove(group)) {
+			notifyObjectRemoved(this, group);
+			group.reset();
+		}
+	}
+
+	/**
+	 * Determines if this model contains any trace groups
+	 * 
+	 * @return true if there are trace groups
+	 */
+	public boolean hasGroups() {
+		return !groups.isEmpty();
+	}
+
+	/**
+	 * Gets the number of trace groups
+	 * 
+	 * @return trace group count
+	 */
+	public int getGroupCount() {
+		return groups.size();
+	}
+
+	/**
+	 * Returns the trace groups of this model
+	 * 
+	 * @return the iterator over the groups
+	 */
+	public Iterator<TraceGroup> getGroups() {
+		return groups.iterator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Iterable#iterator()
+	 */
+	public Iterator<TraceGroup> iterator() {
+		return groups.iterator();
+	}
+
+	/**
+	 * Removes all trace groups and parameters from this model. Extensions are
+	 * not removed. Notifies the reset listeners with modelResetting and
+	 * modelReset
+	 * 
+	 * @see TraceModelResetListener#modelResetting
+	 * @see TraceModelResetListener#modelReset
+	 */
+	@Override
+	public void reset() {
+		notifyModelResetting();
+		// Properties are removed, other extensions are left
+		removeExtensions(TraceObjectPropertyList.class);
+		groups.clear();
+		tracesByName.clear();
+		constantTables.clear();
+		fixedIds = null;
+		super.reset();
+		notifyModelReset();
+	}
+
+	/**
+	 * Gets the group which has given ID
+	 * 
+	 * @param id
+	 *            the id
+	 * @return group or null
+	 */
+	public TraceGroup findGroupByID(int id) {
+		TraceGroup retval = null;
+		for (TraceGroup group : groups) {
+			if (group.getID() == id) {
+				retval = group;
+				break;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Locates a trace group which has the given name.
+	 * 
+	 * @param name
+	 *            the name of the trace group
+	 * @return the group or null if not found
+	 * @see TraceObject#getName
+	 */
+	public TraceGroup findGroupByName(String name) {
+		TraceGroup retval = null;
+		for (TraceGroup group : groups) {
+			if (group.getName().equals(name)) {
+				retval = group;
+				break;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Locates a trace which has the given name.
+	 * 
+	 * @param name
+	 *            the name of the trace
+	 * @return the trace or null if not found
+	 * @see TraceObject#getName
+	 */
+	public Trace findTraceByName(String name) {
+		Trace retval;
+		int index = Collections.binarySearch(tracesByName, name,
+				TraceObjectUtils.traceToNameComparator);
+		if (index >= 0) {
+			retval = tracesByName.get(index);
+		} else {
+			retval = null;
+		}
+		return retval;
+	}
+
+	/**
+	 * Returns the group at given index
+	 * 
+	 * @param index
+	 *            the group index
+	 * @return the group
+	 */
+	public TraceGroup getGroupAt(int index) {
+		return groups.get(index);
+	}
+
+	/**
+	 * Removes a constant table from this model. Creates objectRemoved event to
+	 * model listeners
+	 * 
+	 * @see TraceModelListener#objectRemoved(TraceObject, TraceObject)
+	 * @param table
+	 *            the table to be removed
+	 * @throws TraceCompilerException 
+	 */
+	public void removeConstantTable(TraceConstantTable table) throws TraceCompilerException {
+		if (constantTables.remove(table)) {
+			notifyObjectRemoved(this, table);
+			table.reset();
+		}
+	}
+
+	/**
+	 * Gets the constant tables of this model
+	 * 
+	 * @return the tables iterator
+	 */
+	public Iterator<TraceConstantTable> getConstantTables() {
+		return constantTables.iterator();
+	}
+
+	/**
+	 * Gets a constant table by ID
+	 * 
+	 * @param id
+	 *            the ID
+	 * @return the table or null
+	 */
+	public TraceConstantTable findConstantTableByID(int id) {
+		TraceConstantTable retval = null;
+		for (TraceConstantTable table : constantTables) {
+			if (table.getID() == id) {
+				retval = table;
+				break;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets a constant table by name
+	 * 
+	 * @param tableName
+	 *            the name
+	 * @return the table or null
+	 */
+	public TraceConstantTable findConstantTableByName(String tableName) {
+		TraceConstantTable retval = null;
+		for (TraceConstantTable table : constantTables) {
+			if (table.getName().equals(tableName)) {
+				retval = table;
+				break;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Checks if this model contains constant tables
+	 * 
+	 * @return true if there are constant tables
+	 */
+	public boolean hasConstantTables() {
+		return !constantTables.isEmpty();
+	}
+
+	/**
+	 * Returns the constant table at given index
+	 * 
+	 * @param index
+	 *            the group index
+	 * @return the group
+	 */
+	public TraceConstantTable getConstantTableAt(int index) {
+		return constantTables.get(index);
+	}
+
+	/**
+	 * Adds a new trace group to this model. Creates objectAdded event to model
+	 * listeners. This is only intended to be called from TraceGroup
+	 * constructor, so this is not public.
+	 * 
+	 * @see TraceModelListener#objectAdded(TraceObject, TraceObject)
+	 * @param group
+	 *            the group to be added
+	 */
+	void addGroup(TraceGroup group) {
+		groups.add(group);
+		notifyObjectAdded(this, group);
+	}
+
+	/**
+	 * Adds a constant table to this model. Created objectAdded event to model
+	 * listeners. This is only intended to be called from constant table
+	 * constructor, so this is not public
+	 * 
+	 * @see TraceModelListener#objectAdded(TraceObject, TraceObject)
+	 * @param table
+	 *            the constant table
+	 */
+	void addConstantTable(TraceConstantTable table) {
+		constantTables.add(table);
+		notifyObjectAdded(this, table);
+	}
+
+	/**
+	 * Fires propertiesUpdated event. Called from trace objects when their
+	 * properties change.
+	 * 
+	 * @see TraceModelListener#propertyUpdated(TraceObject, int)
+	 * @param source
+	 *            the object that changed
+	 * @param property
+	 *            the property that changed
+	 * @throws TraceCompilerException 
+	 */
+	void notifyPropertyUpdated(TraceObject source, int property) throws TraceCompilerException {
+		if (source instanceof Trace) {
+			if (property == TraceModelListener.NAME) {
+				Collections.sort(tracesByName,
+						TraceObjectUtils.traceObjectNameComparator);
+			}
+			((Trace) source).getGroup().tracePropertyUpdated(source, property);
+		}
+		for (TraceModelListener l : modelListeners) {
+			l.propertyUpdated(source, property);
+		}
+		modelChangedDuringProcessing = true;
+	}
+
+	/**
+	 * Fires objectAdded event to listeners
+	 * 
+	 * @see TraceModelListener#objectAdded(TraceObject, TraceObject)
+	 * @param owner
+	 *            the owner object
+	 * @param object
+	 *            the object that was added
+	 */
+	void notifyObjectAdded(TraceObject owner, TraceObject object) {
+		// List is sorted when the name is set to the trace
+		if (object instanceof Trace) {
+			tracesByName.add((Trace) object);
+		}
+		for (TraceModelListener l : modelListeners) {
+			l.objectAdded(owner, object);
+		}
+		modelChangedDuringProcessing = true;
+	}
+
+	/**
+	 * Fires objectRemoved event to listeners
+	 * 
+	 * @see TraceModelListener#objectRemoved(TraceObject, TraceObject)
+	 * @param owner
+	 *            the owner object
+	 * @param object
+	 *            the object that was removed
+	 * @throws TraceCompilerException 
+	 */
+	void notifyObjectRemoved(TraceObject owner, TraceObject object) throws TraceCompilerException {
+		if (object instanceof Trace) {
+			int index = Collections.binarySearch(tracesByName, (Trace) object,
+					TraceObjectUtils.traceObjectNameComparator);
+			tracesByName.remove(index);
+		}
+		notifyOnDelete(object);
+		for (TraceModelListener l : modelListeners) {
+			l.objectRemoved(owner, object);
+		}
+		modelChangedDuringProcessing = true;
+	}
+
+	/**
+	 * Notifies that an object creation is complete
+	 * 
+	 * @see TraceModelListener#objectCreationComplete(TraceObject)
+	 * @param object
+	 *            the object
+	 * @throws TraceCompilerException 
+	 */
+	void notifyObjectCreationComplete(TraceObject object) throws TraceCompilerException {
+		for (TraceModelListener l : modelListeners) {
+			l.objectCreationComplete(object);
+		}
+	}
+
+	/**
+	 * Fires modelResetting event to all listeners
+	 * 
+	 * @see TraceModelResetListener#modelResetting()
+	 */
+	private void notifyModelResetting() {
+		for (TraceModelResetListener l : resetListeners) {
+			l.modelResetting();
+		}
+	}
+
+	/**
+	 * Fires modelReset event to all listeners
+	 * 
+	 * @see TraceModelResetListener#modelReset()
+	 */
+	private void notifyModelReset() {
+		for (TraceModelResetListener l : resetListeners) {
+			l.modelReset();
+		}
+	}
+
+	/**
+	 * Fires extensionAdded event. Called from TraceObject when extension is
+	 * added to it
+	 * 
+	 * @see TraceModelExtensionListener#extensionAdded(TraceObject,
+	 *      TraceModelExtension)
+	 * @param object
+	 *            the trace object
+	 * @param extension
+	 *            the new extension
+	 */
+	void notifyExtensionAdded(TraceObject object, TraceModelExtension extension) {
+		for (TraceModelExtensionListener l : extensionListeners) {
+			l.extensionAdded(object, extension);
+		}
+		modelChangedDuringProcessing = true;
+	}
+
+	/**
+	 * Fires extensionRemoved event. Called from TraceObject when extension is
+	 * removed from it
+	 * 
+	 * @see TraceModelExtensionListener#extensionRemoved(TraceObject,
+	 *      TraceModelExtension)
+	 * @param object
+	 *            the object
+	 * @param extension
+	 *            the removed extension
+	 */
+	void notifyExtensionRemoved(TraceObject object,
+			TraceModelExtension extension) {
+		for (TraceModelExtensionListener l : extensionListeners) {
+			l.extensionRemoved(object, extension);
+		}
+		modelChangedDuringProcessing = true;
+	}
+
+	/**
+	 * Gets the validity flag of this model
+	 * 
+	 * @return the validity flag
+	 */
+	public boolean isValid() {
+		return valid;
+	}
+
+	/**
+	 * Sets the validity flag
+	 * 
+	 * @param valid
+	 *            new flag value
+	 * @throws TraceCompilerException 
+	 */
+	public void setValid(boolean valid) throws TraceCompilerException {
+		if (valid != this.valid) {
+			this.valid = valid;
+			for (TraceModelResetListener l : resetListeners) {
+				l.modelValid(valid);
+			}
+		}
+	}
+
+	/**
+	 * Gets the trace object factory
+	 * 
+	 * @return the factory
+	 */
+	public TraceObjectFactory getFactory() {
+		return factory;
+	}
+
+	/**
+	 * Gets the object verifier interface. The verifier should be used before
+	 * updating object properties
+	 * 
+	 * @return the verifier
+	 */
+	public TraceObjectPropertyVerifier getVerifier() {
+		return verifier;
+	}
+
+	/**
+	 * Notifies the process listeners that a process the results in multiple
+	 * listener updates is about to start
+	 */
+	public void startProcessing() {
+		isProcessing++;
+		if (isProcessing == 1) {
+			modelChangedDuringProcessing = false;
+			for (TraceProcessingListener l : processingListeners) {
+				l.processingStarted();
+			}
+		}
+	}
+
+	/**
+	 * Notifies the process listeners that a process the results in multiple
+	 * listener updates has finished
+	 */
+	public void processingComplete() {
+		isProcessing--;
+		if (isProcessing == 0) {
+			for (TraceProcessingListener l : processingListeners) {
+				l.processingComplete(modelChangedDuringProcessing);
+			}
+			modelChangedDuringProcessing = false;
+		}
+	}
+
+	/**
+	 * Checks the state of the processing flag
+	 * 
+	 * @return the processing flag
+	 */
+	public boolean isProcessing() {
+		return isProcessing > 0;
+	}
+
+	/**
+	 * Checks if model has traces
+	 * 
+	 * @return true if there's traces, false if not
+	 */
+	public boolean hasTraces() {
+		boolean retval = false;
+		for (TraceGroup group : groups) {
+			if (group.hasTraces()) {
+				retval = true;
+				break;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets group ID from properties
+	 * 
+	 * @param properties
+	 *            the properties
+	 * @param group
+	 *            the group
+	 * @return the group ID
+	 * @throws TraceCompilerException
+	 */
+	public int getGroupID(Properties properties, TraceGroup group)
+			throws TraceCompilerException {
+		String value = properties.getProperty(GROUP_PROPERTY_PREFIX
+				+ group.getName());
+		int id;
+		if (value == null) {
+			// Not found, assign a proper ID
+			id = getNewIdForGroup(group);
+
+		} else {
+			try {
+				id = Integer.decode(value).intValue();
+				TraceGroup traceGroup = findGroupByID(id);
+				if (traceGroup != null && !traceGroup.equals(group)) {
+					// Id already in use, assign a proper ID
+					id = getNewIdForGroup(group);
+				}
+			} catch (NumberFormatException e) {
+				// Corrupted, assign a proper ID
+				id = getNewIdForGroup(group);
+			}
+		}
+		group.internalSetID(id);
+		return id;
+	}
+
+	/**
+	 * Gets a new ID for this group
+	 * 
+	 * @param group
+	 *            the group
+	 * @return a new ID for this group
+	 * @throws TraceCompilerException
+	 */
+	private int getNewIdForGroup(TraceGroup group) throws TraceCompilerException {
+		int id = FormattingUtils.getGroupID(group.getModel(), group.getName());
+		return id;
+	}
+
+	/**
+	 * Saves trace and group identifiers to given properties.
+	 * 
+	 * @param properties
+	 *            the properties to use
+	 */
+	public void saveIDs(Properties properties) {
+		properties.clear();
+		StringBuffer sb = new StringBuffer();
+		for (TraceGroup group : this) {
+			int groupId = group.getID();
+			properties.setProperty(GROUP_PROPERTY_PREFIX + group.getName(),
+					SourceConstants.HEX_PREFIX + Integer.toHexString(groupId));
+			for (Trace trace : group) {
+				int traceId = trace.getID();
+				properties.setProperty(TRACE_PROPERTY_PREFIX
+						+ createTraceName(sb, group, trace),
+						SourceConstants.HEX_PREFIX
+								+ Integer.toHexString(traceId));
+			}
+		}
+	}
+
+	/**
+	 * Merges the group and trace names together
+	 * 
+	 * @param sb
+	 *            the buffer where name is stored
+	 * @param group
+	 *            group
+	 * @param trace
+	 *            trace
+	 * @return the trace name
+	 */
+	public String createTraceName(StringBuffer sb, TraceGroup group, Trace trace) {
+		sb.setLength(0);
+		sb.append(group.getName());
+		sb.append(GROUP_ID_PREFIX);
+		int groupId = group.getID();
+		String groupIdString = SourceConstants.HEX_PREFIX
+				+ Integer.toString(groupId, HEX_RADIX).toUpperCase();
+		sb.append(groupIdString);
+		sb.append(GROUP_ID_SUFFIX);
+		sb.append(SourceConstants.UNDERSCORE);
+		sb.append(trace.getName());
+		return sb.toString();
+	}
+
+	/**
+	 * Gets fixed group and trace ids
+	 * 
+	 * @return fixed Ids
+	 */
+	public SortedProperties getFixedIds() {
+		return fixedIds;
+	}
+
+	/**
+	 * Set fixed group and trace ids
+	 * 
+	 * @param fixedIds
+	 *            fixed Ids
+	 */
+	public void setFixedIds(SortedProperties fixedIds) {
+		this.fixedIds = fixedIds;
+	}
+
+	/**
+	 * Gets next trace ID
+	 * 
+	 * @param group
+	 *            the group
+	 * @return the trace ID
+	 * @throws TraceCompilerException
+	 */
+	public int getNextTraceId(TraceGroup group) throws TraceCompilerException {
+		int currentMaxTraceID = 0;
+		int nextTraceId = 0;
+		// Check if there are some fixed Ids
+		if (fixedIds != null) {
+			Enumeration<Object> keys = this.fixedIds.keys();
+			String groupName = group.getName();
+			int groupId = group.getID();
+			String groupIdString = SourceConstants.HEX_PREFIX
+					+ Integer.toString(groupId, HEX_RADIX).toUpperCase();
+			// Go through fixed Ids and check if there are fixed trace Ids to
+			// this group
+			while (keys.hasMoreElements()) {
+				String key = (String) keys.nextElement();
+				if (key.startsWith(TRACE_PROPERTY_PREFIX + groupName
+						+ GROUP_ID_PREFIX + groupIdString + GROUP_ID_SUFFIX
+						+ SourceConstants.UNDERSCORE)
+						|| key.startsWith(OBSOLETE_PROPERTY_PREFIX
+								+ TRACE_PROPERTY_PREFIX + groupName
+								+ GROUP_ID_PREFIX + groupIdString
+								+ GROUP_ID_SUFFIX + SourceConstants.UNDERSCORE)) {
+					// Fixed trace Id to in this group found. Try to covert it
+					// to int value.
+					String value = fixedIds.getProperty(key);
+					int fixedId = 0;
+					try {
+						fixedId = Integer.decode(value).intValue();
+					} catch (NumberFormatException e) {
+						// Corrupted. Get next trace Id later on.
+						nextTraceId = 0;
+						break;
+					}
+					// Check if found fixed Id is bigger than current max trace
+					// Id in this group
+					if (fixedId > currentMaxTraceID) {
+						currentMaxTraceID = fixedId;
+					}
+				}
+			}
+			// If there were fixed trace Ids to this group. Set next trace Id to
+			// be current max trace Id + 1
+			if (currentMaxTraceID != 0) {
+				nextTraceId = currentMaxTraceID + 1;
+			}
+			// If next trace Id is zero or smaller than trace Id that group
+			// suggest. Set it be same as group suggest. This is done in case
+			// that we have added more than one new trace to same group after
+			// last fixed Id update
+			if (nextTraceId == 0 || nextTraceId < group.getNextTraceID()) {
+				nextTraceId = group.getNextTraceID();
+			}
+		} else {
+			// No fixed Ids. Get next trace Id from group
+			nextTraceId = group.getNextTraceID();
+		}
+		// Check that next trace Id is not bigger than max trace Id
+		if (nextTraceId > TraceCompilerEngineGlobals.MAX_TRACE_ID) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.RUN_OUT_OF_TRACE_IDS);
+		}
+
+		return nextTraceId;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModelExtension.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Interface implemented by trace model extensions
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Interface implemented by trace model extensions
+ * 
+ */
+public interface TraceModelExtension {
+
+	/**
+	 * Sets the owner of this extension. Called when extension is added to a
+	 * trace object and called with null when removed from trace object
+	 * 
+	 * @param owner
+	 *            the owning object
+	 */
+	public void setOwner(TraceObject owner);
+
+	/**
+	 * Gets the owner of this extension
+	 * 
+	 * @return the owner
+	 */
+	public TraceObject getOwner();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModelExtensionListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Listener interface for trace model extension notifications
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Listener interface for trace model extension notifications
+ * 
+ */
+public interface TraceModelExtensionListener {
+
+	/**
+	 * Notifies that an extension was added to the trace object
+	 * 
+	 * @param object
+	 *            the object where the extension was added
+	 * @param extension
+	 *            the new extension object
+	 */
+	public void extensionAdded(TraceObject object, TraceModelExtension extension);
+
+	/**
+	 * Notifies that an extension was removed from the trace object
+	 * 
+	 * @param object
+	 *            the object from where the extension was removed
+	 * @param extension
+	 *            the removed extension object
+	 */
+	public void extensionRemoved(TraceObject object,
+			TraceModelExtension extension);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModelListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Listener interface for trace model change notifications
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Listener interface for trace model change notifications
+ * 
+ */
+public interface TraceModelListener {
+
+	/**
+	 * Object name has been updated
+	 */
+	int NAME = 1;
+
+	/**
+	 * Object ID has been updated
+	 */
+	int ID = 2;
+
+	/**
+	 * Trace text has been updated
+	 */
+	int TRACE = 3;
+
+	/**
+	 * Parameter type has been updated
+	 */
+	int TYPE = 4;
+
+	/**
+	 * Notification which is fired when a trace object has been added
+	 * 
+	 * @param owner
+	 *            the owner of the object
+	 * @param object
+	 *            the object
+	 */
+	public void objectAdded(TraceObject owner, TraceObject object);
+
+	/**
+	 * Notification that is fired a trace object is removed from the model
+	 * 
+	 * @param owner
+	 *            the owner of the object
+	 * @param object
+	 *            the removed object
+	 * @throws TraceCompilerException 
+	 */
+	public void objectRemoved(TraceObject owner, TraceObject object) throws TraceCompilerException;
+
+	/**
+	 * Notifies that the one of the properties of an object have been updated
+	 * 
+	 * @param object
+	 *            the object which was updated
+	 * @param property
+	 *            the property that was updated
+	 * @throws TraceCompilerException 
+	 */
+	public void propertyUpdated(TraceObject object, int property) throws TraceCompilerException;
+
+	/**
+	 * Notifies that object creation is complete
+	 * 
+	 * @param object
+	 *            the object
+	 * @throws TraceCompilerException 
+	 */
+	public void objectCreationComplete(TraceObject object) throws TraceCompilerException;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModelPersistentExtension.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Interface implemented by trace model extensions that need to store themselves 
+* into persistent storage along with other model elements
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Interface implemented by trace model extensions that need to store themselves
+ * into persistent storage along with other model elements. The storage format
+ * is left to the implementation. When loading, the trace provider calls
+ * TraceObjectFactory.createExtension with the storage name. The object factory
+ * returns an instance of this interface and the provider calls setData to
+ * initialize this.
+ * 
+ */
+public interface TraceModelPersistentExtension extends TraceModelExtension {
+
+	/**
+	 * Gets the name used when storing this extension
+	 * 
+	 * @return the storage name
+	 */
+	public String getStorageName();
+
+	/**
+	 * Gets the data of this extension
+	 * 
+	 * @return the extension data
+	 */
+	public String getData();
+
+	/**
+	 * Sets the data of this extension
+	 * 
+	 * @param data
+	 *            the data
+	 * @return true if extension should be added to model, false if not
+	 */
+	public boolean setData(String data);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModelResetListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Listener interface for trace model reset notifications
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Listener interface for trace model reset notifications
+ * 
+ */
+public interface TraceModelResetListener {
+
+	/**
+	 * Notification that is fired before the model is reset.
+	 */
+	public void modelResetting();
+
+	/**
+	 * Notification that is fired after the model is reset.
+	 */
+	public void modelReset();
+
+	/**
+	 * Validity changed notification
+	 * 
+	 * @param valid
+	 *            the validity changed flag
+	 * @throws TraceCompilerException 
+	 */
+	public void modelValid(boolean valid) throws TraceCompilerException;
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObject.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for all trace model objects
+*
+*/
+package com.nokia.tracecompiler.model;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * Base class for all trace model objects
+ * 
+ */
+public abstract class TraceObject {
+
+	/**
+	 * The extensions can be used by trace providers to associate extra data to
+	 * the object.
+	 */
+	private ArrayList<TraceModelExtension> extensions = new ArrayList<TraceModelExtension>();
+
+	/**
+	 * Object ID.
+	 */
+	private int id;
+
+	/**
+	 * Object name.
+	 */
+	private String name = ""; //$NON-NLS-1$
+
+	/**
+	 * The trace model.
+	 */
+	private TraceModel model;
+
+	/**
+	 * Complete flag
+	 */
+	private boolean complete;
+
+	/**
+	 * Associates this object to a trace model.
+	 * 
+	 * @param model
+	 *            the model where this object belongs to
+	 */
+	void setModel(TraceModel model) {
+		this.model = model;
+	}
+
+	/**
+	 * Returns the trace model this object is associated to.
+	 * 
+	 * @return the trace model
+	 */
+	public TraceModel getModel() {
+		return model;
+	}
+
+	/**
+	 * Sets the ID of this object. Generates propertyUpdated event to model
+	 * listeners if the ID changes
+	 * 
+	 * @see TraceModelListener#propertyUpdated(TraceObject, int)
+	 * @param id
+	 *            the new ID
+	 * @throws TraceCompilerException 
+	 */
+	public void setID(int id) throws TraceCompilerException {
+		if (this.id != id) {
+			this.id = id;
+			model.notifyPropertyUpdated(this, TraceModelListener.ID);
+		}
+	}
+
+	/**
+	 * Sets the ID of this object but does not generate any notifications
+	 * 
+	 * @param id
+	 *            the new ID
+	 */
+	void internalSetID(int id) {
+		this.id = id;
+	}
+
+	/**
+	 * Returns the ID of this object.
+	 * 
+	 * @return the ID
+	 */
+	public int getID() {
+		return id;
+	}
+
+	/**
+	 * Sets the name of this object. Generates propertyUpdated event to model
+	 * listeners if the name changes
+	 * 
+	 * @see TraceModelListener#propertyUpdated(TraceObject, int)
+	 * @param name
+	 *            the new name
+	 * @throws TraceCompilerException 
+	 */
+	public void setName(String name) throws TraceCompilerException {
+		if (name == null) {
+			name = ""; //$NON-NLS-1$
+		}
+		if (!name.equals(this.name)) {
+			this.name = name;
+			model.notifyPropertyUpdated(this, TraceModelListener.NAME);
+		}
+	}
+
+	/**
+	 * Returns the name of this object. This never returns null
+	 * 
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Adds an extension to this object. Generates extensionAdded event to model
+	 * listeners
+	 * 
+	 * @param extension
+	 *            the new extension
+	 */
+	public void addExtension(TraceModelExtension extension) {
+		if (extension == null) {
+			throw new NullPointerException();
+		}
+		extensions.add(extension);
+		extension.setOwner(this);
+		model.notifyExtensionAdded(this, extension);
+	}
+
+	/**
+	 * Removes an extension from this object. Generates extensionRemoved event
+	 * to model listeners if the extension was actually removed
+	 * 
+	 * @param extension
+	 *            the extension to be removed
+	 */
+	public void removeExtension(TraceModelExtension extension) {
+		if (extensions.remove(extension)) {
+			extension.setOwner(null);
+			model.notifyExtensionRemoved(this, extension);
+		}
+	}
+
+	/**
+	 * Removes all extensions which are of given type
+	 * 
+	 * @param <T>
+	 *            the type of the extension
+	 * @param extClass
+	 *            the extension type
+	 */
+	public <T extends TraceModelExtension> void removeExtensions(
+			Class<T> extClass) {
+		Iterator<TraceModelExtension> itr = extensions.iterator();
+		while (itr.hasNext()) {
+			TraceModelExtension ext = itr.next();
+			if (extClass.isAssignableFrom(ext.getClass())) {
+				itr.remove();
+				ext.setOwner(null);
+				model.notifyExtensionRemoved(this, ext);
+			}
+		}
+	}
+
+	/**
+	 * Returns the first extension which is of given type. The extensions are
+	 * stored in a list in the order they have been added. This returns the
+	 * first instance found from the list.
+	 * 
+	 * @param <T>
+	 *            the type of the extension
+	 * @param extClass
+	 *            the extension type
+	 * @return the extension or null if not found
+	 */
+	@SuppressWarnings("unchecked")
+	public <T extends TraceModelExtension> T getExtension(Class<T> extClass) {
+		T ret = null;
+		for (TraceModelExtension ext : extensions) {
+			if (extClass.isAssignableFrom(ext.getClass())) {
+				ret = (T) ext;
+				break;
+			}
+		}
+		return ret;
+	}
+
+	/**
+	 * Returns the extensions which are of given type.
+	 * 
+	 * @param <T>
+	 *            the type of the extension
+	 * @param extClass
+	 *            the extension type
+	 * @return iterator over the list of extension
+	 */
+	@SuppressWarnings("unchecked")
+	public <T extends TraceModelExtension> Iterator<T> getExtensions(
+			Class<T> extClass) {
+		ArrayList<T> list = new ArrayList<T>();
+		for (TraceModelExtension ext : extensions) {
+			if (extClass.isAssignableFrom(ext.getClass())) {
+				list.add((T) ext);
+			}
+		}
+		return list.iterator();
+	}
+
+	/**
+	 * Resets the ID and name
+	 */
+	void reset() {
+		id = 0;
+		name = ""; //$NON-NLS-1$
+	}
+
+	/**
+	 * Sets the complete flag and fires complete event
+	 * @throws TraceCompilerException 
+	 */
+	void setComplete() throws TraceCompilerException {
+		complete = true;
+		model.notifyObjectCreationComplete(this);
+	}
+
+	/**
+	 * Calls OnDelete rules if the object owns them
+	 * 
+	 * @param object
+	 *            the object that was removed
+	 */
+	protected void notifyOnDelete(TraceObject object) {
+		Iterator<TraceObjectRuleOnDelete> rules = object
+				.getExtensions(TraceObjectRuleOnDelete.class);
+		while (rules.hasNext()) {
+			rules.next().objectDeleted();
+		}
+	}
+
+	/**
+	 * Gets the complete flag
+	 * 
+	 * @return the flag
+	 */
+	public boolean isComplete() {
+		return complete;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectFactory.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,319 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Creates trace objects and provides configurable rules for trace object creation
+*
+*/
+package com.nokia.tracecompiler.model;
+
+import java.util.Iterator;
+
+/**
+ * Creates trace objects and provides configurable rules for trace object
+ * creation
+ * 
+ */
+public class TraceObjectFactory {
+
+	/**
+	 * The trace model
+	 */
+	private TraceModel model;
+
+	/**
+	 * Rule factory
+	 */
+	private TraceObjectRuleFactory ruleFactory;
+
+	/**
+	 * Creates a new factory
+	 * 
+	 * @param model
+	 *            the model
+	 * @param factory
+	 *            the rule factory
+	 * @throws TraceCompilerException 
+	 */
+	TraceObjectFactory(TraceModel model, TraceObjectRuleFactory factory) throws TraceCompilerException {
+		this.model = model;
+		this.ruleFactory = factory;
+		processNewObjectRules(model);
+		model.setComplete();
+	}
+
+	/**
+	 * Gets the rule factory
+	 * 
+	 * @return the rule factory
+	 */
+	public TraceObjectRuleFactory getRuleFactory() {
+		return ruleFactory;
+	}
+
+	/**
+	 * Creates a new trace group
+	 * 
+	 * @param id
+	 *            the group ID
+	 * @param name
+	 *            the name for the group
+	 * @param extensions
+	 *            list of extensions to be added to the group
+	 * @return the new group
+	 * @throws TraceCompilerException 
+	 */
+	public TraceGroup createTraceGroup(int id, String name,
+			TraceModelExtension[] extensions) throws TraceCompilerException {
+		TraceGroup group = new TraceGroup(model);
+		group.setID(id);
+		group.setName(name);
+		setExtensions(group, extensions);
+		processNewObjectRules(group);
+		group.setComplete();
+		return group;
+	}
+
+	/**
+	 * Creates a new trace
+	 * 
+	 * @param group
+	 *            the trace group
+	 * @param id
+	 *            the id for the trace
+	 * @param name
+	 *            the trace name
+	 * @param traceText
+	 *            the trace text
+	 * @param extensions
+	 *            list of extensions to be added to the trace
+	 * @return the new trace
+	 * @throws TraceCompilerException 
+	 */
+	public Trace createTrace(TraceGroup group, int id, String name,
+			String traceText, TraceModelExtension[] extensions) throws TraceCompilerException {
+		Trace trace = new Trace(group);
+		trace.setID(id);
+		trace.setName(name);
+		trace.setTrace(traceText);
+		setExtensions(trace, extensions);
+		processNewObjectRules(trace);
+		trace.setComplete();
+		return trace;
+	}
+
+	/**
+	 * Creates a new trace parameter
+	 * 
+	 * @param trace
+	 *            the trace the parameter is associated to
+	 * @param id
+	 *            the parameter ID
+	 * @param name
+	 *            the parameter name
+	 * @param type
+	 *            parameter type
+	 * @param extensions
+	 *            list of extensions to be added to the parameter
+	 * @return the new parameter
+	 * @throws TraceCompilerException 
+	 */
+	public TraceParameter createTraceParameter(Trace trace, int id,
+			String name, String type, TraceModelExtension[] extensions) throws TraceCompilerException {
+		TraceParameter parameter = new TraceParameter(trace);
+		initializeParameter(parameter, id, name, type, extensions);
+		return parameter;
+	}
+
+	/**
+	 * Creates a new trace parameter inserting it into the specified index
+	 * 
+	 * @param objectIndex
+	 *            the index for the object
+	 * @param trace
+	 *            the trace the parameter is associated to
+	 * @param id
+	 *            the parameter ID
+	 * @param name
+	 *            the parameter name
+	 * @param type
+	 *            parameter type
+	 * @param extensions
+	 *            list of extensions to be added to the parameter
+	 * @return the new parameter
+	 * @throws TraceCompilerException 
+	 */
+	public TraceParameter createTraceParameter(int objectIndex, Trace trace,
+			int id, String name, String type, TraceModelExtension[] extensions) throws TraceCompilerException {
+		TraceParameter parameter = new TraceParameter(trace, objectIndex);
+		initializeParameter(parameter, id, name, type, extensions);
+		return parameter;
+	}
+
+	/**
+	 * Initializes a parameter
+	 * 
+	 * @param parameter
+	 *            the parameter
+	 * @param id
+	 *            the parameter ID
+	 * @param name
+	 *            the parameter name
+	 * @param type
+	 *            parameter type
+	 * @param extensions
+	 *            list of extensions to be added to the parameter
+	 * @throws TraceCompilerException 
+	 */
+	private void initializeParameter(TraceParameter parameter, int id,
+			String name, String type, TraceModelExtension[] extensions) throws TraceCompilerException {
+		parameter.setID(id);
+		parameter.setName(name);
+		parameter.setType(type);
+		setExtensions(parameter, extensions);
+		processNewObjectRules(parameter);
+		parameter.setComplete();
+	}
+
+	/**
+	 * Creates a new constant table
+	 * 
+	 * @param id
+	 *            id for the table
+	 * @param typeName
+	 *            the name for the table
+	 * @param extensions
+	 *            list of extensions to be added to the table
+	 * @return the constant table
+	 * @throws TraceCompilerException 
+	 */
+	public TraceConstantTable createConstantTable(int id, String typeName,
+			TraceModelExtension[] extensions) throws TraceCompilerException {
+		TraceConstantTable table = new TraceConstantTable(model);
+		table.setID(id);
+		table.setName(typeName);
+		setExtensions(table, extensions);
+		processNewObjectRules(table);
+		table.setComplete();
+		for (TraceGroup group : model) {
+			for (Trace trace : group) {
+				for (TraceParameter param : trace) {
+					if (param.getType().equals(typeName)) {
+						table.addParameterReference(param);
+					}
+				}
+			}
+		}
+		return table;
+	}
+
+	/**
+	 * Creates a new constant table entry
+	 * 
+	 * @param table
+	 *            constant table
+	 * @param id
+	 *            id for the entry
+	 * @param value
+	 *            value for the entry
+	 * @param extensions
+	 *            list of extensions to be added to the constant
+	 * @return the constant table entry
+	 * @throws TraceCompilerException 
+	 */
+	public TraceConstantTableEntry createConstantTableEntry(
+			TraceConstantTable table, int id, String value,
+			TraceModelExtension[] extensions) throws TraceCompilerException {
+		TraceConstantTableEntry entry = new TraceConstantTableEntry(table);
+		entry.setID(id);
+		entry.setName(value);
+		setExtensions(entry, extensions);
+		processNewObjectRules(entry);
+		entry.setComplete();
+		return entry;
+	}
+
+	/**
+	 * Creates an extension based on its name. This does not add the extension
+	 * to the object, since the setData method should be called first
+	 * 
+	 * @param object
+	 *            the target object for the extension
+	 * @param name
+	 *            the extension name
+	 * @return the created extension
+	 */
+	public TraceModelPersistentExtension createExtension(TraceObject object,
+			String name) {
+		return ruleFactory.createExtension(object, name);
+	}
+
+	/**
+	 * Adds extensions to given object
+	 * 
+	 * @param object
+	 *            the object
+	 * @param extensions
+	 *            extensions to be added
+	 */
+	private void setExtensions(TraceObject object,
+			TraceModelExtension[] extensions) {
+		if (extensions != null) {
+			for (TraceModelExtension element : extensions) {
+				object.addExtension(element);
+			}
+		}
+	}
+
+	/**
+	 * Processes the rules of a new object
+	 * 
+	 * @param object
+	 *            the object to be processed
+	 * @throws TraceCompilerException 
+	 */
+	private void processNewObjectRules(TraceObject object) throws TraceCompilerException {
+		// Calls the factory to preprocess the extensions passed to
+		// create-function
+		ruleFactory.preProcessNewRules(object);
+		// The rules may contain object creation rules
+		Iterator<TraceObjectRule> rules = object
+				.getExtensions(TraceObjectRule.class);
+		while (rules.hasNext()) {
+			TraceObjectRule rule = rules.next();
+			if (rule instanceof TraceObjectRuleCreateObject) {
+				TraceObjectRuleCreateObject createRule = (TraceObjectRuleCreateObject) rule;
+				createRule.createObject();
+			}
+		}
+		// Some rules are removed after the objects have been created
+		Iterator<TraceObjectRuleRemoveOnCreate> itr;
+		boolean changed;
+		do {
+			changed = false;
+			itr = object.getExtensions(TraceObjectRuleRemoveOnCreate.class);
+			while (itr.hasNext() && !changed) {
+				TraceObjectRuleRemoveOnCreate ext = itr.next();
+				if (ext.canBeRemoved()) {
+					object.removeExtension(ext);
+					changed = true;
+				}
+			}
+		} while (changed);
+		// After processing is complete, the rule factory is used to do
+		// post-processing
+		ruleFactory.postProcessNewRules(object);
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectModifier.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Modifier properties is returned by one of the TraceObjectUtils.modify methods
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Modifier properties is returned by one of the TraceObjectUtils.modify
+ * methods.
+ * 
+ */
+public interface TraceObjectModifier {
+
+	/**
+	 * Gets the data
+	 * 
+	 * @return the data
+	 */
+	public String getData();
+
+	/**
+	 * Checks if the data was changed during the modify call
+	 * 
+	 * @return true if data was changed
+	 */
+	public boolean hasChanged();
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectProperty.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Property associated with a trace object
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Property associated with a trace object
+ * 
+ */
+public interface TraceObjectProperty {
+
+	/**
+	 * Gets the name of the property
+	 * 
+	 * @return the name
+	 */
+	public String getName();
+
+	/**
+	 * Gets the value of the property
+	 * 
+	 * @return the value
+	 */
+	public String getValue();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectPropertyList.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* List of properties associated to a trace object
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * List of properties associated to a trace object
+ * 
+ */
+public interface TraceObjectPropertyList extends TraceModelExtension,
+		Iterable<TraceObjectProperty> {
+
+	/**
+	 * Gets a property by name
+	 * 
+	 * @param name
+	 *            the property name
+	 * @return the property
+	 */
+	public TraceObjectProperty getProperty(String name);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectPropertyVerifier.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Content verifier interface for trace objects
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Content verifier interface for trace objects
+ * 
+ */
+public interface TraceObjectPropertyVerifier {
+
+	/**
+	 * Checks the properties of a trace before it is created or modified
+	 * 
+	 * @param group
+	 *            the group for the trace
+	 * @param trace
+	 *            trace to be modified. If creating new, this is null
+	 * @param id
+	 *            the trace ID
+	 * @param name
+	 *            the name of the trace
+	 * @param data
+	 *            the trace data
+	 * @throws TraceCompilerException
+	 *             if properties are not valid. The error code from the
+	 *             exception is used to create an error dialog
+	 */
+	public void checkTraceProperties(TraceGroup group, Trace trace, int id,
+			String name, String data) throws TraceCompilerException;
+
+	/**
+	 * Checks the properties of a trace group before it is created or modified
+	 * 
+	 * @param owner
+	 *            the model owning the trace group
+	 * @param group
+	 *            group to be modified. If creating new, this is null
+	 * @param id
+	 *            the trace ID
+	 * @param name
+	 *            the name of the trace
+	 * @throws TraceCompilerException
+	 *             if properties are not valid. The error code from the
+	 *             exception is used to create an error dialog
+	 */
+	public void checkTraceGroupProperties(TraceModel owner, TraceGroup group,
+			int id, String name) throws TraceCompilerException;
+
+	/**
+	 * Checks the properties of a parameter before it is created or modified
+	 * 
+	 * @param owner
+	 *            the parameter owner
+	 * @param parameter
+	 *            parameter to be modified. If creating new, this is null
+	 * @param id
+	 *            the parameter ID
+	 * @param name
+	 *            the name of the parameter
+	 * @param type
+	 *            the type of the parameter
+	 * @throws TraceCompilerException
+	 *             if properties are not valid. The error code from the
+	 *             exception is used to create an error dialog
+	 */
+	public void checkTraceParameterProperties(Trace owner,
+			TraceParameter parameter, int id, String name, String type)
+			throws TraceCompilerException;
+
+	/**
+	 * Checks the properties of a constant table before it is created or
+	 * modified
+	 * 
+	 * @param owner
+	 *            the model owning the constant table
+	 * @param table
+	 *            the table to be changed. If creating new, this is null
+	 * @param id
+	 *            the ID of the table
+	 * @param tableName
+	 *            the name of the table
+	 * @throws TraceCompilerException
+	 *             if properties are not valid. The error code from the
+	 *             exception is used to create an error dialog
+	 */
+	public void checkConstantTableProperties(TraceModel owner,
+			TraceConstantTable table, int id, String tableName)
+			throws TraceCompilerException;
+
+	/**
+	 * Checks the properties of a constant table entry before it is created
+	 * 
+	 * @param table
+	 *            the constant table
+	 * @param entry
+	 *            the entry to be modified. If creating new, this is null
+	 * @param id
+	 *            the ID for the new entry
+	 * @param value
+	 *            the value for the new entry
+	 * @throws TraceCompilerException
+	 *             if properties are not valid. The error code from the
+	 *             exception is used to create an error dialog
+	 */
+	public void checkConstantProperties(TraceConstantTable table,
+			TraceConstantTableEntry entry, int id, String value)
+			throws TraceCompilerException;
+
+	/**
+	 * Checks the properties of trace model before it is modified
+	 * 
+	 * @param model
+	 *            the trace model
+	 * @param id
+	 *            the model ID
+	 * @param name
+	 *            the model name
+	 * @param path
+	 *            the model path
+	 * @throws TraceCompilerException
+	 *             if properties are not valid. The error code from the
+	 *             exception is used to create an error dialog
+	 */
+	public void checkTraceModelProperties(TraceModel model, int id,
+			String name, String path) throws TraceCompilerException;
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base interface for trace model object processing rules
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Base interface for trace model object processing rules
+ * 
+ */
+public interface TraceObjectRule extends TraceModelExtension {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectRuleCreateObject.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rule for automatic object creation
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Rule for automatic object creation
+ * 
+ */
+public interface TraceObjectRuleCreateObject extends TraceObjectRule {
+
+	/**
+	 * Called to create a new object into the owner of this rule
+	 * @throws TraceCompilerException 
+	 */
+	public void createObject() throws TraceCompilerException;
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectRuleFactory.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Creates trace objects and provides configurable rules for trace object creation
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Allows registration of rules into the trace object factory
+ * 
+ */
+public interface TraceObjectRuleFactory {
+
+	/**
+	 * Called before the rules of a new object are processed by object factory
+	 * 
+	 * @param object
+	 *            new object
+	 */
+	public void preProcessNewRules(TraceObject object);
+
+	/**
+	 * Called after the rules of a new object are processed by object factory
+	 * 
+	 * @param object
+	 *            new object
+	 */
+	public void postProcessNewRules(TraceObject object);
+
+	/**
+	 * Creates an extension based on extension name
+	 * 
+	 * @param object
+	 *            the target object
+	 * @param name
+	 *            the name of the extension
+	 * @return the new extension
+	 */
+	public TraceModelPersistentExtension createExtension(TraceObject object,
+			String name);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectRuleOnDelete.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rule to perform processing when object is deleted
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Rule to perform processing when object is deleted
+ * 
+ */
+public interface TraceObjectRuleOnDelete extends TraceObjectRule {
+
+	/**
+	 * Called when the object that owns this rule is deleted
+	 */
+	public void objectDeleted();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectRuleRemoveOnCreate.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Extension that is removed from the object after it has been created
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Extension that is removed from the object after it has been created
+ * 
+ */
+public interface TraceObjectRuleRemoveOnCreate extends TraceObjectRule {
+
+	/**
+	 * Returns true if this rule can be removed
+	 * 
+	 * @return true if remove, false otherwise
+	 */
+	public boolean canBeRemoved();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceObjectUtils.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Utility functions for checking properties of trace objects
+*
+*/
+package com.nokia.tracecompiler.model;
+
+import java.util.Comparator;
+
+/**
+ * Utility functions for checking properties of trace objects.
+ * 
+ */
+public class TraceObjectUtils {
+
+	/**
+	 * Compares a trace to trace ID
+	 */
+	static Comparator<Object> traceToIDComparator = new Comparator<Object>() {
+
+		/**
+		 * Compares a trace to trace name
+		 * 
+		 * @param t1
+		 *            the trace
+		 * @param t2
+		 *            the trace name
+		 * @return the comparison result
+		 */
+		public int compare(Object t1, Object t2) {
+			int n1 = ((Trace) t1).getID();
+			int n2 = (Integer) t2;
+			return n1 > n2 ? 1 : n1 < n2 ? -1 : 0;
+		}
+
+	};
+
+	/**
+	 * Compares a trace to trace name
+	 */
+	static Comparator<Object> traceToNameComparator = new Comparator<Object>() {
+
+		/**
+		 * Compares a trace to trace name
+		 * 
+		 * @param t1
+		 *            the trace
+		 * @param t2
+		 *            the trace name
+		 * @return the comparison result
+		 */
+		public int compare(Object t1, Object t2) {
+			String n1 = ((Trace) t1).getName();
+			String n2 = (String) t2;
+			if (n1 == null) {
+				n1 = ""; //$NON-NLS-1$
+			}
+			if (n2 == null) {
+				n2 = ""; //$NON-NLS-1$
+			}
+			return n1.compareTo(n2);
+		}
+
+	};
+
+	/**
+	 * Compares a trace to trace text
+	 */
+	static Comparator<Object> traceToTextComparator = new Comparator<Object>() {
+
+		/**
+		 * Compares a trace to trace text
+		 * 
+		 * @param t1
+		 *            the trace
+		 * @param t2
+		 *            the trace text
+		 * @return the comparison result
+		 */
+		public int compare(Object t1, Object t2) {
+			String n1 = ((Trace) t1).getTrace();
+			String n2 = (String) t2;
+			if (n1 == null) {
+				n1 = ""; //$NON-NLS-1$
+			}
+			if (n2 == null) {
+				n2 = ""; //$NON-NLS-1$
+			}
+			return n1.compareTo(n2);
+		}
+
+	};
+
+	/**
+	 * Compares trace objects by ID
+	 */
+	static Comparator<TraceObject> traceObjectIDComparator = new Comparator<TraceObject>() {
+
+		/**
+		 * Compares ID's of trace objects
+		 * 
+		 * @param t1
+		 *            trace 1
+		 * @param t2
+		 *            trace 2
+		 * @return the comparison result
+		 */
+		public int compare(TraceObject t1, TraceObject t2) {
+			int n1 = t1.getID();
+			int n2 = t2.getID();
+			return n1 > n2 ? 1 : n1 < n2 ? -1 : 0;
+		}
+
+	};
+
+	/**
+	 * Compares trace objects by name
+	 */
+	static Comparator<TraceObject> traceObjectNameComparator = new Comparator<TraceObject>() {
+
+		/**
+		 * Compares names of trace objects
+		 * 
+		 * @param t1
+		 *            trace 1
+		 * @param t2
+		 *            trace 2
+		 * @return the comparison result
+		 */
+		public int compare(TraceObject t1, TraceObject t2) {
+			String n1 = t1.getName();
+			String n2 = t2.getName();
+			if (n1 == null) {
+				n1 = ""; //$NON-NLS-1$
+			}
+			if (n2 == null) {
+				n2 = ""; //$NON-NLS-1$
+			}
+			return n1.compareTo(n2);
+		}
+
+	};
+
+	/**
+	 * Prevents construction
+	 */
+	private TraceObjectUtils() {
+	}
+
+	/**
+	 * Checks if trace parameter name is already in use and changes if it is.
+	 * 
+	 * @param owner
+	 *            the owner of the parameter
+	 * @param name
+	 *            the parameter name
+	 * @return the modifier interface
+	 */
+	public static TraceObjectModifier modifyDuplicateParameterName(Trace owner,
+			String name) {
+		DuplicateParameterNameModifier modifier = new DuplicateParameterNameModifier(
+				owner, name);
+		modifier.processName();
+		return modifier;
+	}
+
+	/**
+	 * Gets the duplicate modifier from given text
+	 * 
+	 * @param text
+	 *            the text
+	 * @return the duplicate modifier
+	 */
+	public static String removeDuplicateModifier(String text) {
+		String retval;
+		String s = DuplicateValueModifier.getModifier(text);
+		if (s != null) {
+			retval = text.substring(s.length());
+		} else {
+			retval = text;
+		}
+		return retval;
+	}
+
+	/**
+	 * Finds a property from a trace object. This returns an empty string if not
+	 * found
+	 * 
+	 * @param object
+	 *            the object
+	 * @param name
+	 *            the property name
+	 * @return the property value
+	 */
+	public static String findProperty(TraceObject object, String name) {
+		String retval = null;
+		TraceObjectPropertyList propertyList = object
+				.getExtension(TraceObjectPropertyList.class);
+		if (propertyList != null) {
+			TraceObjectProperty property = propertyList.getProperty(name);
+			if (property != null) {
+				retval = property.getValue();
+			}
+		}
+		if (retval == null) {
+			retval = ""; //$NON-NLS-1$
+		}
+		return retval;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceParameter.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,249 @@
+/*
+* 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:
+*
+* All trace objects may contain parameters
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Traces may contain parameters
+ * 
+ */
+public class TraceParameter extends TraceObject {
+
+	/**
+	 * The type of this parameter
+	 */
+	private String type;
+
+	/**
+	 * Hexadecimal (%p), pointer type
+	 */
+	public static final String POINTER = "void*"; //$NON-NLS-1$
+	
+	/**
+	 * Signed decimal (%d), 32-bit type
+	 */
+	public static final String SDEC32 = "int32"; //$NON-NLS-1$
+
+	/**
+	 * Hexadecimal (%x), 32-bit type
+	 */
+	public static final String HEX32 = "hex32"; //$NON-NLS-1$
+
+	/**
+	 * Unsigned decimal (%u), 32-bit type
+	 */
+	public static final String UDEC32 = "uint32"; //$NON-NLS-1$
+	
+	/**
+	 * Octal (%o), 32-bit type
+	 */
+	public static final String OCT32 = "oct32"; //$NON-NLS-1$	
+
+	/**
+	 * Signed decimal (%hd), 16-bit type
+	 */
+	public static final String SDEC16 = "int16"; //$NON-NLS-1$
+
+	/**
+	 * Hexadecimal (%hx), 16-bit type
+	 */
+	public static final String HEX16 = "hex16"; //$NON-NLS-1$
+
+	/**
+	 * Unsigned decimal (%hu), 16-bit type
+	 */
+	public static final String UDEC16 = "uint16"; //$NON-NLS-1$
+	
+	/**
+	 * Octal (%ho), 16-bit type
+	 */
+	public static final String OCT16 = "oct16"; //$NON-NLS-1$	
+
+	/**
+	 * Signed decimal (%hhd), 8-bit type
+	 */
+	public static final String SDEC8 = "int8"; //$NON-NLS-1$
+
+	/**
+	 * Hexadecimal (%hhx), 8-bit type
+	 */
+	public static final String HEX8 = "hex8"; //$NON-NLS-1$
+
+	/**
+	 * Unsigned decimal (%hhu), 8-bit type
+	 */
+	public static final String UDEC8 = "uint8"; //$NON-NLS-1$
+	
+	/**
+	 * Octal (%hho), 8-bit type
+	 */
+	public static final String OCT8 = "oct8"; //$NON-NLS-1$
+
+	/**
+	 * Signed decimal (%ld), 64-bit type
+	 */
+	public static final String SDEC64 = "int64"; //$NON-NLS-1$
+
+	/**
+	 * Time, 64-bit type
+	 */
+	public static final String TIME = "time"; //$NON-NLS-1$	
+	
+	/**
+	 * Hexadecimal (%lx), 64-bit type
+	 */
+	public static final String HEX64 = "hex64"; //$NON-NLS-1$
+
+	/**
+	 * Unsigned decimal (%lu), 64-bit type
+	 */
+	public static final String UDEC64 = "uint64"; //$NON-NLS-1$
+	
+	/**
+	 * Octal (%lo), 64-bit type
+	 */
+	public static final String OCT64 = "oct64"; //$NON-NLS-1$	
+
+	/**
+	 * Ascii string (%s) type
+	 */
+	public static final String ASCII = "ascii"; //$NON-NLS-1$
+
+	/**
+	 * Unicode string (%S) type
+	 */
+	public static final String UNICODE = "unicode"; //$NON-NLS-1$
+
+	/**
+	 * Fixed floating point (%f), 64-bit
+	 */
+	public static final String FLOAT_FIX = "ffix"; //$NON-NLS-1$
+
+	/**
+	 * Exponent floating point (%e), 64-bit
+	 */
+	public static final String FLOAT_EXP = "fexp"; //$NON-NLS-1$
+
+	/**
+	 * Fixed / exponential floating point (%g), 64-bit
+	 */
+	public static final String FLOAT_OPT = "fopt"; //$NON-NLS-1$
+
+	/**
+	 * The trace this parameter belongs to
+	 */
+	private Trace owner;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param owner
+	 *            the object owning this parameter
+	 */
+	public TraceParameter(Trace owner) {
+		setModel(owner.getModel());
+		owner.addParameter(this);
+		this.owner = owner;
+	}
+
+	/**
+	 * Constructor, which inserts the parameter into specified index
+	 * 
+	 * @param owner
+	 *            the object owning this parameter
+	 * @param index
+	 *            the parameter index
+	 */
+	TraceParameter(Trace owner, int index) {
+		setModel(owner.getModel());
+		owner.insertParameter(index, this);
+		this.owner = owner;
+	}
+
+	/**
+	 * Gets the trace this parameter is associated to.
+	 * 
+	 * @return the trace
+	 */
+	public Trace getTrace() {
+		return owner;
+	}
+
+	/**
+	 * Sets the parameter type. Generates propertyUpdated event to model
+	 * listeners if type changes
+	 * 
+	 * @see TraceModelListener#propertyUpdated(TraceObject, int)
+	 * @param type
+	 *            the parameter type
+	 * @throws TraceCompilerException 
+	 */
+	public void setType(String type) throws TraceCompilerException {
+		if (!type.equals(this.type)) {
+			removeTableReference();
+			this.type = type;
+			addTableReference();
+			getModel().notifyPropertyUpdated(this, TraceModelListener.TYPE);
+		}
+	}
+
+	/**
+	 * Gets the parameter type
+	 * 
+	 * @return the parameter type
+	 */
+	public String getType() {
+		return type;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceObject#reset()
+	 */
+	@Override
+	void reset() {
+		removeTableReference();
+		super.reset();
+	}
+
+	/**
+	 * Adds a constant table reference
+	 */
+	private void addTableReference() {
+		if (type != null) {
+			TraceConstantTable table = getModel().findConstantTableByName(type);
+			if (table != null) {
+				table.addParameterReference(this);
+			}
+		}
+	}
+
+	/**
+	 * Removes the constant table reference
+	 */
+	private void removeTableReference() {
+		if (type != null) {
+			TraceConstantTable table = getModel().findConstantTableByName(type);
+			if (table != null) {
+				table.removeParameterReference(this);
+			}
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceProcessingListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Multi-update optimization
+*
+*/
+package com.nokia.tracecompiler.model;
+
+/**
+ * Callback interface which should be notified when performing multiple updates
+ * to the trace model. The implementation of TraceModelListener can also
+ * implement this interface to avoid performing unnecessary updates.
+ * 
+ */
+public interface TraceProcessingListener {
+
+	/**
+	 * Called when a sequence of trace model updates is about to start
+	 */
+	public void processingStarted();
+
+	/**
+	 * Called when a sequence of trace model updates has finished
+	 * 
+	 * @param changed
+	 *            true if the model was changed while processing, false if not
+	 */
+	public void processingComplete(boolean changed);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Contains the model of TraceCompiler.
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+TraceCompiler implementation.
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceAPIFormatter.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Trace API formatter plug-in
+*
+*/
+package com.nokia.tracecompiler.plugin;
+
+/**
+ * Trace API formatter plug-in
+ * 
+ */
+public interface TraceAPIFormatter {
+
+	/**
+	 * Formatting types for traces
+	 */
+	public enum TraceFormatType {
+
+		/**
+		 * Format for extension function header
+		 */
+		HEADER,
+
+		/**
+		 * Format for trace buffer function. Added to extension function
+		 * definition if trace contains more data than is supported by the API
+		 */
+		TRACE_BUFFER,
+
+		/**
+		 * Format for trace function if the extension function parameters can be
+		 * packed into normal trace API call. For example, if the extension
+		 * function takes 4 8-bit arguments, they are packed into a single
+		 * 32-bit parameter
+		 */
+		TRACE_PACKED,
+
+		/**
+		 * Format for trace activation check function. Added to extension
+		 * function definition
+		 */
+		TRACE_ACTIVATION,
+
+		/**
+		 * Empty declaration for an extension function header
+		 */
+		EMPTY_MACRO
+	}
+
+	/**
+	 * Gets the name of this formatter
+	 * 
+	 * @return the name
+	 */
+	public String getName();
+
+	/**
+	 * Gets the title shown in the API selection preferences dialog
+	 * 
+	 * @return the title
+	 */
+	public String getTitle();
+
+	/**
+	 * Gets the trace format based on format type
+	 * 
+	 * @param type
+	 *            the format type
+	 * @return the trace format
+	 */
+	public String getTraceFormat(TraceFormatType type);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceAPIParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Trace API parser plug-in
+*
+*/
+package com.nokia.tracecompiler.plugin;
+
+import com.nokia.tracecompiler.engine.TraceLocation;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+
+/**
+ * Trace API parser plug-in
+ * 
+ */
+public interface TraceAPIParser {
+
+	/**
+	 * Gets the tag to be located from source
+	 * 
+	 * @return the tag
+	 */
+	public String getSourceTag();
+
+	/**
+	 * Gets the list of suffixes that are allowed with the source tag
+	 * 
+	 * @return the suffixes
+	 */
+	public String[] getTagSuffixes();
+
+	/**
+	 * Verifies the validity of given location
+	 * 
+	 * @param location
+	 *            the location to be checked
+	 * @return error code from TraceCompilerErrorCodes
+	 */
+	public TraceCompilerErrorCode checkLocationValidity(TraceLocation location);
+
+	/**
+	 * Gets the name of the group where locations created by this parser belong
+	 * 
+	 * @return the location group
+	 */
+	public String getLocationGroup();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceAPIPlugin.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Plug-in which provides trace API extensions
+*
+*/
+package com.nokia.tracecompiler.plugin;
+
+/**
+ * Plug-in which provides trace API extensions
+ * 
+ */
+public interface TraceAPIPlugin extends TraceCompilerPlugin {
+
+	/**
+	 * Gets the list of trace API formatters
+	 * 
+	 * @return the formatters
+	 */
+	public TraceAPIFormatter[] getFormatters();
+
+	/**
+	 * Gets the list of trace API parsers
+	 * 
+	 * @return the parsers
+	 */
+	public TraceAPIParser[] getParsers();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceCompilerExport.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Export plug-in interface for trace projects
+*
+*/
+package com.nokia.tracecompiler.plugin;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+/**
+ * Export plug-in interface for trace projects.
+ * 
+ */
+public interface TraceCompilerExport extends TraceCompilerPlugin {
+
+	/**
+	 * Exports the trace project. This is called when the user selects the
+	 * export action from the menu
+	 * 
+	 * @throws TraceCompilerException
+	 *             if export fails
+	 */
+	public void exportTraceProject() throws TraceCompilerException;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceCompilerPlugin.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2007 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:
+*
+* TraceCompiler plug-in interface
+*
+*/
+package com.nokia.tracecompiler.plugin;
+
+import com.nokia.tracecompiler.model.TraceModel;
+
+/**
+ * TraceCompiler plug-in interface
+ * 
+ */
+public interface TraceCompilerPlugin {
+
+	/**
+	 * Notification that the trace project has been opened. Provides the model
+	 * to this plug-in. The model is not changed until closeTraceProject and
+	 * thus no null-checks are needed.
+	 * 
+	 * @param model
+	 *            the trace model
+	 */
+	public void traceProjectOpened(TraceModel model);
+
+	/**
+	 * Notification that the trace project has been closed
+	 */
+	public void traceProjectClosed();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceFormatConstants.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,123 @@
+/*
+ * 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:
+ *
+ * Formatting constants for traces
+ *
+ */
+package com.nokia.tracecompiler.plugin;
+
+/**
+ * Formatting constants for traces
+ * 
+ */
+public interface TraceFormatConstants {
+
+	/**
+	 * Function name in upper case
+	 */
+	String FORMAT_FUNCTION_NAME_UPPER_CASE = "{$FN}"; //$NON-NLS-1$
+
+	/**
+	 * Function name in normal case
+	 */
+	String FORMAT_FUNCTION_NAME_NORMAL_CASE = "{$fn}"; //$NON-NLS-1$
+
+	/**
+	 * Class name in upper case
+	 */
+	String FORMAT_CLASS_NAME_UPPER_CASE = "{$CN}"; //$NON-NLS-1$
+
+	/**
+	 * Class name in normal case
+	 */
+	String FORMAT_CLASS_NAME_NORMAL_CASE = "{$cn}"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced by trace text when inserting a trace to source
+	 */
+	String FORMATTED_TRACE = "%FORMATTED_TRACE%"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced by parameters when inserting a trace to source
+	 */
+	String PARAMETERS_FORMAT = "%PARAMETERS%"; //$NON-NLS-1$
+
+	/**
+	 * Insert format for include header
+	 */
+	String INCLUDE_FORMAT = "%INCLUDE%"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced by parameter count when inserting a trace to source
+	 */
+	String PARAM_COUNT_FORMAT = "%PC%"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced by group name when inserting a trace to source
+	 */
+	String GROUP_FORMAT = "%GROUP%"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced by trace name when inserting a trace to source
+	 */
+	String NAME_FORMAT = "%NAME%"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced by state machine name when inserting a trace to
+	 * source
+	 */
+	String STATE_MACHINE_NAME_FORMAT = "%STATE_MACHINE_NAME%"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced by state machine state when inserting a trace to
+	 * source
+	 */
+	String STATE_MACHINE_STATE_FORMAT = "%STATE_MACHINE_STATE%"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced by event name when inserting a trace to source
+	 */
+	String EVENT_NAME_FORMAT = "%EVENT_NAME%"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced by event start trace name when inserting a trace to
+	 * source
+	 */
+	String EVENT_START_TRACE_NAME_FORMAT = "%EVENT_START_TRACE_NAME%"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced by trace text when inserting a trace to source
+	 */
+	String TEXT_FORMAT = "%TEXT%"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced with the data buffer pointer when formatting
+	 * complex traces into the trace header
+	 */
+	String DATA_BUFFER_FORMAT = "%DATA%"; //$NON-NLS-1$
+
+	/**
+	 * Tag which is replaced with the data buffer length when formatting complex
+	 * traces into the trace header
+	 */
+	String DATA_LENGTH_FORMAT = "%LENGTH%"; //$NON-NLS-1$
+
+	/**
+	 * Comment format which needs to be used. Otherwise the comment before /
+	 * after trace configuration will not work
+	 */
+	String COMMENT_FORMAT = " //"; //$NON-NLS-1$
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/TraceHeaderContribution.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Trace header contribution
+*
+*/
+package com.nokia.tracecompiler.plugin;
+
+import com.nokia.tracecompiler.model.TraceModelExtension;
+
+/**
+ * Interface which can be added to model by plug-in's to contribute data to the
+ * trace header
+ * 
+ */
+public interface TraceHeaderContribution extends TraceModelExtension {
+
+	/**
+	 * List of possible contributions to the trace header file
+	 */
+	public enum TraceHeaderContributionType {
+
+		/**
+		 * #define statements to be added to the header
+		 */
+		GLOBAL_DEFINES,
+
+		/**
+		 * #include statements to be added to the header
+		 */
+		GLOBAL_INCLUDES,
+
+		/**
+		 * Content for the main header file
+		 */
+		MAIN_HEADER_CONTENT
+
+	}
+
+	/**
+	 * Gets data to be added to the trace header
+	 * 
+	 * @param type
+	 *            the contribution type
+	 * @return the data to be added, depends on type
+	 */
+	public String[] getContribution(TraceHeaderContributionType type);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/plugin/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Interfaces for TraceCompiler plug-ins
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/FormattingUtils.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Utilities for trace formatting
+*
+*/
+package com.nokia.tracecompiler.project;
+
+//import java.util.*;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceGroup;
+import com.nokia.tracecompiler.model.TraceModel;
+
+
+/**
+ * Utilities for trace formatting
+ * 
+ */
+public final class FormattingUtils {
+
+	/**
+	 * Separator for prefix
+	 */
+	private static final String PREFIX_SEPARATOR = ": "; //$NON-NLS-1$
+
+	/**
+	 * Gets a group ID based on group name
+	 * 
+	 * @param model
+	 *            the trace model
+	 * @param name
+	 *            the group name
+	 * @return the group ID
+	 * @throws TraceCompilerException
+	 */
+	public static int getGroupID(TraceModel model, String name)
+			throws TraceCompilerException {
+
+		// First check that is group one of the default groups
+		int retval = GroupNames.getIdByName(name);
+		// If group was not one of the default groups then get next group Id from model
+		if (retval == 0) {
+			retval = model.getNextGroupID();
+			if (retval < GroupNames.USER_GROUP_ID_FIRST) {
+				retval = GroupNames.USER_GROUP_ID_FIRST;
+			}
+			else if(retval > GroupNames.USER_GROUP_ID_LAST){
+				String msg = "You have exceeded the number of Group IDs you have allocated."; //$NON-NLS-1$
+				TraceCompilerEngineGlobals.getEvents().postErrorMessage(msg, null, true);
+				throw new TraceCompilerException(
+						TraceCompilerErrorCode.RUN_OUT_OF_GROUP_IDS);		
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets the default component prefix
+	 * 
+	 * @param model
+	 *            the model
+	 * @return the prefix
+	 */
+	public static String getDefaultComponentPrefix(TraceModel model) {
+		return model.getName() + PREFIX_SEPARATOR;
+	}
+
+	/**
+	 * Gets the default component suffix
+	 * 
+	 * @param model
+	 *            the model
+	 * @return the suffix
+	 */
+	public static String getDefaultComponentSuffix(TraceModel model) {
+		return ""; //$NON-NLS-1$
+	}
+
+	/**
+	 * Gets the default group prefix
+	 * 
+	 * @param group
+	 *            the group
+	 * @return the prefix
+	 */
+	public static String getDefaultGroupPrefix(TraceGroup group) {
+		String name = group.getName();
+		if (name.startsWith(GroupNames.DEFAULT_GROUP_PREFIX)) {
+			int start = GroupNames.DEFAULT_GROUP_PREFIX.length();
+			// First character retains case, others are converted to lower case
+			name = name.charAt(start) + name.substring(start + 1).toLowerCase();
+		}
+		name += PREFIX_SEPARATOR;
+		return name;
+	}
+
+	/**
+	 * Gets the default group suffix
+	 * 
+	 * @param group
+	 *            the group
+	 * @return the suffix
+	 */
+	public static String getDefaultGroupSuffix(TraceGroup group) {
+		return ""; //$NON-NLS-1$
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/GroupNameIdPair.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ * Class that include group name and id pair
+ *
+ */
+package com.nokia.tracecompiler.project;
+
+public class GroupNameIdPair {
+
+	// class associates a group name with an integer id
+	String name;
+	int id;
+
+	/**
+	 * Conctructor
+	 * 
+	 * @param name
+	 *            name of the group
+	 * @param id
+	 *            id of the group
+	 */
+	public GroupNameIdPair(String name, int id) {
+		if (name == null) {
+			this.name = ""; //$NON-NLS-1$
+			this.id = -1; // TODO - what is appropriate value here ?
+		} else {
+			this.name = name;
+			this.id = id;
+		}
+	}
+
+	/**
+	 * Get ID
+	 * 
+	 * @return id of the group
+	 */
+	public int Id() {
+		return this.id;
+	}
+
+	/**
+	 * Get name
+	 * 
+	 * @return name of the group
+	 */
+	public String Name() {
+		return this.name;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/GroupNames.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,291 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ * Default names for trace groups
+ *
+ */
+package com.nokia.tracecompiler.project;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import com.nokia.tracecompiler.TraceCompilerLogger;
+import com.nokia.tracecompiler.TraceCompilerRootException;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+/**
+ * Default names for trace groups
+ * 
+ */
+public class GroupNames {
+
+	public static Vector<GroupNameIdPair> DEFAULT_GROUPS;
+
+	/**
+	 * epoc32 directory
+	 */
+	private static final String EPOC32_DIRECTORY = "epoc32"; //$NON-NLS-1$	
+	
+	/**
+	 * Start of user-defined groups
+	 */
+	public static int USER_GROUP_ID_FIRST = -1;
+
+	/**
+	 * end of user-defined groups
+	 */
+	public static int USER_GROUP_ID_LAST = -1;
+
+	/**
+	 * Constant to be used for EPOCROOT
+	 */
+	public static String EPOCROOT = "EPOCROOT"; //$NON-NLS-1$
+
+	/**
+	 * Constant to be used for the location of opensystemtrace_types.h
+	 */
+	public static String OST_TYPES = "epoc32" + File.separator + "include" + File.separator + "platform" + File.separator + "opensystemtrace_types.h"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+
+	/**
+	 * Prefix for all default groups
+	 */
+	public static String DEFAULT_GROUP_PREFIX = "TRACE_"; //$NON-NLS-1$
+
+	/**
+	 * TRACE_BORDER group name
+	 */
+	public static final String TRACE_BORDER = "TRACE_BORDER"; //$NON-NLS-1$
+
+	/**
+	 * TRACE_API group name
+	 */
+	public static final String TRACE_API = "TRACE_API"; //$NON-NLS-1$
+
+	/**
+	 * TRACE_DUMP group name
+	 */
+	public static final String TRACE_DUMP = "TRACE_DUMP"; //$NON-NLS-1$
+
+	/**
+	 * TRACE_DEBUG group name
+	 */
+	public static final String TRACE_DEBUG = "TRACE_DEBUG"; //$NON-NLS-1$
+
+	/**
+	 * TRACE_DETAILED group name
+	 */
+	public static final String TRACE_DETAILED = "TRACE_DETAILED"; //$NON-NLS-1$
+
+	/**
+	 * TRACE_INTERNALS group name
+	 */
+	public static final String TRACE_INTERNALS = "TRACE_INTERNALS"; //$NON-NLS-1$
+
+	/**
+	 * Calculates location of opensystemtrace_types.h Calls getGroupName Returns
+	 * false if there have been any errors
+	 * 
+	 * @throws TraceCompilerRootException
+	 */
+	public static void initialiseGroupName() throws TraceCompilerRootException {
+
+		String e32 = System.getenv(EPOCROOT);
+		TraceCompilerLogger.printInfo(e32);
+		if (e32 == null || (e32.length() == 0)) {
+			String msg = Messages.getString("GroupNames.0"); //$NON-NLS-1$
+			throw new TraceCompilerRootException(msg, null);
+		}
+
+		// need to check that e32 ends in a file separator
+		if (!e32.endsWith(File.separator)) {
+			TraceCompilerLogger.printInfo(Messages.getString("GroupNames.2")); //$NON-NLS-1$
+			e32 += File.separator;
+		}
+
+		// Check that EPOCROOT is valid
+		File epocRoot = new File(e32 + EPOC32_DIRECTORY);
+		if (epocRoot.exists() == false) {
+			throw new TraceCompilerRootException(Messages.getString("GroupNames.invalidEpocRoot"), null); //$NON-NLS-1$
+		}
+		
+		// tests parsing the opensystemtrace_types.h for expected values
+		String ostHeaderFilename = e32 + OST_TYPES;
+
+		// add the predefined names / ids
+		// this was changed from the previous mechanism to break array indexing
+		// dependency
+		// for linking group names to group ids
+		DEFAULT_GROUPS = new Vector<GroupNameIdPair>();
+
+		// The testing ranges are being hardcoded as the values are linked to
+		// e32btrace.h
+		// The TC would have to be redesigned to read in the values from this
+		// file, which would impact performance
+
+		DEFAULT_GROUPS.add(new GroupNameIdPair("TRACE_TESTING1", 254)); //$NON-NLS-1$
+		TraceCompilerLogger.printInfo(Messages.getString("GroupNames.1")); //$NON-NLS-1$
+		DEFAULT_GROUPS.add(new GroupNameIdPair("TRACE_TESTING2", 255)); //$NON-NLS-1$
+		TraceCompilerLogger.printInfo(Messages.getString("GroupNames.3")); //$NON-NLS-1$
+		try {
+			getGroupName(ostHeaderFilename);
+		} catch (Exception e) {
+			throw new TraceCompilerRootException(
+					Messages.getString("GroupNames.failedToProcessOstHeaderText"), e); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Reads opensystemtrace_types.h and extracts the GroupIds
+	 * 
+	 * @throws IOException
+	 *             if fail to read the header file
+	 * @throws TraceCompilerException
+	 */
+
+	private static void getGroupName(String headerFilename) throws Exception {
+		// TODO this method is buggy as it could process group ids even if there
+		// are commented out
+		// should use regular expression or better parser.
+
+		TraceCompilerLogger
+				.printInfo(Messages.getString("GroupNames.8") + headerFilename); //$NON-NLS-1$
+
+		BufferedReader in = new BufferedReader(new FileReader(headerFilename));
+		try {
+			String str;
+			while ((str = in.readLine()) != null) {
+				if (str.length() != 0) {
+					if (((str.indexOf("EUserDefinedRangeFirst")) != -1) && (USER_GROUP_ID_FIRST == -1)) { //$NON-NLS-1$
+						int val = getGroupIdFromString(str);
+						if (val != -1) {
+							// set user group id first
+							USER_GROUP_ID_FIRST = val;
+							TraceCompilerLogger.printInfo(Messages
+									.getString("GroupNames.4") + val); //$NON-NLS-1$
+						}
+					}
+
+					if (((str.indexOf("EUserDefinedRangeLast")) != -1) && (USER_GROUP_ID_LAST == -1)) { //$NON-NLS-1$
+						int val = getGroupIdFromString(str);
+						if (val != -1) {
+							// set user group id last
+							USER_GROUP_ID_LAST = val;
+							TraceCompilerLogger.printInfo(Messages
+									.getString("GroupNames.12") + val); //$NON-NLS-1$
+						}
+					}
+
+					if ((str.indexOf("enum TGroupIdReserved")) != -1) { //$NON-NLS-1$
+						// search for reserved
+						while ((str.indexOf("};") < 1) && (str.indexOf("} ;") < 1)) { //$NON-NLS-1$//$NON-NLS-2$
+
+							str = in.readLine();
+							if (((str.indexOf("=")) != -1) && ((str.indexOf("*")) < 1)) { //$NON-NLS-1$ //$NON-NLS-2$
+								String groupName = str.substring(0, (str
+										.indexOf("="))); //$NON-NLS-1$
+								groupName = groupName.trim();
+								String substr = str
+										.substring(
+												(str.indexOf("=")) + 1, (str.indexOf(','))); //$NON-NLS-1$
+								int groupId = -1;
+								String trim = substr.trim();
+								try {
+									groupId = Integer.parseInt(trim);
+								} catch (NumberFormatException e) {
+									// not an Int so could be a renaming
+									groupId = getIdByName(trim);
+									if (groupId == 0) {
+										TraceCompilerEngineGlobals
+												.getEvents()
+												.postErrorMessage(
+														Messages.getString("GroupNames.canNotresolveGroupIdPrefix") + trim, null, true); //$NON-NLS-1$
+										// not resolved to an existing name
+										throw new TraceCompilerException(null,
+												true);
+									}
+								}
+								DEFAULT_GROUPS.add(new GroupNameIdPair(
+										groupName, groupId));
+								TraceCompilerLogger.printInfo(groupName
+										+ " = " + groupId); //$NON-NLS-1$
+							}
+						}
+					}
+				}
+			}
+		} catch (Exception e) {
+			TraceCompilerEngineGlobals.getEvents().postErrorMessage(
+					e.getMessage(), null, true);
+			throw e;
+		} finally {
+			in.close();
+		}
+	}
+
+	/**
+	 * Reads opensystemtrace_types.h and extracts the GroupIds value from a
+	 * string containing GroupId name and value. 
+	 * Returns GroupId value, returns -1 if not found or resolved in case of group renaming
+	 */
+
+	private static int getGroupIdFromString(String str) {
+		int groupId = -1;
+		if ((str.indexOf("=")) != -1) { //$NON-NLS-1$
+			String substr = str.substring(
+					(str.indexOf("=")) + 1, (str.indexOf(','))); //$NON-NLS-1$
+
+			try {
+				// try to read the id from the header file
+				groupId = Integer.parseInt(substr.trim());
+			} catch (NumberFormatException e) {
+				// it's probably a rename, so get the id for the old name if
+				// there is one
+				groupId = getIdByName(substr.trim());
+				if (groupId == 0) {
+					// return -1 because we could not resolve it
+					groupId = -1;
+				}
+			}
+		}
+		return groupId;
+	}
+
+	/**
+	 * Searches all known GroupIds for name and then returns value. 
+	 * Returns GroupId value, 0 if not found in DEFAULT_GROUPS
+	 */
+
+	public static int getIdByName(String name) {
+		TraceCompilerLogger
+				.printInfo(Messages.getString("GroupNames.23") + name); //$NON-NLS-1$
+		for (Enumeration<GroupNameIdPair> e = GroupNames.DEFAULT_GROUPS
+				.elements(); e.hasMoreElements();) {
+			GroupNameIdPair gnidp = e.nextElement();
+			if (name.equals(gnidp.Name())) {
+				TraceCompilerLogger.printInfo(Messages
+						.getString("GroupNames.24") + gnidp.Id()); //$NON-NLS-1$
+				return gnidp.Id();
+			}
+		}
+		// the caller should decide what to do with value 0
+		return 0;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/Messages.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Localized strings for project package
+*
+*/
+package com.nokia.tracecompiler.project;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Localized strings for project package
+ * 
+ */
+class Messages {
+
+	/**
+	 * Bundle name
+	 */
+	private static final String BUNDLE_NAME = "com.nokia.tracecompiler.project.messages"; //$NON-NLS-1$
+
+	/**
+	 * Bundle
+	 */
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Prevents construction
+	 */
+	private Messages() {
+	}
+
+	/**
+	 * Gets localized string based on key
+	 * 
+	 * @param key
+	 *            the resource key
+	 * @return the localized resource
+	 */
+	public static String getString(String key) {
+		String value;
+		try {
+			value = RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			value = '!' + key + '!';
+		}
+		return value;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/ProjectFileParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for project file parsers
+*
+*/
+package com.nokia.tracecompiler.project;
+
+import java.io.File;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.FileErrorParameters;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+
+/**
+ * Base class for project file parsers
+ * 
+ */
+public abstract class ProjectFileParser {
+
+	/**
+	 * Trace model
+	 */
+	protected TraceModel model;
+
+	/**
+	 * Project file to be parsed
+	 */
+	protected File projectFile;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param model
+	 *            the trace model
+	 * @param fileName
+	 *            the project file name
+	 * @throws TraceCompilerException
+	 *             if file does not exist
+	 */
+	protected ProjectFileParser(TraceModel model, String fileName)
+			throws TraceCompilerException {
+		File file = new File(fileName);
+		if (file.exists()) {
+			this.model = model;
+			this.projectFile = file;
+			createParser();
+		} else {
+			FileErrorParameters params = new FileErrorParameters();
+			params.file = fileName;
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.FILE_NOT_FOUND, params);
+		}
+	}
+
+	/**
+	 * Creates the file parser
+	 * 
+	 * @throws TraceCompilerException
+	 *             if creation fails
+	 */
+	protected abstract void createParser() throws TraceCompilerException;
+
+	/**
+	 * Parses the project file
+	 * 
+	 * @throws TraceCompilerException
+	 *             if parser fails
+	 */
+	public abstract void parse() throws TraceCompilerException;
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/ProjectUtils.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2010 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:
+*
+* Project file utilities
+*
+*/
+package com.nokia.tracecompiler.project;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.project.ProjectEngine;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.source.SymbianConstants;
+
+/**
+ * Project file utilities
+ *
+ */
+public final class ProjectUtils {
+
+
+	/**
+	 * Tries to locate existing file with given extension and if not found,
+	 * proposes a new location for that file. The new location will be
+	 * <i>createPath</i> or if that is null, the directory where the trace
+	 * project file (.tbprj) resides. Trace project must be open before this can
+	 * be called
+	 *
+	 * @param model
+	 *            the trace model
+	 * @param createPath
+	 *            the path to create if existing file is not found
+	 * @param fileName
+	 *            the name for the new file
+	 * @param appendProjectName
+	 *            true if the name is appended to end of model name
+	 * @return the project file path for the new file
+	 * @throws TraceCompilerException
+	 *             if the model does not have any project files
+	 */
+	public static String getLocationForFile(TraceModel model,
+			String createPath, String fileName, boolean appendProjectName)
+			throws TraceCompilerException {
+		TraceProjectFile projectFile = model
+				.getExtension(TraceProjectFile.class);
+		if (projectFile == null) {
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.MODEL_NOT_READY);
+		}
+		String projectName = ""; //$NON-NLS-1$
+		if (appendProjectName) {
+			projectName = projectFile.getProjectName();
+		}
+		return getLocationForFile(projectFile.getPath(), projectName,
+				createPath, fileName);
+	}
+
+	/**
+	 * Tries to locate existing file with given extension and if not found,
+	 * proposes a new location for that file. The new location will be
+	 * <i>createPath</i> or if that is null, the directory where the trace
+	 * project file resides. Trace project must be open before this can
+	 * be called
+	 *
+	 * @param projectPath
+	 *            path to the project
+	 * @param projectName
+	 *            name of the project
+	 * @param createPath
+	 *            the path to create if existing file is not found
+	 * @param extension
+	 *            the file extension for the new file
+	 * @return the project file path for the new file
+	 */
+	public static String getLocationForFile(String projectPath,
+			String projectName, String createPath, String extension) {
+		ArrayList<String> searchPaths = new ArrayList<String>();
+		if (createPath != null && createPath.length() > 0) {
+			// If create path is explicitly specified, it is added to the search
+			// path list
+			searchPaths.add(createPath);
+		}
+		// Default directories are always included into search
+		searchPaths.add(ProjectEngine.traceFolderName);
+		searchPaths.add(SymbianConstants.GROUP_DIRECTORY);
+		searchPaths.add(SymbianConstants.INCLUDE_DIRECTORY);
+		String[] pathArr = new String[searchPaths.size()];
+		searchPaths.toArray(pathArr);
+		return getLocationForFile(projectPath, projectName, pathArr,
+				createPath, extension);
+	}
+
+	/**
+	 * Tries to locate existing file and if not found, proposes a new location
+	 * for that file. The search starts from <i>projectPath</i>. If
+	 * <i>checkParents</i> is true, the parent directories are also checked if
+	 * the file is not found
+	 *
+	 * @param projectPath
+	 *            path where to start the search
+	 * @param projectName
+	 *            the name of the project
+	 * @param searchPaths
+	 *            the sub-paths to be searched
+	 * @param createPath
+	 *            the sub-path to create if file is not found
+	 * @param fileName
+	 *            extension of the file to be located
+	 * @return the project file path for the new file
+	 */
+	private static String getLocationForFile(String projectPath,
+			String projectName, String[] searchPaths, String createPath,
+			String fileName) {
+		// If the project file is in one of the search paths, the path is
+		// changed to its parent
+		File projectPathFile = new File(projectPath);
+		String projectPathName = projectPathFile.getName();
+		for (int i = 0; i < searchPaths.length; i++) {
+			if (searchPaths[i].equals(projectPathName)) {
+				projectPath = projectPathFile.getParent();
+				i = searchPaths.length;
+			}
+		}
+		// Tries to find an existing file based on project path and project name
+		String filePath = findProjectFile(projectPath, projectName,
+				searchPaths, fileName, false);
+		if (filePath == null) {
+			// If file is not found, this returns a new path
+			filePath = projectPath + File.separator + createPath
+					+ File.separator + projectName + fileName;
+		}
+		return filePath;
+	}
+
+	/**
+	 * Finds a project file or directory based on a file or directory
+	 *
+	 * @param startPath
+	 *            the file name or path where to start search
+	 * @param projectName
+	 *            the name of the project file
+	 * @param searchDirectories
+	 *            the directories to search
+	 * @param fileExtension
+	 *            the file extension to be located or null if locating one of
+	 *            the search directories
+	 * @param checkParents
+	 *            true if parent directories should be checked
+	 * @return the file or directory path if found or null if not
+	 */
+	private static String findProjectFile(String startPath, String projectName,
+			String[] searchDirectories, String fileExtension,
+			boolean checkParents) {
+		String foundFile = null;
+		if (startPath != null) {
+			File file = new File(startPath);
+			if (!file.isDirectory()) {
+				file = file.getParentFile();
+			}
+			if (file != null) {
+				do {
+					for (int i = 0; i < searchDirectories.length
+							&& foundFile == null; i++) {
+						foundFile = findProjectFile(searchDirectories[i],
+								projectName, fileExtension, file);
+					}
+					file = file.getParentFile();
+				} while (file != null && foundFile == null && checkParents);
+			}
+		}
+		return foundFile;
+	}
+
+	/**
+	 * Searches a single directory for a project file
+	 *
+	 * @param searchDirectory
+	 *            the directory to search
+	 * @param fileExtension
+	 *            the file extension to be located or null if locating one of
+	 *            the search directories
+	 * @param projectName
+	 *            the name of the project file
+	 * @param file
+	 *            the current file
+	 * @return the file or directory path if found or null if not
+	 */
+	private static String findProjectFile(String searchDirectory,
+			String projectName, String fileExtension, File file) {
+		String foundFile = null;
+		File projectPath = new File(file.getAbsolutePath() + File.separator
+				+ searchDirectory + File.separator);
+		if (projectPath.exists()) {
+			if (fileExtension == null) {
+				foundFile = projectPath.getAbsolutePath();
+			} else {
+				foundFile = findProjectFileFromDirectory(projectPath,
+					projectName, fileExtension);
+			}
+		}
+		return foundFile;
+	}
+
+	/**
+	 * Gets the first file with given extension from given directory
+	 *
+	 * @param path
+	 *            the path to search
+	 * @param projectName
+	 *            the name of the project file
+	 * @param fileExtension
+	 *            the file extension
+	 * @return the file name if found or null if not
+	 */
+	private static String findProjectFileFromDirectory(File path,
+			String projectName, String fileExtension) {
+		String proposal = null;
+		File[] files = path.listFiles();
+		if (projectName != null) {
+			// If project name is specified, only the file that matches the name
+			// is returned
+			String nameFromProjectFile = projectName + fileExtension;
+
+			// Check does user have access rights to the traces folder
+			if (path.canWrite() == false) {
+				TraceCompilerEngineGlobals
+						.getEvents()
+						.postErrorMessage(
+								Messages
+										.getString("ProjectUtils.accesRightErrorText"), null, true); //$NON-NLS-1$
+				System.exit(1);
+			}
+			
+			for (int i = 0; i < files.length && proposal == null; i++) {
+				String fname = files[i].getName();
+				if (fname.equals(nameFromProjectFile)) {
+					proposal = files[i].getAbsolutePath();
+				}
+			}
+		} else {
+			// If project name is not specified, this proposes the first file
+			// which ends with the file extension
+			for (int i = 0; i < files.length && proposal == null; i++) {
+				String fname = files[i].getName();
+				if (fname.length() > fileExtension.length()) {
+					int extstart = fname.length() - fileExtension.length();
+					if (fname.substring(extstart).equals(fileExtension)) {
+						proposal = files[i].getAbsolutePath();
+					}
+				}
+			}
+		}
+		return proposal;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/PropertyNames.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* List of supported property names
+*
+*/
+package com.nokia.tracecompiler.project;
+
+/**
+ * List of supported property names
+ * 
+ */
+public interface PropertyNames {
+
+	/**
+	 * Group / component prefix
+	 */
+	public String PREFIX = "prefix"; //$NON-NLS-1$
+
+	/**
+	 * Group / component suffix
+	 */
+	public String SUFFIX = "suffix"; //$NON-NLS-1$
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/TraceLocationParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Interface to location parser
+*
+*/
+package com.nokia.tracecompiler.project;
+
+import com.nokia.tracecompiler.engine.TraceLocation;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.engine.source.SourceParserRule.TraceConversionResult;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.source.SourceExcludedArea;
+
+/**
+ * Interface to location parser. The parser is implemented into the project API
+ * 
+ */
+public interface TraceLocationParser {
+
+	/**
+	 * Processes a newly parsed location. The location has not yet been
+	 * associated with a trace.
+	 * 
+	 * @param location
+	 *            the new location
+	 */
+	public void processNewLocation(TraceLocation location);
+
+	/**
+	 * Gets the group where locations created by this parser belong
+	 * 
+	 * @return the location group
+	 */
+	public String getLocationGroup();
+
+	/**
+	 * Converts a location to trace
+	 * 
+	 * @param location
+	 *            the location to be parsed
+	 * @return properties for new trace
+	 * @throws TraceCompilerException
+	 *             if the location cannot be converted
+	 */
+	public TraceConversionResult convertLocation(TraceLocation location)
+			throws TraceCompilerException;
+
+	/**
+	 * Finds the comment related to given location
+	 * 
+	 * @param location
+	 *            the location to be checked
+	 * @return the comment related to the location or null if not found
+	 */
+	public SourceExcludedArea findLocationComment(TraceLocation location);
+
+	/**
+	 * Determines if a location parsed from source should be automatically
+	 * converted to a trace. This is called only if
+	 * isLocationAutoConvertSupported has returned true
+	 * 
+	 * @param location
+	 *            the location to be checked
+	 * 
+	 * @return true if automatically converted, false if not
+	 */
+	public boolean isLocationConverted(TraceLocation location);
+
+	/**
+	 * Checks if a location matches its trace
+	 * 
+	 * @param location
+	 *            the location to be checked
+	 * @return error code from TraceCompilerErrorCodes
+	 */
+	public TraceCompilerErrorCode checkLocationValidity(TraceLocation location);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/TraceProjectAPI.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Interface to the properties of the trace API used by the currently open trace project
+*
+*/
+package com.nokia.tracecompiler.project;
+
+import com.nokia.tracecompiler.model.Trace;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+
+/**
+ * Interface to the properties of the trace API used by the currently open trace
+ * project
+ * 
+ */
+public interface TraceProjectAPI extends TraceModelExtension {
+
+	/**
+	 * Formatting flags for formatTraceForExport
+	 */
+	public class TraceFormatFlags {
+
+		/**
+		 * Formatting characters supported flag
+		 */
+		public boolean isFormattingSupported;
+	}
+
+	/**
+	 * Gets the name of this API
+	 * 
+	 * @return the name
+	 */
+	public String getName();
+
+	/**
+	 * Formats a trace for into a string suitable for export
+	 * 
+	 * @param trace
+	 *            the trace to be formatted
+	 * @param flags
+	 *            the formatting flags
+	 * @return the formatted text
+	 */
+	public String formatTraceForExport(Trace trace, TraceFormatFlags flags);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/TraceProjectAPIList.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Interface to the list of trace project API's registered to TraceCompiler
+*
+*/
+package com.nokia.tracecompiler.project;
+
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.model.TraceModelExtension;
+
+/**
+ * Interface to the list of trace project API's registered to TraceCompiler
+ * 
+ */
+public interface TraceProjectAPIList extends TraceModelExtension {
+
+	/**
+	 * Gets the list of API's
+	 * 
+	 * @return the list
+	 */
+	public Iterator<TraceProjectAPI> getAPIs();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/TraceProjectFile.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Generic trace project file properties
+*
+*/
+package com.nokia.tracecompiler.project;
+
+import java.io.File;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.file.FileUtils;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceModelListener;
+import com.nokia.tracecompiler.model.TraceObject;
+import com.nokia.tracecompiler.source.SourceConstants;
+
+/**
+ * Generic trace project file properties
+ * 
+ */
+public abstract class TraceProjectFile implements TraceModelExtension,
+		TraceModelListener {
+
+	/**
+	 * The trace model
+	 */
+	private TraceModel owner;
+
+	/**
+	 * Name of the project file
+	 */
+	private String name;
+
+	/**
+	 * Project file path
+	 */
+	private String path;
+
+	/**
+	 * Project file name is based on model name and updated when model changes
+	 */
+	protected boolean hasModelName;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param path
+	 *            the path to the file
+	 * @param name
+	 *            the name of the project or empty if this file does not use the
+	 *            project name
+	 */
+	protected TraceProjectFile(String path, String name) {
+		this.path = path;
+		this.name = name;
+		if (name == null || name.length() == 0) {
+			this.hasModelName = false;
+		} else {
+			this.hasModelName = true;
+		}
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param absolutePath
+	 *            the absolute path to the file
+	 * @param hasModelName
+	 *            flag, which tells to update the project file name if model
+	 *            name changes
+	 */
+	protected TraceProjectFile(String absolutePath, boolean hasModelName) {
+		this.hasModelName = hasModelName;
+		updatePath(absolutePath);
+	}
+
+	/**
+	 * Gets the file extension of this project file
+	 * 
+	 * @return the extension
+	 */
+	protected abstract String getFileExtension();
+
+	/**
+	 * Gets the title to be shown in UI
+	 * 
+	 * @return the title
+	 */
+	public abstract String getTitle();
+
+	/**
+	 * Gets the name of the project
+	 * 
+	 * @return the project name
+	 */
+	public final String getProjectName() {
+		return name;
+	}
+
+	/**
+	 * Gets the path of this project file
+	 * 
+	 * @return the project file path
+	 */
+	public final String getPath() {
+		return path;
+	}
+
+	/**
+	 * Gets the name of this project file
+	 * 
+	 * @return the file name
+	 */
+	public final String getFileName() {
+		StringBuffer sb = new StringBuffer();
+		addFileName(sb, false);
+		return sb.toString();
+	}
+
+	/**
+	 * Checks if this file is valid
+	 * 
+	 * @return true if valid, false if not
+	 */
+	public boolean isValid() {
+		return path != null && name != null;
+	}
+
+	/**
+	 * Posts a project file written event
+	 * 
+	 * @param path
+	 *            the path where file was written
+	 */
+	public void postFileWrittenEvent(String path) {
+		String msg = Messages
+				.getString("TraceProjectFile.ProjectFileWrittenMiddle"); //$NON-NLS-1$
+		TraceCompilerEngineGlobals.getEvents().postInfoMessage(
+				getTitle() + msg + path, null);
+	}
+
+	/**
+	 * Updates the project file name and path
+	 * 
+	 * @param absolutePath
+	 *            the new path including the file name
+	 */
+	public void updatePath(String absolutePath) {
+		File file = new File(absolutePath);
+		path = file.getParent();
+		name = file.getName();
+		String ext = getFileExtension();
+		if (name.endsWith(ext)) {
+			name = name.substring(0, name.length() - ext.length());
+		}
+	}
+
+	/**
+	 * Gets the path including file name
+	 * 
+	 * @return the path
+	 */
+	public final String getAbsolutePath() {
+		String retval;
+		if (isValid()) {
+			StringBuffer sb = new StringBuffer();
+			sb.append(FileUtils.convertSeparators(
+					SourceConstants.FORWARD_SLASH_CHAR, path, true));
+			addFileName(sb, false);
+			retval = sb.toString();
+		} else {
+			retval = null;
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets the absolute path to this file, including the model ID in file name
+	 * 
+	 * @return the path
+	 */
+	public final String getAbsolutePathWithID() {
+		String retval;
+		if (isValid()) {
+			StringBuffer sb = new StringBuffer();
+			sb.append(FileUtils.convertSeparators(
+					SourceConstants.FORWARD_SLASH_CHAR, path, true));
+			addFileName(sb, true);
+			retval = sb.toString();
+		} else {
+			retval = null;
+		}
+		return retval;
+	}
+
+	/**
+	 * Adds the file name to the given buffer
+	 * 
+	 * @param sb
+	 *            the buffer
+	 * @param addID
+	 *            true if ID needs to be added to name
+	 */
+	private void addFileName(StringBuffer sb, boolean addID) {
+		sb.append(name);
+		if (addID) {
+			sb.append("_0x"); //$NON-NLS-1$
+			sb.append(Integer.toHexString(getOwner().getModel().getID()));
+			sb.append("_"); //$NON-NLS-1$
+		}
+		sb.append(getFileExtension());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#getOwner()
+	 */
+	public TraceObject getOwner() {
+		return owner;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtension#
+	 *      setOwner(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void setOwner(TraceObject owner) {
+		if (this.owner != null) {
+			this.owner.removeModelListener(this);
+		}
+		if (owner instanceof TraceModel) {
+			this.owner = (TraceModel) owner;
+			this.owner.addModelListener(this);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      objectAdded(com.nokia.tracecompiler.model.TraceObject,
+	 *      com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectAdded(TraceObject owner, TraceObject object) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      objectCreationComplete(com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectCreationComplete(TraceObject object) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      objectRemoved(com.nokia.tracecompiler.model.TraceObject,
+	 *      com.nokia.tracecompiler.model.TraceObject)
+	 */
+	public void objectRemoved(TraceObject owner, TraceObject object) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelListener#
+	 *      propertyUpdated(com.nokia.tracecompiler.model.TraceObject, int)
+	 */
+	public void propertyUpdated(TraceObject object, int property) {
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/messages.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,23 @@
+GroupNames.0=Need to set EPOCROOT env variable
+GroupNames.1=TRACE_TESTING1 = 254
+GroupNames.12=USER_GROUP_ID_LAST = 
+GroupNames.2=Appending file separator to EPOCROOT
+GroupNames.23=GetIdByName called name = 
+GroupNames.24=GetIdByName returning 
+GroupNames.25=getIdByName NOT FOUND returning 0
+GroupNames.26=GetNameById called id = 
+GroupNames.27=GetNameById returning 
+GroupNames.28=getNameById NOT FOUND  returning empty string 
+GroupNames.29=
+GroupNames.3=TRACE_TESTING2 = 255
+GroupNames.30=TC:
+GroupNames.4=USER_GROUP_ID_FIRST = 
+GroupNames.8=getGroupName() header name
+GroupNames.canNotresolveGroupIdPrefix=Can not resolve Group Id for 
+GroupNames.failedToProcessOstHeaderText=failed to process ost header.
+GroupNames.invalidEpocRoot=Invalid EPOCROOT
+ProjectUtils.accesRightErrorText=Trace compiler does not have access rights to the traces folder
+TraceProjectFile.ProjectFileRenamedPrefix=\ renamed from 
+TraceProjectFile.ProjectFileRenamedMiddle=\ to 
+TraceProjectFile.NotValid=Not Valid
+TraceProjectFile.ProjectFileWrittenMiddle=\ written to 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Interface to the trace project management
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/rules/ArrayParameterRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rule interface for parameters that represent array types
+*
+*/
+package com.nokia.tracecompiler.rules;
+
+import com.nokia.tracecompiler.model.TraceObjectRule;
+
+/**
+ * Rule interface for parameters that represent array types
+ * 
+ */
+public interface ArrayParameterRule extends TraceObjectRule {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/rules/FillerParameterRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rule that defines a filler parameter
+*
+*/
+package com.nokia.tracecompiler.rules;
+
+/**
+ * Rule that defines a filler parameter. A filler does not have a source or view
+ * representation, but does have a representation in the header and decoder
+ * files. It aligns trace parameters to 32-bit boundaries.
+ * 
+ */
+public interface FillerParameterRule extends HiddenTraceObjectRule {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/rules/HiddenTraceObjectRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rule that allows an object to be marked as hidden
+*
+*/
+package com.nokia.tracecompiler.rules;
+
+import com.nokia.tracecompiler.model.TraceObjectRule;
+
+/**
+ * Rule that allows an object to be marked as hidden in the view
+ * 
+ */
+public interface HiddenTraceObjectRule extends TraceObjectRule {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/rules/ReadOnlyObjectRule.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Rule which marks an object "read-only"
+*
+*/
+package com.nokia.tracecompiler.rules;
+
+import com.nokia.tracecompiler.model.TraceObjectRule;
+
+/**
+ * Rule which marks an object "read-only". Read-only objects cannot be updated
+ * via UI
+ * 
+ */
+public interface ReadOnlyObjectRule extends TraceObjectRule {
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/rules/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Rules for trace objects
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/ContextAreaParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,521 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Parser for source contexts
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Parser for source contexts
+ * 
+ */
+class ContextAreaParser {
+
+	/**
+	 * Source parser
+	 */
+	private SourceParser parser;
+
+	/**
+	 * List of source file contexts
+	 */
+	protected ArrayList<SourceContext> contextAreas = new ArrayList<SourceContext>();
+
+	/**
+	 * Comparator for array sorting and searching
+	 */
+	private PositionArrayComparator arrayComparator = new PositionArrayComparator();
+
+	/**
+	 * "usingnamespace" text
+	 */
+	private static final String USINGNAMESPACE = "usingnamespace"; //$NON-NLS-1$
+
+	/**
+	 * Start index of "using" substring in "usingnamespace" string
+	 */
+	private static final int START_INDEX_OF_USING_SUBSTRING = 0; // CodForChk_Dis_Magic
+
+	/**
+	 * End index of "using" substring in "usingnamespace" string
+	 */
+	private static final int END_INDEX_OF_USING_SUBSTRING = 5; // CodForChk_Dis_Magic
+
+	/**
+	 * Start index of "namespace" substring in "usingnamespace" string
+	 */
+	private static final int START_INDEX_OF_NAMESPACE_SUBSTRING = 5; // CodForChk_Dis_Magic
+
+	/**
+	 * End index of "namespace" substring in "usingnamespace" string
+	 */
+	private static final int END_INDEX_OF_NAMESPACE_SUBSTRING = 14; // CodForChk_Dis_Magic
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parser
+	 *            the source parser
+	 */
+	ContextAreaParser(SourceParser parser) {
+		this.parser = parser;
+	}
+
+	/**
+	 * Resets the context areas
+	 */
+	void reset() {
+		contextAreas.clear();
+	}
+
+	/**
+	 * Returns the context at given offset
+	 * 
+	 * @param offset
+	 *            the offset to the source data
+	 * @return the context at the offset or null if no context exists
+	 * @throws SourceParserException
+	 *             if parser fails
+	 */
+	SourceContext parseAndGet(int offset) throws SourceParserException {
+		if (contextAreas.isEmpty()) {
+			parseAll();
+		}
+		int index = find(offset);
+		SourceContext context = null;
+		if (index >= 0) {
+			context = contextAreas.get(index);
+		}
+		return context;
+	}
+
+	/**
+	 * Gets the context areas. If the areas have not been parsed, this parses
+	 * them
+	 * 
+	 * @return the areas
+	 * @throws SourceParserException
+	 *             if parser fails
+	 */
+	Iterator<SourceContext> parseAndGetAll() throws SourceParserException {
+		if (contextAreas.isEmpty()) {
+			parseAll();
+		}
+		return contextAreas.iterator();
+	}
+
+	/**
+	 * Gets the context area list. This does not parse the areas
+	 * 
+	 * @return the list of context areas
+	 */
+	List<SourceContext> getContextList() {
+		return contextAreas;
+	}
+
+	/**
+	 * Finds the array index of the context area which contains the offset. If
+	 * none of the areas contain the offset, returns negative integer indicating
+	 * the index of the context area following the offset
+	 * 
+	 * @param offset
+	 *            the offset to the data
+	 * @return the context area index
+	 */
+	int find(int offset) {
+		return Collections.binarySearch(contextAreas, new SourceLocationBase(
+				parser, offset), arrayComparator);
+	}
+
+	/**
+	 * Builds the context array
+	 * 
+	 * @throws SourceParserException
+	 *             if parser fails
+	 */
+	void parseAll() throws SourceParserException { // CodForChk_Dis_ComplexFunc
+		contextAreas.clear();
+		char value;
+		
+		int inBrackets = 0;
+		int inContext = 0;
+		int inNamespace = 0;
+
+		int usingIndex = START_INDEX_OF_USING_SUBSTRING;
+		int usingKeywordEnd = 0;
+		int namespaceIndex = START_INDEX_OF_NAMESPACE_SUBSTRING;
+		int nameSpaceKeywordEnd = 0;
+		int previousIndexBeforeNamespace = 0;
+		boolean checkNextCharacter = false;
+
+		SourceContext context = null;
+		SourceIterator itr = parser.createIterator(0, SourceParser.SKIP_ALL);
+
+		while (itr.hasNext()) {
+			value = itr.next();
+
+			// Next character check is need only if we have found "namespace"
+			// text
+			if (checkNextCharacter) {
+
+				// Next character after "namespace" text should be space.
+				// Because we have skipped spaces, current index should be
+				// bigger than nameSpaceKeywordEnd + 1. If it is not space then
+				// we are not inside namespace
+				if (itr.currentIndex() - nameSpaceKeywordEnd < 2) { // CodForChk_Dis_Magic
+					inNamespace--;
+				}
+				checkNextCharacter = false;
+			}
+
+			// Check is character part of "using" text
+			if (value == USINGNAMESPACE.charAt(usingIndex)) {
+				usingIndex++;
+			} else {
+
+				// Character not part of "using" text -> reset usingIndex
+				usingIndex = START_INDEX_OF_USING_SUBSTRING;
+			}
+
+			// Check that did we found "using" text
+			if (usingIndex == END_INDEX_OF_USING_SUBSTRING) {
+				usingKeywordEnd = itr.currentIndex();
+				usingIndex = START_INDEX_OF_USING_SUBSTRING;
+			}
+
+			// Check is character part of "namespace" text
+			if (value == USINGNAMESPACE.charAt(namespaceIndex)) {
+				if (previousIndexBeforeNamespace == 0) {
+					previousIndexBeforeNamespace = itr.previousIndex();
+				}
+				namespaceIndex++;
+			} else {
+
+				// Character not part of "namespace" text -> reset
+				// previousIndexBeforeNamespace and namespaceIndex
+				previousIndexBeforeNamespace = 0;
+				namespaceIndex = START_INDEX_OF_NAMESPACE_SUBSTRING;
+			}
+
+			// Check that did we found "namespace" text
+			if (namespaceIndex == END_INDEX_OF_NAMESPACE_SUBSTRING) {
+				nameSpaceKeywordEnd = itr.currentIndex();
+
+				// If there was "using" text just before "namespace" text, then
+				// namespace is defined like: "using namespace foo;" and we are
+				// not going inside namespace brackets
+				if (usingKeywordEnd != previousIndexBeforeNamespace) {
+					inNamespace++;
+					checkNextCharacter = true;
+				}
+				namespaceIndex = START_INDEX_OF_NAMESPACE_SUBSTRING;
+			}
+
+			if (value == '{') {
+				inBrackets++;
+
+				// Check that are we inside namespace or context
+				if (inBrackets > inNamespace) {
+					inContext++;
+					if (inContext == 1) {
+						int start = itr.currentIndex() + 1;
+						context = new SourceContext(parser, start);
+
+						// Includes the '{' character into the context
+						if (!createContext(context, start - 2)) { // CodForChk_Dis_Magic
+							context = null;
+						}
+					}
+				}
+			} else if (value == '}') {
+				// Check that are we exiting from context or namespace
+				if (inBrackets == inNamespace) {
+					inNamespace--;
+				} else {
+					inContext--;
+					if (inContext == 0 && context != null) {
+						context.setLength(itr.currentIndex() + 1
+								- context.getOffset());
+						contextAreas.add(context);
+					}
+				}
+
+				inBrackets--;
+			}
+		}
+	}
+
+	/**
+	 * Sets the data to the source context
+	 * 
+	 * @param context
+	 *            the source context to be updated
+	 * @param offset
+	 *            the index preceeding the '{' character
+	 * @return true if valid, false otherwise
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private boolean createContext(SourceContext context, int offset)
+			throws SourceParserException {
+		ContextSearchData data = new ContextSearchData();
+		data.itr = parser.createIterator(offset, SourceParser.BACKWARD_SEARCH
+				| SourceParser.SKIP_ALL);
+		data.context = context;
+		while (data.itr.hasNext() && !data.finished) {
+			char c = data.itr.next();
+			// Function start or stop character or statement separator breaks
+			// the search in normal case. In case of nested class separator
+			// character breaks the search.
+			if (c == ';' || c == '}' || c == '{'
+					|| (c == ':' && data.itr.peek() == ':')
+					&& data.classStartIndex != -1) {
+				processContextTerminator(context, data, false);
+			} else if (!data.parametersFound) {
+				processParametersNotFoundCharacter(data, c);
+			} else if (c == ')' || c == '(' || c == ','
+					|| (c == ':' && data.itr.peek() != ':')) {
+				// Constructor member initializer list may contain brackets, ','
+				// and ':'. When one of the characters from member initializer
+				// list is encountered, this assumes that the previous
+				// one was not the actual function parameter list yet. All
+				// variables are reset in that case
+				data.parametersFound = false;
+				data.functionEndIndex = -1;
+				data.functionStartIndex = -1;
+				data.classEndIndex = -1;
+				processParametersNotFoundCharacter(data, c);
+			} else if (data.functionEndIndex == -1) {
+				processFunctionNameNotFoundCharacter(data, c);
+			} else if (data.functionStartIndex == -1) {
+				processFunctionNameCharacter(context, data, c);
+			} else if (data.classEndIndex == -1) {
+				processClassNameNotFoundCharacter(data);
+			} else if (data.classStartIndex == -1) {
+				processClassNameCharacter(context, data, c);
+			} else {
+				processReturnTypeCharacter(context, data);
+			}
+		}
+		if (!data.finished) {
+			processContextTerminator(context, data, true);
+		}
+		return data.valid;
+	}
+
+	/**
+	 * Processes a character after class and function names have been found
+	 * 
+	 * @param context
+	 *            the context
+	 * @param data
+	 *            the search data
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void processReturnTypeCharacter(SourceContext context,
+			ContextSearchData data) throws SourceParserException {
+		if (data.itr.hasSkipped()) {
+			// Collects all return type candidates to the context
+			addReturnType(context, data.itr.previousIndex(),
+					data.returnEndIndex);
+			data.returnEndIndex = data.itr.currentIndex();
+		}
+	}
+
+	/**
+	 * Processes a character after function name has been found, but class name
+	 * has not yet been found
+	 * 
+	 * @param data
+	 *            the search flags
+	 */
+	private void processClassNameNotFoundCharacter(ContextSearchData data) {
+		// After start of function and the separator has been found, the
+		// next character marks the end of class name
+		data.classEndIndex = data.itr.currentIndex() + 1;
+	}
+
+	/**
+	 * Parses a character which belongs to the class name
+	 * 
+	 * @param context
+	 *            the source context to be parsed
+	 * @param data
+	 *            the context search parameters
+	 * @param c
+	 *            the character
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void processClassNameCharacter(SourceContext context,
+			ContextSearchData data, char c) throws SourceParserException {
+		if (data.itr.hasSkipped() || (c == ':' && data.itr.peek() == ':')) {
+			// Start of class name is found when iterator skips over
+			// white space or comment characters or in case of nested class
+			// separator character has been found
+			context.setFunctionName(parser.getSource().get(
+					data.functionStartIndex,
+					data.functionEndIndex - data.functionStartIndex));
+			data.classStartIndex = data.itr.previousIndex();
+			data.returnEndIndex = data.itr.currentIndex();
+			context.setClassName(parser.getSource().get(data.classStartIndex,
+					data.classEndIndex - data.classStartIndex));
+
+			// In case of nested class skips over the second ':'
+			if (c == ':' && data.itr.peek() == ':') {
+				data.itr.next();
+			}
+		}
+	}
+
+	/**
+	 * Processes a character while within function name
+	 * 
+	 * @param context
+	 *            the source context under processing
+	 * @param data
+	 *            the context search flags
+	 * @param c
+	 *            the character
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void processFunctionNameCharacter(SourceContext context,
+			ContextSearchData data, char c) throws SourceParserException {
+		// After end of function has been found the separator character
+		// marks the start of function
+		if (c == ':') {
+			if (data.itr.hasNext() && data.itr.peek() == ':') {
+				data.functionStartIndex = data.itr.previousIndex();
+				context.setFunctionName(parser.getSource().get(
+						data.functionStartIndex,
+						data.functionEndIndex - data.functionStartIndex));
+				// Skips over the second ':'
+				data.itr.next();
+			} else {
+				// Only one ':' character -> Invalid
+				data.finished = true;
+			}
+		} else if (data.itr.hasSkipped()) {
+			// If the iterator skipped over some characters and the next
+			// character is not ':' the function is a non-member
+			data.functionStartIndex = data.itr.previousIndex();
+			context.setFunctionName(parser.getSource().get(
+					data.functionStartIndex,
+					data.functionEndIndex - data.functionStartIndex));
+			// Class name indices are set so parser does not search for them
+			data.classStartIndex = data.itr.previousIndex();
+			data.classEndIndex = data.itr.previousIndex();
+			data.returnEndIndex = data.itr.currentIndex();
+		}
+	}
+
+	/**
+	 * Processes a character when function name has not yet been found
+	 * 
+	 * @param data
+	 *            the search flags
+	 * @param c
+	 *            the character to be processed
+	 */
+	private void processFunctionNameNotFoundCharacter(ContextSearchData data,
+			char c) {
+		// The next character after parameters is the end of function
+		if (c == ':') {
+			data.finished = true;
+		}
+		data.functionEndIndex = data.itr.currentIndex() + 1;
+	}
+
+	/**
+	 * Checks if the character is '(' or ')' and updates the parametersFound
+	 * flag accordingly
+	 * 
+	 * @param data
+	 *            the search data
+	 * @param c
+	 *            the current character
+	 */
+	private void processParametersNotFoundCharacter(ContextSearchData data,
+			char c) {
+		if (c == ')') {
+			data.inParameters++;
+		} else if (c == '(') {
+			data.inParameters--;
+			if (data.inParameters == 0) {
+				data.context.setParametersStartIndex(data.itr.currentIndex());
+				data.parametersFound = true;
+			}
+		}
+	}
+
+	/**
+	 * Processes a context terminating character
+	 * 
+	 * @param context
+	 *            the context under processing
+	 * @param data
+	 *            the search data
+	 * @param startOfFile
+	 *            context was terminated due to start of file
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void processContextTerminator(SourceContext context,
+			ContextSearchData data, boolean startOfFile)
+			throws SourceParserException {
+		int offset = startOfFile ? data.itr.currentIndex() : data.itr
+				.previousIndex();
+		if (data.classStartIndex != -1) {
+			addReturnType(context, offset, data.returnEndIndex);
+			data.valid = true;
+		} else if (data.classEndIndex != -1) {
+			context.setClassName(parser.getSource().get(offset,
+					data.classEndIndex - offset));
+			data.valid = true;
+		} else if (data.functionEndIndex != -1) {
+			context.setFunctionName(parser.getSource().get(offset,
+					data.functionEndIndex - offset));
+			data.valid = true;
+		}
+		// Finished flag is set. If function name was not found, the valid flag
+		// remains false
+		data.finished = true;
+	}
+
+	/**
+	 * Adds a return type to the context
+	 * 
+	 * @param context
+	 *            the context to be searched
+	 * @param start
+	 *            the start index
+	 * @param end
+	 *            the end index
+	 * @throws SourceParserException
+	 *             if return type cannot be added
+	 */
+	private void addReturnType(SourceContext context, int start, int end)
+			throws SourceParserException {
+		context.addReturnType(parser.getSource().get(start, end - start + 1));
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/ContextSearchData.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Contains search variables during SourceParser.createContext call
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Contains search variables during SourceParser.createContext call
+ * 
+ */
+final class ContextSearchData {
+
+	/**
+	 * Index is currently in parameters
+	 */
+	int inParameters;
+
+	/**
+	 * Parameters have been found
+	 */
+	boolean parametersFound;
+
+	/**
+	 * Start of function name
+	 */
+	int functionStartIndex = -1;
+
+	/**
+	 * End of function name
+	 */
+	int functionEndIndex = -1;
+
+	/**
+	 * Start of class name
+	 */
+	int classStartIndex = -1;
+
+	/**
+	 * End of class name
+	 */
+	int classEndIndex = -1;
+
+	/**
+	 * End of return statement
+	 */
+	int returnEndIndex = -1;
+
+	/**
+	 * Context is valid
+	 */
+	boolean valid;
+
+	/**
+	 * Processing is finished
+	 */
+	boolean finished;
+
+	/**
+	 * The iterator
+	 */
+	SourceIterator itr;
+
+	/**
+	 * The context
+	 */
+	SourceContext context;
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/ExcludedAreaParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,352 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Parser for comments and strings
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Parser for comments and strings
+ * 
+ */
+final class ExcludedAreaParser {
+
+	/**
+	 * The check range is used to limit the effect of unterminated ' in code
+	 */
+	private static final int CHAR_CHECK_RANGE = 3; // CodForChk_Dis_Magic
+
+	/**
+	 * Source parser
+	 */
+	private SourceParser parser;
+
+	/**
+	 * List of source file areas that are not used in search
+	 */
+	private ArrayList<SourceExcludedArea> excludedAreas = new ArrayList<SourceExcludedArea>();
+
+	/**
+	 * Comparator for array sorting and searching
+	 */
+	private PositionArrayComparator arrayComparator = new PositionArrayComparator();
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parser
+	 *            the source parser
+	 */
+	ExcludedAreaParser(SourceParser parser) {
+		this.parser = parser;
+	}
+
+	/**
+	 * Resets the excluded areas
+	 */
+	void reset() {
+		excludedAreas.clear();
+	}
+
+	/**
+	 * Finds the array index of the excluded area which contains the offset. If
+	 * none of the areas contain the offset, returns negative integer indicating
+	 * the index of the excluded area following the offset
+	 * 
+	 * @param offset
+	 *            the offset to the data
+	 * @return the excluded area index
+	 */
+	int find(int offset) {
+		return Collections.binarySearch(excludedAreas, new SourceLocationBase(
+				parser, offset), arrayComparator);
+	}
+
+	/**
+	 * Finds the excluded source file areas. Excluded areas include comments and
+	 * quoted strings. Overwrites possible old areas.
+	 * 
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	void parseAll() throws SourceParserException {
+		excludedAreas.clear();
+		ExcludedAreaSearchData data = new ExcludedAreaSearchData();
+		int length = parser.getSource().getLength();
+		SourceExcludedArea lastarea = parse(data, length);
+		if (data.inString || data.inChar || data.inComment
+				|| data.inLineComment || data.inPreprocessor) {
+			lastarea.setLength(parser.getSource().getLength()
+					- lastarea.getOffset());
+			excludedAreas.add(lastarea);
+		}
+	}
+
+	/**
+	 * Parses the excluded areas of source
+	 * 
+	 * @param data
+	 *            the search data
+	 * @param length
+	 *            the length of data to be parsed
+	 * @return the last area
+	 * @throws SourceParserException
+	 *             if parser fails
+	 */
+	private SourceExcludedArea parse(ExcludedAreaSearchData data, int length)
+			throws SourceParserException {
+		SourceExcludedArea area = null;
+		while (data.index < length) {
+			data.value = parser.getSource().getChar(data.index++);
+			// Line comments end at end-of-line
+			if (data.inLineComment) {
+				processInLineComment(data, area);
+			} else if (data.inComment) {
+				processInComment(data, area);
+			} else if (data.inPreprocessor) {
+				processInPreprocessor(data, area);
+			} else if (data.inString) {
+				processInString(data, area);
+			} else if (data.inChar) {
+				processInChar(data, area);
+			} else if (data.value == '/' && data.index < length) {
+				area = createCommentArea(data);
+			} else if (data.value == '\"') {
+				area = createStringArea(data);
+			} else if (data.value == '\'') {
+				area = createCharArea(data);
+			} else if (data.value == '#'
+					&& (data.index == 1 || parser.getSource().getChar(
+							data.index - 2) == '\n')) { // CodForChk_Dis_Magic
+				area = createPreprocessorArea(data);
+			}
+		}
+		return area;
+	}
+
+	/**
+	 * Gets the excluded area that contains given offset
+	 * 
+	 * @param offset
+	 *            the offset to the area
+	 * @return the area or null if offset does not hit any area
+	 */
+	SourceExcludedArea getArea(int offset) {
+		SourceExcludedArea retval;
+		int index = find(offset);
+		if (index >= 0) {
+			retval = excludedAreas.get(index);
+		} else {
+			retval = null;
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets the list of excluded areas
+	 * 
+	 * @return the list of areas
+	 */
+	List<SourceExcludedArea> getAreas() {
+		return excludedAreas;
+	}
+
+	/**
+	 * Processes a quote (') character marking start of character area
+	 * 
+	 * @param data
+	 *            the search flags
+	 * @return the new area
+	 */
+	private SourceExcludedArea createCharArea(ExcludedAreaSearchData data) {
+		SourceExcludedArea area;
+		data.inChar = true;
+		area = new SourceExcludedArea(parser, data.index - 1,
+				SourceExcludedArea.CHARACTER);
+		return area;
+	}
+
+	/**
+	 * Processes a double quote (") character marking start of string area
+	 * 
+	 * @param data
+	 *            the search flags
+	 * @return the new area
+	 */
+	private SourceExcludedArea createStringArea(ExcludedAreaSearchData data) {
+		SourceExcludedArea area;
+		data.inString = true;
+		area = new SourceExcludedArea(parser, data.index - 1,
+				SourceExcludedArea.STRING);
+		return area;
+	}
+
+	/**
+	 * Processes a forward slash (/) character marking start of comment
+	 * 
+	 * @param data
+	 *            the search flags
+	 * @return the comment object
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private SourceExcludedArea createCommentArea(ExcludedAreaSearchData data)
+			throws SourceParserException {
+		SourceExcludedArea area;
+		char next = parser.getSource().getChar(data.index);
+		if (next == '/') {
+			data.inLineComment = true;
+			area = new SourceExcludedArea(parser, data.index - 1,
+					SourceExcludedArea.LINE_COMMENT);
+			data.index++;
+		} else if (next == '*') {
+			data.inComment = true;
+			area = new SourceExcludedArea(parser, data.index - 1,
+					SourceExcludedArea.MULTILINE_COMMENT);
+			data.index++;
+		} else {
+			area = null;
+		}
+		return area;
+	}
+
+	/**
+	 * Processes a preprocessor definition
+	 * 
+	 * @param data
+	 *            the search flags
+	 * @return the preprocessor area representation
+	 */
+	private SourceExcludedArea createPreprocessorArea(
+			ExcludedAreaSearchData data) {
+		SourceExcludedArea area = new SourceExcludedArea(parser,
+				data.index - 1, SourceExcludedArea.PREPROCESSOR_DEFINITION);
+		data.inPreprocessor = true;
+		return area;
+	}
+
+	/**
+	 * Processes a character that belongs to '' area
+	 * 
+	 * @param data
+	 *            the search flags
+	 * @param area
+	 *            the area under processing
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void processInChar(ExcludedAreaSearchData data,
+			SourceExcludedArea area) throws SourceParserException {
+		// The check range is used to limit the effect of unterminated '
+		if ((data.value == '\'' && parser.getSource().getChar(data.index - 2) != '\\') // CodForChk_Dis_Magic
+				|| data.index - area.getOffset() > CHAR_CHECK_RANGE) {
+			data.inChar = false;
+			area.setLength(data.index - area.getOffset());
+			excludedAreas.add(area);
+		}
+	}
+
+	/**
+	 * Processes a character that belongs to "" area
+	 * 
+	 * @param data
+	 *            the search flags
+	 * @param area
+	 *            the area under processing
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void processInString(ExcludedAreaSearchData data,
+			SourceExcludedArea area) throws SourceParserException {
+		// Strings end with " unless escaped with \" (except \\")
+		if (data.value == '\"') {
+			if (parser.getSource().getChar(data.index - 2) != '\\' // CodForChk_Dis_Magic
+					|| parser.getSource().getChar(data.index - 3) == '\\') { // CodForChk_Dis_Magic
+				data.inString = false;
+				area.setLength(data.index - area.getOffset());
+				excludedAreas.add(area);
+			}
+		}
+	}
+
+	/**
+	 * Processes a character that belongs to multi-line comment
+	 * 
+	 * @param data
+	 *            the search flags
+	 * @param area
+	 *            the area under processing
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void processInComment(ExcludedAreaSearchData data,
+			SourceExcludedArea area) throws SourceParserException {
+		// Comments end with */
+		if (data.value == '*') {
+			if (data.index < parser.getSource().getLength()
+					&& parser.getSource().getChar(data.index) == '/') {
+				data.index++;
+				data.inComment = false;
+				area.setLength(data.index - area.getOffset());
+				excludedAreas.add(area);
+			}
+		}
+	}
+
+	/**
+	 * Processes a character that belongs to line comment
+	 * 
+	 * @param data
+	 *            the search flags
+	 * @param area
+	 *            the area under processing
+	 */
+	private void processInLineComment(ExcludedAreaSearchData data,
+			SourceExcludedArea area) {
+		if (data.value == '\n') {
+			data.inLineComment = false;
+			area.setLength(data.index - area.getOffset());
+			excludedAreas.add(area);
+		}
+	}
+
+	/**
+	 * Processes a character that belongs to preprocessor definition
+	 * 
+	 * @param data
+	 *            the search flags
+	 * @param area
+	 *            the area under processing
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void processInPreprocessor(ExcludedAreaSearchData data,
+			SourceExcludedArea area) throws SourceParserException {
+		if (data.value == '\n') {
+			char prev = parser.getSource().getChar(data.index - 2); // CodForChk_Dis_Magic
+			char prev2 = parser.getSource().getChar(data.index - 3); // CodForChk_Dis_Magic
+			if (!((prev == '\\') || (prev == '\r' && prev2 == '\\'))) {
+				data.inPreprocessor = false;
+				area.setLength(data.index - area.getOffset());
+				excludedAreas.add(area);
+			}
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/ExcludedAreaSearchData.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Contains search variables during SourceParser.findExcludedAreas call
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Contains search variables during SourceParser.findExcludedAreas call
+ * 
+ */
+final class ExcludedAreaSearchData {
+
+	/**
+	 * Data index
+	 */
+	int index;
+
+	/**
+	 * Current character
+	 */
+	char value;
+
+	/**
+	 * Within line comment flag
+	 */
+	boolean inLineComment;
+
+	/**
+	 * Within comment flag
+	 */
+	boolean inComment;
+
+	/**
+	 * Within string flag
+	 */
+	boolean inString;
+
+	/**
+	 * Within character flag
+	 */
+	boolean inChar;
+
+	/**
+	 * Within preprocessor definition flag
+	 */
+	boolean inPreprocessor;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/FormatMapping.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Format to parameter type mapping
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Type returned by {@link SourceUtils#mapFormatToParameterType(String)}
+ * 
+ */
+public final class FormatMapping {
+
+	/**
+	 * The type
+	 */
+	public String type;
+
+	/**
+	 * Array type flag
+	 */
+	public boolean isArray;
+
+	/**
+	 * Simple 32-bit type flag
+	 */
+	public boolean isSimple;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param type
+	 *            the type
+	 */
+	public FormatMapping(String type) {
+		this.type = type;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/FunctionReturnValueParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,317 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Parser for function return values
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Parser for function return values
+ * 
+ */
+class FunctionReturnValueParser {
+
+	/**
+	 * Source parser
+	 */
+	private SourceParser parser;
+
+	/**
+	 * Comparator for source return values
+	 */
+	private PositionArrayComparator comparator = new PositionArrayComparator();
+
+	/**
+	 * Macros representing return statement
+	 */
+	private List<String> returnExtensions;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parser
+	 *            the source parser
+	 */
+	FunctionReturnValueParser(SourceParser parser) {
+		this.parser = parser;
+	}
+
+	/**
+	 * Parses the return values of given source context
+	 * 
+	 * @param context
+	 *            the context to be parsed
+	 * @param list
+	 *            the list of return values
+	 */
+	void parseReturnValues(SourceContext context, List<SourceReturn> list) {
+		String statement = SourceConstants.RETURN;
+		try {
+			parseReturnValues(context, list, statement);
+		} catch (SourceParserException e) {
+		}
+		if (returnExtensions != null && returnExtensions.size() > 0) {
+			for (int i = 0; i < returnExtensions.size(); i++) {
+				try {
+					parseReturnValues(context, list, returnExtensions.get(i));
+				} catch (SourceParserException e) {
+				}
+			}
+			Collections.sort(list, comparator);
+		}
+		if (context.isVoid()) {
+			boolean addToEnd = true;
+			// If there were no return statements, the trace is added to end
+			// Otherwise the last return statement needs to be checked. If it is
+			// at the end of the function, the return trace is not added to
+			// the end
+			if (!list.isEmpty()) {
+				SourceReturn ret = list.get(list.size() - 1);
+				SourceIterator itr = parser.createIterator(ret.getOffset()
+						+ ret.getLength() + 1, SourceParser.SKIP_ALL);
+				try {
+					itr.next();
+					// If the next character after return statement is the end
+					// of function, the return is not added
+					if (itr.currentIndex() == context.getOffset()
+							+ context.getLength() - 1) {
+						addToEnd = false;
+					}
+				} catch (SourceParserException e) {
+					addToEnd = false;
+				}
+			}
+			if (addToEnd) {
+				list.add(new SourceReturn(parser, context.getOffset()
+						+ context.getLength() - 1, 0));
+			}
+		}
+	}
+
+	/**
+	 * Parses the return values of given source context that use the given
+	 * return statement
+	 * 
+	 * @param context
+	 *            the context to be parsed
+	 * @param list
+	 *            the list of return values
+	 * @param statement
+	 *            the return statement
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void parseReturnValues(SourceContext context,
+			List<SourceReturn> list, String statement)
+			throws SourceParserException {
+		FunctionReturnValueSearchData data = new FunctionReturnValueSearchData();
+		int offset = context.getOffset();
+		int end = offset + context.getLength();
+		SourceSearch search = parser.startStringSearch(statement, offset, end,
+				SourceParser.MATCH_WHOLE_WORD | SourceParser.SKIP_ALL);
+		boolean looping = true;
+		do {
+			data.index = search.findNext();
+			if (data.index != -1) {
+				data.itr = parser.createIterator(data.index
+						+ statement.length(), SourceParser.SKIP_ALL);
+				locateReturnStatement(data);
+				if (data.endOffset != -1 && data.startOffset != -1) {
+					SourceReturn ret = createReturnStatement(data);
+					list.add(ret);
+				} else {
+					// End of return statement missing
+					looping = false;
+				}
+			} else {
+				looping = false;
+			}
+		} while (looping);
+	}
+
+	/**
+	 * Locates the start and end offsets for the return statement
+	 * 
+	 * @param data
+	 *            the search data
+	 * @throws SourceParserException
+	 *             if parser fails
+	 */
+	private void locateReturnStatement(FunctionReturnValueSearchData data)
+			throws SourceParserException {
+		data.startOffset = -1;
+		data.endOffset = -1;
+		boolean found = false;
+		boolean colonAllowed = false;
+		while (data.itr.hasNext() && !found) {
+			char c = data.itr.next();
+			if (c == ';') {
+				data.endOffset = data.itr.previousIndex() + 1;
+				found = true;
+			} else if (c == '}') {
+				found = true;
+			} else if (c == '?') {
+				colonAllowed = true;
+			} else if (c == ':') {
+				if (data.itr.hasNext() && data.itr.peek() == ':') {
+					// Skips over ::
+					c = data.itr.next();
+				} else {
+					if (colonAllowed) {
+						colonAllowed = false;
+					} else {
+						data.endOffset = data.itr.previousIndex() + 1;
+						found = true;
+					}
+				}
+			}
+			if (data.startOffset == -1) {
+				data.startOffset = data.itr.currentIndex();
+			}
+		}
+	}
+
+	/**
+	 * Creates a return statement
+	 * 
+	 * @param data
+	 *            the parser data
+	 * @return the new statement
+	 * @throws SourceParserException
+	 *             if parser fails
+	 */
+	private SourceReturn createReturnStatement(
+			FunctionReturnValueSearchData data) throws SourceParserException {
+		SourceReturn ret = new SourceReturn(parser, data.startOffset,
+				data.endOffset - data.startOffset);
+		if (checkTag(data.startOffset, data.endOffset - data.startOffset)) {
+			ret.setTagHazard();
+		}
+		if (checkPreviousChar(data.index - 1)) {
+			ret.setPreviousCharHazard();
+		}
+		return ret;
+	}
+
+	/**
+	 * Checks if the tag is hazardous
+	 * 
+	 * @param start
+	 *            start offset
+	 * @param length
+	 *            tag length
+	 * @return true if there is a problem
+	 */
+	private boolean checkTag(int start, int length) {
+		boolean hazard = false;
+		boolean previous = false;
+		// Function calls and increment / decrement operators are not safe
+		for (int i = start; i < start + length && !hazard; i++) {
+			char c = parser.getData(i);
+			if (c == '(') {
+				// If return statement is within brackets, it is not hazardous
+				if (i != start || parser.getData(start + length - 1) != ')') {
+					hazard = true;
+				}
+			} else if (c == '?') {
+				hazard = true;
+			} else if (c == '-' || c == '+') {
+				if (previous) {
+					hazard = true;
+				} else {
+					previous = true;
+				}
+			} else {
+				previous = false;
+			}
+		}
+		return hazard;
+	}
+
+	/**
+	 * Checks if previous character is hazardous
+	 * 
+	 * @param index
+	 *            the index
+	 * @return true if hazard, false if not
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private boolean checkPreviousChar(int index) throws SourceParserException {
+		boolean hazard = false;
+		SourceIterator previtr = parser.createIterator(index,
+				SourceParser.SKIP_ALL | SourceParser.BACKWARD_SEARCH);
+		char prevchar = previtr.next();
+		if (prevchar != ';' && prevchar != '{' && prevchar != '}') {
+			hazard = true;
+		}
+		return hazard;
+	}
+
+	/**
+	 * Finds the last return statement from the given context
+	 * 
+	 * @param context
+	 *            the context
+	 * @return the index to beginning of the return statement
+	 */
+	int findLast(SourceContext context) {
+		String statement = SourceConstants.RETURN;
+		int retval = findLast(context, statement);
+		if (returnExtensions != null && returnExtensions.size() > 0) {
+			int res;
+			for (int i = 0; i < returnExtensions.size(); i++) {
+				res = findLast(context, returnExtensions.get(i));
+				if (res > retval) {
+					retval = res;
+				}
+			}
+		}
+		if (retval == -1) {
+			retval = context.getOffset() + context.getLength();
+		}
+		return retval;
+	}
+
+	/**
+	 * Finds the last return statement from the given context
+	 * 
+	 * @param context
+	 *            the context
+	 * @param statement
+	 *            the statement to be searched
+	 * @return the index to beginning of the return statement
+	 */
+	private int findLast(SourceContext context, String statement) {
+		// TODO: Backwards string search
+		int start = context.getOffset();
+		int end = start + context.getLength();
+		SourceSearch search = parser.startStringSearch(statement, start, end,
+				SourceParser.MATCH_WHOLE_WORD | SourceParser.SKIP_ALL);
+		int index = 0;
+		int retval = -1;
+		do {
+			index = search.findNext();
+			if (index != -1) {
+				retval = index;
+			}
+		} while (index != -1);
+		return retval;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/FunctionReturnValueSearchData.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Parser for function return values
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Parse data for function return value parser
+ * 
+ */
+final class FunctionReturnValueSearchData {
+
+	/**
+	 * Data index
+	 */
+	int index;
+
+	/**
+	 * Iterator
+	 */
+	SourceIterator itr;
+
+	/**
+	 * Return statement start offset
+	 */
+	int startOffset;
+
+	/**
+	 * Return statement end offset
+	 */
+	int endOffset;
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/OffsetLength.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Wrapper for offset and length
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Wrapper for offset and length
+ * 
+ */
+public final class OffsetLength {
+
+	/**
+	 * Offset
+	 */
+	public int offset;
+
+	/**
+	 * Length
+	 */
+	public int length;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/ParsedType.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Interface for types parsed from source files
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Interface for types parsed from source files
+ * 
+ */
+public interface ParsedType {
+
+	/**
+	 * Checks if parameter is pointer (*) or pointer reference (*&)
+	 * 
+	 * @return true if pointer, false if not
+	 */
+	public boolean isPointer();
+
+	/**
+	 * Checks if parameter type equals given type
+	 * 
+	 * @param type
+	 *            the type to be checked
+	 * @return true if types match
+	 */
+	public boolean typeEquals(String type);
+
+	/**
+	 * Checks if the type has the given qualifier
+	 * 
+	 * @param qualifier
+	 *            the qualifier to be checked
+	 * @return true if qualifier exists, false if not
+	 */
+	public boolean hasQualifier(String qualifier);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/PositionArrayComparator.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Comparator for position arrays
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.Comparator;
+
+/**
+ * Comparator for position arrays
+ * 
+ */
+public final class PositionArrayComparator implements
+		Comparator<SourceLocationBase> {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+	 */
+	public int compare(SourceLocationBase arrayElement, SourceLocationBase key) {
+		int retval;
+		if (key.getOffset() < arrayElement.getOffset()) {
+			// Start is inclusive
+			retval = 1;
+		} else if (key.getOffset() >= arrayElement.getOffset()
+				+ arrayElement.getLength()) {
+			// End is exclusive
+			retval = -1;
+		} else {
+			retval = 0;
+		}
+		return retval;
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceConstants.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,445 @@
+/*
+* Copyright (c) 2008-2010 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:
+*
+* Constants related to source files
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Constants related to source files
+ * 
+ */
+public interface SourceConstants {
+
+	/**
+	 * Space character as string
+	 */
+	final String SPACE = " "; //$NON-NLS-1$
+
+	/**
+	 * Quote character as string
+	 */
+	final String QUOTE = "\""; //$NON-NLS-1$
+
+	/**
+	 * '\' character as string
+	 */
+	final String BACKSLASH = "\\"; //$NON-NLS-1$
+
+	/**
+	 * '_' character as string
+	 */
+	final String UNDERSCORE = "_"; //$NON-NLS-1$
+
+	/**
+	 * Double underscore for header guards
+	 */
+	final String DOUBLE_UNDERSCORE = "__"; //$NON-NLS-1$
+
+	/**
+	 * Semicolon character as string
+	 */
+	final String SEMICOLON = ";"; //$NON-NLS-1$
+
+	/**
+	 * Colon character as string
+	 */
+	final String COLON = ":"; //$NON-NLS-1$
+
+	/**
+	 * Period character as string
+	 */
+	final String PERIOD = "."; //$NON-NLS-1$
+
+	/**
+	 * Tilde character as string
+	 */
+	final String TILDE = "~"; //$NON-NLS-1$
+
+	/**
+	 * Opening brace as string
+	 */
+	final String OPENING_BRACE = "{"; //$NON-NLS-1$
+
+	/**
+	 * Closing brace as string
+	 */
+	final String CLOSING_BRACE = "}"; //$NON-NLS-1$
+
+	/**
+	 * Asterisk character
+	 */
+	final String ASTERISK = "*"; //$NON-NLS-1$
+
+	/**
+	 * Space character
+	 */
+	final char SPACE_CHAR = ' ';
+
+	/**
+	 * Colon character
+	 */
+	final char COLON_CHAR = ':';
+	
+	/**
+	 * Quote character
+	 */
+	final char QUOTE_CHAR = '\"';
+
+	/**
+	 * '\' character
+	 */
+	final char BACKSLASH_CHAR = '\\';
+
+	/**
+	 * '/' character
+	 */
+	final char FORWARD_SLASH_CHAR = '/';
+
+	/**
+	 * '_' character
+	 */
+	final char UNDERSCORE_CHAR = '_';
+
+	/**
+	 * '.' character
+	 */
+	final char PERIOD_CHAR = '.';
+
+	/**
+	 * Line separator
+	 */
+	final String LINE_FEED = System.getProperty("line.separator"); //$NON-NLS-1$
+
+	/**
+	 * Header extension (.h)
+	 */
+	final String HEADER_EXTENSION = ".h"; //$NON-NLS-1$
+
+	/**
+	 * #define
+	 */
+	final String DEFINE = "#define"; //$NON-NLS-1$
+
+	/**
+	 * #undef
+	 */
+	final String UNDEF = "#undef"; //$NON-NLS-1$
+
+	/**
+	 * #include
+	 */
+	final String INCLUDE = "#include"; //$NON-NLS-1$
+
+	/**
+	 * #ifdef
+	 */
+	final String IFDEF = "#ifdef"; //$NON-NLS-1$
+
+	/**
+	 * #ifndef
+	 */
+	final String IFNDEF = "#ifndef"; //$NON-NLS-1$
+
+	/**
+	 * #if
+	 */
+	final String IF = "#if"; //$NON-NLS-1$
+
+	/**
+	 * defined
+	 */
+	final String DEFINED = "defined"; //$NON-NLS-1$
+
+	/**
+	 * #else
+	 */
+	final String ELSE = "#else"; //$NON-NLS-1$
+
+	/**
+	 * #endif
+	 */
+	final String ENDIF = "#endif"; //$NON-NLS-1$
+
+	/**
+	 * Or
+	 */
+	final String OR = "||"; //$NON-NLS-1$
+
+	/**
+	 * Return statement
+	 */
+	final String RETURN = "return"; //$NON-NLS-1$
+
+	/**
+	 * One step up in path ("../")
+	 */
+	final String PATH_UP = "../"; //$NON-NLS-1$
+
+	/**
+	 * This path ("./")
+	 */
+	final String THIS_PATH = "./"; //$NON-NLS-1$
+
+	/**
+	 * inline
+	 */
+	final String INLINE = "inline"; //$NON-NLS-1$
+
+	/**
+	 * void
+	 */
+	final String VOID = "void"; //$NON-NLS-1$
+
+	/**
+	 * char
+	 */
+	final String CHAR = "char"; //$NON-NLS-1$
+
+	/**
+	 * short
+	 */
+	final String SHORT = "short"; //$NON-NLS-1$
+
+	/**
+	 * int
+	 */
+	final String INT = "int"; //$NON-NLS-1$
+
+	/**
+	 * long
+	 */
+	final String LONG = "long"; //$NON-NLS-1$
+
+	/**
+	 * unsigned
+	 */
+	final String UNSIGNED = "unsigned"; //$NON-NLS-1$
+
+	/**
+	 * Parameter type qualifier list
+	 */
+	final String[] PARAMETER_QUALIFIERS = { "const", //$NON-NLS-1$
+			"volatile", UNSIGNED }; //$NON-NLS-1$
+
+	/**
+	 * No parameters
+	 */
+	final String NO_PARAMETERS = "()"; //$NON-NLS-1$
+
+	/**
+	 * Start of parameters
+	 */
+	final String START_PARAMETERS = "( "; //$NON-NLS-1$
+
+	/**
+	 * Start of parameters with quote
+	 */
+	final String START_PARAMETERS_QUOTE = "( \""; //$NON-NLS-1$
+
+	/**
+	 * Closing parenthesis with non-quoted last parameter
+	 */
+	final String END_PARAMETERS = " )"; //$NON-NLS-1$
+
+	/**
+	 * Closing parenthesis with quoted last parameter
+	 */
+	final String END_PARAMETERS_QUOTE = "\" )"; //$NON-NLS-1$
+
+	/**
+	 * Separator between end of quoted parameter and start of non-quoted
+	 * parameter
+	 */
+	final String QUOTE_PARAMETER_SEPARATOR = "\", "; //$NON-NLS-1$
+
+	/**
+	 * Separator between two parameters without quotes
+	 */
+	final String PARAMETER_SEPARATOR = ", "; //$NON-NLS-1$
+
+	/**
+	 * Separator within for
+	 */
+	final String FOR_SEPARATOR = "; "; //$NON-NLS-1$
+
+	/**
+	 * Separator between end of non-quoted parameter and start of quoted
+	 * parameter
+	 */
+	final String PARAMETER_SEPARATOR_QUOTE = ", \""; //$NON-NLS-1$
+
+	/**
+	 * if and the opening parenthesis
+	 */
+	final String START_IF = "if ( "; //$NON-NLS-1$
+
+	/**
+	 * Sizeof and the opening parenthesis
+	 */
+	final String START_SIZEOF = "sizeof ( "; //$NON-NLS-1$
+
+	/**
+	 * for and the opening parenthesis
+	 */
+	final String START_FOR = "for ( "; //$NON-NLS-1$
+
+	/**
+	 * Assignment operation with spaces
+	 */
+	final String ASSIGN_WITH_SPACES = " = "; //$NON-NLS-1$
+
+	/**
+	 * Assignment operation with out spaces
+	 */
+	final String ASSIGN_WITH_OUT_SPACES = "="; //$NON-NLS-1$
+	
+	/**
+	 * Less of equals for if-statements
+	 */
+	final String LESS_OR_EQUAL_THAN = " <= "; //$NON-NLS-1$
+
+	/**
+	 * Less for if statements
+	 */
+	final String LESS_THAN = " < "; //$NON-NLS-1$
+
+	/**
+	 * Starting bracket for array
+	 */
+	final String START_ARRAY = "[ "; //$NON-NLS-1$
+
+	/**
+	 * Ending bracket for array
+	 */
+	final String END_ARRAY = " ]"; //$NON-NLS-1$
+
+	/**
+	 * Pointer and space
+	 */
+	final String POINTER = "* "; //$NON-NLS-1$
+
+	/**
+	 * Add operation with spaces
+	 */
+	final String ADD = " + "; //$NON-NLS-1$
+
+	/**
+	 * Modulo operation with spaces
+	 */
+	final String MOD = " % "; //$NON-NLS-1$
+
+	/**
+	 * Subtract with assignment
+	 */
+	final String SUBTRACT_ASSIGN = " -= "; //$NON-NLS-1$
+
+	/**
+	 * Add with assignment
+	 */
+	final String ADD_ASSIGN = " += "; //$NON-NLS-1$
+
+	/**
+	 * Not equal check
+	 */
+	final String NOT_EQUALS = " != "; //$NON-NLS-1$
+
+	/**
+	 * Equal check
+	 */
+	final String EQUALS = " == "; //$NON-NLS-1$
+
+	/**
+	 * Increment operation
+	 */
+	final String INCREMENT = "++"; //$NON-NLS-1$
+
+	/**
+	 * Subtract operation with spaces
+	 */
+	final String SUBTRACT = " - "; //$NON-NLS-1$
+
+	/**
+	 * class
+	 */
+	final String CLASS = "class"; //$NON-NLS-1$
+
+	/**
+	 * public
+	 */
+	final String PUBLIC = "public"; //$NON-NLS-1$
+
+	/**
+	 * private
+	 */
+	final String PRIVATE = "private"; //$NON-NLS-1$
+
+	/**
+	 * Prefix for hex numbers
+	 */
+	final String HEX_PREFIX = "0x"; //$NON-NLS-1$
+
+	/**
+	 * Prefix for hex numbers, upper case
+	 */
+	final String HEX_PREFIX_U = "0X"; //$NON-NLS-1$
+
+	/**
+	 * Prefix for octal numbers
+	 */
+	final String OCTAL_PREFIX = "0"; //$NON-NLS-1$
+
+	/**
+	 * 64-bit integer postfix
+	 */
+	final String I64_POSTFIX = "i64"; //$NON-NLS-1$
+
+	/**
+	 * Size of long integer
+	 */
+	final int LONG_SIZE = 64; // CodForChk_Dis_Magic
+
+	/**
+	 * Size of integer
+	 */
+	final int INT_SIZE = 32; // CodForChk_Dis_Magic
+
+	/**
+	 * Size of short
+	 */
+	final int SHORT_SIZE = 16; // CodForChk_Dis_Magic
+
+	/**
+	 * Size of byte
+	 */
+	final int BYTE_SIZE = 8; // CodForChk_Dis_Magic
+
+	/**
+	 * Array type prefix
+	 */
+	final String OST_ARRAY_TYPE_PREFIX = "const TOstArray< "; //$NON-NLS-1$
+
+	/**
+	 * Array type postfix
+	 */
+	final String OST_ARRAY_TYPE_POSTFIX = " >&"; //$NON-NLS-1$
+	
+	/**
+	 * Variable argument list indicator
+	 */
+	final String VARIABLE_ARG_LIST_INDICATOR = "..."; //$NON-NLS-1$
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceContext.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,320 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Source context is a representation of a range of source code
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Source context is a representation of a range of source code. For example a
+ * function in source code could be represented with a context that has the name
+ * of the function
+ * 
+ */
+public class SourceContext extends SourceLocationBase implements ParsedType {
+
+	/**
+	 * No proposal
+	 */
+	public static final int NONE = 0; // CodForChk_Dis_Magic
+
+	/**
+	 * Start of function proposal type
+	 */
+	public static final int START_OF_FUNCTION = 1; // CodForChk_Dis_Magic
+
+	/**
+	 * End of function proposal type
+	 */
+	public static final int END_OF_FUNCTION = 2; // CodForChk_Dis_Magic
+
+	/**
+	 * Full selection proposal type
+	 */
+	public static final int FULL_SELECTION = 3; // CodForChk_Dis_Magic
+
+	/**
+	 * Class name
+	 */
+	private String className;
+
+	/**
+	 * Function name
+	 */
+	private String functionName;
+
+	/**
+	 * Index to start of parameters
+	 */
+	private int parameterStart;
+
+	/**
+	 * List of return types
+	 */
+	private ArrayList<String> returnTypes;
+
+	/**
+	 * Creates a new SourceContext starting from given offset
+	 * 
+	 * @param parser
+	 *            the parser owning this context
+	 * @param offset
+	 *            the offset
+	 */
+	SourceContext(SourceParser parser, int offset) {
+		super(parser, offset);
+	}
+
+	/**
+	 * Gets the class name of this context
+	 * 
+	 * @return the class name
+	 */
+	public String getClassName() {
+		return className;
+	}
+
+	/**
+	 * Gets the function name of this context
+	 * 
+	 * @return the function name
+	 */
+	public String getFunctionName() {
+		return functionName;
+	}
+
+	/**
+	 * Sets the class name. If the class name contains pointer or reference
+	 * characters, they are added to the return statements list
+	 * 
+	 * @param name
+	 *            the new class name
+	 */
+	void setClassName(String name) {
+		className = removePtrAndRef(name);
+	}
+
+	/**
+	 * Sets the function name. If the function name contains pointer or
+	 * reference characters, they are added to the return statements list
+	 * 
+	 * @param name
+	 *            the new function name
+	 */
+	void setFunctionName(String name) {
+		functionName = removePtrAndRef(name);
+	}
+
+	/**
+	 * Removes the * and & characters from the given tag and adds them as return
+	 * modifiers
+	 * 
+	 * @param name
+	 *            the name
+	 * @return the name with * and & removed
+	 */
+	private String removePtrAndRef(String name) {
+		String retval = name;
+		if (name != null) {
+			int start = 0;
+			int end = name.length();
+			boolean found = true;
+			while (start < end && found) {
+				char c = name.charAt(start);
+				if (c == '*' || c == '&') {
+					addReturnModifier(c);
+					start++;
+				} else {
+					found = false;
+				}
+			}
+			found = true;
+			while (end > start && found) {
+				char c = name.charAt(end - 1);
+				if (c == '*' || c == '&') {
+					addReturnModifier(c);
+					end--;
+				} else {
+					found = false;
+				}
+			}
+			retval = name.substring(start, end);
+		}
+		return retval;
+	}
+
+	/**
+	 * Sets the index for start of parameters
+	 * 
+	 * @param index
+	 *            the index
+	 */
+	void setParametersStartIndex(int index) {
+		parameterStart = index;
+	}
+
+	/**
+	 * Adds a return type string to the context
+	 * 
+	 * @param type
+	 *            the return type
+	 */
+	void addReturnType(String type) {
+		// Constructors and destructor do not have return types
+		if (className != null && functionName!= null && !className.equals(functionName)
+				&& !functionName.equals(SourceConstants.TILDE + className)) {
+			type = removePtrAndRef(type);
+			if (type.length() > 0) {
+				if (returnTypes == null) {
+					returnTypes = new ArrayList<String>();
+				}
+				returnTypes.add(type);
+			}
+		}
+	}
+
+	/**
+	 * Adds a return type modifier to the list of return types
+	 * 
+	 * @param c
+	 *            the modifier
+	 */
+	private void addReturnModifier(char c) {
+		if (returnTypes == null) {
+			returnTypes = new ArrayList<String>();
+		}
+		returnTypes.add(String.valueOf(c));
+	}
+
+	/**
+	 * Gets the return types of this context
+	 * 
+	 * @return the return types
+	 */
+	Iterator<String> getReturnTypes() {
+		List<String> list;
+		if (returnTypes != null) {
+			list = returnTypes;
+		} else {
+			list = Collections.emptyList();
+		}
+		return list.iterator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.ParsedType#hasQualifier(java.lang.String)
+	 */
+	public boolean hasQualifier(String type) {
+		// All types and qualifiers are in the returnTypes list
+		return typeEquals(type);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.ParsedType#typeEquals(java.lang.String)
+	 */
+	public boolean typeEquals(String type) {
+		return (returnTypes != null && returnTypes.contains(type));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.ParsedType#isPointer()
+	 */
+	public boolean isPointer() {
+		boolean retval = false;
+		if (returnTypes != null) {
+			for (int i = 0; i < returnTypes.size() && !retval; i++) {
+				if (returnTypes.get(i).equals(SourceConstants.ASTERISK)) {
+					retval = true;
+				}
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Checks if return types list contains "void"
+	 * 
+	 * @return true if void, false if not
+	 */
+	public boolean isVoid() {
+		return (returnTypes == null || returnTypes
+				.contains(SourceConstants.VOID));
+	}
+
+	/**
+	 * Parses the parameters of this source context
+	 * 
+	 * @param parameterList
+	 *            the list where the parameters are stored
+	 * @throws SourceParserException
+	 *             if parsing fails
+	 */
+	public void parseParameters(List<SourceParameter> parameterList)
+			throws SourceParserException {
+		if (getParser() != null) {
+			getParser().parseFunctionParameters(parameterStart, parameterList);
+		} else {
+			throw new SourceParserException(
+					SourceErrorCodes.CONTEXT_MISSING_OWNER);
+		}
+	}
+
+	/**
+	 * Parses the return statements of this source context
+	 * 
+	 * @param returnList
+	 *            the list where the return values are stored
+	 * @throws SourceParserException
+	 *             if parsing fails
+	 */
+	public void parseReturnValues(List<SourceReturn> returnList)
+			throws SourceParserException {
+		if (getParser() != null) {
+			getParser().parseReturnValues(this, returnList);
+		} else {
+			throw new SourceParserException(
+					SourceErrorCodes.CONTEXT_MISSING_OWNER);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		StringBuffer sb = new StringBuffer();
+		if (className != null) {
+			sb.append(getClassName());
+		}
+		sb.append("::"); //$NON-NLS-1$
+		sb.append(getFunctionName());
+		return sb.toString();
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceDocumentFactory.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Interface to be implemented by document framework
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Interface to be implemented by document framework
+ * 
+ */
+public interface SourceDocumentFactory {
+
+	/**
+	 * Creates a new location
+	 * 
+	 * @param base
+	 *            the location which owns the position
+	 * @param offset
+	 *            the position offset
+	 * @param length
+	 *            the position length
+	 * @return the location
+	 */
+	public SourceLocationInterface createLocation(SourceLocationBase base,
+			int offset, int length);
+
+	/**
+	 * Creates a new document
+	 * 
+	 * @param sourceData
+	 *            the document data
+	 * @return the document
+	 */
+	public SourceDocumentInterface createDocument(String sourceData);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceDocumentInterface.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Source document abstraction
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Source document abstraction
+ * 
+ */
+public interface SourceDocumentInterface {
+
+	/**
+	 * Gets the property provider interface. This can return null if the
+	 * document framework does not support source properties
+	 * 
+	 * @return the property provider
+	 */
+	public SourcePropertyProvider getPropertyProvider();
+
+	/**
+	 * Gets a subset of document data
+	 * 
+	 * @param start
+	 *            the start offset
+	 * @param length
+	 *            the data length
+	 * @return the data
+	 * @throws SourceParserException
+	 *             if parameters are not valid
+	 */
+	public String get(int start, int length) throws SourceParserException;
+
+	/**
+	 * Gets a character
+	 * 
+	 * @param offset
+	 *            the offset
+	 * @return the character
+	 * @throws SourceParserException
+	 *             if offset is not valid
+	 */
+	public char getChar(int offset) throws SourceParserException;
+
+	/**
+	 * Gets the data length
+	 * 
+	 * @return the length
+	 */
+	public int getLength();
+
+	/**
+	 * Maps an offset to line number
+	 * 
+	 * @param offset
+	 *            the offset
+	 * @return the line number
+	 * @throws SourceParserException
+	 *             if offset is not valid
+	 */
+	public int getLineOfOffset(int offset) throws SourceParserException;
+
+	/**
+	 * Replaces data from the document
+	 * 
+	 * @param offset
+	 *            offset to removed data
+	 * @param length
+	 *            length of removed data
+	 * @param newText
+	 *            new data
+	 * @throws SourceParserException
+	 *             if parameters are not valid
+	 */
+	public void replace(int offset, int length, String newText)
+			throws SourceParserException;
+
+	/**
+	 * Adds a location to this source.
+	 * 
+	 * @param location
+	 *            the location to be added
+	 */
+	public void addLocation(SourceLocationInterface location);
+
+	/**
+	 * Removes a location from this source.
+	 * 
+	 * @param location
+	 *            the location to be removed
+	 */
+	public void removeLocation(SourceLocationInterface location);
+
+	/**
+	 * Gets the owner of this source
+	 * 
+	 * @return the owner
+	 */
+	public Object getOwner();
+
+	/**
+	 * Sets the owner of this source
+	 * 
+	 * @param owner
+	 *            the owner
+	 */
+	public void setOwner(Object owner);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceDocumentMonitor.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Monitor for source files
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Monitor for source files
+ * 
+ */
+public interface SourceDocumentMonitor extends
+		Iterable<SourceDocumentInterface> {
+
+	/**
+	 * Gets a document factory, which is shared between all documents created
+	 * into this monitor
+	 * 
+	 * @return the factory
+	 */
+	public SourceDocumentFactory getFactory();
+
+	/**
+	 * Starts the monitor
+	 * 
+	 * @param processor
+	 *            document processor callback
+	 * @throws Exception 
+	 */
+	public void startMonitor(SourceDocumentProcessor processor) throws Exception;
+
+	/**
+	 * Stops the monitor
+	 */
+	public void stopMonitor();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceDocumentProcessor.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Document processor interface
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+/**
+ * Document processor interface
+ * 
+ */
+public interface SourceDocumentProcessor {
+
+	/**
+	 * Notification about source opened
+	 * 
+	 * @param document
+	 *            the document
+	 * @throws TraceCompilerException 
+	 */
+	public void sourceOpened(SourceDocumentInterface document) throws TraceCompilerException;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceErrorCodes.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Error codes for source parser
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Error codes for source parser
+ * 
+ */
+public interface SourceErrorCodes {
+
+	/**
+	 * Something unexpected happened while parsing source. This should be
+	 * asserted
+	 */
+	int UNEXPECTED_EXCEPTION = 0; // CodForChk_Dis_Magic
+
+	/**
+	 * Missing owner from source context. This should be asserted
+	 */
+	int CONTEXT_MISSING_OWNER = 1; // CodForChk_Dis_Magic
+
+	/**
+	 * Unexpected separator while parsing parameters
+	 */
+	int UNEXPECTED_PARAMETER_SEPARATOR = 2; // CodForChk_Dis_Magic
+
+	/**
+	 * Unexpected end of file while parsing
+	 */
+	int UNEXPECTED_END_OF_FILE = 3; // CodForChk_Dis_Magic
+
+	/**
+	 * Unexpected quote character was encountered
+	 */
+	int UNEXPECTED_QUOTE_CHARACTER = 4; // CodForChk_Dis_Magic
+
+	/**
+	 * Bracket mismatch
+	 */
+	int BRACKET_MISMATCH = 5; // CodForChk_Dis_Magic
+
+	/**
+	 * Offset / length was not valid
+	 */
+	int BAD_LOCATION = 6; // CodForChk_Dis_Magic
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceExcludedArea.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Comment or string ares are added to the excluded list
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Comment or string ares are added to the excluded list
+ * 
+ */
+public class SourceExcludedArea extends SourceLocationBase {
+
+	/**
+	 * Line comment type
+	 */
+	public static final int LINE_COMMENT = 1; // CodForChk_Dis_Magic
+
+	/**
+	 * Multiline comment type
+	 */
+	public static final int MULTILINE_COMMENT = 2; // CodForChk_Dis_Magic
+
+	/**
+	 * String type
+	 */
+	public static final int STRING = 3; // CodForChk_Dis_Magic
+
+	/**
+	 * Character type
+	 */
+	public static final int CHARACTER = 4; // CodForChk_Dis_Magic
+
+	/**
+	 * Preprocessor definition area
+	 */
+	public static final int PREPROCESSOR_DEFINITION = 5; // CodForChk_Dis_Magic
+
+	/**
+	 * Type of area
+	 */
+	private int type;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parser
+	 *            the parser where this area belongs
+	 * @param offset
+	 *            offset to the area
+	 * @param type
+	 *            type of area
+	 */
+	SourceExcludedArea(SourceParser parser, int offset, int type) {
+		super(parser, offset);
+		this.type = type;
+	}
+
+	/**
+	 * Gets the type of this area
+	 * 
+	 * @return the type
+	 */
+	public int getType() {
+		return type;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceIterator.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,352 @@
+/*
+* Copyright (c) 2007 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:
+*
+* SourceIterator can be used to traverse through the source file character at a time
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * SourceIterator can be used to traverse through the source file character at a
+ * time.
+ * 
+ */
+public class SourceIterator {
+
+	/**
+	 * The source parser
+	 */
+	private SourceParser parser;
+
+	/**
+	 * Index of next excluded area
+	 */
+	private int nextExcludedIndex;
+
+	/**
+	 * The type of next excluded area
+	 */
+	private int nextExcludedAreaType;
+
+	/**
+	 * Offset to the start of next excluded area
+	 */
+	private int nextExcludedStart;
+
+	/**
+	 * Offset to the end of next excluded area
+	 */
+	private int nextExcludedEnd;
+
+	/**
+	 * Index of next character to be fetched
+	 */
+	private int nextIndex;
+
+	/**
+	 * Index of character returned by latest call to next
+	 */
+	private int currentIndex;
+
+	/**
+	 * Index of character returned by previous call to next
+	 */
+	private int previousIndex;
+
+	/**
+	 * Search flags
+	 */
+	private int flags;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parser
+	 *            source parser
+	 * @param startIndex
+	 *            the index where to start
+	 * @param flags
+	 *            the iterator flags
+	 */
+	SourceIterator(SourceParser parser, int startIndex, int flags) {
+		SourceDocumentInterface source = parser.getSource();
+		if (startIndex >= source.getLength()
+				&& ((flags & SourceParser.BACKWARD_SEARCH) != 0)) {
+			nextIndex = source.getLength() - 1;
+		} else {
+			nextIndex = startIndex;
+		}
+		this.parser = parser;
+		this.flags = flags;
+		if (hasNext()) {
+			boolean forward = (flags & SourceParser.BACKWARD_SEARCH) == 0;
+			nextExcludedIndex = parser.findExcludedAreaIndex(nextIndex);
+			if (nextExcludedIndex < 0) {
+				nextExcludedIndex = -1 - nextExcludedIndex;
+				if (forward) {
+					// Update increments the index, so it must be moved behind
+					// the start of search
+					nextExcludedIndex--;
+				}
+			}
+			// Increments / decrements the next excluded area according to
+			// search direction. If direction is backward, this decrements the
+			// index. In that case the above initialization has selected the
+			// index after the start of search index. If direction is forward,
+			// this increments the index.
+			updateExcludedIndex();
+			// After the excluded index has been set, the white spaces and
+			// comments are skipped
+			if (forward) {
+				forwardSeekNext();
+			} else {
+				backwardSeekNext();
+			}
+			previousIndex = startIndex;
+			currentIndex = startIndex;
+		}
+	}
+
+	/**
+	 * Determines if there are more characters to process
+	 * 
+	 * @return true if iterator has more characters
+	 */
+	public boolean hasNext() {
+		return (flags & SourceParser.BACKWARD_SEARCH) == 0 ? nextIndex < parser
+				.getSource().getLength() : nextIndex >= 0;
+	}
+
+	/**
+	 * Gets the next character from this iterator
+	 * 
+	 * @return the next character
+	 * @throws SourceParserException
+	 *             if there are no more characters
+	 */
+	public char next() throws SourceParserException {
+		char ret;
+		previousIndex = currentIndex;
+		currentIndex = nextIndex;
+		if ((flags & SourceParser.BACKWARD_SEARCH) == 0) {
+			ret = forwardNext();
+		} else {
+			ret = backwardNext();
+		}
+		return ret;
+	}
+
+	/**
+	 * Returns next character moving forward
+	 * 
+	 * @return the character
+	 * @throws SourceParserException
+	 *             if there are no more characters
+	 */
+	private char forwardNext() throws SourceParserException {
+		char c = parser.getSource().getChar(nextIndex);
+		nextIndex++;
+		forwardSeekNext();
+		return c;
+	}
+
+	/**
+	 * Skips to next index
+	 */
+	private void forwardSeekNext() {
+		// Skips over the excluded area if the index enters one
+		boolean didSkip;
+		SourceDocumentInterface source = parser.getSource();
+		try {
+			do {
+				didSkip = false;
+				if (nextIndex >= nextExcludedStart && nextExcludedStart != -1) {
+					// Skips if applicable. Otherwise just updates the next
+					// excluded
+					// area variables
+					if (isExcluded()) {
+						nextIndex = nextExcludedEnd;
+					}
+					updateExcludedIndex();
+				}
+				if ((flags & SourceParser.SKIP_WHITE_SPACES) != 0) {
+					// Skips over white spaces
+					boolean wspFound = true;
+					do {
+						// If a white space is skipped, the excluded area check
+						// needs to be done again. didSkip flag controls that
+						if (nextIndex < source.getLength()
+								&& Character.isWhitespace(source
+										.getChar(nextIndex))) {
+							nextIndex++;
+							didSkip = true;
+						} else {
+							wspFound = false;
+						}
+					} while (wspFound);
+				}
+			} while (didSkip);
+		} catch (SourceParserException e) {
+			// The exception must not be thrown out of this function
+		}
+	}
+
+	/**
+	 * Returns next character moving backward
+	 * 
+	 * @return the character
+	 * @throws SourceParserException
+	 *             if there are no more characters
+	 */
+	private char backwardNext() throws SourceParserException {
+		char c = parser.getSource().getChar(nextIndex);
+		nextIndex--;
+		backwardSeekNext();
+		return c;
+	}
+
+	/**
+	 * Skips to previous index
+	 */
+	private void backwardSeekNext() {
+		// Skips over the excluded area if the index enters one
+		boolean didSkip;
+		SourceDocumentInterface source = parser.getSource();
+		try {
+			do {
+				didSkip = false;
+				if (nextIndex <= nextExcludedEnd - 1) {
+					// Skips if applicable. Otherwise just updates the next
+					// excluded
+					// area variables
+					if (isExcluded()) {
+						nextIndex = nextExcludedStart - 1;
+					}
+					updateExcludedIndex();
+				}
+				if ((flags & SourceParser.SKIP_WHITE_SPACES) != 0) {
+					boolean wspFound = true;
+					do {
+						// If a white space is skipped, the excluded area check
+						// needs to be done again. didSkip flag controls that
+						if (nextIndex >= 0
+								&& Character.isWhitespace(source
+										.getChar(nextIndex))) {
+							nextIndex--;
+							didSkip = true;
+						} else {
+							wspFound = false;
+						}
+					} while (wspFound);
+				}
+			} while (didSkip);
+		} catch (SourceParserException e) {
+			// The exception must not be thrown out of this function
+		}
+	}
+
+	/**
+	 * Updates the excluded area index
+	 */
+	private void updateExcludedIndex() {
+		if ((flags & SourceParser.BACKWARD_SEARCH) == 0) {
+			nextExcludedIndex++;
+		} else {
+			nextExcludedIndex--;
+		}
+		// Updates the values using the next excluded area
+		if (nextExcludedIndex >= 0
+				&& nextExcludedIndex < parser.getExcludedAreas().size()) {
+			SourceExcludedArea p = parser.getExcludedAreas().get(
+					nextExcludedIndex);
+			nextExcludedStart = p.getOffset();
+			nextExcludedEnd = p.getOffset() + p.getLength();
+			nextExcludedAreaType = p.getType();
+		} else {
+			nextExcludedStart = -1;
+			nextExcludedEnd = -1;
+		}
+	}
+
+	/**
+	 * Returns the index where the next character will be fetched
+	 * 
+	 * @return the index
+	 */
+	public int nextIndex() {
+		return nextIndex;
+	}
+
+	/**
+	 * Gets the index of the character returned by last call to next
+	 * 
+	 * @return the index
+	 */
+	public int currentIndex() {
+		return currentIndex;
+	}
+
+	/**
+	 * Gets the index that preceeded the latest call to next
+	 * 
+	 * @return the index
+	 */
+	public int previousIndex() {
+		return previousIndex;
+	}
+
+	/**
+	 * Gets the next character but does not move the iterator
+	 * 
+	 * @return the next character
+	 * @throws SourceParserException
+	 *             if there are no more characters
+	 */
+	public char peek() throws SourceParserException {
+		return parser.getSource().getChar(nextIndex);
+	}
+
+	/**
+	 * Determines if the iterator skipped over characters during last call to
+	 * next
+	 * 
+	 * @return true if skipped, false otherwise
+	 */
+	public boolean hasSkipped() {
+		return (flags & SourceParser.BACKWARD_SEARCH) == 0 ? currentIndex > previousIndex + 1
+				: currentIndex < previousIndex - 1;
+	}
+
+	/**
+	 * Checks if the next area is skipped
+	 * 
+	 * @return true is skipped
+	 */
+	private boolean isExcluded() {
+		return isExcluded(nextExcludedAreaType);
+	}
+
+	/**
+	 * Checks if the given type is skipped
+	 * 
+	 * @param type
+	 *            the type
+	 * @return true is skipped
+	 */
+	private boolean isExcluded(int type) {
+		return SourceParser.isExcluded(type, flags);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceLocation.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Represents a location in source
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Represents a location in source
+ * 
+ */
+public class SourceLocation extends SourceLocationBase {
+
+	/**
+	 * Location listeners
+	 */
+	private ArrayList<SourceLocationListener> locationListeners;
+
+	/**
+	 * Temporary array for callback purposes. Prevents concurrent modifications
+	 * if listeners are removed during a callback
+	 */
+	private ArrayList<SourceLocationListener> tempListeners;
+
+	/**
+	 * Reference count
+	 */
+	private int refCount = 0;
+
+	/**
+	 * Listener change flag
+	 */
+	private boolean listenersChanged = true;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parser
+	 *            the parser owning this location
+	 * @param offset
+	 *            offset of location
+	 * @param length
+	 *            length of location
+	 */
+	public SourceLocation(SourceParser parser, int offset, int length) {
+		super(parser, offset, length);
+		parser.addLocation(this);
+		refCount = 1;
+	}
+
+	/**
+	 * Gets the name of the class which owns this location
+	 * 
+	 * @return the class name
+	 */
+	public String getClassName() {
+		String retval = null;
+		if (getParser() != null) {
+			SourceContext context = getParser().getContext(getOffset());
+			if (context != null) {
+				retval = context.getClassName();
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets the name of function which owns this location
+	 * 
+	 * @return the function name
+	 */
+	public String getFunctionName() {
+		String retval = null;
+		if (getParser() != null) {
+			SourceContext context = getParser().getContext(getOffset());
+			if (context != null) {
+				retval = context.getFunctionName();
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Adds a location listener to this location
+	 * 
+	 * @param listener
+	 *            the location listener
+	 */
+	public void addLocationListener(SourceLocationListener listener) {
+		if (locationListeners == null) {
+			locationListeners = new ArrayList<SourceLocationListener>();
+		}
+		locationListeners.add(listener);
+		listenersChanged = true;
+	}
+
+	/**
+	 * Removes a location listener from this location
+	 * 
+	 * @param listener
+	 *            the location listener
+	 */
+	public void removeLocationListener(SourceLocationListener listener) {
+		if (locationListeners != null) {
+			if (locationListeners.remove(listener)) {
+				listenersChanged = true;
+			}
+		}
+	}
+
+	/**
+	 * Gets the listener interfaces
+	 * 
+	 * @return the listeners
+	 */
+	protected Iterator<SourceLocationListener> getListeners() {
+		List<SourceLocationListener> list;
+		if (locationListeners != null) {
+			if (listenersChanged) {
+				listenersChanged = false;
+				if (tempListeners == null) {
+					tempListeners = new ArrayList<SourceLocationListener>();
+				}
+				tempListeners.clear();
+				tempListeners.addAll(locationListeners);
+			}
+			list = tempListeners;
+		} else {
+			list = Collections.emptyList();
+		}
+		return list.iterator();
+	}
+
+	/**
+	 * Increases the reference count of this location.
+	 * 
+	 * @see #dereference()
+	 */
+	public void reference() {
+		refCount++;
+	}
+
+	/**
+	 * Decrements the reference count of this location. When reference count is
+	 * 0, this is removed from source. Note that a location can also be removed
+	 * from source even if it has outstanding references left. In that case it
+	 * can no longer be selected.
+	 */
+	public void dereference() {
+		if (--refCount <= 0) {
+			removeFromSource();
+		}
+	}
+
+	/**
+	 * Removes this location from the source
+	 */
+	private void removeFromSource() {
+		delete();
+		if (getParser() != null) {
+			getParser().removeLocation(this);
+			resetParser();
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceLocationBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,215 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for locations
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Base class for locations
+ * 
+ */
+public class SourceLocationBase {
+
+	/**
+	 * Source parser
+	 */
+	private SourceParser parser;
+
+	/**
+	 * Position abstraction
+	 */
+	private SourceLocationInterface position;
+
+	/**
+	 * Line number is cached and updated when changes occur
+	 */
+	private int currentLine = -1;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parser
+	 *            the source parser
+	 * @param offset
+	 *            the offset to the location
+	 */
+	protected SourceLocationBase(SourceParser parser, int offset) {
+		this.parser = parser;
+		position = parser.getDocumentFramework()
+				.createLocation(this, offset, 0);
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parser
+	 *            the source parser
+	 * @param offset
+	 *            the offset to the location
+	 * @param length
+	 *            the location length
+	 */
+	protected SourceLocationBase(SourceParser parser, int offset, int length) {
+		this.parser = parser;
+		position = parser.getDocumentFramework().createLocation(this, offset,
+				length);
+	}
+
+	/**
+	 * Gets the offset
+	 * 
+	 * @return offset
+	 */
+	public final int getOffset() {
+		return position.getOffset();
+	}
+
+	/**
+	 * Sets the offset
+	 * 
+	 * @param offset
+	 *            new offset
+	 */
+	public final void setOffset(int offset) {
+		position.setOffset(offset);
+	}
+
+	/**
+	 * Gets the length
+	 * 
+	 * @return length
+	 */
+	public final int getLength() {
+		return position.getLength();
+	}
+
+	/**
+	 * Sets the length
+	 * 
+	 * @param length
+	 *            the length
+	 */
+	public final void setLength(int length) {
+		position.setLength(length);
+	}
+
+	/**
+	 * Returns deleted flag
+	 * 
+	 * @return the flag
+	 */
+	public final boolean isDeleted() {
+		return position.isDeleted();
+	}
+
+	/**
+	 * Sets the deleted flag
+	 */
+	public final void delete() {
+		position.delete();
+	}
+
+	/**
+	 * Gets the location interface
+	 * 
+	 * @return the location interface
+	 */
+	final SourceLocationInterface getLocation() {
+		return position;
+	}
+
+	/**
+	 * Gets the source parser
+	 * 
+	 * @return the parser
+	 */
+	public SourceParser getParser() {
+		return parser;
+	}
+
+	/**
+	 * Resets the source parser
+	 */
+	protected void resetParser() {
+		parser = null;
+	}
+
+	/**
+	 * Gets the line number of this location
+	 * 
+	 * @return line number
+	 */
+	public int getLineNumber() {
+		// Line number is set to -1 when notifyUpdate is called
+		if (parser != null) {
+			if (currentLine == -1) {
+				currentLine = parser.getLineNumber(getOffset());
+			}
+		} else {
+			currentLine = -1;
+		}
+		return currentLine;
+	}
+
+	/**
+	 * Resets the line number
+	 */
+	protected void resetLineNumber() {
+		currentLine = -1;
+	}
+
+	/**
+	 * Gets the source file name
+	 * 
+	 * @return the file name
+	 */
+	public String getFileName() {
+		String retval = null;
+		if (parser != null) {
+			SourceDocumentInterface owner = parser.getSource();
+			if (owner != null) {
+				SourcePropertyProvider propertyProvider = owner
+						.getPropertyProvider();
+				if (propertyProvider != null) {
+					retval = propertyProvider.getFileName();
+				}
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets the source file path
+	 * 
+	 * @return the path
+	 */
+	public String getFilePath() {
+		String retval = null;
+		if (parser != null) {
+			SourceDocumentInterface owner = parser.getSource();
+			if (owner != null) {
+				SourcePropertyProvider propertyProvider = owner
+						.getPropertyProvider();
+				if (propertyProvider != null) {
+					retval = propertyProvider.getFilePath();
+				}
+			}
+		}
+		return retval;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceLocationInterface.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Interface which abstracts the underlying position framework
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Interface which abstracts the underlying position framework
+ * 
+ */
+public interface SourceLocationInterface {
+
+	/**
+	 * Gets the offset of the location
+	 * 
+	 * @return the offset
+	 */
+	int getOffset();
+
+	/**
+	 * Sets the offset
+	 * 
+	 * @param offset
+	 *            the new offset
+	 */
+	void setOffset(int offset);
+
+	/**
+	 * Gets the length of the location
+	 * 
+	 * @return the length
+	 */
+	int getLength();
+
+	/**
+	 * Sets the length
+	 * 
+	 * @param length
+	 *            the length
+	 */
+	void setLength(int length);
+
+	/**
+	 * Checks if the location has been deleted
+	 * 
+	 * @return true if deleted
+	 */
+	boolean isDeleted();
+
+	/**
+	 * Marks the location as deleted
+	 */
+	void delete();
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceLocationListener.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Listener for source locations
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import com.nokia.tracecompiler.engine.TraceLocation;
+
+/**
+ * Listener for source locations
+ * 
+ */
+public interface SourceLocationListener {
+
+	/**
+	 * Notification that location validity has changed
+	 * 
+	 * @param location
+	 *            the location that changed
+	 */
+	public void locationValidityChanged(TraceLocation location);	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceParameter.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,238 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Representation of a parameter parsed from source
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.ArrayList;
+
+/**
+ * Representation of a parameter parsed from source
+ * 
+ */
+public class SourceParameter implements ParsedType {
+
+	/**
+	 * Parameter qualifiers
+	 */
+	private ArrayList<String> qualifiers;
+
+	/**
+	 * Parameter type
+	 */
+	private String type;
+
+	/**
+	 * Parameter name
+	 */
+	private String name;
+
+	/**
+	 * Flag specifying if parameter is reference
+	 */
+	private boolean isReference;
+
+	/**
+	 * Number of pointers in parameter
+	 */
+	private int pointerCount;
+
+	/**
+	 * The location of this parameter in source
+	 */
+	private SourceLocation location;
+
+	/**
+	 * Gets the parameter type
+	 * 
+	 * @return the type
+	 */
+	public String getType() {
+		return type;
+	}
+
+	/**
+	 * Gets the parameter name or null if parameter does not have a name
+	 * 
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Checks if parameter is pointer (*) or pointer reference (*&)
+	 * 
+	 * @return true if pointer, false if not
+	 */
+	public boolean isPointer() {
+		return pointerCount > 0;
+	}
+
+	/**
+	 * Gets the number of pointers
+	 * 
+	 * @return the number of pointers
+	 */
+	public int getPointerCount() {
+		return pointerCount;
+	}
+
+	/**
+	 * Checks if a parameter is referece (&) or pointer reference (*&)
+	 * 
+	 * @return true if reference, false if not
+	 */
+	public boolean isReference() {
+		return isReference;
+	}
+
+	/**
+	 * Checks if paraemter is pointer (*), but not pointer reference (*&). Equal
+	 * to isPointer() && !isReference()
+	 * 
+	 * @return true if pointer, but not reference
+	 */
+	public boolean isPlainPointer() {
+		return pointerCount > 0 && !isReference;
+	}
+
+	/**
+	 * Checks if parameter is reference (&), but not pointer reference (*&).
+	 * Equal to !isPointer() && isReference()
+	 * 
+	 * @return true if reference to value
+	 */
+	public boolean isPlainReference() {
+		return pointerCount == 0 && isReference;
+	}
+
+	/**
+	 * Checks if parameter is a reference to a pointer (*&). Equal to
+	 * isPointer() && isReference()
+	 * 
+	 * @return true if reference to a pointer
+	 */
+	public boolean isPointerReference() {
+		return pointerCount > 0 && isReference;
+	}
+
+	/**
+	 * Checks if parameter is pointer (*) or reference (&). Equal to isPointer() ||
+	 * isReference()
+	 * 
+	 * @return true if pointer or reference
+	 */
+	public boolean isPointerOrReference() {
+		return pointerCount > 0 || isReference;
+	}
+
+	/**
+	 * Checks if parameter type equals given type
+	 * 
+	 * @param type
+	 *            the type to be checked
+	 * @return true if types match
+	 */
+	public boolean typeEquals(String type) {
+		return this.type != null && type != null && this.type.equals(type);
+	}
+
+	/**
+	 * Returns the source reference of this parameter
+	 * 
+	 * @return the source reference
+	 */
+	public SourceLocation getSourceLocation() {
+		return location;
+	}
+
+	/**
+	 * Sets the parameter type
+	 * 
+	 * @param type
+	 *            the new type
+	 */
+	void setType(String type) {
+		this.type = type;
+	}
+
+	/**
+	 * Sets the parameter name
+	 * 
+	 * @param name
+	 *            the new name
+	 */
+	void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * Sets the reference flag
+	 */
+	void setReference() {
+		isReference = true;
+	}
+
+	/**
+	 * Increments the pointer count
+	 */
+	void addPointer() {
+		pointerCount++;
+	}
+
+	/**
+	 * Adds a qualifier to this parameter
+	 * 
+	 * @param type
+	 *            the qualifier type
+	 */
+	void addQualifier(String type) {
+		if (qualifiers == null) {
+			qualifiers = new ArrayList<String>();
+		}
+		qualifiers.add(type);
+	}
+
+	/**
+	 * Sets the source location of this parameter
+	 * 
+	 * @param location
+	 *            the location
+	 */
+	void setSourceLocation(SourceLocation location) {
+		this.location = location;
+	}
+
+	/**
+	 * Checks if a qualifier exists
+	 * 
+	 * @param qualifier
+	 *            the qualifier to be checked
+	 * @return true if it exists
+	 */
+	public boolean hasQualifier(String qualifier) {
+		boolean retval;
+		if (qualifiers != null) {
+			retval = qualifiers.contains(qualifier);
+		} else {
+			retval = false;
+		}
+		return retval;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceParameterTokenizer.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,440 @@
+/*
+* Copyright (c) 2010 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:
+*
+* Parameter tokenizer is used to parse function parameters lists
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.List;
+
+/**
+ * Parameter tokenizer is used to parse function parameters lists
+ * 
+ */
+public class SourceParameterTokenizer {
+
+	/**
+	 * The source parser
+	 */
+	private SourceParser parser;
+
+	/**
+	 * The offset where to start the tokenizer
+	 */
+	private int offset;
+
+	/**
+	 * Slip next whitespace
+	 */
+	private boolean skipNextWhiteSpace;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parser
+	 *            the source parser
+	 * @param offset
+	 *            offset to the start of parameter
+	 */
+	public SourceParameterTokenizer(SourceParser parser, int offset) {
+		this.parser = parser;
+		this.offset = offset;
+	}
+
+	/**
+	 * Parses a list of parameters (a, b, c) and stores the values into the
+	 * given list.
+	 * 
+	 * @param list
+	 *            the list of parameters
+	 * @param findSeparator
+	 *            if true, the processing stops after ';' or '{' character. If
+	 *            false, processing stops after ')' at end of parameters
+	 * @return index at end of parameters
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	public int tokenize(List<String> list, boolean findSeparator)
+			throws SourceParserException {
+		TokenizerSearchData data = new TokenizerSearchData();
+		data.itr = parser.createIterator(offset, SourceParser.SKIP_WHITE_SPACES
+				| SourceParser.SKIP_COMMENTS);
+		boolean bracketsOpened = false;
+		boolean finished = false;
+		while (data.itr.hasNext() && !finished) {
+			data.value = data.itr.next();
+			if (!data.inQuotes && data.value == '\"') {
+				data.inQuotes = true;
+				data.hasData = true;
+			} else if (data.inQuotes) {
+				processInQuotesChar(data);
+			} else if (data.complete) {
+				processEndOfParametersChar(data);
+			} else if (data.value == '(') {
+				bracketsOpened = true;
+				processOpeningBracket(data);
+			} else if (data.value == ',' || data.value == ')') {
+				processCommaOrClosingBracket(list, data);
+			} else if (data.value == ';' && data.openBracketCount != 0 || data.value == '{'
+					|| data.value == '}' ) {
+				throw new SourceParserException(
+						SourceErrorCodes.UNEXPECTED_PARAMETER_SEPARATOR);
+			} else {
+				// Raises a flag that there is some data. processOpeningBracket
+				// no longer interprets the next bracket as opening bracket
+				if (data.openBracketCount > 0) {
+					data.hasData = true;
+				}
+			}
+			finished = ((data.complete && !findSeparator) || (data.endFound && findSeparator));
+			if (bracketsOpened && data.openBracketCount == 0) {
+				data.complete = true;
+				break;
+			}
+		}
+		if (!data.complete) {
+			throw new SourceParserException(
+					SourceErrorCodes.UNEXPECTED_END_OF_FILE);
+		}
+		if (data.openBracketCount != 0) {
+			throw new SourceParserException(SourceErrorCodes.BRACKET_MISMATCH);
+		}
+		
+		
+		return data.itr.currentIndex() + 1;
+	}
+
+	/**
+	 * Parses list of parameters with types (int a, int b, int c) and stores the
+	 * values into the given list.
+	 * 
+	 * @param list
+	 *            the list of parameters
+	 * @return index at end of parameters
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	public int tokenizeTyped(List<SourceParameter> list) 
+			throws SourceParserException {
+		TokenizerSearchData data = new TokenizerSearchData();
+
+		try {
+			data.itr = parser
+					.createIterator(offset, SourceParser.SKIP_WHITE_SPACES
+							| SourceParser.SKIP_COMMENTS);
+			data.sourceParameter = new SourceParameter();
+			while (data.itr.hasNext() && !data.complete) {
+				data.value = data.itr.next();
+
+				// Check if there was array start or end character and then
+				// space. It would mean that the parameter continues and more
+				// should be parsed.
+				if (skipNextWhiteSpace) {
+					skipNextWhiteSpace = false;
+					if (data.itr.hasSkipped()) {
+						data.value = data.itr.next();
+					}
+				}
+
+				if (data.value == '\"') {
+					throw new SourceParserException(
+							SourceErrorCodes.UNEXPECTED_QUOTE_CHARACTER);
+				} else if (data.value == '(') {
+					processOpeningBracket(data);
+				} else if (data.value == ',' || data.value == ')') {
+					processCommaOrClosingBracket(list, data);
+				} else if (data.value == ';' || data.value == '{'
+						|| data.value == '}') {
+					data.complete = true;
+					// Array start or end character.
+				} else if (data.value == '<' || data.value == '>') {
+					skipNextWhiteSpace = true;
+				} else if (data.itr.hasSkipped() && data.openBracketCount > 0) {
+					processNameValueSeparator(data);
+				}
+			}
+			if (!data.complete) {
+				throw new SourceParserException(
+						SourceErrorCodes.UNEXPECTED_END_OF_FILE);
+			}
+		} catch (SourceParserException e) {
+			// Resets all source locations if parser fails
+			for (int i = 0; i < list.size(); i++) {
+				list.get(i).getSourceLocation().dereference();
+			}
+			throw e;
+		}
+		return data.itr.currentIndex() + 1;
+	}
+
+	/**
+	 * Processes a separator character and updates the current SourceParameter
+	 * object in the search data
+	 * 
+	 * @param data
+	 *            the search data
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void processNameValueSeparator(TokenizerSearchData data)
+			throws SourceParserException {
+		// If the parameter is empty, the previous index will point
+		// to index preceeding tagStartIndex
+		int previous = data.itr.previousIndex();
+		if (previous >= data.tagStartIndex) {
+			int endIndex = previous + 1;
+			if (data.sourceParameter.getType() == null) {
+				processNameValueSeparatorNoType(data, endIndex);
+			} else if (data.sourceParameter.getName() == null) {
+				processNameValueSeparatorNoName(data, endIndex);
+			}
+			data.tagStartIndex = data.itr.currentIndex();
+		}
+	}
+
+	/**
+	 * Processes a name-value separator when there is no name
+	 * 
+	 * @param data
+	 *            the search data
+	 * @param endIndex
+	 *            the end index of the parameters
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void processNameValueSeparatorNoName(TokenizerSearchData data,
+			int endIndex) throws SourceParserException {
+		String name = parser.getSource().get(data.tagStartIndex,
+				endIndex - data.tagStartIndex);
+		boolean startFound = false;
+		int start = 0;
+		int end = name.length();
+		for (int i = 0; i < name.length(); i++) {
+			char c = name.charAt(i);
+			if (c == '&' || c == '*') {
+				if (c == '&') {
+					data.sourceParameter.setReference();
+				} else {
+					data.sourceParameter.addPointer();
+				}
+				if (!startFound) {
+					start++;
+				} else {
+					end--;
+				}
+			} else {
+				startFound = true;
+			}
+		}
+		name = name.substring(start, end);
+		if (name.length() > 0) {
+			if (isParameterTypeQualifier(name)) {
+				// Qualifiers between type and name are ignored
+				// For example TInt const* aValue
+			} else {
+				data.sourceParameter.setName(name);
+			}
+		}
+	}
+
+	/**
+	 * Processes a name-value separator when there is no value
+	 * 
+	 * @param data
+	 *            the search data
+	 * @param endIndex
+	 *            the end index of the parameters
+	 * @throws SourceParserException
+	 *             if processing fails
+	 */
+	private void processNameValueSeparatorNoType(TokenizerSearchData data,
+			int endIndex) throws SourceParserException {
+		String type = parser.getSource().get(data.tagStartIndex,
+				endIndex - data.tagStartIndex);
+		if (isParameterTypeQualifier(type)) {
+			data.sourceParameter.addQualifier(type);
+		} else {
+			for (int i = type.length() - 1; i >= 0; i--) {
+				if (type.charAt(i) == '&') {
+					data.sourceParameter.setReference();
+					if (i == 0) {
+						type = ""; //$NON-NLS-1$
+					}
+				} else if (type.charAt(i) == '*') {
+					data.sourceParameter.addPointer();
+					if (i == 0) {
+						type = ""; //$NON-NLS-1$
+					}
+				} else {
+					if (i != type.length() - 1) {
+						type = type.substring(0, i + 1);
+					}
+					i = -1;
+				}
+			}
+			if (type.length() > 0) {
+				// Remove spaces
+				type = type.replace(" ", ""); //$NON-NLS-1$ //$NON-NLS-2$
+				data.sourceParameter.setType(type);
+			}
+		}
+	}
+
+	/**
+	 * Checks if parameter type if a qualifier or not
+	 * 
+	 * @param type
+	 *            the type to be checked
+	 * @return true if qualifier, false if not
+	 */
+	private boolean isParameterTypeQualifier(String type) {
+		boolean retval = false;
+		for (String element : SourceConstants.PARAMETER_QUALIFIERS) {
+			if (type.equals(element)) {
+				retval = true;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Processes a parameter separator or closing bracket
+	 * 
+	 * @param list
+	 *            the list of existing parameters
+	 * @param data
+	 *            the search data
+	 * @throws SourceParserException
+	 *             if invalid character is encountered
+	 */
+	@SuppressWarnings("unchecked")
+	private void processCommaOrClosingBracket(List list,
+			TokenizerSearchData data) throws SourceParserException {
+		// This method is called from both tokenize functions. One uses
+		// List<String> and other List<SourceParameter>
+		// Thus this uses List and @SuppressWarnings
+		if (data.value == ')') {
+			data.openBracketCount--;
+		}
+		
+		if (data.value == ',') {
+			//we may have the case of OstTraceDef1( OST_TRACE_CATEGORY_ALL, TRACE_FATAL, TEST_OstTraceDef1, "EOstTraceDef1 - %u" , f(a,b));
+			//when processing the comma in f(a,b) that should not count as parameter separator
+			if (data.openBracketCount >1 ) {
+				return;
+			}
+		}
+		
+		if (data.value == ',' || data.openBracketCount == 0) {
+			//we have another parameter
+			if (data.sourceParameter != null) {
+				// If processing typed parameter list, the name and type are
+				// stored into a SourceParameter object, which is then added
+				// to list
+				processNameValueSeparator(data);
+				if (data.sourceParameter.getType() != null) {
+					SourceLocation location = new SourceLocation(parser,
+							data.paramStartIndex, data.itr.currentIndex()
+									- data.paramStartIndex);
+					data.sourceParameter.setSourceLocation(location);
+					list.add(data.sourceParameter);
+					data.sourceParameter = new SourceParameter();
+				}
+			} else {
+				// In this case the list contains strings.
+				int previous = data.itr.previousIndex();
+				String tracepoint = ""; //$NON-NLS-1$
+				if (previous >= data.tagStartIndex) {
+					int endIndex = data.itr.previousIndex() + 1;
+					tracepoint = parser.getSource().get(data.tagStartIndex,
+							endIndex - data.tagStartIndex);
+					list.add(tracepoint);
+				} else {
+					list.add(tracepoint);
+				}	
+			}
+			
+			// In case like below we have parsed all parameters and data is completed if next character after ')' is ':' 
+			// and open bracket count is 0:
+			// 		CNpeSendData::CNpeSendData(RMeDriver* aDriver, TUint16 aMaxMsgLength): CActive(EPriorityStandard),
+			//				iDriver(aDriver),
+			//				iMaxMsgLength(aMaxMsgLength)
+			if (data.itr.hasNext()){
+				char nextChar = data.itr.peek();
+				
+				if (data.value == ')' &&  nextChar == ':' && data.openBracketCount == 0) {
+					data.complete = true;
+				}
+			}
+			
+			if (data.value == ',') {
+				data.tagStartIndex = data.itr.nextIndex();
+				data.paramStartIndex = data.tagStartIndex;
+			}
+		}
+	}
+
+	/**
+	 * Processes an opening bracket
+	 * 
+	 * @param data
+	 *            the search data
+	 */
+	private void processOpeningBracket(TokenizerSearchData data) {
+		data.openBracketCount++;
+		if (!data.hasData && data.openBracketCount == 1 ) {
+			// The number of initial '(' characters is stored. The
+			// parameters are assumed to end when the corresponding ')'
+			// character is encountered
+			data.tagStartIndex = data.itr.nextIndex();
+			data.paramStartIndex = data.tagStartIndex;
+			data.initialBracketCount = data.openBracketCount;
+		}
+	}
+
+	/**
+	 * Process a character when in quotes
+	 * 
+	 * @param data
+	 *            the search data
+	 */
+	private void processInQuotesChar(TokenizerSearchData data) {
+		if (data.value == '\"' && data.previousValue != '\\') {
+			data.inQuotes = false;
+		}
+		data.previousValue = data.value;
+	}
+
+	/**
+	 * Processes a character found after the closing bracket
+	 * 
+	 * @param data
+	 *            the data
+	 * @throws SourceParserException
+	 *             if invalid characters are found
+	 */
+	private void processEndOfParametersChar(TokenizerSearchData data)
+			throws SourceParserException {
+		if (data.value == ';' || data.value == '{') {
+			data.endFound = true;
+		} else if (data.value == ')') {
+			data.openBracketCount--;
+		} else if (!Character.isWhitespace(data.value)) {
+			throw new SourceParserException(SourceErrorCodes.BRACKET_MISMATCH);
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceParser.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,485 @@
+/*
+* Copyright (c) 2008-2010 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:
+*
+* Parser for C++ source files
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Parser for C++ source files. Commented and quoted areas are located during
+ * the construction of this object and those areas are excluded from the
+ * searches.
+ * 
+ */
+public class SourceParser {
+
+	/**
+	 * Skip white spaces. Does not apply to string searches
+	 */
+	public final static int SKIP_WHITE_SPACES = 0x01; // CodForChk_Dis_Magic
+
+	/**
+	 * Skip string areas
+	 */
+	public final static int SKIP_STRINGS = 0x02; // CodForChk_Dis_Magic
+
+	/**
+	 * Search / iterate backwards
+	 */
+	public final static int BACKWARD_SEARCH = 0x04; // CodForChk_Dis_Magic
+
+	/**
+	 * Ignore character case in string searches
+	 */
+	public final static int IGNORE_CASE = 0x08; // CodForChk_Dis_Magic
+
+	/**
+	 * Skip commented areas
+	 */
+	public final static int SKIP_COMMENTS = 0x10; // CodForChk_Dis_Magic
+
+	/**
+	 * Skip preprocessor definitions
+	 */
+	public final static int SKIP_PREPROCESSOR = 0x80; // CodForChk_Dis_Magic
+
+	/**
+	 * Match beginning of word flag
+	 */
+	public final static int MATCH_WORD_BEGINNING = 0x20; // CodForChk_Dis_Magic
+
+	/**
+	 * Match end of word flag
+	 */
+	public final static int MATCH_WORD_END = 0x40; // CodForChk_Dis_Magic
+
+	/**
+	 * Match whole word flag
+	 */
+	public final static int MATCH_WHOLE_WORD = MATCH_WORD_BEGINNING
+			| MATCH_WORD_END;
+
+	/**
+	 * Ignore all special areas during search
+	 */
+	public final static int SKIP_ALL = SKIP_WHITE_SPACES | SKIP_STRINGS
+			| SKIP_COMMENTS | SKIP_PREPROCESSOR;
+
+	/**
+	 * Data to be searched.
+	 */
+	private SourceDocumentInterface source;
+
+	/**
+	 * List of source locations
+	 */
+	private ArrayList<SourceLocation> locations;
+
+	/**
+	 * Document factory for creating locations
+	 */
+	private SourceDocumentFactory documentFactory;
+
+	/**
+	 * Excluded area parser
+	 */
+	private ExcludedAreaParser excludedAreaParser;
+
+	/**
+	 * Context area parser
+	 */
+	private ContextAreaParser contextAreaParser;
+
+	/**
+	 * Function return value parser
+	 */
+	private FunctionReturnValueParser returnValueParser;
+
+	/**
+	 * Creates a new parser for given data
+	 * 
+	 * @param factory
+	 *            the document factory
+	 * @param sourceData
+	 *            the source data
+	 */
+	public SourceParser(SourceDocumentFactory factory, String sourceData) {
+		this(factory, factory.createDocument(sourceData));
+	}
+
+	/**
+	 * Creates a source parser from source document
+	 * 
+	 * @param factory
+	 *            the document factory
+	 * @param source
+	 *            the source document
+	 */
+	public SourceParser(SourceDocumentFactory factory,
+			SourceDocumentInterface source) {
+		this.documentFactory = factory;
+		this.source = source;
+		excludedAreaParser = new ExcludedAreaParser(this);
+		contextAreaParser = new ContextAreaParser(this);
+		returnValueParser = new FunctionReturnValueParser(this);
+		try {
+			findExcludedAreas();
+		} catch (SourceParserException e) {
+		}
+	}
+
+	/**
+	 * Gets the source document
+	 * 
+	 * @return the source
+	 */
+	public SourceDocumentInterface getSource() {
+		return source;
+	}
+
+	/**
+	 * Gets part of the source document data
+	 * 
+	 * @param start
+	 *            the start offset
+	 * @param length
+	 *            the data length
+	 * @return the data or null if offsets are not valid
+	 */
+	public String getData(int start, int length) {
+		String retval;
+		try {
+			retval = source.get(start, length);
+		} catch (SourceParserException e) {
+			retval = null;
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets a character at given offset
+	 * 
+	 * @param offset
+	 *            the offset
+	 * @return the character
+	 */
+	public char getData(int offset) {
+		char retval;
+		try {
+			retval = source.getChar(offset);
+		} catch (SourceParserException e) {
+			retval = '\0';
+		}
+		return retval;
+	}
+
+	/**
+	 * Gets the source document length
+	 * 
+	 * @return the source length
+	 */
+	public int getDataLength() {
+		return source.getLength();
+	}
+
+	/**
+	 * Gets the line number of given offset
+	 * 
+	 * @param offset
+	 *            the offset
+	 * @return the line number or -1 if offset is not valid
+	 */
+	public int getLineNumber(int offset) {
+		int retval;
+		try {
+			retval = source.getLineOfOffset(offset) + 1;
+		} catch (SourceParserException e) {
+			retval = -1;
+		}
+		return retval;
+	}
+
+	/**
+	 * Starts a new string search from given offset
+	 * 
+	 * @param searchString
+	 *            the string to be searched
+	 * @param startOffset
+	 *            the offset to start of search
+	 * @param endOffset
+	 *            the end of search or -1 to search the whole document
+	 * @param searchFlags
+	 *            the search flags
+	 * @return the search object
+	 */
+	public SourceStringSearch startStringSearch(String searchString,
+			int startOffset, int endOffset, int searchFlags) {
+		return new SourceStringSearch(this, searchString, startOffset,
+				endOffset, searchFlags);
+	}
+
+	/**
+	 * Tokenizes the parameter list starting from next bracket. White spaces are
+	 * discarded. For example (a, b , c ) returns { "a", "b", "c" }. This method
+	 * is independent of the current string search and thus can be used during
+	 * one.
+	 * 
+	 * @param startIndex
+	 *            the index where to start
+	 * @param list
+	 *            the list where the parameters are added
+	 * @param findSeparator
+	 *            if true, the processing stops after ';' or '{' character. If
+	 *            false, processing stops after ')' at end of parameters
+	 * @return the offset at end of the parameters
+	 * @throws SourceParserException
+	 *             if parameters are not valid
+	 */
+	public int tokenizeParameters(int startIndex, List<String> list,
+			boolean findSeparator) throws SourceParserException {
+		SourceParameterTokenizer tokenizer = new SourceParameterTokenizer(this,
+				startIndex);
+		return tokenizer.tokenize(list, findSeparator);
+	}
+
+	/**
+	 * Parses the parameter list of given source context. Each entry added into
+	 * the list will be an instance of SourceParameter class. This method is
+	 * independent of the current string search and thus can be used during one.
+	 * 
+	 * @param parameterIndex
+	 *            the index where to start
+	 * @param list
+	 *            the list where the parameters are added
+	 * @return the offset at end of the parameters
+	 * @throws SourceParserException
+	 *             if context is not valid
+	 */
+	public int parseFunctionParameters(int parameterIndex, List<SourceParameter> list)
+			throws SourceParserException {
+		SourceParameterTokenizer tokenizer = new SourceParameterTokenizer(this,
+				parameterIndex);
+		return tokenizer.tokenizeTyped(list);
+	}
+
+	/**
+	 * Parses the return values of given source context
+	 * 
+	 * @param context
+	 *            the context to be parsed
+	 * @param list
+	 *            the list of return values
+	 */
+	void parseReturnValues(SourceContext context, List<SourceReturn> list) {
+		returnValueParser.parseReturnValues(context, list);
+	}
+
+	/**
+	 * Checks if the offset if within an excluded area
+	 * 
+	 * @param offset
+	 *            the offset
+	 * @return true if in excluded area
+	 */
+	public boolean isInExcludedArea(int offset) {
+		return findExcludedAreaIndex(offset) >= 0;
+	}
+
+	/**
+	 * Gets an excluded area
+	 * 
+	 * @param offset
+	 *            the data offset
+	 * @return the area or null
+	 */
+	public SourceExcludedArea getExcludedArea(int offset) {
+		return excludedAreaParser.getArea(offset);
+	}
+
+	/**
+	 * Creates a new source iterator
+	 * 
+	 * @param offset
+	 *            the offset where to start
+	 * @param iteratorFlags
+	 *            the flags for the iterator
+	 * @return the new iterator
+	 */
+	public SourceIterator createIterator(int offset, int iteratorFlags) {
+		return new SourceIterator(this, offset, iteratorFlags);
+	}
+
+	/**
+	 * Returns the context at given offset. This parses the source if it has not
+	 * been parsed before.
+	 * 
+	 * @param offset
+	 *            the offset to the source data
+	 * @return the context at the offset or null if no context exists
+	 */
+	public SourceContext getContext(int offset) {
+		SourceContext retval;
+		try {
+			retval = contextAreaParser.parseAndGet(offset);
+		} catch (SourceParserException e) {
+			retval = null;
+		}
+		return retval;
+	}
+
+	/**
+	 * Locates the start-of-line starting from given offset
+	 * 
+	 * @param offset
+	 *            the offset
+	 * @param cancelIfNotWhitespace
+	 *            flag that tells to stop processing and return the original
+	 *            value if a non-whitespace is found before start of line
+	 * @param stayInContext
+	 *            flag that tells to stay within the context offset currently
+	 *            resides. If this would come out of the context, this locates
+	 *            the start of the next line following offset
+	 * @return the start-of-line
+	 * @throws SourceParserException
+	 *             if the offset is not valid
+	 */
+	public int findStartOfLine(int offset, boolean cancelIfNotWhitespace,
+			boolean stayInContext) throws SourceParserException {
+		int retval = offset == 0 ? offset : offset - 1;
+		for (int i = retval; i >= 0; i--) {
+			char c = source.getChar(i);
+			if (source.getChar(i) == '\n') {
+				retval = i + 1;
+				i = -1;
+			} else if (cancelIfNotWhitespace && !Character.isWhitespace(c)) {
+				retval = offset;
+				i = -1;
+			}
+		}
+		if (stayInContext) {
+			SourceContext context = getContext(offset);
+			if (context != null && retval < context.getOffset()) {
+				retval = context.getOffset();
+				int end = context.getOffset() + context.getLength();
+				for (int i = retval; i < end; i++) {
+					if (source.getChar(i) == '\n') {
+						retval = i + 1;
+						i = end;
+					}
+				}
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Finds the array index of the excluded area which contains the offset. If
+	 * none of the areas contain the offset, returns negative integer indicating
+	 * the index of the excluded area following the offset
+	 * 
+	 * @param offset
+	 *            the offset to the data
+	 * @return the excluded area index
+	 */
+	int findExcludedAreaIndex(int offset) {
+		return excludedAreaParser.find(offset);
+	}
+
+	/**
+	 * Finds the excluded source file areas. Excluded areas include comments and
+	 * quoted strings. Overwrites possible old areas.
+	 * 
+	 * @throws SourceParserException
+	 *             if parser fails
+	 */
+	public void findExcludedAreas() throws SourceParserException {
+		excludedAreaParser.parseAll();
+	}
+
+	/**
+	 * Gets the list of excluded areas
+	 * 
+	 * @return the list
+	 */
+	public List<SourceExcludedArea> getExcludedAreas() {
+		return excludedAreaParser.getAreas();
+	}
+
+	/**
+	 * Checks if the area is excluded with given flags
+	 * 
+	 * @param type
+	 *            the area type
+	 * @param flags
+	 *            the flags
+	 * @return true if skipped
+	 */
+	static boolean isExcluded(int type, int flags) {
+		boolean string = ((flags & SKIP_STRINGS) != 0)
+				&& (type == SourceExcludedArea.STRING);
+		boolean comment = ((flags & SKIP_COMMENTS) != 0)
+				&& (type == SourceExcludedArea.MULTILINE_COMMENT);
+		boolean linecomment = ((flags & SKIP_COMMENTS) != 0)
+				&& (type == SourceExcludedArea.LINE_COMMENT);
+		boolean preProcessor = ((flags & SKIP_PREPROCESSOR) != 0)
+				&& (type == SourceExcludedArea.PREPROCESSOR_DEFINITION);
+		return string || comment || linecomment || preProcessor;
+	}
+
+	/**
+	 * Adds a location to this parser
+	 * 
+	 * @param location
+	 *            the location
+	 */
+	void addLocation(SourceLocation location) {
+		if (locations == null) {
+			locations = new ArrayList<SourceLocation>();
+		}
+		locations.add(location);
+		if (source != null) {
+			source.addLocation(location.getLocation());
+		}
+	}
+
+	/**
+	 * Removes a location from this parser
+	 * 
+	 * @param location
+	 *            the location to be removed
+	 */
+	void removeLocation(SourceLocation location) {
+		if (locations != null) {
+			locations.remove(location);
+		}
+		if (source != null) {
+			source.removeLocation(location.getLocation());
+		}
+	}
+
+	/**
+	 * Gets the document framework
+	 * 
+	 * @return the document framework
+	 */
+	public SourceDocumentFactory getDocumentFramework() {
+		return documentFactory;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceParserException.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Exceptions thrown by source parser
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Exceptions thrown by source parser
+ * 
+ * @see SourceParser
+ */
+public class SourceParserException extends Exception {
+
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = -2332983004093789880L; // CodForChk_Dis_Magic
+
+	/**
+	 * Error type
+	 */
+	private int errorType;
+
+	/**
+	 * Constructor with message and source object
+	 * 
+	 * @param errorType
+	 *            the error type
+	 */
+	public SourceParserException(int errorType) {
+		this.errorType = errorType;
+	}
+
+	/**
+	 * Gets the error type
+	 * 
+	 * @return the type
+	 */
+	public int getErrorType() {
+		return errorType;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourcePropertyProvider.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Property provider for SourceLocation objects
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Property provider for SourceLocation objects
+ * 
+ */
+public interface SourcePropertyProvider {
+
+	/**
+	 * Gets a file name that can be shown in the UI when viewing a
+	 * SourceLocation
+	 * 
+	 * @return the source file name
+	 */
+	public String getFileName();
+
+	/**
+	 * Gets the path to the source file including the ending separator.
+	 * 
+	 * @return the path
+	 */
+	public String getFilePath();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceReturn.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Properties of function return statement
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Properties of function return statement
+ * 
+ */
+public class SourceReturn extends SourceLocationBase {
+
+	/**
+	 * Previous character might cause a problem
+	 */
+	private boolean charHazard;
+
+	/**
+	 * The return statement itself might cause a problem
+	 */
+	private boolean tagHazard;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parser
+	 *            the parser owning this location
+	 * @param offset
+	 *            the offset to the beginning of return statement
+	 * @param length
+	 *            the return statement length
+	 */
+	SourceReturn(SourceParser parser, int offset, int length) {
+		super(parser, offset, length);
+	}
+
+	/**
+	 * Gets the return statement
+	 * 
+	 * @return the statement
+	 */
+	public String getReturnStatement() {
+		String retval = ""; //$NON-NLS-1$
+		if (getParser() != null) {
+			retval = getParser().getData(getOffset(), getLength());
+		}
+		return retval;
+	}
+
+	/**
+	 * Sets a flag which indicates that the character preceeding the return
+	 * statement might cause problems when a trace is added prior to the return
+	 * statement
+	 */
+	void setPreviousCharHazard() {
+		this.charHazard = true;
+	}
+
+	/**
+	 * Gets the flag which indicates if the character preceeding the return
+	 * statement might cause problems when a trace is added prior to the return
+	 * statement
+	 * 
+	 * @return the flag
+	 */
+	public boolean hasPreviousCharHazard() {
+		return charHazard;
+	}
+
+	/**
+	 * Sets a flag which indicates that the return statement might cause
+	 * problems when duplicated to a trace
+	 */
+	void setTagHazard() {
+		tagHazard = true;
+	}
+
+	/**
+	 * Gets the flag which indicates if the return statement might cause
+	 * problems when duplicated to a trace
+	 * 
+	 * @return the flag
+	 */
+	public boolean hasTagHazard() {
+		return tagHazard;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceSearch.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for source search classes
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.List;
+
+/**
+ * Base class for source search classes.
+ * 
+ */
+public abstract class SourceSearch {
+
+	/**
+	 * Source parser
+	 */
+	protected final SourceParser parser;
+
+	/**
+	 * Current index within data during search
+	 */
+	protected int searchIndex;
+
+	/**
+	 * End index for search
+	 */
+	protected int searchEnd;
+
+	/**
+	 * Index of the next excluded area during search.
+	 */
+	protected int searchExcludedIndex;
+
+	/**
+	 * Search flags
+	 */
+	protected int flags;
+
+	/**
+	 * Creates a new search
+	 * 
+	 * @param parser
+	 *            the parser containing the source
+	 * @param startOffset
+	 *            offset to the start of search
+	 * @param endOffset
+	 *            offset to end of search or -1 for rest of the document
+	 * @param flags
+	 *            search flags
+	 */
+	protected SourceSearch(SourceParser parser, int startOffset, int endOffset,
+			int flags) {
+		this.parser = parser;
+		this.flags = flags;
+		resetSearch(startOffset, endOffset);
+	}
+
+	/**
+	 * Resets the current search with a new offset
+	 * 
+	 * @param startOffset
+	 *            the offset to the start of search
+	 * @param endOffset
+	 *            offset to end of search or -1 for rest of the document
+	 */
+	public void resetSearch(int startOffset, int endOffset) {
+		searchIndex = startOffset;
+		searchEnd = endOffset == -1 ? parser.getDataLength() : endOffset;
+		// Calculates the starting position for the search based on the
+		// offset and excluded areas
+		int excluded = parser.findExcludedAreaIndex(startOffset);
+		if (excluded >= 0) {
+			SourceExcludedArea area = parser.getExcludedAreas().get(excluded);
+			searchIndex = area.getOffset() + area.getLength();
+			if (excluded < parser.getExcludedAreas().size() - 1) {
+				searchExcludedIndex = excluded + 1;
+			} else {
+				searchExcludedIndex = -1;
+			}
+		} else {
+			// If binarySearch returns < 0, startIndex was between some
+			// excluded areas.
+			searchExcludedIndex = -1 - excluded;
+			if (searchExcludedIndex > parser.getExcludedAreas().size()) {
+				searchExcludedIndex = -1;
+			}
+		}
+		skipNonExcludedAreas();
+	}
+
+	/**
+	 * Changes the index to point behind an excluded area if current index is
+	 * within one.
+	 */
+	protected void skipExcludedArea() {
+		// If data index is within an excluded area, it is moved to end of
+		// it and the next excluded area is selected
+		boolean changedExcludedArea;
+		do {
+			// If the excluded area changes, the flag is set and the next
+			// excluded area is also checked. Otherwise the excluded area index
+			// gets left behind if the search index jumps past multiple excluded
+			// areas
+			changedExcludedArea = false;
+			if (searchExcludedIndex >= 0
+					&& searchExcludedIndex < parser.getExcludedAreas().size()) {
+				SourceExcludedArea area = parser.getExcludedAreas().get(
+						searchExcludedIndex);
+				if (area.getOffset() <= searchIndex) {
+					// If the search offset has skipped past an excluded area,
+					// the index is not changed
+					if (area.getOffset() + area.getLength() > searchIndex) {
+						searchIndex = area.getOffset() + area.getLength();
+					}
+					searchExcludedIndex++;
+					skipNonExcludedAreas();
+					changedExcludedArea = true;
+				}
+			}
+		} while (changedExcludedArea);
+	}
+
+	/**
+	 * Skips past excluded areas which are not actually excluded due to flags
+	 */
+	private void skipNonExcludedAreas() {
+		if (searchExcludedIndex >= 0
+				&& searchExcludedIndex < parser.getExcludedAreas().size()) {
+			boolean notExcluded = true;
+			do {
+				// If an excluded area is not excluded due to flags,
+				// the excluded area index is moved past that area
+				SourceExcludedArea area = parser.getExcludedAreas().get(
+						searchExcludedIndex);
+				if (!SourceParser.isExcluded(area.getType(), flags)) {
+					searchExcludedIndex++;
+				} else {
+					notExcluded = false;
+				}
+			} while (notExcluded
+					&& searchExcludedIndex < parser.getExcludedAreas().size());
+		}
+	}
+
+	/**
+	 * Returns the next occurence
+	 * 
+	 * @return the index or -1
+	 */
+	public abstract int findNext();
+
+	/**
+	 * Finds all occurences
+	 * 
+	 * @param list
+	 *            the list where the data is stored
+	 * @throws SourceParserException
+	 *             if search fails
+	 */
+	public abstract void findAll(List<Integer> list)
+			throws SourceParserException;
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceSelector.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Selects an area from a source
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Selects an area from a source
+ * 
+ */
+public interface SourceSelector {
+
+	/**
+	 * Selects an area defined by given offset and length
+	 * 
+	 * @param offset
+	 *            the offset
+	 * @param length
+	 *            the length
+	 */
+	public void setSelection(int offset, int length);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceStringSearch.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,267 @@
+/*
+* Copyright (c) 2008 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:
+*
+* String search algorithm
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.List;
+
+/**
+ * String search algorithm
+ * 
+ */
+public class SourceStringSearch extends SourceSearch {
+
+	/**
+	 * String to be searched from the source.
+	 */
+	private String searchString;
+
+	/**
+	 * Number of different characters in source file alphabet. Assumes that
+	 * 8-bit encoding is used
+	 */
+	private final static int CHARACTER_COUNT = 256; // CodForChk_Dis_Magic
+
+	/**
+	 * Mask for bad character shifts (0xFF)
+	 */
+	private static final int BAD_CHARACTER_MASK = 0xFF; // CodForChk_Dis_Magic
+
+	/**
+	 * String search shifts.
+	 */
+	private int[] badCharacterShifts = new int[CHARACTER_COUNT];
+
+	/**
+	 * User data associated with search
+	 */
+	private Object searchData;
+
+	/**
+	 * Creates a new string search
+	 * 
+	 * @param parser
+	 *            the parser containing the source to be searched
+	 * @param searchString
+	 *            the string to be searched
+	 * @param startOffset
+	 *            offset to the start of search
+	 * @param endOffset
+	 *            offset to end of search or -1 for rest of the document
+	 * @param flags
+	 *            the search flags
+	 */
+	public SourceStringSearch(SourceParser parser, String searchString,
+			int startOffset, int endOffset, int flags) {
+		super(parser, startOffset, endOffset, flags);
+		setSearchString(searchString);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceSearch#findNext()
+	 */
+	@Override
+	public int findNext() {
+		try {
+			SourceDocumentInterface source = parser.getSource();
+			int stringIndex = searchString.length() - 1;
+			boolean found = false;
+			while (!found && searchIndex + stringIndex < searchEnd) {
+				char dataChar;
+				char searchChar;
+				boolean match = false;
+				do {
+					dataChar = source.getChar(searchIndex + stringIndex);
+					searchChar = searchString.charAt(stringIndex);
+					if ((flags & SourceParser.IGNORE_CASE) != 0) {
+						searchChar = Character.toLowerCase(searchChar);
+						dataChar = Character.toLowerCase(dataChar);
+					}
+					if (searchChar == '?' || searchChar == dataChar) {
+						match = true;
+						stringIndex--;
+					} else {
+						match = false;
+					}
+				} while (match && stringIndex >= 0);
+				// If string was not found, resets index and skips according
+				// to the shift table
+				if (stringIndex < 0) {
+					found = true;
+					// Checks the previous character if match beginning is set
+					if ((flags & SourceParser.MATCH_WORD_BEGINNING) != 0) {
+						if ((searchIndex > 0)
+								&& isPartOfWord(source.getChar(searchIndex - 1))) {
+							found = false;
+						}
+					}
+					// Checks the character after data if match end is set
+					if (found && ((flags & SourceParser.MATCH_WORD_END) != 0)) {
+						if (((searchIndex + searchString.length()) < source
+								.getLength())
+								&& isPartOfWord(source.getChar(searchIndex
+										+ searchString.length()))) {
+							found = false;
+						}
+					}
+				}
+				if (!found) {
+					int diff = searchString.length() - 1 - stringIndex;
+					stringIndex = searchString.length() - 1;
+					int skip;
+
+					if (dataChar > badCharacterShifts.length - 1) {
+						skip = 1;
+					} else {
+						skip = badCharacterShifts[dataChar] - diff;
+						if (skip <= 0) {
+							skip = 1;
+						}
+					}
+
+					searchIndex += skip;
+					skipExcludedArea();
+				}
+			}
+			if (!found) {
+				searchIndex = -1;
+			}
+		} catch (SourceParserException e) {
+			searchIndex = -1;
+		}
+		int ret = searchIndex;
+		if (searchIndex != -1) {
+			searchIndex += searchString.length();
+		}
+		return ret;
+	}
+
+	/**
+	 * Checks if the character is part of a word
+	 * 
+	 * @param c
+	 *            the character to be checked
+	 * @return true if part of word
+	 */
+	private boolean isPartOfWord(char c) {
+		return Character.isLetterOrDigit(c) || c == '_';
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceSearch#findAll(java.util.List)
+	 */
+	@Override
+	public void findAll(List<Integer> list) throws SourceParserException {
+		resetSearch(0, -1);
+		int index;
+		do {
+			index = findNext();
+			if (index > 0) {
+				list.add(new Integer(index));
+			}
+		} while (index > 0);
+	}
+
+	/**
+	 * Changes the search string
+	 * 
+	 * @param searchString
+	 *            the string to be searched
+	 */
+	public void setSearchString(String searchString) {
+		this.searchString = searchString;
+		int length = searchString.length();
+		// Elements not found in the string get the maximum shift distance
+		for (int i = 0; i < badCharacterShifts.length; i++) {
+			badCharacterShifts[i] = searchString.length();
+		}
+		// Characters of the search string are mapped into the
+		// shift distances array. If a character is found multiple
+		// times, the smallest shitft distance is stored
+		for (int i = 0; i < searchString.length() - 1; i++) {
+			if ((flags & SourceParser.IGNORE_CASE) != 0) {
+				badCharacterShifts[Character
+						.toLowerCase(searchString.charAt(i))
+						& BAD_CHARACTER_MASK] = length - i - 1;
+
+			} else {
+				badCharacterShifts[searchString.charAt(i) & BAD_CHARACTER_MASK] = length
+						- i - 1;
+			}
+		}
+	}
+
+	/**
+	 * Returns the search string
+	 * 
+	 * @return the string
+	 */
+	public String getSearchString() {
+		return searchString;
+	}
+
+	/**
+	 * Checks if the given string matches the search string
+	 * 
+	 * @param string
+	 *            the string
+	 * @return true if they match
+	 */
+	public boolean isSearchStringMatch(String string) {
+		int index = 0;
+		boolean match = true;
+		while (index < string.length() && match) {
+			char dataChar = string.charAt(index);
+			char searchChar = searchString.charAt(index);
+			if ((flags & SourceParser.IGNORE_CASE) != 0) {
+				searchChar = Character.toLowerCase(searchChar);
+				dataChar = Character.toLowerCase(dataChar);
+			}
+			if (searchChar == '?' || searchChar == dataChar) {
+				index++;
+			} else {
+				match = false;
+			}
+		}
+		return match;
+	}
+
+	/**
+	 * Sets the user variable associated with this searcher
+	 * 
+	 * @param data
+	 *            the variable
+	 */
+	public void setSearchData(Object data) {
+		searchData = data;
+	}
+
+	/**
+	 * Gets the user variable associated with this searcher
+	 * 
+	 * @return the variable
+	 */
+	public Object getSearchData() {
+		return searchData;
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceUtils.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,1146 @@
+/*
+* 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:
+*
+* Static utility functions related to source files
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.StringErrorParameters;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceConstantTable;
+import com.nokia.tracecompiler.model.TraceParameter;
+import com.nokia.tracecompiler.rules.ArrayParameterRule;
+
+/**
+ * Static utility functions related to source files
+ * 
+ */
+public class SourceUtils {
+
+	/**
+	 * Tag for array types
+	 */
+	private static final String ARRAY_TAG = "[]"; //$NON-NLS-1$
+
+	/**
+	 * Start tag for printf format specifier
+	 */
+	private static final String START_TAG = "%"; //$NON-NLS-1$
+
+	/**
+	 * Regular expression optional element tag
+	 */
+	private static final String OPTIONAL_TAG = "?"; //$NON-NLS-1$
+
+	/**
+	 * Optional parameter pattern. Quoted from Wikipedia:
+	 * 
+	 * <strong> Parameter can be omitted or can be: 'n$' Where n is the number
+	 * of the parameter to display using this format specifier, allowing the
+	 * parameters provided to be output multiple times, using varying format
+	 * specifiers or in different orders. This is a POSIX extension and not in
+	 * C99.</strong>
+	 * 
+	 * This has not been implemented -> Currently format specifier count must
+	 * match parameter count
+	 */
+	private final static String PARAMETER_PATTERN = "(\\d+\\$)"; //$NON-NLS-1$
+
+	/**
+	 * Optional flags pattern. Quoted from Wikipedia:
+	 * 
+	 * <strong> Flags can be zero or more (in any order) of:
+	 * <ul>
+	 * <li>'+' : Causes printf to always denote the sign '+' or '-' of a number
+	 * (the default is to omit the sign for positive numbers). Only applicable
+	 * to numeric types.
+	 * <li>'-' : Causes printf to left-align the output of this placeholder (the
+	 * default is to right-align the output).
+	 * <li>'#' : Alternate form. For 'g' and 'G', trailing zeros are not
+	 * removed. For 'f', 'F', 'e', 'E', 'g', 'G', the output always contains a
+	 * decimal point. For 'o', 'x', and 'X', a 0, 0x, and 0X, respectively, is
+	 * prepended to non-zero numbers.
+	 * <li>' ' : Causes printf to left-pad the output with spaces until the
+	 * required length of output is attained. If combined with '0' (see below),
+	 * it will cause the sign to become a space when positive, but the remaining
+	 * characters will be zero-padded
+	 * <li>'0' : Causes printf to use '0' (instead of spaces) to left fill a
+	 * fixed length field. For example (assume i = 3) printf("%2d", i) results
+	 * in " 3", while printf("%02d", i) results in "03"
+	 * </ul>
+	 * </strong>
+	 */
+	private final static String FLAGS_PATTERN = "([-+# 0])"; //$NON-NLS-1$
+
+	/**
+	 * Optional width pattern. Quoted from Wikipedia:
+	 * 
+	 * <strong>Width can be omitted or be any of:
+	 * <ul>
+	 * <li>a number : Causes printf to pad the output of this placeholder with
+	 * spaces until it is at least number characters wide. If number has a
+	 * leading '0', then padding is done with '0' characters.
+	 * <li>'*' : Causes printf to pad the output until it is n characters wide,
+	 * where n is an integer value stored in the a function argument just
+	 * preceding that represented by the modified type. For example
+	 * printf("%*d", 5, 10) will result in "10" being printed with a width of
+	 * 5.</strong>
+	 * </ul>
+	 * </strong>
+	 * 
+	 * '*' has not been implemented -> Currently format specifier count must
+	 * match parameter count
+	 */
+	private final static String WIDTH_PATTERN = "(\\d+|\\*)"; //$NON-NLS-1$
+
+	/**
+	 * Optional precision pattern. Quoted from Wikipedia:
+	 * 
+	 * Precision can be omitted or be any of: <strong>
+	 * <ul>
+	 * <li>a number : For non-integral numeric types, causes the decimal portion
+	 * of the output to be expressed in at least number digits. For the string
+	 * type, causes the output to be truncated at number characters.
+	 * <li>'*' : Same as the above, but uses an integer value in the intaken
+	 * argument to determine the number of decimal places or maximum string
+	 * length. For example, printf("%.*s", 3, "abcdef") will result in "abc"
+	 * being printed.
+	 * </ul>
+	 * </strong> If the precision is zero, nothing is printed for the
+	 * corresponding argument.
+	 * 
+	 * '*' has not been implemented -> Currently format specifier count must
+	 * match parameter count
+	 */
+	private final static String PRECISION_PATTERN = "(\\.(\\d+|\\*))"; //$NON-NLS-1$
+
+	/**
+	 * Optional length pattern. Quoted from Wikipedia:
+	 * 
+	 * Length can be omitted or be any of: <strong>
+	 * <ul>
+	 * <li>'hh' : For integer types, causes printf to expect an int sized
+	 * integer argument which was promoted from a char.
+	 * <li>'h' : For integer types, causes printf to expect a int sized integer
+	 * argument which was promoted from a short.
+	 * <li>'l' : (ell) For integer types, causes printf to expect a long sized
+	 * integer argument.
+	 * <li>'ll' : (ell ell) For integer types, causes printf to expect a long
+	 * long sized integer argument.
+	 * <li>'L' : For floating point types, causes printf to expect a long double
+	 * argument.
+	 * <li>'z' : For integer types, causes printf to expect a size_t sized
+	 * integer argument.
+	 * <li>'j' : For integer types, causes printf to expect a intmax_t sized
+	 * integer argument.
+	 * <li>'t' : For integer types, causes printf to expect a ptrdiff_t sized
+	 * integer argument.
+	 * </ul>
+	 * </strong>
+	 */
+	private final static String LENGTH_PATTERN = "([lh]?[hHlLZjt])"; //$NON-NLS-1$
+
+	/**
+	 * Type pattern. Quoted from Wikipedia:
+	 * 
+	 * <strong> type can be any of:
+	 * <ul>
+	 * <li>'d', 'i' : Print an int as a signed decimal number. '%d' and '%i' are
+	 * synonymous for output, but are different when used with scanf() for
+	 * input.
+	 * <li>'u' : Print decimal unsigned int.
+	 * <li>'f', 'F' : Print a double in normal (fixed-point) notation.
+	 * <li>'e', 'E' : Print a double value in standard form ([-]d.ddd
+	 * e[+/-]ddd).
+	 * <li>'g', 'G' : Print a double in either normal or exponential notation,
+	 * whichever is more appropriate for its magnitude. 'g' uses lower-case
+	 * letters, 'G' uses upper-case letters. This type differs slightly from
+	 * fixed-point notation in that insignificant zeroes to the right of the
+	 * decimal point are not included. Also, the decimal point is not included
+	 * on whole numbers.
+	 * <li>'x', 'X' : Print an unsigned int as a hexadecimal number. 'x' uses
+	 * lower-case letters and 'X' uses upper-case.
+	 * <li>'o' : Print an unsigned int in octal.
+	 * <li>'s' : Print a character string.
+	 * <li>'c' : Print a char (character).
+	 * <li>'p' : Print a void * (pointer to void) in an implementation-defined
+	 * format.
+	 * <li>'n' : Write number of characters successfully written so far into an
+	 * integer pointer parameter.
+	 * <li>'%' : Print a literal '%' character (this type doesn't accept any
+	 * flags, width, precision or length).
+	 * </ul>
+	 * </strong>
+	 * 
+	 * The pattern itself accepts all characters and the validity check is done
+	 * in {@link #mapFormatToParameterType mapFormatToType}
+	 */
+	private final static String TYPE_PATTERN = "([a-zA-Z%])"; //$NON-NLS-1$
+
+	/**
+	 * Regular expression pattern for printf
+	 * 
+	 * %[parameter][flags][width][.precision][length]type
+	 */
+	private static final String STANDARD_PRINTF_PATTERN = PARAMETER_PATTERN
+			+ OPTIONAL_TAG + FLAGS_PATTERN + OPTIONAL_TAG + WIDTH_PATTERN
+			+ OPTIONAL_TAG + PRECISION_PATTERN + OPTIONAL_TAG + LENGTH_PATTERN
+			+ OPTIONAL_TAG + TYPE_PATTERN;
+
+	/**
+	 * Regular expression pattern for Open System Trace printf extensions
+	 * %{Type}, %{Array[]}
+	 */
+	private static final String EXTENSION_PRINTF_PATTERN = "\\{[\\w_]+(\\[\\])?\\}"; //$NON-NLS-1$
+
+	/**
+	 * Regular expression pattern for printf
+	 */
+	public static final String PRINTF_PATTERN = START_TAG + "((" //$NON-NLS-1$
+			+ STANDARD_PRINTF_PATTERN + ")|(" //$NON-NLS-1$
+			+ EXTENSION_PRINTF_PATTERN + "))"; //$NON-NLS-1$
+
+	/**
+	 * The pattern for printf-formatted trace text
+	 */
+	public final static Pattern traceTextPattern = Pattern
+			.compile(PRINTF_PATTERN);
+
+	/**
+	 * The pattern for parameter length in printf specifier
+	 */
+	public final static Pattern lengthPattern = Pattern.compile(LENGTH_PATTERN);
+
+	/**
+	 * Hidden constructor
+	 */
+	private SourceUtils() {
+	}
+
+	/**
+	 * Creates a header guard
+	 * 
+	 * @param fileName
+	 *            the name of the file
+	 * @return the header guard
+	 */
+	public static String createHeaderGuard(String fileName) {
+		StringBuffer sb = new StringBuffer();
+		String uname = fileName.replace(SourceConstants.PERIOD_CHAR,
+				SourceConstants.UNDERSCORE_CHAR).toUpperCase();
+		sb.append(SourceConstants.IFNDEF);
+		sb.append(SourceConstants.SPACE);
+		sb.append(SourceConstants.DOUBLE_UNDERSCORE);
+		sb.append(uname);
+		sb.append(SourceConstants.DOUBLE_UNDERSCORE);
+		sb.append(SourceConstants.LINE_FEED);
+		sb.append(SourceConstants.DEFINE);
+		sb.append(SourceConstants.SPACE);
+		sb.append(SourceConstants.DOUBLE_UNDERSCORE);
+		sb.append(uname);
+		sb.append(SourceConstants.DOUBLE_UNDERSCORE);
+		return sb.toString();
+	}
+
+	/**
+	 * Checks the validity of name
+	 * 
+	 * @param name
+	 *            the name
+	 * @return true if valid
+	 */
+	public static boolean isValidName(String name) {
+		boolean retval;
+		if (name != null && name.length() > 0) {
+			retval = true;
+			if (!isValidNameStartChar(name.charAt(0))) {
+				retval = false;
+			} else {
+				for (int i = 1; i < name.length() && retval; i++) {
+					retval = isValidNameChar(name.charAt(i));
+				}
+			}
+		} else {
+			retval = false;
+		}
+		return retval;
+	}
+
+	/**
+	 * Checks the validity of parameter name
+	 * 
+	 * @param name
+	 *            the name
+	 * @return true if valid
+	 */
+	public static boolean isValidParameterName(String name) {
+		boolean retval;
+		if (name != null && name.length() > 0) {
+			retval = true;
+			if (!isValidNameStartChar(name.charAt(0))) {
+				retval = false;
+			} else {
+				for (int i = 1; i < name.length() && retval; i++) {
+
+					// Check validity of the character
+					char c = name.charAt(i);
+					retval = (isValidNameChar(c) || isValidSpecialChar(c));
+				}
+			}
+		} else {
+			retval = false;
+		}
+		return retval;
+	}
+
+	/**
+	 * Checks special character validity
+	 * 
+	 * @param c
+	 *            character
+	 * @return true if valid
+	 */
+	private static boolean isValidSpecialChar(char c) {
+		boolean retval = false;
+		// Check if the character is allowed
+		if (c == '.' || c == '-' || c == '>' || c == '(' || c == ')'
+				|| c == '[' || c == ']' || c == ' ' || c == '&' || c == '*') {
+			retval = true;
+		}
+		return retval;
+	}
+
+	/**
+	 * Checks start-of-name character validity
+	 * 
+	 * @param c
+	 *            character
+	 * @return true if valid
+	 */
+	private static boolean isValidNameStartChar(char c) {
+		// Ascii characters and underscore are allowed
+		return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A) // CodForChk_Dis_Magic
+				|| c == 0x5F; // CodForChk_Dis_Magic
+	}
+
+	/**
+	 * Checks name character validity
+	 * 
+	 * @param c
+	 *            character
+	 * @return true if valid
+	 */
+	private static boolean isValidNameChar(char c) {
+		// Numbers are allowed in addition to start characters
+		return isValidNameStartChar(c) || (c >= 0x30 && c <= 0x39); // CodForChk_Dis_Magic
+	}
+
+	/**
+	 * Maps a Symbian type to one of the TraceParameter types
+	 * 
+	 * @param parsedType
+	 *            the type parsed from source
+	 * @return the parameter type
+	 */
+	public static TypeMapping mapSymbianTypeToParameterType(
+			ParsedType parsedType) {
+		String type = null;
+		// The type map contains Symbian types
+		for (int i = 0; i < SymbianConstants.PARAMETER_TYPE_MAP.length
+				&& type == null; i++) {
+			if (parsedType
+					.typeEquals(SymbianConstants.PARAMETER_TYPE_MAP[i][0])) {
+				type = SymbianConstants.PARAMETER_TYPE_MAP[i][1];
+			}
+		}
+		if (type != null) {
+			if (parsedType.hasQualifier(SourceConstants.UNSIGNED)) {
+				type = convertToUnsigned(type);
+			}
+		}
+		TypeMapping retval = new TypeMapping(type);
+		if (type != null) {
+			// Value or a reference can be added to source as is
+			// Points needs to be cast to HEX32
+			if (parsedType.isPointer()) {
+				retval.type = TraceParameter.HEX32;
+				retval.needsCasting = true;
+			} else {
+				// TUint32 needs to be cast to TUint and TInt32 to TInt.
+				// Otherwise there will be some problems with extension
+				// headers
+				if (parsedType.typeEquals(SymbianConstants.TUINT32)
+						|| parsedType.typeEquals(SymbianConstants.TINT32)) {
+					retval.needsCasting = true;
+				}
+			}
+		} else if (parsedType.isPointer()) {
+			// Unrecognized pointer types are cast to Hex32
+			retval.type = TraceParameter.HEX32;
+			retval.needsCasting = true;
+		} else {
+			// Unrecognized value types are passed as pointer and cast to Hex32
+			retval.type = TraceParameter.HEX32;
+			retval.valueToPointer = true;
+			retval.needsCasting = true;
+		}
+		return retval;
+	}
+
+	/**
+	 * Maps the type of a parameter to a Symbian type
+	 * 
+	 * @param parameter
+	 *            the parameter
+	 * @return the parameter type as string
+	 */
+	public static String mapParameterTypeToSymbianType(TraceParameter parameter) {
+		String retval;
+		ArrayParameterRule rule = parameter
+				.getExtension(ArrayParameterRule.class);
+		String type = parameter.getType();
+		TraceConstantTable table = parameter.getModel()
+				.findConstantTableByName(type);
+		if (table != null) {
+			type = table.getType();
+		}
+		if (rule != null) {
+			retval = mapArrayTypeToSymbianType(type);
+		} else {
+			retval = mapBasicTypeToSymbianType(type);
+		}
+		return retval;
+	}
+
+	/**
+	 * Maps a basic parameter type to Symbian type
+	 * 
+	 * @param type
+	 *            the parameter type
+	 * @return the Symbian type
+	 */
+	public static String mapBasicTypeToSymbianType(String type) {
+		String retval;
+		// Unsigned and hex both use TUint types
+		// Signed uses TInt types
+		if (type.equals(TraceParameter.POINTER)) {
+			retval = SymbianConstants.CONST_TANY_PTR;
+		} else if (type.equals(TraceParameter.SDEC32)) {
+			retval = SymbianConstants.TINT;
+		} else if (type.equals(TraceParameter.UDEC32)
+				|| type.equals(TraceParameter.OCT32)
+				|| type.equals(TraceParameter.HEX32)) {
+			retval = SymbianConstants.TUINT;
+		} else if (type.equals(TraceParameter.SDEC16)) {
+			retval = SymbianConstants.TINT16;
+		} else if (type.equals(TraceParameter.UDEC16)
+				|| type.equals(TraceParameter.OCT16)
+				|| type.equals(TraceParameter.HEX16)) {
+			retval = SymbianConstants.TUINT16;
+		} else if (type.equals(TraceParameter.SDEC8)) {
+			retval = SymbianConstants.TINT8;
+		} else if (type.equals(TraceParameter.UDEC8)
+				|| type.equals(TraceParameter.OCT8)
+				|| type.equals(TraceParameter.HEX8)) {
+			retval = SymbianConstants.TUINT8;
+		} else if (type.equals(TraceParameter.SDEC64)
+				|| type.equals(TraceParameter.TIME)) {
+			retval = SymbianConstants.TINT64;
+		} else if (type.equals(TraceParameter.UDEC64)
+				|| type.equals(TraceParameter.OCT64)
+				|| type.equals(TraceParameter.HEX64)) {
+			retval = SymbianConstants.TUINT64;
+		} else if (type.equals(TraceParameter.ASCII)) {
+			retval = SymbianConstants.CONST_TDESC8_REF;
+		} else if (type.equals(TraceParameter.UNICODE)) {
+			retval = SymbianConstants.CONST_TDESC16_REF;
+		} else if (type.equals(TraceParameter.FLOAT_EXP)
+				|| type.equals(TraceParameter.FLOAT_FIX)
+				|| type.equals(TraceParameter.FLOAT_OPT)) {
+			retval = SymbianConstants.TREAL;
+		} else {
+			retval = SymbianConstants.TANY_PTR;
+		}
+		return retval;
+	}
+
+	/**
+	 * Maps an array parameter type to Symbian type
+	 * 
+	 * @param type
+	 *            the parameter type
+	 * @return the Symbian type
+	 */
+	public static String mapArrayTypeToSymbianType(String type) {
+		String basic = mapBasicTypeToSymbianType(type);
+		String retval = SourceConstants.OST_ARRAY_TYPE_PREFIX + basic
+				+ SourceConstants.OST_ARRAY_TYPE_POSTFIX;
+		return retval;
+	}
+
+	/**
+	 * Maps a format specifier into parameter type
+	 * 
+	 * @param formatSpecifier
+	 *            the format specifier
+	 * @return the parameter type or null if not recognized. If the type is one
+	 *         of the supported TraceParameter types, the string contains the
+	 *         integer value of the type
+	 * @throws TraceCompilerException
+	 *             if format specifier is not valid
+	 */
+	public static FormatMapping mapFormatToParameterType(String formatSpecifier)
+			throws TraceCompilerException {
+		String type;
+		boolean array = false;
+		boolean basic = false;
+		boolean extended = false;
+		int len = formatSpecifier.length();
+		// Extension format is checked first: %{x}
+		if (len > 3 && formatSpecifier.charAt(1) == '{' // CodForChk_Dis_Magic
+				&& formatSpecifier.charAt(len - 1) == '}') {
+			// Extension format can be an array: %{x[]}
+			// In that case it could also be a basic type
+			if (len > 3 + ARRAY_TAG.length() // CodForChk_Dis_Magic
+					&& formatSpecifier.charAt(len - 3) == '[' // CodForChk_Dis_Magic
+					&& formatSpecifier.charAt(len - 2) == ']') { // CodForChk_Dis_Magic
+				type = formatSpecifier.substring(2, len - 1 // CodForChk_Dis_Magic
+						- ARRAY_TAG.length());
+				array = true;
+				if (isStringType(type)) {
+					StringErrorParameters param = new StringErrorParameters();
+					param.string = type;
+					throw new TraceCompilerException(
+							TraceCompilerErrorCode.PARAMETER_FORMAT_NOT_SUPPORTED_IN_ARRAY,
+							param, null);
+				}
+			} else {
+				type = formatSpecifier.substring(2, len - 1); // CodForChk_Dis_Magic
+			}
+			extended = !isBasicType(type);
+		} else {
+			basic = true;
+			type = formatSpecifier;
+		}
+				
+		if (basic) {
+			type = mapBasicFormatToType(formatSpecifier);
+		}
+		if (type == null) {
+			StringErrorParameters params = new StringErrorParameters();
+			params.string = formatSpecifier;
+			throw new TraceCompilerException(
+					TraceCompilerErrorCode.PARAMETER_FORMAT_NOT_SUPPORTED,
+					params, null);
+		}
+		FormatMapping retval = new FormatMapping(type);
+		retval.isArray = array;
+		if (extended) {
+			// In case of extended types, a constant table can still be
+			// represented with normal trace macros.
+			TraceConstantTable table = TraceCompilerEngineGlobals.getTraceModel()
+					.findConstantTableByName(retval.type);
+			if (table != null) {
+				if (!array && isSimpleType(table.getType())) {
+					retval.isSimple = true;
+				}
+			} else {
+				// Extended type must be found from the property file
+				StringErrorParameters params = new StringErrorParameters();
+				params.string = formatSpecifier;
+				throw new TraceCompilerException(
+						TraceCompilerErrorCode.PARAMETER_FORMAT_NOT_SUPPORTED,
+						params, null);
+			}
+		} else if (!retval.isArray) {
+			retval.isSimple = isSimpleType(type);
+		}
+				
+		return retval;
+	}
+
+	/**
+	 * Maps basic format specifies to parameter type
+	 * 
+	 * @param formatSpecifier
+	 *            the format specifies
+	 * @return the type
+	 * @throws TraceCompilerException
+	 *             if mapping cannot be done
+	 */
+	private static String mapBasicFormatToType(String formatSpecifier)
+			throws TraceCompilerException { // CodForChk_Dis_ComplexFunc
+		String type;
+		int paramLength = SourceUtils
+				.mapFormatToParameterLength(formatSpecifier);
+		char formatChar = formatSpecifier.charAt(formatSpecifier.length() - 1);
+		switch (formatChar) {
+		case 'd':
+			type = SourceUtils.mapSignedToParameterType(paramLength);
+			break;
+		case 'x':
+		case 'X':
+			type = SourceUtils.mapHexToParameterType(paramLength);
+			break;
+		case 'u':
+			type = SourceUtils.mapUnsignedToParameterType(paramLength);
+			break;
+		case 'o':
+			type = SourceUtils.mapOctalToParameterType(paramLength);
+			break;
+		case 's':
+			type = TraceParameter.ASCII;
+			break;
+		case 'S': // Symbian extension
+			type = TraceParameter.UNICODE;
+			break;
+		case 'c':
+			type = TraceParameter.SDEC8;
+			break;
+		case 'p':
+			type = TraceParameter.POINTER;
+			break;
+		case 'f':
+		case 'F':
+			type = TraceParameter.FLOAT_FIX;
+			break;
+		case 'e':
+		case 'E':
+			type = TraceParameter.FLOAT_EXP;
+			break;
+		case 'g':
+		case 'G':
+			type = TraceParameter.FLOAT_OPT;
+			break;
+		default:
+			type = null;
+		}
+
+		return type;
+	}
+
+	/**
+	 * Maps a parameter type to format string
+	 * 
+	 * @param parameter
+	 *            the parameter
+	 * @return the format string
+	 */
+	public static String mapParameterTypeToFormat(TraceParameter parameter) {
+		String tag;
+		if (parameter.getExtension(ArrayParameterRule.class) != null) {
+			tag = mapArrayTypeToFormat(parameter.getType());
+		} else {
+			tag = mapNormalTypeToFormat(parameter.getType());
+		}
+		return tag;
+	}
+
+	/**
+	 * Maps an array type to basic type
+	 * 
+	 * @param arrayType
+	 *            the array type
+	 * @return the basic type or null if original type is not array type
+	 */
+	public static String mapArrayTypeToBasicType(String arrayType) {
+		String retval;
+		if (arrayType.endsWith(ARRAY_TAG)) {
+			retval = arrayType.substring(0, arrayType.length()
+					- ARRAY_TAG.length());
+		} else {
+			retval = null;
+		}
+		return retval;
+	}
+
+	/**
+	 * Parses a numeric value from source
+	 * 
+	 * @param number
+	 *            the number as string
+	 * @return the value
+	 */
+	public static int parseNumberFromSource(String number) {
+		int ret;
+		String low = number.toLowerCase();
+		int radix;
+		if (low.startsWith(SourceConstants.HEX_PREFIX)) {
+			radix = 16; // CodForChk_Dis_Magic
+			low = low.substring(SourceConstants.HEX_PREFIX.length());
+		} else if (low.startsWith(SourceConstants.OCTAL_PREFIX)
+				&& low.length() > SourceConstants.OCTAL_PREFIX.length()
+				&& Character.isDigit(low.charAt(SourceConstants.OCTAL_PREFIX
+						.length()))) {
+			radix = 8; // CodForChk_Dis_Magic
+			low = low.substring(SourceConstants.OCTAL_PREFIX.length());
+		} else {
+			radix = 10; // CodForChk_Dis_Magic
+		}
+		if (low.endsWith(SourceConstants.I64_POSTFIX)) {
+			low = low.substring(0, low.length()
+					- SourceConstants.I64_POSTFIX.length());
+		}
+		if (low.length() > 0) {
+			// Removes U / L characters from the end of value
+			int index = low.length() - 1;
+			boolean complete = false;
+			do {
+				char c = low.charAt(index);
+				if (c == 'u' || c == 'l') {
+					index--;
+				} else {
+					complete = true;
+				}
+			} while (!complete && index >= 0);
+			if (index < low.length() - 1 && index > 0) {
+				low = low.substring(0, index + 1);
+			}
+			ret = Integer.parseInt(low, radix);
+		} else {
+			ret = 0;
+		}
+		return ret;
+	}
+
+	/**
+	 * Calculates the size of parameter
+	 * 
+	 * @param parameter
+	 *            the parameter
+	 * @return the parameter size or 0 if the size is not known at compile time
+	 */
+	public static int mapParameterTypeToSize(TraceParameter parameter) {
+		int retval;
+		ArrayParameterRule rule = parameter
+				.getExtension(ArrayParameterRule.class);
+		if (rule != null) {
+			// Array parameters are dynamic
+			retval = 0;
+		} else {
+			String type = parameter.getType();
+			TraceConstantTable table = parameter.getModel()
+					.findConstantTableByName(type);
+			if (table != null) {
+				type = table.getType();
+			}
+			retval = mapParameterTypeToSize(type);
+		}
+		return retval;
+	}
+
+	/**
+	 * Calculates the size of parameter type
+	 * 
+	 * @param type
+	 *            the parameter type
+	 * @return the parameter size or 0 if size is not known at compile time
+	 */
+	public static int mapParameterTypeToSize(String type) {
+		int retval;
+		if (type.equals(TraceParameter.HEX32)
+				|| type.equals(TraceParameter.UDEC32)
+				|| type.equals(TraceParameter.SDEC32)
+				|| type.equals(TraceParameter.OCT32)
+				|| type.equals(TraceParameter.POINTER)) {
+			retval = 4; // CodForChk_Dis_Magic
+		} else if (type.equals(TraceParameter.HEX16)
+				|| type.equals(TraceParameter.UDEC16)
+				|| type.equals(TraceParameter.SDEC16)
+				|| type.equals(TraceParameter.OCT16)) {
+			retval = 2; // CodForChk_Dis_Magic
+		} else if (type.equals(TraceParameter.HEX8)
+				|| type.equals(TraceParameter.UDEC8)
+				|| type.equals(TraceParameter.SDEC8)
+				|| type.equals(TraceParameter.OCT8)) {
+			retval = 1;
+		} else if (type.equals(TraceParameter.HEX64)
+				|| type.equals(TraceParameter.UDEC64)
+				|| type.equals(TraceParameter.SDEC64)
+				|| type.equals(TraceParameter.OCT64)
+				|| type.equals(TraceParameter.FLOAT_EXP)
+				|| type.equals(TraceParameter.FLOAT_FIX)
+				|| type.equals(TraceParameter.FLOAT_OPT)) {
+			retval = 8; // CodForChk_Dis_Magic
+		} else {
+			retval = 0;
+		}
+		return retval;
+	}
+
+	/**
+	 * Removes printf formatting from trace text
+	 * 
+	 * @param text
+	 *            the text to be converted
+	 * @return the new text
+	 */
+	public static String removePrintfFormatting(String text) {
+		Matcher matcher = traceTextPattern.matcher(text);
+		return matcher.replaceAll(""); //$NON-NLS-1$
+	}
+
+	/**
+	 * Converts the given type to unsigned type
+	 * 
+	 * @param type
+	 *            the type
+	 * @return unsigned type
+	 */
+	private static String convertToUnsigned(String type) {
+		if (type.equals(TraceParameter.SDEC32)) {
+			type = TraceParameter.UDEC32;
+		} else if (type.equals(TraceParameter.SDEC16)) {
+			type = TraceParameter.UDEC16;
+		} else if (type.equals(TraceParameter.SDEC8)) {
+			type = TraceParameter.UDEC8;
+		} else if (type.equals(TraceParameter.SDEC64)) {
+			type = TraceParameter.UDEC64;
+		}
+		return type;
+	}
+
+	/**
+	 * Maps a normal parameter type for format character
+	 * 
+	 * @param type
+	 *            the parameter type
+	 * @return the format character
+	 */
+	public static String mapNormalTypeToFormat(String type) { // CodForChk_Dis_ComplexFunc
+		String tag;
+		if (type.equals(TraceParameter.SDEC32)) {
+			tag = "%d"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.POINTER)) {
+			tag = "%p"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.HEX32)) {
+			tag = "%x"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.UDEC32)) {
+			tag = "%u"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.OCT32)) {
+			tag = "%o"; //$NON-NLS-1$			
+		} else if (type.equals(TraceParameter.SDEC16)) {
+			tag = "%hd"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.HEX16)) {
+			tag = "%hx"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.UDEC16)) {
+			tag = "%hu"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.OCT16)) {
+			tag = "%ho"; //$NON-NLS-1$			
+		} else if (type.equals(TraceParameter.SDEC8)) {
+			tag = "%hhd"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.HEX8)) {
+			tag = "%hhx"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.UDEC8)) {
+			tag = "%hhu"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.OCT8)) {
+			tag = "%hho"; //$NON-NLS-1$			
+		} else if (type.equals(TraceParameter.SDEC64)) {
+			tag = "%Ld"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.HEX64)) {
+			tag = "%Lx"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.UDEC64)) {
+			tag = "%Lu"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.OCT64)) {
+			tag = "%Lo"; //$NON-NLS-1$			
+		} else if (type.equals(TraceParameter.ASCII)) {
+			tag = "%s"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.UNICODE)) {
+			tag = "%S"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.FLOAT_FIX)) {
+			tag = "%f"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.FLOAT_EXP)) {
+			tag = "%e"; //$NON-NLS-1$
+		} else if (type.equals(TraceParameter.FLOAT_OPT)) {
+			tag = "%g"; //$NON-NLS-1$
+		} else {
+			tag = "%{" //$NON-NLS-1$
+					+ type + "}"; //$NON-NLS-1$
+		}
+		return tag;
+	}
+
+	/**
+	 * Maps an array parameter type to format string
+	 * 
+	 * @param type
+	 *            the parameter type
+	 * @return the format string
+	 */
+	public static String mapArrayTypeToFormat(String type) {
+		String tag = "%{" //$NON-NLS-1$
+				+ type + "[]}"; //$NON-NLS-1$
+		return tag;
+	}
+
+	/**
+	 * Maps format specifier to parameter length
+	 * 
+	 * @param formatSpecifier
+	 *            the specifier
+	 * @return the length
+	 * @throws TraceCompilerException
+	 *             if length is not valid
+	 */
+	public static int mapFormatToParameterLength(String formatSpecifier)
+			throws TraceCompilerException {
+		Matcher matcher = SourceUtils.lengthPattern.matcher(formatSpecifier);
+		int paramLength = 0;
+		if (matcher.find()) {
+			String length = matcher.group();
+
+			if (length.length() == 2) { // CodForChk_Dis_Magic
+				if (length.charAt(0) == 'h' && length.charAt(1) == 'h') {
+					paramLength = SourceConstants.BYTE_SIZE;
+				} else if (length.charAt(0) == 'l' && length.charAt(1) == 'l') {
+					paramLength = SourceConstants.LONG_SIZE;
+				} else {
+					StringErrorParameters params = new StringErrorParameters();
+					params.string = formatSpecifier;
+					throw new TraceCompilerException(
+							TraceCompilerErrorCode.PARAMETER_FORMAT_NOT_SUPPORTED,
+							params, null);
+				}
+			} else if (length.length() == 1) {
+				switch (length.charAt(0)) {
+				case 'h':
+					paramLength = SourceConstants.SHORT_SIZE;
+					break;
+				case 'l':
+					paramLength = SourceConstants.INT_SIZE;
+					break;
+				case 'L':
+					paramLength = SourceConstants.LONG_SIZE;
+					break;
+				default:
+					StringErrorParameters params = new StringErrorParameters();
+					params.string = formatSpecifier;
+					throw new TraceCompilerException(
+							TraceCompilerErrorCode.PARAMETER_FORMAT_NOT_SUPPORTED,
+							params, null);
+				}
+			} else {
+				throw new TraceCompilerException(
+						TraceCompilerErrorCode.INVALID_TRACE_TEXT_FORMAT, null,
+						formatSpecifier);
+			}
+		}
+
+		return paramLength;
+	}
+
+	/**
+	 * Maps signed parameter length to type
+	 * 
+	 * @param paramLength
+	 *            the length
+	 * @return the type
+	 */
+	private static String mapSignedToParameterType(int paramLength) {
+		String retval;
+		if (paramLength == SourceConstants.BYTE_SIZE) {
+			retval = TraceParameter.SDEC8;
+		} else if (paramLength == SourceConstants.SHORT_SIZE) {
+			retval = TraceParameter.SDEC16;
+		} else if (paramLength == SourceConstants.LONG_SIZE) {
+			retval = TraceParameter.SDEC64;
+		} else {
+			retval = TraceParameter.SDEC32;
+		}
+		return retval;
+	}
+
+	/**
+	 * Maps unsigned parameter length to type
+	 * 
+	 * @param paramLength
+	 *            the length
+	 * @return the type
+	 */
+	public static String mapUnsignedToParameterType(int paramLength) {
+		String retval;
+		if (paramLength == SourceConstants.BYTE_SIZE) {
+			retval = TraceParameter.UDEC8;
+		} else if (paramLength == SourceConstants.SHORT_SIZE) {
+			retval = TraceParameter.UDEC16;
+		} else if (paramLength == SourceConstants.LONG_SIZE) {
+			retval = TraceParameter.UDEC64;
+		} else {
+			retval = TraceParameter.UDEC32;
+		}
+		return retval;
+	}
+
+	/**
+	 * Maps hex parameter length to type
+	 * 
+	 * @param paramLength
+	 *            the length
+	 * @return the type
+	 */
+	public static String mapHexToParameterType(int paramLength) {
+		String retval;
+		if (paramLength == SourceConstants.BYTE_SIZE) {
+			retval = TraceParameter.HEX8;
+		} else if (paramLength == SourceConstants.SHORT_SIZE) {
+			retval = TraceParameter.HEX16;
+		} else if (paramLength == SourceConstants.LONG_SIZE) {
+			retval = TraceParameter.HEX64;
+		} else {
+			retval = TraceParameter.HEX32;
+		}
+		return retval;
+	}
+
+	/**
+	 * Maps octal parameter length to type
+	 * 
+	 * @param paramLength
+	 *            the length
+	 * @return the type
+	 */
+	public static String mapOctalToParameterType(int paramLength) {
+		String retval;
+		if (paramLength == SourceConstants.BYTE_SIZE) {
+			retval = TraceParameter.OCT8;
+		} else if (paramLength == SourceConstants.SHORT_SIZE) {
+			retval = TraceParameter.OCT16;
+		} else if (paramLength == SourceConstants.LONG_SIZE) {
+			retval = TraceParameter.OCT64;
+		} else {
+			retval = TraceParameter.OCT32;
+		}
+
+		return retval;
+	}
+
+	/**
+	 * Checks if the parameter can be represented with default trace macros
+	 * 
+	 * @param parameter
+	 *            the parameter
+	 * @return true if parameter can be represented with default trace macros
+	 */
+	public static boolean isSimpleType(TraceParameter parameter) {
+		boolean retval;
+		if (parameter.getExtension(ArrayParameterRule.class) != null) {
+			// Arrays are always complex types
+			retval = false;
+		} else {
+			String type = parameter.getType();
+			TraceConstantTable table = parameter.getModel()
+					.findConstantTableByName(type);
+			if (table != null) {
+				type = table.getType();
+			}
+			retval = isSimpleType(type);
+		}
+		return retval;
+	}
+
+	/**
+	 * Simple type is 32-bit integer
+	 * 
+	 * @param type
+	 *            the type
+	 * @return true if simple, false if not
+	 */
+	private static boolean isSimpleType(String type) {
+		return type.equals(TraceParameter.SDEC32)
+				|| type.equals(TraceParameter.UDEC32)
+				|| type.equals(TraceParameter.OCT32)
+				|| type.equals(TraceParameter.HEX32);
+	}
+
+	/**
+	 * String type is either ascii or unicode
+	 * 
+	 * @param type
+	 *            the type
+	 * @return true if string, false if not
+	 */
+	private static boolean isStringType(String type) {
+		return type.equals(TraceParameter.ASCII)
+				|| type.equals(TraceParameter.UNICODE);
+	}
+
+	/**
+	 * Basic type is any of the built-in TraceParameter types
+	 * 
+	 * @param type
+	 *            the type
+	 * @return true if basic, false if not
+	 */
+	private static boolean isBasicType(String type) {
+		return isSimpleType(type) || type.equals(TraceParameter.SDEC8)
+				|| type.equals(TraceParameter.SDEC16)
+				|| type.equals(TraceParameter.UDEC8)
+				|| type.equals(TraceParameter.UDEC16)
+				|| type.equals(TraceParameter.OCT16)
+				|| type.equals(TraceParameter.HEX8)
+				|| type.equals(TraceParameter.HEX16)
+				|| type.equals(TraceParameter.SDEC64)
+				|| type.equals(TraceParameter.UDEC64)
+				|| type.equals(TraceParameter.OCT64)
+				|| type.equals(TraceParameter.HEX64)
+				|| type.equals(TraceParameter.ASCII)
+				|| type.equals(TraceParameter.UNICODE)
+				|| type.equals(TraceParameter.FLOAT_EXP)
+				|| type.equals(TraceParameter.FLOAT_FIX)
+				|| type.equals(TraceParameter.FLOAT_OPT)
+				|| type.equals(TraceParameter.POINTER);
+	}
+
+	/**
+	 * Checks if parameter size is dynamic
+	 * 
+	 * @param parameter
+	 *            the parameter to be checked
+	 * @return true if dynamic size
+	 */
+	public static boolean isParameterSizeDynamic(TraceParameter parameter) {
+		String type = parameter.getType();
+		ArrayParameterRule rule = parameter
+				.getExtension(ArrayParameterRule.class);
+		return rule != null || type.equals(TraceParameter.ASCII)
+				|| type.equals(TraceParameter.UNICODE);
+	}
+
+	/**
+	 * Checks if alignment is needed
+	 * 
+	 * @param type
+	 *            the parameter type
+	 * @return true if alignment is needed
+	 */
+	public static boolean isParameterAlignementNeeded(String type) {
+		int size = SourceUtils.mapParameterTypeToSize(type);
+		boolean retval = false;
+		if (size == 1 || size == 2) { // CodForChk_Dis_Magic
+			// 8 and 16-bit parameters need alignment
+			retval = true;
+		} else if (isStringType(type)) {
+			retval = true;
+		}
+		return retval;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SymbianConstants.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,241 @@
+/*
+* 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:
+*
+* Constants related to Symbian sources
+*
+*/
+package com.nokia.tracecompiler.source;
+
+import com.nokia.tracecompiler.model.TraceParameter;
+
+/**
+ * Constants related to Symbian sources
+ * 
+ */
+public interface SymbianConstants {
+
+	/**
+	 * Include directory
+	 */
+	final String INCLUDE_DIRECTORY = "inc"; //$NON-NLS-1$
+
+	/**
+	 * Source directory
+	 */
+	final String SOURCE_DIRECTORY = "src"; //$NON-NLS-1$
+
+	/**
+	 * Group directory
+	 */
+	final String GROUP_DIRECTORY = "group"; //$NON-NLS-1$
+
+	/**
+	 * Mmpfiles directory
+	 */
+	final String MMPFILES_DIRECTORY = "mmpfiles"; //$NON-NLS-1$
+	
+	/**
+	 * ETrue
+	 */
+	final String ETRUE = "ETrue"; //$NON-NLS-1$
+
+	/**
+	 * EFalse
+	 */
+	final String EFALSE = "EFalse"; //$NON-NLS-1$
+
+	/**
+	 * TBool
+	 */
+	final String TBOOL = "TBool"; //$NON-NLS-1$
+
+	/**
+	 * TInt
+	 */
+	final String TINT = "TInt"; //$NON-NLS-1$
+
+	/**
+	 * TUint
+	 */
+	final String TUINT = "TUint"; //$NON-NLS-1$
+
+	/**
+	 * TInt64
+	 */
+	final String TINT64 = "TInt64"; //$NON-NLS-1$
+
+	/**
+	 * TUint64
+	 */
+	final String TUINT64 = "TUint64"; //$NON-NLS-1$
+
+	/**
+	 * TTime
+	 */
+	final String TTIME = "TTime"; //$NON-NLS-1$
+
+	/**
+	 * TInt32
+	 */
+	final String TINT32 = "TInt32"; //$NON-NLS-1$
+
+	/**
+	 * TUint32
+	 */
+	final String TUINT32 = "TUint32"; //$NON-NLS-1$
+
+	/**
+	 * TInt16
+	 */
+	final String TINT16 = "TInt16"; //$NON-NLS-1$
+
+	/**
+	 * TUint16
+	 */
+	final String TUINT16 = "TUint16"; //$NON-NLS-1$
+
+	/**
+	 * TInt8
+	 */
+	final String TINT8 = "TInt8"; //$NON-NLS-1$
+
+	/**
+	 * TUint8
+	 */
+	final String TUINT8 = "TUint8"; //$NON-NLS-1$
+
+	/**
+	 * TAny
+	 */
+	final String TANY = "TAny"; //$NON-NLS-1$
+
+	/**
+	 * TAny*
+	 */
+	final String TANY_PTR = "TAny*"; //$NON-NLS-1$
+	
+	/**
+	 * const TAny*
+	 */
+	final String CONST_TANY_PTR = "const TAny*"; //$NON-NLS-1$
+
+	/**
+	 * TDes8
+	 */
+	final String TDES8 = "TDes8"; //$NON-NLS-1$
+
+	/**
+	 * TDesC8
+	 */
+	final String TDESC8 = "TDesC8"; //$NON-NLS-1$
+
+	/**
+	 * TDes16
+	 */
+	final String TDES16 = "TDes16"; //$NON-NLS-1$
+
+	/**
+	 * TDesC16
+	 */
+	final String TDESC16 = "TDesC16"; //$NON-NLS-1$
+
+	/**
+	 * TDes
+	 */
+	final String TDES = "TDes"; //$NON-NLS-1$
+
+	/**
+	 * TDesC
+	 */
+	final String TDESC = "TDesC"; //$NON-NLS-1$
+
+	/**
+	 * TPtr8
+	 */
+	final String TPTR8 = "TPtr8"; //$NON-NLS-1$
+
+	/**
+	 * TPtrC8
+	 */
+	final String TPTRC8 = "TPtrC8"; //$NON-NLS-1$
+
+	/**
+	 * TPtr16
+	 */
+	final String TPTR16 = "TPtr16"; //$NON-NLS-1$
+
+	/**
+	 * TPtrC16
+	 */
+	final String TPTRC16 = "TPtrC16"; //$NON-NLS-1$
+
+	/**
+	 * TPtr
+	 */
+	final String TPTR = "TPtr"; //$NON-NLS-1$
+
+	/**
+	 * TPtrC
+	 */
+	final String TPTRC = "TPtrC"; //$NON-NLS-1$
+
+	/**
+	 * TReal
+	 */
+	final String TREAL = "TReal"; //$NON-NLS-1$
+
+	/**
+	 * const TDesC8&
+	 */
+	final String CONST_TDESC8_REF = "const TDesC8&"; //$NON-NLS-1$
+
+	/**
+	 * const TDesC8&
+	 */
+	final String CONST_TDESC16_REF = "const TDesC16&"; //$NON-NLS-1$
+
+	/**
+	 * Prefix for all parameters generated into header files
+	 */
+	final String PARAMETER_DECLARATION_PREFIX = "aParam"; //$NON-NLS-1$
+
+	/**
+	 * __KERNEL_MODE__
+	 */
+	final String KERNEL_MODE = "__KERNEL_MODE__"; //$NON-NLS-1$
+
+	/**
+	 * Symbian parameter types mapped to TraceParameter types
+	 */
+	final String PARAMETER_TYPE_MAP[][] = { { TANY, null },
+			{ SourceConstants.VOID, null }, { TINT, TraceParameter.SDEC32 },
+			{ TINT32, TraceParameter.SDEC32 },
+			{ TBOOL, TraceParameter.SDEC32 },
+			{ SourceConstants.INT, TraceParameter.SDEC32 },
+			{ SourceConstants.LONG, TraceParameter.SDEC32 },
+			{ TUINT, TraceParameter.UDEC32 },
+			{ TUINT32, TraceParameter.UDEC32 },
+			{ TINT16, TraceParameter.SDEC16 },
+			{ SourceConstants.SHORT, TraceParameter.SDEC16 },
+			{ TUINT16, TraceParameter.UDEC16 },
+			{ TINT8, TraceParameter.SDEC8 },
+			{ SourceConstants.CHAR, TraceParameter.SDEC8 },
+			{ TUINT8, TraceParameter.UDEC8 },
+			{ TINT64, TraceParameter.SDEC64 },
+			{ TTIME, TraceParameter.TIME },
+			{ TUINT64, TraceParameter.UDEC64 },
+			{ TREAL, TraceParameter.FLOAT_FIX } };
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/TokenizerSearchData.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Contains search variables during SourceParameterTokenizer.tokenizeParameters call
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Contains search variables during SourceParameterTokenizer.tokenizeParameters
+ * call
+ * 
+ */
+final class TokenizerSearchData {
+
+	/**
+	 * Iterator over source characters
+	 */
+	SourceIterator itr;
+
+	/**
+	 * Current character
+	 */
+	char value;
+
+	/**
+	 * Previous character
+	 */
+	char previousValue = ' ';
+
+	/**
+	 * Number of '(' encountered without matching ')' character
+	 */
+	int openBracketCount;
+
+	/**
+	 * Index for start of parameter
+	 */
+	int tagStartIndex;
+
+	/**
+	 * Index for start of parameter
+	 */
+	int paramStartIndex;
+
+	/**
+	 * Initial count of '(' characters at beginning of parameter
+	 */
+	int initialBracketCount;
+
+	/**
+	 * Closing ')' character has been found.
+	 */
+	boolean complete;
+
+	/**
+	 * Ending ';' or '{' character has been found
+	 */
+	boolean endFound;
+
+	/**
+	 * Within quotes flag
+	 */
+	boolean inQuotes;
+
+	/**
+	 * Parameter definition object
+	 */
+	SourceParameter sourceParameter;
+
+	/**
+	 * Data flag
+	 */
+	boolean hasData;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/TypeMapping.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Source to parameter type mapping
+*
+*/
+package com.nokia.tracecompiler.source;
+
+/**
+ * Type returned by
+ * {@link SourceUtils#mapSymbianTypeToParameterType(ParsedType)}
+ * 
+ */
+public final class TypeMapping {
+
+	/**
+	 * Parameter type
+	 */
+	public String type;
+
+	/**
+	 * Explicit casting needs to be used when calling trace function
+	 */
+	public boolean needsCasting;
+
+	/**
+	 * Value is changed to pointer before passing to trace function
+	 */
+	public boolean valueToPointer;
+
+	/**
+	 * Contructor
+	 * 
+	 * @param type
+	 *            the parameter type
+	 */
+	public TypeMapping(String type) {
+		this.type = type;
+	}
+
+	/**
+	 * Checks if type is void
+	 * 
+	 * @return true if type is void
+	 */
+	public boolean isVoid() {
+		return type == null;
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Contains parsers for source code
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/DocumentAdapter.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Adapter for document interface
+*
+*/
+package com.nokia.tracecompiler.utils;
+
+import com.nokia.tracecompiler.source.SourceDocumentInterface;
+import com.nokia.tracecompiler.source.SourceLocationInterface;
+import com.nokia.tracecompiler.source.SourceParserException;
+import com.nokia.tracecompiler.source.SourcePropertyProvider;
+
+/**
+ * Adapter for document interface
+ * 
+ */
+public class DocumentAdapter implements SourceDocumentInterface {
+
+	/**
+	 * Document owner
+	 */
+	private Object owner;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentInterface#
+	 *      addLocation(com.nokia.tracecompiler.source.SourceLocationInterface)
+	 */
+	public void addLocation(SourceLocationInterface location) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentInterface#get(int, int)
+	 */
+	public String get(int start, int length) throws SourceParserException {
+		return ""; //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentInterface#getChar(int)
+	 */
+	public char getChar(int offset) throws SourceParserException {
+		return '\0';
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentInterface#getLength()
+	 */
+	public int getLength() {
+		return 0;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentInterface#
+	 *      getLineOfOffset(int)
+	 */
+	public int getLineOfOffset(int offset) throws SourceParserException {
+		return -1;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentInterface#getOwner()
+	 */
+	public Object getOwner() {
+		return owner;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentInterface#
+	 *      removeLocation(com.nokia.tracecompiler.source.SourceLocationInterface)
+	 */
+	public void removeLocation(SourceLocationInterface location) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentInterface#replace(int,
+	 *      int, java.lang.String)
+	 */
+	public void replace(int offset, int length, String newText)
+			throws SourceParserException {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentInterface#
+	 *      setOwner(java.lang.Object)
+	 */
+	public void setOwner(Object owner) {
+		this.owner = owner;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentInterface#getPropertyProvider()
+	 */
+	public SourcePropertyProvider getPropertyProvider() {
+		return null;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/DocumentFactory.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Factory class to create document interfaces
+*
+*/
+package com.nokia.tracecompiler.utils;
+
+import com.nokia.tracecompiler.source.SourceDocumentFactory;
+import com.nokia.tracecompiler.source.SourceDocumentMonitor;
+
+/**
+ * Factory class to create document interfaces
+ * 
+ */
+public final class DocumentFactory {
+
+	/**
+	 * Document monitor
+	 */
+	private static SourceDocumentMonitor monitor;
+
+
+	/**
+	 * Registers a document framework to be used by the engine
+	 * 
+	 * @param monitor
+	 *            the document monitor
+	 * @param factoryClass
+	 *            the document factory class
+	 */
+	public static void registerDocumentFramework(SourceDocumentMonitor monitor,
+			Class<? extends SourceDocumentFactory> factoryClass) {
+		DocumentFactory.monitor = monitor;
+	}
+
+	/**
+	 * Gets the document monitor
+	 * 
+	 * @return the monitor
+	 */
+	public static final SourceDocumentMonitor getDocumentMonitor() {
+		return monitor;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/DocumentFactoryBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for document factories
+*
+*/
+package com.nokia.tracecompiler.utils;
+
+import com.nokia.tracecompiler.source.SourceDocumentFactory;
+import com.nokia.tracecompiler.source.SourceDocumentInterface;
+import com.nokia.tracecompiler.source.SourceLocationBase;
+import com.nokia.tracecompiler.source.SourceLocationInterface;
+
+/**
+ * Base class for document factories
+ * 
+ */
+public class DocumentFactoryBase implements SourceDocumentFactory {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentFactory#
+	 *      createDocument(java.lang.String)
+	 */
+	public SourceDocumentInterface createDocument(String sourceData) {
+		return new DocumentAdapter();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentFactory#
+	 *      createLocation(com.nokia.tracecompiler.source.SourceLocationBase,
+	 *      int, int)
+	 */
+	public SourceLocationInterface createLocation(SourceLocationBase base,
+			int offset, int length) {
+		return new SimpleLocation(offset, length);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/DocumentMonitorBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Base class for document monitors
+*
+*/
+package com.nokia.tracecompiler.utils;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.source.SourceDocumentFactory;
+import com.nokia.tracecompiler.source.SourceDocumentInterface;
+import com.nokia.tracecompiler.source.SourceDocumentMonitor;
+import com.nokia.tracecompiler.source.SourceDocumentProcessor;
+
+/**
+ * Base class for document monitors.
+ * 
+ */
+public class DocumentMonitorBase implements SourceDocumentMonitor {
+
+	/**
+	 * Document factory adapter
+	 */
+	private DocumentFactoryBase factory;
+
+	/**
+	 * List of sources
+	 */
+	private ArrayList<SourceDocumentInterface> sources = new ArrayList<SourceDocumentInterface>();
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentMonitor#getFactory()
+	 */
+	public SourceDocumentFactory getFactory() {
+		if (factory == null) {
+			factory = new DocumentFactoryBase();
+		}
+		return factory;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Iterable#iterator()
+	 */
+	public Iterator<SourceDocumentInterface> iterator() {
+		return sources.iterator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentMonitor#
+	 *      startMonitor(com.nokia.tracecompiler.source.SourceDocumentProcessor)
+	 */
+	public void startMonitor(SourceDocumentProcessor processor) throws Exception {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceDocumentMonitor#stopMonitor()
+	 */
+	public void stopMonitor() {
+		sources.clear();
+	}
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/SimpleLocation.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2007 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:
+*
+* Adapter for location interface
+*
+*/
+package com.nokia.tracecompiler.utils;
+
+import com.nokia.tracecompiler.source.SourceLocationInterface;
+
+/**
+ * Location interface implementation
+ * 
+ */
+class SimpleLocation implements SourceLocationInterface {
+
+	/**
+	 * Location offset
+	 */
+	private int offset;
+
+	/**
+	 * Location length
+	 */
+	private int length;
+
+	/**
+	 * Deleted flag
+	 */
+	private boolean deleted;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param offset
+	 *            location offset
+	 * @param length
+	 *            location length
+	 */
+	SimpleLocation(int offset, int length) {
+		this.offset = offset;
+		this.length = length;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceLocationInterface#delete()
+	 */
+	public void delete() {
+		deleted = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceLocationInterface#getLength()
+	 */
+	public int getLength() {
+		return length;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceLocationInterface#getOffset()
+	 */
+	public int getOffset() {
+		return offset;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceLocationInterface#isDeleted()
+	 */
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceLocationInterface#setLength(int)
+	 */
+	public void setLength(int length) {
+		this.length = length;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceLocationInterface#setOffset(int)
+	 */
+	public void setOffset(int offset) {
+		this.offset = offset;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/TraceCompilerVersion.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 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:
+*
+* Version number abstraction
+*
+*/
+package com.nokia.tracecompiler.utils;
+
+/**
+ * Version number abstraction
+ * 
+ */
+public abstract class TraceCompilerVersion {
+
+	/**
+	 * Sub-class, which implements getVersion
+	 */
+	private static TraceCompilerVersion versionImpl;
+
+	/**
+	 * Gets TraceCompiler version number
+	 * 
+	 * @return version number
+	 */
+	public static String getVersion() {
+		String version = null;
+		if (versionImpl != null) {
+			version = versionImpl.getTraceCompilerVersion();
+		} else {
+			// TODO: This is used in console builds -> Maintenance needed
+			version = "2.3.0"; //$NON-NLS-1$
+		}
+		return version;
+	}
+
+	/**
+	 * Gets the version number as x.y.z
+	 * 
+	 * @return the version string
+	 */
+	protected abstract String getTraceCompilerVersion();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/utils/package.html	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+<html><body>
+Exported utility classes
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_1.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,22 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP1=0xde
+[GROUP]GROUP2=0xdf
+[TRACE]GROUP1[0xDE]_TRACE0=0x1
+[TRACE]GROUP2[0xDF]_TRACE1=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_2.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP1=0xde
+[GROUP]GROUP2=0xdf
+[TRACE]GROUP1[0xDE]_TRACE0=0x1
+[TRACE]GROUP2[0xDF]_TRACE1=0x1
+[TRACE]GROUP2[0xDF]_TRACE2=0x2
+[TRACE]GROUP2[0xDF]_TRACE3=0x3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_3.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP2=0xdf
+[TRACE]GROUP2[0xDF]_TRACE2=0x2
+[TRACE]GROUP2[0xDF]_TRACE3=0x3
+[[OBSOLETE]][GROUP]GROUP1=0xde
+[[OBSOLETE]][TRACE]GROUP1[0xDE]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE1=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_4.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,29 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP1=0xe0
+[GROUP]GROUP2=0xdf
+[GROUP]TRACE_FATAL=0x81
+[TRACE]GROUP1[0xE0]_TRACE0=0x1
+[TRACE]GROUP2[0xDF]_TRACE1=0x4
+[TRACE]GROUP2[0xDF]_TRACE2=0x2
+[TRACE]TRACE_FATAL[0x81]_TRACE3=0x1
+[[OBSOLETE]][GROUP]GROUP1=0xde
+[[OBSOLETE]][TRACE]GROUP1[0xDE]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE1=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE3=0x3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_5.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP1=0xe0
+[GROUP]GROUP2=0xdf
+[TRACE]GROUP1[0xE0]_TRACE0=0x1
+[TRACE]GROUP2[0xDF]_TRACE1=0x4
+[TRACE]GROUP2[0xDF]_TRACE2=0x2
+[[OBSOLETE]][GROUP]GROUP1=0xde
+[[OBSOLETE]][TRACE]GROUP1[0xDE]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE1=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE3=0x3
+[[OBSOLETE]][TRACE]TRACE_FATAL[0x81]_TRACE3=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_6_0.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP1=0xe0
+[GROUP]GROUP2=0xdf
+[TRACE]GROUP1[0xE0]_TRACE0=0x1
+[TRACE]GROUP2[0xDF]_TRACE2=0x2
+[[OBSOLETE]][GROUP]GROUP1=0xde
+[[OBSOLETE]][TRACE]GROUP1[0xDE]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE1=0x4
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE3=0x3
+[[OBSOLETE]][TRACE]TRACE_FATAL[0x81]_TRACE3=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_6_1.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP1=0xe0
+[GROUP]GROUP2=0xdf
+[TRACE]GROUP1[0xE0]_TRACE0=0x1
+[TRACE]GROUP2[0xDF]_TRACE1=0x5
+[TRACE]GROUP2[0xDF]_TRACE2=0x2
+[[OBSOLETE]][GROUP]GROUP1=0xde
+[[OBSOLETE]][TRACE]GROUP1[0xDE]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE1=0x4
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE3=0x3
+[[OBSOLETE]][TRACE]TRACE_FATAL[0x81]_TRACE3=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_6_2.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP1=0xe0
+[GROUP]GROUP2=0xdf
+[TRACE]GROUP1[0xE0]_TRACE0=0x1
+[TRACE]GROUP2[0xDF]_TRACE2=0x2
+[[OBSOLETE]][GROUP]GROUP1=0xde
+[[OBSOLETE]][TRACE]GROUP1[0xDE]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE1=0x5
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE3=0x3
+[[OBSOLETE]][TRACE]TRACE_FATAL[0x81]_TRACE3=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_6_3.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP1=0xe0
+[GROUP]GROUP2=0xdf
+[TRACE]GROUP1[0xE0]_TRACE0=0x1
+[TRACE]GROUP2[0xDF]_TRACE1=0x6
+[TRACE]GROUP2[0xDF]_TRACE2=0x2
+[[OBSOLETE]][GROUP]GROUP1=0xde
+[[OBSOLETE]][TRACE]GROUP1[0xDE]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE1=0x5
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE3=0x3
+[[OBSOLETE]][TRACE]TRACE_FATAL[0x81]_TRACE3=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_7_0.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP2=0xdf
+[TRACE]GROUP2[0xDF]_TRACE0=0x7
+[TRACE]GROUP2[0xDF]_TRACE1=0x6
+[TRACE]GROUP2[0xDF]_TRACE2=0x2
+[[OBSOLETE]][GROUP]GROUP1=0xe0
+[[OBSOLETE]][TRACE]GROUP1[0xDE]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP1[0xE0]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE1=0x5
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE3=0x3
+[[OBSOLETE]][TRACE]TRACE_FATAL[0x81]_TRACE3=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_7_1.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,30 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP2=0xdf
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]GROUP2[0xDF]_TRACE1=0x6
+[TRACE]GROUP2[0xDF]_TRACE2=0x2
+[TRACE]TRACE_NORMAL[0x86]_TRACE0=0x1
+[[OBSOLETE]][GROUP]GROUP1=0xe0
+[[OBSOLETE]][TRACE]GROUP1[0xDE]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP1[0xE0]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE0=0x7
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE1=0x5
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE3=0x3
+[[OBSOLETE]][TRACE]TRACE_FATAL[0x81]_TRACE3=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_7_2.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,31 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]GROUP1=0xe1
+[GROUP]GROUP2=0xdf
+[TRACE]GROUP1[0xE1]_TRACE0=0x1
+[TRACE]GROUP2[0xDF]_TRACE1=0x6
+[TRACE]GROUP2[0xDF]_TRACE2=0x2
+[[OBSOLETE]][GROUP]GROUP1=0xe0
+[[OBSOLETE]][TRACE]GROUP1[0xDE]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP1[0xE0]_TRACE0=0x1
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE0=0x7
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE1=0x5
+[[OBSOLETE]][TRACE]GROUP2[0xDF]_TRACE3=0x3
+[[OBSOLETE]][TRACE]TRACE_FATAL[0x81]_TRACE3=0x1
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x86]_TRACE0=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_8.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,20 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[TRACE]TRACE_FLOW[0x8A]_TRACE1=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_fid_file_9.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,20 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 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: 
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]MY_GROUP=0xde
+[TRACE]MY_GROUP[0xDE]_TRACE1=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_tc_output_8.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+warning: TC has detected a fixed_id.defintions using different Group Id values. This file will be regenerated with the correct values.
+FixedIdDefinitionsTestApp took
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/data/reference_tc_output_9.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,3 @@
+warning: TC has detected a fixed_id.defintions using different Group Id values. This file will be regenerated with the correct values.
+FixedIdDefinitionsTestApp took
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/group/FixedIdDefinitionsTestApp.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  FixedIdDefinitionsTestApp.exe
+TARGETTYPE	  exe
+UID			 0 0xE9FBE6EE
+
+OS_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE	 ..\inc 
+USERINCLUDE  ..\traces
+
+SOURCEPATH	  ..\src
+SOURCE		  FixedIdDefinitionsTestApp.cpp
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+  DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+FixedIdDefinitionsTestApp.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/inc/FixedIdDefinitionsTestApp.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __FIXEDIDDEFINITIONSTESTAPP_H__
+#define __FIXEDIDDEFINITIONSTESTAPP_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __FIXEDIDDEFINITIONSTESTAPP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/FixedIdDefinitionsTestApp/src/FixedIdDefinitionsTestApp.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+//  Include Files  
+#include "FixedIdDefinitionsTestApp.h"
+#include <e32base.h>
+#include <e32debug.h>
+#include <e32std.h>
+#include <e32cons.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "FixedIdDefinitionsTestAppTraces.h"
+#endif
+// Console
+//  Constants
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+//     OstTrace0(GROUP1, TRACE0, "trace 0"); // TRACE_USED_IN_TEST_CASE_1
+//     OstTrace0(GROUP2, TRACE1, "trace 1"); // TRACE_USED_IN_TEST_CASE_1
+ 
+//     OstTrace0(GROUP1, TRACE0, "trace 0"); // TRACE_USED_IN_TEST_CASE_2
+//     OstTrace0(GROUP2, TRACE2, "trace 2"); // TRACE_USED_IN_TEST_CASE_2 
+//     OstTrace0(GROUP2, TRACE1, "trace 1"); // TRACE_USED_IN_TEST_CASE_2
+//     OstTrace0(GROUP2, TRACE3, "trace 3"); // TRACE_USED_IN_TEST_CASE_2 
+    
+//     OstTrace0(GROUP2, TRACE2, "trace 2"); // TRACE_USED_IN_TEST_CASE_3 
+//     OstTrace0(GROUP2, TRACE3, "trace 3"); // TRACE_USED_IN_TEST_CASE_3
+    
+//     OstTrace0(GROUP1, TRACE0, "trace 0"); // TRACE_USED_IN_TEST_CASE_4
+//     OstTrace0(GROUP2, TRACE2, "trace 2"); // TRACE_USED_IN_TEST_CASE_4 
+//     OstTrace0(GROUP2, TRACE1, "trace 1"); // TRACE_USED_IN_TEST_CASE_4
+//     OstTrace0(TRACE_FATAL, TRACE3, "trace 3"); // TRACE_USED_IN_TEST_CASE_4
+
+//     OstTrace0(GROUP1, TRACE0, "trace 0"); // TRACE_USED_IN_TEST_CASE_5
+//     OstTrace0(GROUP2, TRACE2, "trace 2"); // TRACE_USED_IN_TEST_CASE_5 
+//     OstTrace0(GROUP2, TRACE1, "trace 1"); // TRACE_USED_IN_TEST_CASE_5
+
+//     OstTrace0(GROUP1, TRACE0, "trace 0"); // TRACE_USED_IN_TEST_CASE_6_0
+//     OstTrace0(GROUP2, TRACE2, "trace 2"); // TRACE_USED_IN_TEST_CASE_6_0 
+//     OstTrace0(GROUP1, TRACE0, "trace 0"); // TRACE_USED_IN_TEST_CASE_6_1 
+//     OstTrace0(GROUP2, TRACE2, "trace 2"); // TRACE_USED_IN_TEST_CASE_6_1 
+//     OstTrace0(GROUP2, TRACE1, "trace 1"); // TRACE_USED_IN_TEST_CASE_6_1
+//     OstTrace0(GROUP1, TRACE0, "trace 0"); // TRACE_USED_IN_TEST_CASE_6_2
+//     OstTrace0(GROUP2, TRACE2, "trace 2"); // TRACE_USED_IN_TEST_CASE_6_2 
+//     OstTrace0(GROUP1, TRACE0, "trace 0"); // TRACE_USED_IN_TEST_CASE_6_3
+//     OstTrace0(GROUP2, TRACE2, "trace 2"); // TRACE_USED_IN_TEST_CASE_6_3 
+//     OstTrace0(GROUP2, TRACE1, "trace 1"); // TRACE_USED_IN_TEST_CASE_6_3
+
+//     OstTrace0(GROUP2, TRACE0, "trace 0"); // TRACE_USED_IN_TEST_CASE_7_0
+//     OstTrace0(GROUP2, TRACE2, "trace 2"); // TRACE_USED_IN_TEST_CASE_7_0 
+//     OstTrace0(GROUP2, TRACE1, "trace 1"); // TRACE_USED_IN_TEST_CASE_7_0
+//     OstTrace0(TRACE_NORMAL, TRACE0, "trace 0"); // TRACE_USED_IN_TEST_CASE_7_1
+//     OstTrace0(GROUP2, TRACE2, "trace 2"); // TRACE_USED_IN_TEST_CASE_7_1
+//     OstTrace0(GROUP2, TRACE1, "trace 1"); // TRACE_USED_IN_TEST_CASE_7_1
+//     OstTrace0(GROUP1, TRACE0, "trace 0"); // TRACE_USED_IN_TEST_CASE_7_2
+//     OstTrace0(GROUP2, TRACE2, "trace 2"); // TRACE_USED_IN_TEST_CASE_7_2 
+//     OstTrace0(GROUP2, TRACE1, "trace 1"); // TRACE_USED_IN_TEST_CASE_7_2   
+   
+//     OstTrace0(TRACE_FLOW, TRACE1, "trace 1"); // TRACE_USED_IN_TEST_CASE_8      
+
+//     OstTrace0(MY_GROUP, TRACE1, "trace 1"); // TRACE_USED_IN_TEST_CASE_9                
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+                            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleCppTraceErrorApp/data/referencelog.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,13 @@
+error: ExtraCppFile.cpp, line 37: Trace does not need to use extension macro
+error: ExtraCppFile.cpp, line 38: Trace does not need to use extension macro
+error: ExtraCppFile.cpp, line 42: Parameter count does not match the format specification
+error: You have exceeded the number of Group IDs you have allocated.
+warning: Deprecated group TRACE_API detected. Updating to TRACE_BORDER in dictionary. Please update source code!
+warning: Deprecated group TRACE_DETAILED detected. Updating to TRACE_INTERNALS in dictionary. Please update source code!
+warning: Deprecated group TRACE_DEBUG detected. Updating to TRACE_DUMP in dictionary. Please update source code!
+error: MultipleCppTraceErrorApp.cpp, line 52: Trace does not need to use extension macro
+error: MultipleCppTraceErrorApp.cpp, line 53: Trace does not need to use extension macro
+error: MultipleCppTraceErrorApp.cpp, line 57: Trace is used from multiple places
+error: MultipleCppTraceErrorApp.cpp, line 58: Trace is used from multiple places
+error: MultipleCppTraceErrorApp.cpp, line 65: Parameter count does not match the format specification
+error: MultipleCppTraceErrorApp.cpp, line 101: Run out of Group IDs. You can try to reuse unused group ids by deleting fixed id definition file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleCppTraceErrorApp/group/MultipleCppTraceErrorApp.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  MultipleCppTraceErrorApp.exe
+TARGETTYPE	  exe
+UID			 0 0xE8576D94
+
+APP_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE	 ../inc
+USERINCLUDE  ../traces
+
+SOURCEPATH	  ../src
+SOURCE		  MultipleCppTraceErrorApp.cpp 
+SOURCE		  ExtraCppFile.cpp
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleCppTraceErrorApp/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+MultipleCppTraceErrorApp.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleCppTraceErrorApp/inc/MultipleCppTraceErrorApp.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __TRACEERRORAPP_H__
+#define __TRACEERRORAPP_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+void CallSomeMoreTraceStatements();
+
+#endif  // __TRACEERRORAPP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleCppTraceErrorApp/sis/TraceErrorApp_EKA2.pkg	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+;
+; Copyright (c) 2010 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: 
+;
+; Installation file for Symbian OS 9.x for generic console application
+; Installation file for TraceErrorApp EXE
+;
+; This is an auto-generated PKG file by Carbide.
+; This file uses variables specific to Carbide builds that will not work
+; on command-line builds. If you want to use this generated PKG file from the
+; command-line tools you will need to modify the variables with the appropriate
+; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
+;
+
+;
+; UID is the exe's UID
+;
+#{"TraceErrorApp EXE"},(0xE8576D92),1,0,0
+
+
+;Localised Vendor name
+%{"Vendor-EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+"$(EPOCROOT)Epoc32\release\$(PLATFORM)\$(TARGET)\TraceErrorApp.exe"		  -"!:\sys\bin\TraceErrorApp.exe"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleCppTraceErrorApp/src/ExtraCppFile.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleCppTraceErrorApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFileTraces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+    
+    //In these two cases Trace Compiler should give a error that an extension macro isn't necessary:
+    //"TraceErrorApp.cpp, line xx: Trace does not need to use extension macro"
+    OstTraceExt1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTraceExt1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    
+    //Wrong API i.e more parameters than it takes
+    //"TraceErrorApp.cpp, line xx: Parameter count does not match the format specification"
+    OstTrace0( TRACE_FLOW, TEST3_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" ,x);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleCppTraceErrorApp/src/MultipleCppTraceErrorApp.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleCppTraceErrorApp.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>			// Console
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleCppTraceErrorAppTraces.h"
+#endif
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    /****************************SHOULD GIVE ERRORS*******************************/
+    _LIT8(KTestDes,"Test Descriptor");
+    TInt32 x = 555;
+    TUint32 y = 666;
+    
+    //In these two cases Trace Compiler should give a error that an extension macro isn't necessary:
+    //"TraceErrorApp.cpp, line xx: Trace does not need to use extension macro"
+    OstTraceExt1( TRACE_FLOW, TEST1_MAINL, "MainL(): x=%d" , x );
+    OstTraceExt1( TRACE_FLOW, TEST2_MAINL, "MainL(): y=%u" , y );
+    
+    //This should give an error stating that the trace name is duplicated
+    //"TraceErrorApp.cpp, line xx: Trace is used from multiple places"
+    OstTrace0( TRACE_FLOW, TEST3_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST3_MAINL, "MainL()" );
+    
+    //This should NOT give an error stating that the arguments don't match format spec
+    //OstTraceExt2( TRACE_FLOW, TEST4_MAINL, "MainL(): x=%d;KTestDes=%d", x, KTestDes );
+
+    //Wrong API i.e more parameters than it takes
+    //"TraceErrorApp.cpp, line xx: Parameter count does not match the format specification"
+    OstTrace0( TRACE_FLOW, TEST5_MAINL, "MainL(): x=%d" ,x);
+    
+    //Too many User-defined group ids should be max of 32 but there are 33 here), should get an error
+    //"You have exceeded the number of Group IDs you have allocated."
+    OstTrace0( MY_GROUP_ID1, TEST_MAINL6, "MainL()" );
+    OstTrace0( MY_GROUP_ID2, TEST_MAINL7, "MainL()" );
+    OstTrace0( MY_GROUP_ID3, TEST_MAINL8, "MainL()" );
+    OstTrace0( MY_GROUP_ID4, TEST_MAINL9, "MainL()" );
+    OstTrace0( MY_GROUP_ID5, TEST_MAINL10, "MainL()" );
+    OstTrace0( MY_GROUP_ID6, TEST_MAINL11, "MainL()" );
+    OstTrace0( MY_GROUP_ID7, TEST_MAINL12, "MainL()" );
+    OstTrace0( MY_GROUP_ID8, TEST_MAINL13, "MainL()" );
+    OstTrace0( MY_GROUP_ID9, TEST_MAINL14, "MainL()" );
+    OstTrace0( MY_GROUP_ID10, TEST_MAINL15, "MainL()" );
+    OstTrace0( MY_GROUP_ID11, TEST_MAINL16, "MainL()" );
+    OstTrace0( MY_GROUP_ID12, TEST_MAINL17, "MainL()" );
+    OstTrace0( MY_GROUP_ID13, TEST_MAINL18, "MainL()" );
+    OstTrace0( MY_GROUP_ID14, TEST_MAINL19, "MainL()" );
+    OstTrace0( MY_GROUP_ID15, TEST_MAINL20, "MainL()" );
+    OstTrace0( MY_GROUP_ID16, TEST_MAINL21, "MainL()" );
+    OstTrace0( MY_GROUP_ID17, TEST_MAINL22, "MainL()" );
+    OstTrace0( MY_GROUP_ID18, TEST_MAINL23, "MainL()" );
+    OstTrace0( MY_GROUP_ID19, TEST_MAINL24, "MainL()" );
+    OstTrace0( MY_GROUP_ID20, TEST_MAINL25, "MainL()" );
+    OstTrace0( MY_GROUP_ID21, TEST_MAINL26, "MainL()" );
+    OstTrace0( MY_GROUP_ID22, TEST_MAINL27, "MainL()" );
+    OstTrace0( MY_GROUP_ID23, TEST_MAINL28, "MainL()" );
+    OstTrace0( MY_GROUP_ID24, TEST_MAINL29, "MainL()" );
+    OstTrace0( MY_GROUP_ID25, TEST_MAINL30, "MainL()" );
+    OstTrace0( MY_GROUP_ID26, TEST_MAINL31, "MainL()" );
+    OstTrace0( MY_GROUP_ID27, TEST_MAINL32, "MainL()" );
+    OstTrace0( MY_GROUP_ID28, TEST_MAINL33, "MainL()" );
+    OstTrace0( MY_GROUP_ID29, TEST_MAINL34, "MainL()" );
+    OstTrace0( MY_GROUP_ID30, TEST_MAINL35, "MainL()" );
+    OstTrace0( MY_GROUP_ID31, TEST_MAINL36, "MainL()" );
+    OstTrace0( MY_GROUP_ID32, TEST_MAINL37, "MainL()" );
+    OstTrace0( MY_GROUP_ID33, TEST_MAINL38, "MainL()" );    
+    /*****************************************************************************/
+    
+    
+    /******************************SHOULD GIVE WARNINGS***************************/
+    //Should get warnings from using deprecated GIDs
+    //e.g. "Deprecated group TRACE_API detected. Updating to TRACE_BORDER in dictionary. Please update source code!"
+    OstTrace0( TRACE_API, TEST_MAINL39, "MainL()" );  
+    OstTrace0( TRACE_IMPORTANT, TEST_MAINL40, "MainL()" );  
+    OstTrace0( TRACE_DETAILED, TEST_MAINL41, "MainL()" );
+    OstTrace0( TRACE_DEBUG, TEST_MAINL42, "MainL()" );  
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleCppTraceErrorApp/traces/OstTraceDefinitions.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <OpenSystemTrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleCppTraceErrorApp/traces/fixed_id.definitions	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,9 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_BORDER=0x84
+[GROUP]TRACE_DUMP=0x89
+[GROUP]TRACE_IMPORTANT=0x85
+[GROUP]TRACE_INTERNALS=0x88
+[TRACE]TRACE_BORDER[0x84]_TEST_MAINL39=0x1
+[TRACE]TRACE_DUMP[0x89]_TEST_MAINL42=0x1
+[TRACE]TRACE_IMPORTANT[0x85]_TEST_MAINL40=0x1
+[TRACE]TRACE_INTERNALS[0x88]_TEST_MAINL41=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/data/referencelog.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,13 @@
+error: ExtraCppFile2.cpp, line 37: Trace does not need to use extension macro
+error: ExtraCppFile2.cpp, line 38: Trace does not need to use extension macro
+error: ExtraCppFile2.cpp, line 42: Parameter count does not match the format specification
+error: You have exceeded the number of Group IDs you have allocated.
+warning: Deprecated group TRACE_API detected. Updating to TRACE_BORDER in dictionary. Please update source code!
+warning: Deprecated group TRACE_DETAILED detected. Updating to TRACE_INTERNALS in dictionary. Please update source code!
+warning: Deprecated group TRACE_DEBUG detected. Updating to TRACE_DUMP in dictionary. Please update source code!
+error: MultipleMmpTraceErrorApp2.cpp, line 52: Trace does not need to use extension macro
+error: MultipleMmpTraceErrorApp2.cpp, line 53: Trace does not need to use extension macro
+error: MultipleMmpTraceErrorApp2.cpp, line 57: Trace is used from multiple places
+error: MultipleMmpTraceErrorApp2.cpp, line 58: Trace is used from multiple places
+error: MultipleMmpTraceErrorApp2.cpp, line 65: Parameter count does not match the format specification
+error: MultipleMmpTraceErrorApp2.cpp, line 101: Run out of Group IDs. You can try to reuse unused group ids by deleting fixed id definition file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/group/MultipleMmpTraceErrorApp1.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  MultipleCppTraceErrorApp1.exe
+TARGETTYPE	  exe
+UID			 0 0xE8576D96
+
+APP_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE	 ../inc
+USERINCLUDE  ../traces
+
+SOURCEPATH	  ../src
+SOURCE		  MultipleMmpTraceErrorApp1.cpp 
+SOURCE 		  ExtraCppFile1.cpp
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/group/MultipleMmpTraceErrorApp2.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  MultipleCppTraceErrorApp2.exe
+TARGETTYPE	  exe
+UID			 0 0xE8576D95
+
+APP_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE	 ..\inc
+USERINCLUDE  ..\traces
+
+SOURCEPATH	  ..\src
+SOURCE		  MultipleMmpTraceErrorApp2.cpp 
+SOURCE		  ExtraCppFile2.cpp
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+MultipleMmpTraceErrorApp1.mmp
+MultipleMmpTraceErrorApp2.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/inc/MultipleMmpTraceErrorApp.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __TRACEERRORAPP_H__
+#define __TRACEERRORAPP_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+void CallSomeMoreTraceStatements();
+
+#endif  // __TRACEERRORAPP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/sis/TraceErrorApp_EKA2.pkg	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+;
+; Copyright (c) 2010 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: 
+;
+; Installation file for Symbian OS 9.x for generic console application
+; Installation file for TraceErrorApp EXE
+;
+; This is an auto-generated PKG file by Carbide.
+; This file uses variables specific to Carbide builds that will not work
+; on command-line builds. If you want to use this generated PKG file from the
+; command-line tools you will need to modify the variables with the appropriate
+; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
+;
+
+;
+; UID is the exe's UID
+;
+#{"TraceErrorApp EXE"},(0xE8576D92),1,0,0
+
+
+;Localised Vendor name
+%{"Vendor-EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+"$(EPOCROOT)Epoc32\release\$(PLATFORM)\$(TARGET)\TraceErrorApp.exe"		  -"!:\sys\bin\TraceErrorApp.exe"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/src/ExtraCppFile1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpTraceErrorApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile1Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+    
+    //In these two cases Trace Compiler should give a error that an extension macro isn't necessary:
+    //"TraceErrorApp.cpp, line xx: Trace does not need to use extension macro"
+    OstTraceExt1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTraceExt1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    
+    //Wrong API i.e more parameters than it takes
+    //"TraceErrorApp.cpp, line xx: Parameter count does not match the format specification"
+    OstTrace0( TRACE_FLOW, TEST3_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" ,x);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/src/ExtraCppFile2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpTraceErrorApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile2Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+    
+    //In these two cases Trace Compiler should give a error that an extension macro isn't necessary:
+    //"TraceErrorApp.cpp, line xx: Trace does not need to use extension macro"
+    OstTraceExt1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTraceExt1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    
+    //Wrong API i.e more parameters than it takes
+    //"TraceErrorApp.cpp, line xx: Parameter count does not match the format specification"
+    OstTrace0( TRACE_FLOW, TEST3_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" ,x);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/src/MultipleMmpTraceErrorApp1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpTraceErrorApp.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>			// Console
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpTraceErrorApp1Traces.h"
+#endif
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    /****************************SHOULD GIVE ERRORS*******************************/
+    _LIT8(KTestDes,"Test Descriptor");
+    TInt32 x = 555;
+    TUint32 y = 666;
+    
+    //In these two cases Trace Compiler should give a error that an extension macro isn't necessary:
+    //"TraceErrorApp.cpp, line xx: Trace does not need to use extension macro"
+    OstTraceExt1( TRACE_FLOW, TEST1_MAINL, "MainL(): x=%d" , x );
+    OstTraceExt1( TRACE_FLOW, TEST2_MAINL, "MainL(): y=%u" , y );
+    
+    //This should give an error stating that the trace name is duplicated
+    //"TraceErrorApp.cpp, line xx: Trace is used from multiple places"
+    OstTrace0( TRACE_FLOW, TEST3_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST3_MAINL, "MainL()" );
+    
+    //This should NOT give an error stating that the arguments don't match format spec
+    //OstTraceExt2( TRACE_FLOW, TEST4_MAINL, "MainL(): x=%d;KTestDes=%d", x, KTestDes );
+
+    //Wrong API i.e more parameters than it takes
+    //"TraceErrorApp.cpp, line xx: Parameter count does not match the format specification"
+    OstTrace0( TRACE_FLOW, TEST5_MAINL, "MainL(): x=%d" ,x);
+    
+    //Too many User-defined group ids should be max of 32 but there are 33 here), should get an error
+    //"You have exceeded the number of Group IDs you have allocated."
+    OstTrace0( MY_GROUP_ID1, TEST_MAINL6, "MainL()" );
+    OstTrace0( MY_GROUP_ID2, TEST_MAINL7, "MainL()" );
+    OstTrace0( MY_GROUP_ID3, TEST_MAINL8, "MainL()" );
+    OstTrace0( MY_GROUP_ID4, TEST_MAINL9, "MainL()" );
+    OstTrace0( MY_GROUP_ID5, TEST_MAINL10, "MainL()" );
+    OstTrace0( MY_GROUP_ID6, TEST_MAINL11, "MainL()" );
+    OstTrace0( MY_GROUP_ID7, TEST_MAINL12, "MainL()" );
+    OstTrace0( MY_GROUP_ID8, TEST_MAINL13, "MainL()" );
+    OstTrace0( MY_GROUP_ID9, TEST_MAINL14, "MainL()" );
+    OstTrace0( MY_GROUP_ID10, TEST_MAINL15, "MainL()" );
+    OstTrace0( MY_GROUP_ID11, TEST_MAINL16, "MainL()" );
+    OstTrace0( MY_GROUP_ID12, TEST_MAINL17, "MainL()" );
+    OstTrace0( MY_GROUP_ID13, TEST_MAINL18, "MainL()" );
+    OstTrace0( MY_GROUP_ID14, TEST_MAINL19, "MainL()" );
+    OstTrace0( MY_GROUP_ID15, TEST_MAINL20, "MainL()" );
+    OstTrace0( MY_GROUP_ID16, TEST_MAINL21, "MainL()" );
+    OstTrace0( MY_GROUP_ID17, TEST_MAINL22, "MainL()" );
+    OstTrace0( MY_GROUP_ID18, TEST_MAINL23, "MainL()" );
+    OstTrace0( MY_GROUP_ID19, TEST_MAINL24, "MainL()" );
+    OstTrace0( MY_GROUP_ID20, TEST_MAINL25, "MainL()" );
+    OstTrace0( MY_GROUP_ID21, TEST_MAINL26, "MainL()" );
+    OstTrace0( MY_GROUP_ID22, TEST_MAINL27, "MainL()" );
+    OstTrace0( MY_GROUP_ID23, TEST_MAINL28, "MainL()" );
+    OstTrace0( MY_GROUP_ID24, TEST_MAINL29, "MainL()" );
+    OstTrace0( MY_GROUP_ID25, TEST_MAINL30, "MainL()" );
+    OstTrace0( MY_GROUP_ID26, TEST_MAINL31, "MainL()" );
+    OstTrace0( MY_GROUP_ID27, TEST_MAINL32, "MainL()" );
+    OstTrace0( MY_GROUP_ID28, TEST_MAINL33, "MainL()" );
+    OstTrace0( MY_GROUP_ID29, TEST_MAINL34, "MainL()" );
+    OstTrace0( MY_GROUP_ID30, TEST_MAINL35, "MainL()" );
+    OstTrace0( MY_GROUP_ID31, TEST_MAINL36, "MainL()" );
+    OstTrace0( MY_GROUP_ID32, TEST_MAINL37, "MainL()" );
+    OstTrace0( MY_GROUP_ID33, TEST_MAINL38, "MainL()" );    
+    /*****************************************************************************/
+    
+    
+    /******************************SHOULD GIVE WARNINGS***************************/
+    //Should get warnings from using deprecated GIDs
+    //e.g. "Deprecated group TRACE_API detected. Updating to TRACE_BORDER in dictionary. Please update source code!"
+    OstTrace0( TRACE_API, TEST_MAINL39, "MainL()" );  
+    OstTrace0( TRACE_IMPORTANT, TEST_MAINL40, "MainL()" );  
+    OstTrace0( TRACE_DETAILED, TEST_MAINL41, "MainL()" );
+    OstTrace0( TRACE_DEBUG, TEST_MAINL42, "MainL()" );  
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/src/MultipleMmpTraceErrorApp2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpTraceErrorApp.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>			// Console
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpTraceErrorApp2Traces.h"
+#endif
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    /****************************SHOULD GIVE ERRORS*******************************/
+    _LIT8(KTestDes,"Test Descriptor");
+    TInt32 x = 555;
+    TUint32 y = 666;
+    
+    //In these two cases Trace Compiler should give a error that an extension macro isn't necessary:
+    //"TraceErrorApp.cpp, line xx: Trace does not need to use extension macro"
+    OstTraceExt1( TRACE_FLOW, TEST1_MAINL, "MainL(): x=%d" , x );
+    OstTraceExt1( TRACE_FLOW, TEST2_MAINL, "MainL(): y=%u" , y );
+    
+    //This should give an error stating that the trace name is duplicated
+    //"TraceErrorApp.cpp, line xx: Trace is used from multiple places"
+    OstTrace0( TRACE_FLOW, TEST3_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST3_MAINL, "MainL()" );
+    
+    //This should NOT give an error stating that the arguments don't match format spec
+    //OstTraceExt2( TRACE_FLOW, TEST4_MAINL, "MainL(): x=%d;KTestDes=%d", x, KTestDes );
+
+    //Wrong API i.e more parameters than it takes
+    //"TraceErrorApp.cpp, line xx: Parameter count does not match the format specification"
+    OstTrace0( TRACE_FLOW, TEST5_MAINL, "MainL(): x=%d" ,x);
+    
+    //Too many User-defined group ids should be max of 32 but there are 33 here), should get an error
+    //"You have exceeded the number of Group IDs you have allocated."
+    OstTrace0( MY_GROUP_ID1, TEST_MAINL6, "MainL()" );
+    OstTrace0( MY_GROUP_ID2, TEST_MAINL7, "MainL()" );
+    OstTrace0( MY_GROUP_ID3, TEST_MAINL8, "MainL()" );
+    OstTrace0( MY_GROUP_ID4, TEST_MAINL9, "MainL()" );
+    OstTrace0( MY_GROUP_ID5, TEST_MAINL10, "MainL()" );
+    OstTrace0( MY_GROUP_ID6, TEST_MAINL11, "MainL()" );
+    OstTrace0( MY_GROUP_ID7, TEST_MAINL12, "MainL()" );
+    OstTrace0( MY_GROUP_ID8, TEST_MAINL13, "MainL()" );
+    OstTrace0( MY_GROUP_ID9, TEST_MAINL14, "MainL()" );
+    OstTrace0( MY_GROUP_ID10, TEST_MAINL15, "MainL()" );
+    OstTrace0( MY_GROUP_ID11, TEST_MAINL16, "MainL()" );
+    OstTrace0( MY_GROUP_ID12, TEST_MAINL17, "MainL()" );
+    OstTrace0( MY_GROUP_ID13, TEST_MAINL18, "MainL()" );
+    OstTrace0( MY_GROUP_ID14, TEST_MAINL19, "MainL()" );
+    OstTrace0( MY_GROUP_ID15, TEST_MAINL20, "MainL()" );
+    OstTrace0( MY_GROUP_ID16, TEST_MAINL21, "MainL()" );
+    OstTrace0( MY_GROUP_ID17, TEST_MAINL22, "MainL()" );
+    OstTrace0( MY_GROUP_ID18, TEST_MAINL23, "MainL()" );
+    OstTrace0( MY_GROUP_ID19, TEST_MAINL24, "MainL()" );
+    OstTrace0( MY_GROUP_ID20, TEST_MAINL25, "MainL()" );
+    OstTrace0( MY_GROUP_ID21, TEST_MAINL26, "MainL()" );
+    OstTrace0( MY_GROUP_ID22, TEST_MAINL27, "MainL()" );
+    OstTrace0( MY_GROUP_ID23, TEST_MAINL28, "MainL()" );
+    OstTrace0( MY_GROUP_ID24, TEST_MAINL29, "MainL()" );
+    OstTrace0( MY_GROUP_ID25, TEST_MAINL30, "MainL()" );
+    OstTrace0( MY_GROUP_ID26, TEST_MAINL31, "MainL()" );
+    OstTrace0( MY_GROUP_ID27, TEST_MAINL32, "MainL()" );
+    OstTrace0( MY_GROUP_ID28, TEST_MAINL33, "MainL()" );
+    OstTrace0( MY_GROUP_ID29, TEST_MAINL34, "MainL()" );
+    OstTrace0( MY_GROUP_ID30, TEST_MAINL35, "MainL()" );
+    OstTrace0( MY_GROUP_ID31, TEST_MAINL36, "MainL()" );
+    OstTrace0( MY_GROUP_ID32, TEST_MAINL37, "MainL()" );
+    OstTrace0( MY_GROUP_ID33, TEST_MAINL38, "MainL()" );    
+    /*****************************************************************************/
+    
+    
+    /******************************SHOULD GIVE WARNINGS***************************/
+    //Should get warnings from using deprecated GIDs
+    //e.g. "Deprecated group TRACE_API detected. Updating to TRACE_BORDER in dictionary. Please update source code!"
+    OstTrace0( TRACE_API, TEST_MAINL39, "MainL()" );  
+    OstTrace0( TRACE_IMPORTANT, TEST_MAINL40, "MainL()" );  
+    OstTrace0( TRACE_DETAILED, TEST_MAINL41, "MainL()" );
+    OstTrace0( TRACE_DEBUG, TEST_MAINL42, "MainL()" );  
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/traces/OstTraceDefinitions.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <OpenSystemTrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/MultipleMmpTraceErrorApps/traces/fixed_id.definitions	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,9 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_BORDER=0x84
+[GROUP]TRACE_DUMP=0x89
+[GROUP]TRACE_IMPORTANT=0x85
+[GROUP]TRACE_INTERNALS=0x88
+[TRACE]TRACE_BORDER[0x84]_TEST_MAINL39=0x1
+[TRACE]TRACE_DUMP[0x89]_TEST_MAINL42=0x1
+[TRACE]TRACE_IMPORTANT[0x85]_TEST_MAINL40=0x1
+[TRACE]TRACE_INTERNALS[0x88]_TEST_MAINL41=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TraceErrorApp/data/referencelog.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,10 @@
+error: You have exceeded the number of Group IDs you have allocated.
+warning: Deprecated group TRACE_API detected. Updating to TRACE_BORDER in dictionary. Please update source code!
+warning: Deprecated group TRACE_DETAILED detected. Updating to TRACE_INTERNALS in dictionary. Please update source code!
+warning: Deprecated group TRACE_DEBUG detected. Updating to TRACE_DUMP in dictionary. Please update source code!
+error: TraceErrorApp.cpp, line 52: Trace does not need to use extension macro
+error: TraceErrorApp.cpp, line 53: Trace does not need to use extension macro
+error: TraceErrorApp.cpp, line 57: Trace is used from multiple places
+error: TraceErrorApp.cpp, line 58: Trace is used from multiple places
+error: TraceErrorApp.cpp, line 65: Parameter count does not match the format specification
+error: TraceErrorApp.cpp, line 101: Run out of Group IDs. You can try to reuse unused group ids by deleting fixed id definition file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TraceErrorApp/group/TraceErrorApp.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  TraceErrorApp.exe
+TARGETTYPE	  exe
+UID			 0 0xE8576D92
+
+APP_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE	 ../inc
+USERINCLUDE  ../traces
+
+SOURCEPATH	  ../src
+SOURCE		  TraceErrorApp.cpp
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+  DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TraceErrorApp/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+TraceErrorApp.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TraceErrorApp/inc/TraceErrorApp.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __TRACEERRORAPP_H__
+#define __TRACEERRORAPP_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __TRACEERRORAPP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TraceErrorApp/sis/TraceErrorApp_EKA2.pkg	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+;
+; Copyright (c) 2010 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: 
+;
+; Installation file for Symbian OS 9.x for generic console application
+; Installation file for TraceErrorApp EXE
+;
+; This is an auto-generated PKG file by Carbide.
+; This file uses variables specific to Carbide builds that will not work
+; on command-line builds. If you want to use this generated PKG file from the
+; command-line tools you will need to modify the variables with the appropriate
+; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
+;
+
+;
+; UID is the exe's UID
+;
+#{"TraceErrorApp EXE"},(0xE8576D92),1,0,0
+
+
+;Localised Vendor name
+%{"Vendor-EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+"$(EPOCROOT)Epoc32\release\$(PLATFORM)\$(TARGET)\TraceErrorApp.exe"		  -"!:\sys\bin\TraceErrorApp.exe"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TraceErrorApp/src/TraceErrorApp.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "TraceErrorApp.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>			// Console
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "TraceErrorAppTraces.h"
+#endif
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    /****************************SHOULD GIVE ERRORS*******************************/
+    _LIT8(KTestDes,"Test Descriptor");
+    TInt32 x = 555;
+    TUint32 y = 666;
+    
+    //In these two cases Trace Compiler should give a error that an extension macro isn't necessary:
+    //"TraceErrorApp.cpp, line xx: Trace does not need to use extension macro"
+    OstTraceExt1( TRACE_FLOW, TEST1_MAINL, "MainL(): x=%d" , x );
+    OstTraceExt1( TRACE_FLOW, TEST2_MAINL, "MainL(): y=%u" , y );
+    
+    //This should give an error stating that the trace name is duplicated
+    //"TraceErrorApp.cpp, line xx: Trace is used from multiple places"
+    OstTrace0( TRACE_FLOW, TEST3_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST3_MAINL, "MainL()" );
+    
+    //This should NOT give an error stating that the arguments don't match format spec
+    //OstTraceExt2( TRACE_FLOW, TEST4_MAINL, "MainL(): x=%d;KTestDes=%d", x, KTestDes );
+
+    //Wrong API i.e more parameters than it takes
+    //"TraceErrorApp.cpp, line xx: Parameter count does not match the format specification"
+    OstTrace0( TRACE_FLOW, TEST5_MAINL, "MainL(): x=%d" ,x);
+    
+    //Too many User-defined group ids should be max of 32 but there are 33 here), should get an error
+    //"You have exceeded the number of Group IDs you have allocated."
+    OstTrace0( MY_GROUP_ID1, TEST_MAINL6, "MainL()" );
+    OstTrace0( MY_GROUP_ID2, TEST_MAINL7, "MainL()" );
+    OstTrace0( MY_GROUP_ID3, TEST_MAINL8, "MainL()" );
+    OstTrace0( MY_GROUP_ID4, TEST_MAINL9, "MainL()" );
+    OstTrace0( MY_GROUP_ID5, TEST_MAINL10, "MainL()" );
+    OstTrace0( MY_GROUP_ID6, TEST_MAINL11, "MainL()" );
+    OstTrace0( MY_GROUP_ID7, TEST_MAINL12, "MainL()" );
+    OstTrace0( MY_GROUP_ID8, TEST_MAINL13, "MainL()" );
+    OstTrace0( MY_GROUP_ID9, TEST_MAINL14, "MainL()" );
+    OstTrace0( MY_GROUP_ID10, TEST_MAINL15, "MainL()" );
+    OstTrace0( MY_GROUP_ID11, TEST_MAINL16, "MainL()" );
+    OstTrace0( MY_GROUP_ID12, TEST_MAINL17, "MainL()" );
+    OstTrace0( MY_GROUP_ID13, TEST_MAINL18, "MainL()" );
+    OstTrace0( MY_GROUP_ID14, TEST_MAINL19, "MainL()" );
+    OstTrace0( MY_GROUP_ID15, TEST_MAINL20, "MainL()" );
+    OstTrace0( MY_GROUP_ID16, TEST_MAINL21, "MainL()" );
+    OstTrace0( MY_GROUP_ID17, TEST_MAINL22, "MainL()" );
+    OstTrace0( MY_GROUP_ID18, TEST_MAINL23, "MainL()" );
+    OstTrace0( MY_GROUP_ID19, TEST_MAINL24, "MainL()" );
+    OstTrace0( MY_GROUP_ID20, TEST_MAINL25, "MainL()" );
+    OstTrace0( MY_GROUP_ID21, TEST_MAINL26, "MainL()" );
+    OstTrace0( MY_GROUP_ID22, TEST_MAINL27, "MainL()" );
+    OstTrace0( MY_GROUP_ID23, TEST_MAINL28, "MainL()" );
+    OstTrace0( MY_GROUP_ID24, TEST_MAINL29, "MainL()" );
+    OstTrace0( MY_GROUP_ID25, TEST_MAINL30, "MainL()" );
+    OstTrace0( MY_GROUP_ID26, TEST_MAINL31, "MainL()" );
+    OstTrace0( MY_GROUP_ID27, TEST_MAINL32, "MainL()" );
+    OstTrace0( MY_GROUP_ID28, TEST_MAINL33, "MainL()" );
+    OstTrace0( MY_GROUP_ID29, TEST_MAINL34, "MainL()" );
+    OstTrace0( MY_GROUP_ID30, TEST_MAINL35, "MainL()" );
+    OstTrace0( MY_GROUP_ID31, TEST_MAINL36, "MainL()" );
+    OstTrace0( MY_GROUP_ID32, TEST_MAINL37, "MainL()" );
+    OstTrace0( MY_GROUP_ID33, TEST_MAINL38, "MainL()" );    
+    /*****************************************************************************/
+    
+    
+    /******************************SHOULD GIVE WARNINGS***************************/
+    //Should get warnings from using deprecated GIDs
+    //e.g. "Deprecated group TRACE_API detected. Updating to TRACE_BORDER in dictionary. Please update source code!"
+    OstTrace0( TRACE_API, TEST_MAINL39, "MainL()" );  
+    OstTrace0( TRACE_IMPORTANT, TEST_MAINL40, "MainL()" );  
+    OstTrace0( TRACE_DETAILED, TEST_MAINL41, "MainL()" );
+    OstTrace0( TRACE_DEBUG, TEST_MAINL42, "MainL()" );  
+    /*****************************************************************************/
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TraceErrorApp/traces/OstTraceDefinitions.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <OpenSystemTrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TraceErrorApp/traces/fixed_id.definitions	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,9 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_BORDER=0x84
+[GROUP]TRACE_DUMP=0x89
+[GROUP]TRACE_IMPORTANT=0x85
+[GROUP]TRACE_INTERNALS=0x88
+[TRACE]TRACE_BORDER[0x84]_TEST_MAINL39=0x1
+[TRACE]TRACE_DUMP[0x89]_TEST_MAINL42=0x1
+[TRACE]TRACE_IMPORTANT[0x85]_TEST_MAINL40=0x1
+[TRACE]TRACE_INTERNALS[0x88]_TEST_MAINL41=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/console/group/HelloTraceConsole.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceConsole.exe
+TARGETTYPE	  exe
+UID			  0 0xE40349E4
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE	   ../inc
+USERINCLUDE    ../../dll/inc
+USERINCLUDE    ../traces
+
+SOURCEPATH	  ../src
+SOURCE		  HelloTraceConsole.cpp
+
+LIBRARY		  euser.lib
+LIBRARY       HelloTraceDll.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/console/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotraceconsole.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotraceconsole.iby)
+
+PRJ_MMPFILES
+HelloTraceConsole.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/console/group/hellotraceconsole.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACECONSOLE_IBY
+#define HELLOTRACECONSOLE_IBY
+
+#include <core\os\hellotracedll.iby>
+
+file=ABI_DIR\BUILD_DIR\hellotraceconsole.exe    Sys\Bin\hellotraceconsole.exe
+
+#endif //HELLOTRACECONSOLE_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/console/inc/HelloTraceConsole.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACECONSOLE_H__
+#define __HELLOTRACECONSOLE_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __HELLOTRACECONSOLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/console/src/HelloTraceConsole.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32cons.h>			// Console
+
+#include "HelloTraceConsole.h"
+#include "HelloTraceExample.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceConsoleTraces.h"
+#endif
+
+
+_LIT(KTextConsoleTitle, "HelloTrace");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+LOCAL_C void DoExamples()
+    {
+    TInt err = KErrNone;
+
+    console->Printf(_L("Before main tracing examples ...\n"));
+
+    console->Printf(_L(" Before type examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::JustTypes());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+
+    console->Printf(_L(" Before Interface examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::Interface());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+    
+    console->Printf(_L(" Before FnEntryExit examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::FnEntryExit());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);    
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    DoExamples();
+    
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    OstTraceFunctionEntry0( E32MAIN_ENTRY );
+    
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, 
+          console = Console::NewL(KTextConsoleTitle, 
+                                  TSize(KConsFullScreen, KConsFullScreen)));    
+    if (createError)
+        {
+        delete cleanup;
+        OstTrace1( TRACE_ERROR, E32MAIN_CREATE_ERROR, "Failed to create console error: %d", createError);
+        OstTraceFunctionExit0( E32MAIN_EXIT_ERR );
+        return createError;
+        }
+
+    TRAPD(mainError, DoStartL());    
+    if (mainError)
+        {
+        OstTrace1( TRACE_ERROR, E32MAIN_START_ERROR, "DoStartL failed with error: %d", mainError);
+        console->Printf(_L("DoStartL failed with error: %d\n\n"), mainError);
+        }
+    else 
+        {
+        console->Printf(_L("Before panic tracing example ..."));
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+    
+        OstTrace0( TRACE_FLOW, E32MAIN_BEFORE_PANIC, "About to cause a panic ..." );
+        HelloTraceExample::PanicTrace();
+        
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+        }
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    
+    OstTraceFunctionExit0( E32MAIN_EXIT );
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/bwins/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,14 @@
+EXPORTS
+	?Version@CHelloTraceInterface@@SA?AVTVersion@@XZ @ 1 NONAME ; class TVersion CHelloTraceInterface::Version(void)
+	?NewLC@CHelloTraceInterface@@SAPAV1@XZ @ 2 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewLC(void)
+	?JustTypes@HelloTraceExample@@SAXXZ @ 3 NONAME ; void HelloTraceExample::JustTypes(void)
+	?Interface@HelloTraceExample@@SAXXZ @ 4 NONAME ; void HelloTraceExample::Interface(void)
+	?FnEntryExit@HelloTraceExample@@SAXXZ @ 5 NONAME ; void HelloTraceExample::FnEntryExit(void)
+	?ResetString@CHelloTraceInterface@@QAEXXZ @ 6 NONAME ; void CHelloTraceInterface::ResetString(void)
+	?AddCharL@CHelloTraceInterface@@QAEXABVTChar@@@Z @ 7 NONAME ; void CHelloTraceInterface::AddCharL(class TChar const &)
+	?PanicTrace@HelloTraceExample@@SAXXZ @ 8 NONAME ; void HelloTraceExample::PanicTrace(void)
+	??1CHelloTraceInterface@@UAE@XZ @ 9 NONAME ; CHelloTraceInterface::~CHelloTraceInterface(void)
+	?String@CHelloTraceInterface@@QBE?BVTPtrC16@@XZ @ 10 NONAME ; class TPtrC16 const CHelloTraceInterface::String(void) const
+	?RemoveLast@CHelloTraceInterface@@QAEXXZ @ 11 NONAME ; void CHelloTraceInterface::RemoveLast(void)
+	?NewL@CHelloTraceInterface@@SAPAV1@XZ @ 12 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/eabi/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,20 @@
+EXPORTS
+	_ZN17HelloTraceExample10PanicTraceEv @ 1 NONAME
+	_ZN17HelloTraceExample11FnEntryExitEv @ 2 NONAME
+	_ZN17HelloTraceExample9InterfaceEv @ 3 NONAME
+	_ZN17HelloTraceExample9JustTypesEv @ 4 NONAME
+	_ZN20CHelloTraceInterface10RemoveLastEv @ 5 NONAME
+	_ZN20CHelloTraceInterface11ResetStringEv @ 6 NONAME
+	_ZN20CHelloTraceInterface4NewLEv @ 7 NONAME
+	_ZN20CHelloTraceInterface5NewLCEv @ 8 NONAME
+	_ZN20CHelloTraceInterface7VersionEv @ 9 NONAME
+	_ZN20CHelloTraceInterface8AddCharLERK5TChar @ 10 NONAME
+	_ZN20CHelloTraceInterfaceD0Ev @ 11 NONAME
+	_ZN20CHelloTraceInterfaceD1Ev @ 12 NONAME
+	_ZN20CHelloTraceInterfaceD2Ev @ 13 NONAME
+	_ZNK20CHelloTraceInterface6StringEv @ 14 NONAME
+	_ZTI13CHelloTraceFn @ 15 NONAME
+	_ZTI20CHelloTraceInterface @ 16 NONAME
+	_ZTV13CHelloTraceFn @ 17 NONAME
+	_ZTV20CHelloTraceInterface @ 18 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/group/HelloTraceDll.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceDll.dll
+TARGETTYPE	  dll
+UID			  0x1000008d 0xE43DF43E
+CAPABILITY    ReadUserData
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE  ../inc ../incDup
+USERINCLUDE  ../traces
+
+SOURCEPATH	 ../src
+SOURCE       HelloTraceExample.cpp 
+SOURCE       HelloTraceTypes.cpp
+SOURCE       HelloTraceInterface.cpp 
+SOURCE       HelloTraceFn.cpp 
+SOURCE       HelloTracePanic.cpp 
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/group/HelloTraceDll2.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceDll2.dll
+TARGETTYPE	  dll
+UID			  0x1000008d 0xE43DF43F
+CAPABILITY    ReadUserData
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE  ../inc ../incDup
+USERINCLUDE  ../traces
+
+SOURCEPATH	 ../src
+SOURCE       HelloTraceExample.cpp 
+SOURCE       HelloTraceTypes.cpp
+SOURCE       HelloTraceInterface.cpp 
+SOURCE       HelloTraceFn.cpp 
+SOURCE       HelloTracePanic.cpp 
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotracedll.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotracedll.iby)
+
+PRJ_MMPFILES
+HelloTraceDll.mmp
+HelloTraceDll2.mmp
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/group/hellotracedll.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACEDLL_IBY
+#define HELLOTRACEDLL_IBY
+
+file=ABI_DIR\BUILD_DIR\hellotracedll.dll        Sys\Bin\hellotracedll.dll
+file=ABI_DIR\BUILD_DIR\hellotracedll2.dll        Sys\Bin\hellotracedll2.dll
+
+#endif //HELLOTRACEDLL_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceExample.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEEXAMPLE_H__
+#define __HELLOTRACEEXAMPLE_H__
+
+#include <e32std.h>
+
+class HelloTraceExample
+    {
+public:
+    IMPORT_C static void JustTypes();    
+    IMPORT_C static void Interface();    
+    IMPORT_C static void FnEntryExit();    
+    IMPORT_C static void PanicTrace();    
+
+    // @TODO add examples for state macros
+    // @TODO add examples for event macros
+    // @TODO add examples for OstTraceData
+    // @TODO add compile-time selector examples
+    // @TODO add macro wrapper examples
+    };
+
+#endif  // __HELLOTRACEEXAMPLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceFn.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFN_H_
+#define HELLOTRACEFN_H_
+
+#include <e32base.h>    // CBase
+
+class CHelloTraceFn : public CBase
+    {
+public:
+    
+    // Note the Trace Builder will only parse this if it's in a cpp file
+    // but not from here :(
+    // Also if you add a new enum you need to reparse the enum - it doesn't
+    // get automatically reparsed by the Trace Compiler :(
+    enum TFnEnum
+        {
+        EExample1,
+        EExample2 = 2, 
+        // EExample3 = EExample2 + 1, // The Trace Builder can't parse this :(
+        };
+    
+public:
+    static CHelloTraceFn* NewL();
+    static CHelloTraceFn* NewLC();
+    ~CHelloTraceFn();
+   
+public: // Fn entry / exit tracing examples 
+    void Simple();
+    void OutputsParams(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValue();
+    TInt64 OutputsTInt64ReturnValue();
+    TFnEnum OutputsTFnEnumReturnValue();
+
+    CActive* OutputsUnknownPtrType(CActive* aActive);
+    CActive& OutputsUnknownRefType(CActive& aActive);
+    
+    void OutputMissingParams(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFn(TInt aDbgParam);
+#else
+    void PreProcessedFn();
+#endif
+    
+    static void StaticOutputsParamsL(TInt aParam);  
+    
+    // duplicate all the function and put the impl in the header file HelloTraceFnDup.h
+    void SimpleDup();
+    void OutputsParamsDup(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup();
+    TInt64 OutputsTInt64ReturnValueDup();
+    TFnEnum OutputsTFnEnumReturnValueDup();
+
+    CActive* OutputsUnknownPtrTypeDup(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup(CActive& aActive);
+    
+    void OutputMissingParamsDup(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup(TInt aDbgParam);
+#else
+    void PreProcessedFnDup();
+#endif
+    static void StaticOutputsParamsDupL(TInt aParam);  
+    
+    // duplicate all the function again and put the impl in the header file HelloTraceFnDup2.h
+    void SimpleDup2();
+    void OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup2();
+    TInt64 OutputsTInt64ReturnValueDup2();
+    TFnEnum OutputsTFnEnumReturnValueDup2();
+
+    CActive* OutputsUnknownPtrTypeDup2(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup2(CActive& aActive);
+    
+    void OutputMissingParamsDup2(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup2(TInt aDbgParam);
+#else
+    void PreProcessedFnDup2();
+#endif
+    static void StaticOutputsParamsDup2L(TInt aParam);  
+
+
+private:
+    CHelloTraceFn();
+    };
+
+#endif /* HELLOTRACEFN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceFn2.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFN2_H_
+#define HELLOTRACEFN2_H_
+
+#include <e32base.h>    // CBase
+
+class CHelloTraceFn : public CBase
+    {
+public:
+    
+    // Note the Trace Builder will only parse this if it's in a cpp file
+    // but not from here :(
+    // Also if you add a new enum you need to reparse the enum - it doesn't
+    // get automatically reparsed by the Trace Compiler :(
+    enum TFnEnum
+        {
+        EExample1,
+        EExample2 = 2, 
+        // EExample3 = EExample2 + 1, // The Trace Builder can't parse this :(
+        };
+    
+public:
+    static CHelloTraceFn* NewL();
+    static CHelloTraceFn* NewLC();
+    ~CHelloTraceFn();
+   
+public: // Fn entry / exit tracing examples 
+    void Simple();
+    void OutputsParams(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValue();
+    TInt64 OutputsTInt64ReturnValue();
+    TFnEnum OutputsTFnEnumReturnValue();
+
+    CActive* OutputsUnknownPtrType(CActive* aActive);
+    CActive& OutputsUnknownRefType(CActive& aActive);
+    
+    void OutputMissingParams(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFn(TInt aDbgParam);
+#else
+    void PreProcessedFn();
+#endif
+    
+    static void StaticOutputsParamsL(TInt aParam);  
+    
+    // duplicate all the function and put the impl in the header file HelloTraceFnDup.h
+    void SimpleDup();
+    void OutputsParamsDup(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup();
+    TInt64 OutputsTInt64ReturnValueDup();
+    TFnEnum OutputsTFnEnumReturnValueDup();
+
+    CActive* OutputsUnknownPtrTypeDup(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup(CActive& aActive);
+    
+    void OutputMissingParamsDup(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup(TInt aDbgParam);
+#else
+    void PreProcessedFnDup();
+#endif
+    static void StaticOutputsParamsDupL(TInt aParam);  
+    
+    // duplicate all the function again and put the impl in the header file HelloTraceFnDup2.h
+    void SimpleDup2();
+    void OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup2();
+    TInt64 OutputsTInt64ReturnValueDup2();
+    TFnEnum OutputsTFnEnumReturnValueDup2();
+
+    CActive* OutputsUnknownPtrTypeDup2(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup2(CActive& aActive);
+    
+    void OutputMissingParamsDup2(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup2(TInt aDbgParam);
+#else
+    void PreProcessedFnDup2();
+#endif
+    static void StaticOutputsParamsDup2L(TInt aParam);  
+
+
+private:
+    CHelloTraceFn();
+    };
+
+#endif /* HELLOTRACEFN2_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceInterface.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE_H__
+#define __HELLOTRACEINTERFACE_H__
+
+#include <e32base.h>	// CBase
+#include <e32std.h>	 // TBuf
+
+const TInt KHelloTraceDllBufferLength = 10;
+typedef TBuf<KHelloTraceDllBufferLength> THelloTraceDllExampleString;
+
+class CHelloTraceInterface : public CBase
+    {
+public:
+    IMPORT_C static CHelloTraceInterface* NewL();
+    IMPORT_C static CHelloTraceInterface* NewLC();
+    IMPORT_C ~CHelloTraceInterface();
+
+public:
+    IMPORT_C static TVersion Version();
+    IMPORT_C const TPtrC String() const;
+    IMPORT_C void AddCharL(const TChar& aChar);
+    IMPORT_C void RemoveLast();
+    IMPORT_C void ResetString();
+    
+    IMPORT_C static TVersion VersionDup();
+    IMPORT_C const TPtrC StringDup() const;
+    IMPORT_C void AddCharDupL(const TChar& aChar);
+    IMPORT_C void RemoveLastDup();
+    IMPORT_C void ResetStringDup();
+
+    IMPORT_C static TVersion VersionDup2();
+    IMPORT_C const TPtrC StringDup2() const;
+    IMPORT_C void AddCharDup2L(const TChar& aChar);
+    IMPORT_C void RemoveLastDup2();
+    IMPORT_C void ResetStringDup2();
+private:
+    CHelloTraceInterface();
+    void ConstructL();
+
+private:
+    // data
+    THelloTraceDllExampleString* iString;
+    };
+
+#endif  // __HELLOTRACEINTERFACE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceInterface2.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE2_H__
+#define __HELLOTRACEINTERFACE2_H__
+
+#include <e32base.h>	// CBase
+#include <e32std.h>	 // TBuf
+
+const TInt KHelloTraceDllBufferLength = 10;
+typedef TBuf<KHelloTraceDllBufferLength> THelloTraceDllExampleString;
+
+class CHelloTraceInterface : public CBase
+    {
+public:
+    IMPORT_C static CHelloTraceInterface* NewL();
+    IMPORT_C static CHelloTraceInterface* NewLC();
+    IMPORT_C ~CHelloTraceInterface();
+
+public:
+    IMPORT_C static TVersion Version();
+    IMPORT_C const TPtrC String() const;
+    IMPORT_C void AddCharL(const TChar& aChar);
+    IMPORT_C void RemoveLast();
+    IMPORT_C void ResetString();
+    
+    IMPORT_C static TVersion VersionDup();
+    IMPORT_C const TPtrC StringDup() const;
+    IMPORT_C void AddCharDupL(const TChar& aChar);
+    IMPORT_C void RemoveLastDup();
+    IMPORT_C void ResetStringDup();
+
+    IMPORT_C static TVersion VersionDup2();
+    IMPORT_C const TPtrC StringDup2() const;
+    IMPORT_C void AddCharDup2L(const TChar& aChar);
+    IMPORT_C void RemoveLastDup2();
+    IMPORT_C void ResetStringDup2();
+private:
+    CHelloTraceInterface();
+    void ConstructL();
+
+private:
+    // data
+    THelloTraceDllExampleString* iString;
+    };
+
+#endif  // __HELLOTRACEINTERFACE2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTracePanic.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEDLL_PAN__
+#define __HELLOTRACEDLL_PAN__
+
+//  Data Types
+
+enum THelloTraceDllPanic
+    {
+    EHelloTraceDllExamplePanic,
+    EHelloTraceDllNullPointer,
+    };
+
+//  Function Prototypes
+
+GLREF_C void Panic(THelloTraceDllPanic aPanic);
+
+#endif  // __HELLOTRACEDLL_PAN__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceTypes.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES_H__
+#define __HELLOTRACETYPES_H__
+
+class HelloTraceTypes
+    {
+public:
+    static void SignedIntegers();
+    static void UnsignedIntegers();
+    static void Descriptors();
+    
+    static void SignedIntegersDup();
+    static void UnsignedIntegersDup();
+    static void DescriptorsDup();
+        
+    static void SignedIntegersDup2();
+    static void UnsignedIntegersDup2();
+    static void DescriptorsDup2();
+    };
+
+#endif  // __HELLOTRACETYPES_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/inc/HelloTraceTypes2.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES2_H__
+#define __HELLOTRACETYPES2_H__
+
+class HelloTraceTypes
+    {
+public:
+    static void SignedIntegers();
+    static void UnsignedIntegers();
+    static void Descriptors();
+    
+    static void SignedIntegersDup();
+    static void UnsignedIntegersDup();
+    static void DescriptorsDup();
+        
+    static void SignedIntegersDup2();
+    static void UnsignedIntegersDup2();
+    static void DescriptorsDup2();
+    };
+
+#endif  // __HELLOTRACETYPES2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceFn2Dup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+ 
+#ifndef HELLOTRACEFNDUP2_H_
+#define HELLOTRACEFNDUP2_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFn2DupTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE2_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE2_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS2_DUP_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS2_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDupL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS2_DUP_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS2_DUP_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS2_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS2_DUP_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS2_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS2_DUP_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE2_DUP_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE2_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE2_DUP_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE2_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE2_DUP_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE2_DUP_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE2_DUP_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE2_DUP_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE2_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE2_DUP_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS2_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS2_DUP_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFN2DUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceFn2Dup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+ 
+#ifndef HELLOTRACEFN2DUP2_H_
+#define HELLOTRACEFN2DUP2_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFn2Dup2Traces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE2_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE2_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS2_DUP2_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS2_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDup2L(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS2_DUP2_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup2();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS2_DUP2_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS2_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS2_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS2_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS2_DUP2_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE2_DUP2_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE2_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE2_DUP2_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE2_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE2_DUP2_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE2_DUP2_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup2(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE2_DUP2_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE2_DUP2_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup2(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE2_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE2_DUP2_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup2(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS2_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS2_DUP2_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup2(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP2_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup2()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP2_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup2();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP2_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFN2DUP2_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceFnDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP_H_
+#define HELLOTRACEFNDUP_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDupTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDupL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceFnDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP2_H_
+#define HELLOTRACEFNDUP2_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDup2Traces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDup2L(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup2();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup2(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup2(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup2(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup2(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup2()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup2();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP2_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceInterface2Dup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE2DUP_H__
+#define __HELLOTRACEINTERFACE2DUP_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterface2DupTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION2_DUP, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING2_DUP, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDupL(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL2_DUP, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR2_DUP,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST2_DUP, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN2_DUP, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING2_DUP, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACE2DUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceInterface2Dup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE2DUP2_H__
+#define __HELLOTRACEINTERFACE2DUP2_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterface2Dup2Traces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup2()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION2_DUP2, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup2() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING2_DUP2, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDup2L(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL2_DUP2, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR2_DUP2,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup2()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST2_DUP2, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN2_DUP2, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup2()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING2_DUP2, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACE2DUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceInterfaceDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP_H__
+#define __HELLOTRACEINTERFACEDUP_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDupTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDupL(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceInterfaceDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP2_H__
+#define __HELLOTRACEINTERFACEDUP2_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDup2Traces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup2()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP2, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup2() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP2, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDup2L(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP2, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP2,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup2()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP2, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP2, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup2()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP2, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceTypes2Dup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES2DUP_H__
+#define __HELLOTRACETYPES2DUP_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypes2DupTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII2DUP, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE2DUP, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPES2DUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceTypes2Dup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES2DUP2_H__
+#define __HELLOTRACETYPES2DUP2_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypes2Dup2Traces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup2()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP2_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP2_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP2_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP2_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup2()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP2_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP2_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP2_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP2_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup2()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII2DUP2, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE2DUP2, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPES2DUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceTypesDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP_H__
+#define __HELLOTRACETYPESDUP_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDupTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/incDup/HelloTraceTypesDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP2_H__
+#define __HELLOTRACETYPESDUP2_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDup2Traces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup2()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup2()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup2()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP2, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP2, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/src/HelloTraceExample.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceExample.h"
+#include "HelloTraceTypes.h"
+#include "HelloTraceInterface.h"
+#include "HelloTraceFn.h"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceExampleTraces.h"
+#endif
+
+EXPORT_C void HelloTraceExample::JustTypes()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_JUSTTYPES, "*********************************************** " );
+    
+    HelloTraceTypes::SignedIntegers();
+    HelloTraceTypes::UnsignedIntegers();
+    HelloTraceTypes::Descriptors();    
+    }
+
+EXPORT_C void HelloTraceExample::Interface()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_INTERFACE, "*********************************************** " );
+    
+    TVersion version = CHelloTraceInterface::Version();   
+    if (version.iMajor >= 1) 
+        {
+        CHelloTraceInterface* example = CHelloTraceInterface::NewLC();
+        example->AddCharL('H');
+        example->AddCharL('e');
+        example->AddCharL('l');
+        example->AddCharL('l');
+        example->AddCharL('o');
+        example->AddCharL('T');        
+        example->RemoveLast();        
+        example->AddCharL(' ');
+        example->AddCharL('T');
+        example->AddCharL('r');
+        example->AddCharL('a');
+        example->AddCharL('c');
+        example->AddCharL('e');
+        example->AddCharL('!');
+        CleanupStack::PopAndDestroy(example);
+        }
+    else
+        {
+        OstTrace0( TRACE_ERROR, HELLOTRACEEXAMPLE_UNSUPPORTED_VERSION, "Unsupported version!");
+        }
+    }
+
+EXPORT_C void HelloTraceExample::FnEntryExit()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_FNENTRYEXIT, "*********************************************** " );
+       
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    CIdle* idle = CIdle::NewL(CActive::EPriorityIdle);
+    CleanupStack::PushL(idle);
+
+    CHelloTraceFn::StaticOutputsParamsL(1);
+   
+    example->Simple();
+    example->OutputsParams(2, CHelloTraceFn::EExample1);
+    example->OutputsParams(3, CHelloTraceFn::EExample2);
+    example->OutputsSignedIntegers(-4, -5, -6, -7);
+    example->OutputsUnsignedIntegers(8, 9, 10, 11);
+    example->OutputsTIntReturnValue();    
+    example->OutputsTInt64ReturnValue(); 
+    example->OutputsTFnEnumReturnValue();
+    example->OutputsUnknownPtrType(idle);    
+    example->OutputsUnknownRefType(*idle);
+#ifdef _DEBUG
+    example->PreProcessedFn(12);
+#else
+    example->PreProcessedFn();
+#endif
+    example->OutputMissingParams(13, 14, 15);
+
+    CleanupStack::PopAndDestroy(idle);
+    CleanupStack::PopAndDestroy(example);
+    }
+
+EXPORT_C void HelloTraceExample::PanicTrace()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_PANIC, "*********************************************** " );
+
+    Panic(EHelloTraceDllExamplePanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/src/HelloTraceFn.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+ 
+#include "HelloTraceFn.h"
+#include "HelloTraceFnDup.h"
+#include "HelloTraceFnDup2.inl"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnTraces.h"
+#endif
+
+CHelloTraceFn* CHelloTraceFn::NewLC()
+    {
+    CHelloTraceFn* self = new (ELeave) CHelloTraceFn;
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CHelloTraceFn* CHelloTraceFn::NewL()
+    {
+    CHelloTraceFn* self = CHelloTraceFn::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceFn::CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_CTOR, "[0x%08x] Constructor", this );    
+    }
+
+CHelloTraceFn::~CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_DTOR, "[0x%08x] Destructor", this );    
+    }
+
+void CHelloTraceFn::Simple()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsParams(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_EXIT, this );
+    }
+
+void CHelloTraceFn::StaticOutputsParamsL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->Simple();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_EXIT );    
+    }
+
+void CHelloTraceFn::OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_EXIT, this );
+    }
+
+
+TInt CHelloTraceFn::OutputsTIntReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+TInt64 CHelloTraceFn::OutputsTInt64ReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_EXIT, this, ret );
+    return ret;    
+    }
+
+CActive* CHelloTraceFn::OutputsUnknownPtrType(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+CActive& CHelloTraceFn::OutputsUnknownRefType(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+void CHelloTraceFn::OutputMissingParams(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+void CHelloTraceFn::PreProcessedFn()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    Simple();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/src/HelloTraceInterface.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceInterface.h"
+#include "HelloTraceInterfaceDup.h"
+#include "HelloTraceInterfaceDup2.inl"
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceTraces.h"
+#endif
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewLC()
+    {
+    CHelloTraceInterface* self = new (ELeave) CHelloTraceInterface;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewL()
+    {
+    CHelloTraceInterface* self = CHelloTraceInterface::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceInterface::CHelloTraceInterface()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_CTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+void CHelloTraceInterface::ConstructL()
+    {
+    iString = new (ELeave) THelloTraceDllExampleString;
+    }
+
+EXPORT_C CHelloTraceInterface::~CHelloTraceInterface()
+    {
+    delete iString;
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_DTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+EXPORT_C TVersion CHelloTraceInterface::Version()
+    {
+    const TInt KMajor = 1;
+    const TInt KMinor = 0;
+    const TInt KBuild = 1;
+    TVersion version = TVersion(KMajor, KMinor, KBuild);
+    OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION, "CHelloTraceInterface::Version = %S", version.Name());   
+    return version;
+    }
+
+EXPORT_C const TPtrC CHelloTraceInterface::String() const
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING, 
+                     "[0x%08x] Returned %S", (TUint32) this, *iString);   
+    return *iString;
+    }
+
+EXPORT_C void CHelloTraceInterface::AddCharL(const TChar& aChar)
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL, 
+                  "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+    if (iString->Length() >= KHelloTraceDllBufferLength)
+        {
+        OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR,
+                   "[0x%08x] Not enough space to add character", (TUint32) this);
+        User::Leave( KErrTooBig);
+        }
+    iString->Append(aChar);
+    }
+
+EXPORT_C void CHelloTraceInterface::RemoveLast()
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST, 
+                  "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+    if (iString->Length() > 0)
+        {
+        iString->SetLength(iString->Length() - 1);
+        }
+    else
+        {
+        OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN, "[0x%08x] String already empty", (TUint32) this);   
+        }
+    }
+
+EXPORT_C void CHelloTraceInterface::ResetString()
+    {
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+    if (iString == NULL)
+        {
+        iString = new (ELeave) THelloTraceDllExampleString;
+        }
+    else
+        {
+        iString->SetLength(0);
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/src/HelloTracePanic.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32std.h>		 // GLDEF_C
+
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTracePanicTraces.h"
+#endif
+
+GLDEF_C void Panic(THelloTraceDllPanic aPanic)
+    {
+    OstTrace1( TRACE_FATAL, PANIC, "Panic(%{THelloTraceDllPanic})", (TUint) aPanic );    
+    User::Panic(_L("HelloTraceDll"), aPanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/src/HelloTraceTypes.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include <e32std.h>
+
+#include "HelloTraceTypes.h"
+#include "HelloTraceTypesDup.h"
+#include "HelloTraceTypesDup2.inl"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesTraces.h"
+#endif
+
+void HelloTraceTypes::SignedIntegers()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+void HelloTraceTypes::UnsignedIntegers()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+void HelloTraceTypes::Descriptors()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE, "16 bit descriptor: %S", KUnicode() );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/dll/traces/trace.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<trace_properties>
+<enum name="TFnEnum">
+<value id="0">EExample1</value>
+<value id="2">EExample2</value>
+</enum>
+<enum name="THelloTraceDllPanic">
+<value id="0">EHelloTraceDllExamplePanic</value>
+<value id="1">EHelloTraceDllNullPointer</value>
+</enum>
+<file>../incDup/HelloTraceInterfaceDup.h</file>
+<file>../incDup/HelloTraceInterfaceDup2.inl</file>
+<file>../incDup/HelloTraceFnDup.h</file>
+<file>../incDup/HelloTraceFnDup2.inl</file>
+<file>../incDup/HelloTraceTypesDup.h</file>
+<file>../incDup/HelloTraceTypesDup2.inl</file>
+<file>../incDup/HelloTraceInterface2Dup.h</file>
+<file>../incDup/HelloTraceInterface2Dup2.inl</file>
+<file>../incDup/HelloTraceFn2Dup.h</file>
+<file>../incDup/HelloTraceFn2Dup2.inl</file>
+<file>../incDup/HelloTraceTypes2Dup.h</file>
+<file>../incDup/HelloTraceTypes2Dup2.inl</file>
+</trace_properties>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#include "../dll/group/bld.inf"
+#include "../console/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/console/group/HelloTraceConsole.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceConsole.exe
+TARGETTYPE	  exe
+UID			  0 0xE40349E4
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE	   ../inc
+USERINCLUDE    ../../dll/inc
+USERINCLUDE    ../traces
+
+SOURCEPATH	  ../src
+SOURCE		  HelloTraceConsole.cpp
+
+LIBRARY		  euser.lib
+LIBRARY       HelloTraceDll.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/console/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotraceconsole.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotraceconsole.iby)
+
+PRJ_MMPFILES
+HelloTraceConsole.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/console/group/hellotraceconsole.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACECONSOLE_IBY
+#define HELLOTRACECONSOLE_IBY
+
+#include <core\os\hellotracedll.iby>
+
+file=ABI_DIR\BUILD_DIR\hellotraceconsole.exe    Sys\Bin\hellotraceconsole.exe
+
+#endif //HELLOTRACECONSOLE_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/console/inc/HelloTraceConsole.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACECONSOLE_H__
+#define __HELLOTRACECONSOLE_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __HELLOTRACECONSOLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/console/src/HelloTraceConsole.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32cons.h>			// Console
+
+#include "HelloTraceConsole.h"
+#include "HelloTraceExample.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceConsoleTraces.h"
+#endif
+
+
+_LIT(KTextConsoleTitle, "HelloTrace");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+LOCAL_C void DoExamples()
+    {
+    TInt err = KErrNone;
+
+    console->Printf(_L("Before main tracing examples ...\n"));
+
+    console->Printf(_L(" Before type examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::JustTypes());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+
+    console->Printf(_L(" Before Interface examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::Interface());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+    
+    console->Printf(_L(" Before FnEntryExit examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::FnEntryExit());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);    
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    DoExamples();
+    
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    OstTraceFunctionEntry0( E32MAIN_ENTRY );
+    
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, 
+          console = Console::NewL(KTextConsoleTitle, 
+                                  TSize(KConsFullScreen, KConsFullScreen)));    
+    if (createError)
+        {
+        delete cleanup;
+        OstTrace1( TRACE_ERROR, E32MAIN_CREATE_ERROR, "Failed to create console error: %d", createError);
+        OstTraceFunctionExit0( E32MAIN_EXIT_ERR );
+        return createError;
+        }
+
+    TRAPD(mainError, DoStartL());    
+    if (mainError)
+        {
+        OstTrace1( TRACE_ERROR, E32MAIN_START_ERROR, "DoStartL failed with error: %d", mainError);
+        console->Printf(_L("DoStartL failed with error: %d\n\n"), mainError);
+        }
+    else 
+        {
+        console->Printf(_L("Before panic tracing example ..."));
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+    
+        OstTrace0( TRACE_FLOW, E32MAIN_BEFORE_PANIC, "About to cause a panic ..." );
+        HelloTraceExample::PanicTrace();
+        
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+        }
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    
+    OstTraceFunctionExit0( E32MAIN_EXIT );
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/bwins/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,14 @@
+EXPORTS
+	?Version@CHelloTraceInterface@@SA?AVTVersion@@XZ @ 1 NONAME ; class TVersion CHelloTraceInterface::Version(void)
+	?NewLC@CHelloTraceInterface@@SAPAV1@XZ @ 2 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewLC(void)
+	?JustTypes@HelloTraceExample@@SAXXZ @ 3 NONAME ; void HelloTraceExample::JustTypes(void)
+	?Interface@HelloTraceExample@@SAXXZ @ 4 NONAME ; void HelloTraceExample::Interface(void)
+	?FnEntryExit@HelloTraceExample@@SAXXZ @ 5 NONAME ; void HelloTraceExample::FnEntryExit(void)
+	?ResetString@CHelloTraceInterface@@QAEXXZ @ 6 NONAME ; void CHelloTraceInterface::ResetString(void)
+	?AddCharL@CHelloTraceInterface@@QAEXABVTChar@@@Z @ 7 NONAME ; void CHelloTraceInterface::AddCharL(class TChar const &)
+	?PanicTrace@HelloTraceExample@@SAXXZ @ 8 NONAME ; void HelloTraceExample::PanicTrace(void)
+	??1CHelloTraceInterface@@UAE@XZ @ 9 NONAME ; CHelloTraceInterface::~CHelloTraceInterface(void)
+	?String@CHelloTraceInterface@@QBE?BVTPtrC16@@XZ @ 10 NONAME ; class TPtrC16 const CHelloTraceInterface::String(void) const
+	?RemoveLast@CHelloTraceInterface@@QAEXXZ @ 11 NONAME ; void CHelloTraceInterface::RemoveLast(void)
+	?NewL@CHelloTraceInterface@@SAPAV1@XZ @ 12 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/eabi/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,20 @@
+EXPORTS
+	_ZN17HelloTraceExample10PanicTraceEv @ 1 NONAME
+	_ZN17HelloTraceExample11FnEntryExitEv @ 2 NONAME
+	_ZN17HelloTraceExample9InterfaceEv @ 3 NONAME
+	_ZN17HelloTraceExample9JustTypesEv @ 4 NONAME
+	_ZN20CHelloTraceInterface10RemoveLastEv @ 5 NONAME
+	_ZN20CHelloTraceInterface11ResetStringEv @ 6 NONAME
+	_ZN20CHelloTraceInterface4NewLEv @ 7 NONAME
+	_ZN20CHelloTraceInterface5NewLCEv @ 8 NONAME
+	_ZN20CHelloTraceInterface7VersionEv @ 9 NONAME
+	_ZN20CHelloTraceInterface8AddCharLERK5TChar @ 10 NONAME
+	_ZN20CHelloTraceInterfaceD0Ev @ 11 NONAME
+	_ZN20CHelloTraceInterfaceD1Ev @ 12 NONAME
+	_ZN20CHelloTraceInterfaceD2Ev @ 13 NONAME
+	_ZNK20CHelloTraceInterface6StringEv @ 14 NONAME
+	_ZTI13CHelloTraceFn @ 15 NONAME
+	_ZTI20CHelloTraceInterface @ 16 NONAME
+	_ZTV13CHelloTraceFn @ 17 NONAME
+	_ZTV20CHelloTraceInterface @ 18 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/group/HelloTraceDll.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceDll.dll
+TARGETTYPE	  dll
+UID			  0x1000008d 0xE43DF43E
+CAPABILITY    ReadUserData
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE  ../inc ../incDup
+USERINCLUDE  ../traces/HelloTraceDll_dll
+
+SOURCEPATH	 ../src
+SOURCE       HelloTraceExample.cpp 
+SOURCE       HelloTraceTypes.cpp
+SOURCE       HelloTraceInterface.cpp 
+SOURCE       HelloTraceFn.cpp 
+SOURCE       HelloTracePanic.cpp 
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/group/HelloTraceDll2.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceDll2.dll
+TARGETTYPE	  dll
+UID			  0x1000008d 0xE43DF43F
+CAPABILITY    ReadUserData
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE  ../inc ../incDup
+USERINCLUDE  ../traces/HelloTraceDll2_dll
+
+SOURCEPATH	 ../src
+SOURCE       HelloTraceExample.cpp 
+SOURCE       HelloTraceTypes.cpp
+SOURCE       HelloTraceInterface.cpp 
+SOURCE       HelloTraceFn.cpp 
+SOURCE       HelloTracePanic.cpp 
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotracedll.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotracedll.iby)
+
+PRJ_MMPFILES
+HelloTraceDll.mmp
+HelloTraceDll2.mmp
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/group/hellotracedll.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACEDLL_IBY
+#define HELLOTRACEDLL_IBY
+
+file=ABI_DIR\BUILD_DIR\hellotracedll.dll        Sys\Bin\hellotracedll.dll
+file=ABI_DIR\BUILD_DIR\hellotracedll2.dll        Sys\Bin\hellotracedll2.dll
+
+#endif //HELLOTRACEDLL_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/inc/HelloTraceExample.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEEXAMPLE_H__
+#define __HELLOTRACEEXAMPLE_H__
+
+#include <e32std.h>
+
+class HelloTraceExample
+    {
+public:
+    IMPORT_C static void JustTypes();    
+    IMPORT_C static void Interface();    
+    IMPORT_C static void FnEntryExit();    
+    IMPORT_C static void PanicTrace();    
+
+    // @TODO add examples for state macros
+    // @TODO add examples for event macros
+    // @TODO add examples for OstTraceData
+    // @TODO add compile-time selector examples
+    // @TODO add macro wrapper examples
+    };
+
+#endif  // __HELLOTRACEEXAMPLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/inc/HelloTraceFn.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFN_H_
+#define HELLOTRACEFN_H_
+
+#include <e32base.h>    // CBase
+
+class CHelloTraceFn : public CBase
+    {
+public:
+    
+    // Note the Trace Builder will only parse this if it's in a cpp file
+    // but not from here :(
+    // Also if you add a new enum you need to reparse the enum - it doesn't
+    // get automatically reparsed by the Trace Compiler :(
+    enum TFnEnum
+        {
+        EExample1,
+        EExample2 = 2, 
+        // EExample3 = EExample2 + 1, // The Trace Builder can't parse this :(
+        };
+    
+public:
+    static CHelloTraceFn* NewL();
+    static CHelloTraceFn* NewLC();
+    ~CHelloTraceFn();
+   
+public: // Fn entry / exit tracing examples 
+    void Simple();
+    void OutputsParams(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValue();
+    TInt64 OutputsTInt64ReturnValue();
+    TFnEnum OutputsTFnEnumReturnValue();
+
+    CActive* OutputsUnknownPtrType(CActive* aActive);
+    CActive& OutputsUnknownRefType(CActive& aActive);
+    
+    void OutputMissingParams(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFn(TInt aDbgParam);
+#else
+    void PreProcessedFn();
+#endif
+    
+    static void StaticOutputsParamsL(TInt aParam);  
+    
+    // duplicate all the function and put the impl in the header file HelloTraceFnDup.h
+    void SimpleDup();
+    void OutputsParamsDup(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup();
+    TInt64 OutputsTInt64ReturnValueDup();
+    TFnEnum OutputsTFnEnumReturnValueDup();
+
+    CActive* OutputsUnknownPtrTypeDup(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup(CActive& aActive);
+    
+    void OutputMissingParamsDup(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup(TInt aDbgParam);
+#else
+    void PreProcessedFnDup();
+#endif
+    static void StaticOutputsParamsDupL(TInt aParam);  
+    
+    // duplicate all the function again and put the impl in the header file HelloTraceFnDup2.h
+    void SimpleDup2();
+    void OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup2();
+    TInt64 OutputsTInt64ReturnValueDup2();
+    TFnEnum OutputsTFnEnumReturnValueDup2();
+
+    CActive* OutputsUnknownPtrTypeDup2(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup2(CActive& aActive);
+    
+    void OutputMissingParamsDup2(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup2(TInt aDbgParam);
+#else
+    void PreProcessedFnDup2();
+#endif
+    static void StaticOutputsParamsDup2L(TInt aParam);  
+
+
+private:
+    CHelloTraceFn();
+    };
+
+#endif /* HELLOTRACEFN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/inc/HelloTraceInterface.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE_H__
+#define __HELLOTRACEINTERFACE_H__
+
+#include <e32base.h>	// CBase
+#include <e32std.h>	 // TBuf
+
+const TInt KHelloTraceDllBufferLength = 10;
+typedef TBuf<KHelloTraceDllBufferLength> THelloTraceDllExampleString;
+
+class CHelloTraceInterface : public CBase
+    {
+public:
+    IMPORT_C static CHelloTraceInterface* NewL();
+    IMPORT_C static CHelloTraceInterface* NewLC();
+    IMPORT_C ~CHelloTraceInterface();
+
+public:
+    IMPORT_C static TVersion Version();
+    IMPORT_C const TPtrC String() const;
+    IMPORT_C void AddCharL(const TChar& aChar);
+    IMPORT_C void RemoveLast();
+    IMPORT_C void ResetString();
+    
+    IMPORT_C static TVersion VersionDup();
+    IMPORT_C const TPtrC StringDup() const;
+    IMPORT_C void AddCharDupL(const TChar& aChar);
+    IMPORT_C void RemoveLastDup();
+    IMPORT_C void ResetStringDup();
+
+    IMPORT_C static TVersion VersionDup2();
+    IMPORT_C const TPtrC StringDup2() const;
+    IMPORT_C void AddCharDup2L(const TChar& aChar);
+    IMPORT_C void RemoveLastDup2();
+    IMPORT_C void ResetStringDup2();
+private:
+    CHelloTraceInterface();
+    void ConstructL();
+
+private:
+    // data
+    THelloTraceDllExampleString* iString;
+    };
+
+#endif  // __HELLOTRACEINTERFACE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/inc/HelloTracePanic.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEDLL_PAN__
+#define __HELLOTRACEDLL_PAN__
+
+//  Data Types
+
+enum THelloTraceDllPanic
+    {
+    EHelloTraceDllExamplePanic,
+    EHelloTraceDllNullPointer,
+    };
+
+//  Function Prototypes
+
+GLREF_C void Panic(THelloTraceDllPanic aPanic);
+
+#endif  // __HELLOTRACEDLL_PAN__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/inc/HelloTraceTypes.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES_H__
+#define __HELLOTRACETYPES_H__
+
+class HelloTraceTypes
+    {
+public:
+    static void SignedIntegers();
+    static void UnsignedIntegers();
+    static void Descriptors();
+    
+    static void SignedIntegersDup();
+    static void UnsignedIntegersDup();
+    static void DescriptorsDup();
+        
+    static void SignedIntegersDup2();
+    static void UnsignedIntegersDup2();
+    static void DescriptorsDup2();
+    };
+
+#endif  // __HELLOTRACETYPES_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceFnDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP_H_
+#define HELLOTRACEFNDUP_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDupTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDupL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceFnDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP2_H_
+#define HELLOTRACEFNDUP2_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDup2Traces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDup2L(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup2();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup2(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup2(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup2(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup2(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup2()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup2();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP2_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceInterfaceDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP_H__
+#define __HELLOTRACEINTERFACEDUP_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDupTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDupL(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceInterfaceDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP2_H__
+#define __HELLOTRACEINTERFACEDUP2_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDup2Traces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup2()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP2, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup2() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP2, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDup2L(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP2, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP2,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup2()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP2, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP2, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup2()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP2, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceTypesDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP_H__
+#define __HELLOTRACETYPESDUP_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDupTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/incDup/HelloTraceTypesDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP2_H__
+#define __HELLOTRACETYPESDUP2_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDup2Traces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup2()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup2()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup2()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP2, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP2, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/src/HelloTraceExample.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceExample.h"
+#include "HelloTraceTypes.h"
+#include "HelloTraceInterface.h"
+#include "HelloTraceFn.h"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceExampleTraces.h"
+#endif
+
+EXPORT_C void HelloTraceExample::JustTypes()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_JUSTTYPES, "*********************************************** " );
+    
+    HelloTraceTypes::SignedIntegers();
+    HelloTraceTypes::UnsignedIntegers();
+    HelloTraceTypes::Descriptors();    
+    }
+
+EXPORT_C void HelloTraceExample::Interface()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_INTERFACE, "*********************************************** " );
+    
+    TVersion version = CHelloTraceInterface::Version();   
+    if (version.iMajor >= 1) 
+        {
+        CHelloTraceInterface* example = CHelloTraceInterface::NewLC();
+        example->AddCharL('H');
+        example->AddCharL('e');
+        example->AddCharL('l');
+        example->AddCharL('l');
+        example->AddCharL('o');
+        example->AddCharL('T');        
+        example->RemoveLast();        
+        example->AddCharL(' ');
+        example->AddCharL('T');
+        example->AddCharL('r');
+        example->AddCharL('a');
+        example->AddCharL('c');
+        example->AddCharL('e');
+        example->AddCharL('!');
+        CleanupStack::PopAndDestroy(example);
+        }
+    else
+        {
+        OstTrace0( TRACE_ERROR, HELLOTRACEEXAMPLE_UNSUPPORTED_VERSION, "Unsupported version!");
+        }
+    }
+
+EXPORT_C void HelloTraceExample::FnEntryExit()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_FNENTRYEXIT, "*********************************************** " );
+       
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    CIdle* idle = CIdle::NewL(CActive::EPriorityIdle);
+    CleanupStack::PushL(idle);
+
+    CHelloTraceFn::StaticOutputsParamsL(1);
+   
+    example->Simple();
+    example->OutputsParams(2, CHelloTraceFn::EExample1);
+    example->OutputsParams(3, CHelloTraceFn::EExample2);
+    example->OutputsSignedIntegers(-4, -5, -6, -7);
+    example->OutputsUnsignedIntegers(8, 9, 10, 11);
+    example->OutputsTIntReturnValue();    
+    example->OutputsTInt64ReturnValue(); 
+    example->OutputsTFnEnumReturnValue();
+    example->OutputsUnknownPtrType(idle);    
+    example->OutputsUnknownRefType(*idle);
+#ifdef _DEBUG
+    example->PreProcessedFn(12);
+#else
+    example->PreProcessedFn();
+#endif
+    example->OutputMissingParams(13, 14, 15);
+
+    CleanupStack::PopAndDestroy(idle);
+    CleanupStack::PopAndDestroy(example);
+    }
+
+EXPORT_C void HelloTraceExample::PanicTrace()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_PANIC, "*********************************************** " );
+
+    Panic(EHelloTraceDllExamplePanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/src/HelloTraceFn.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+ 
+#include "HelloTraceFn.h"
+#include "HelloTraceFnDup.h"
+#include "HelloTraceFnDup2.inl"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnTraces.h"
+#endif
+
+CHelloTraceFn* CHelloTraceFn::NewLC()
+    {
+    CHelloTraceFn* self = new (ELeave) CHelloTraceFn;
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CHelloTraceFn* CHelloTraceFn::NewL()
+    {
+    CHelloTraceFn* self = CHelloTraceFn::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceFn::CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_CTOR, "[0x%08x] Constructor", this );    
+    }
+
+CHelloTraceFn::~CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_DTOR, "[0x%08x] Destructor", this );    
+    }
+
+void CHelloTraceFn::Simple()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsParams(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_EXIT, this );
+    }
+
+void CHelloTraceFn::StaticOutputsParamsL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->Simple();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_EXIT );    
+    }
+
+void CHelloTraceFn::OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_EXIT, this );
+    }
+
+
+TInt CHelloTraceFn::OutputsTIntReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+TInt64 CHelloTraceFn::OutputsTInt64ReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_EXIT, this, ret );
+    return ret;    
+    }
+
+CActive* CHelloTraceFn::OutputsUnknownPtrType(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+CActive& CHelloTraceFn::OutputsUnknownRefType(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+void CHelloTraceFn::OutputMissingParams(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+void CHelloTraceFn::PreProcessedFn()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    Simple();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/src/HelloTraceInterface.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceInterface.h"
+#include "HelloTraceInterfaceDup.h"
+#include "HelloTraceInterfaceDup2.inl"
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceTraces.h"
+#endif
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewLC()
+    {
+    CHelloTraceInterface* self = new (ELeave) CHelloTraceInterface;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewL()
+    {
+    CHelloTraceInterface* self = CHelloTraceInterface::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceInterface::CHelloTraceInterface()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_CTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+void CHelloTraceInterface::ConstructL()
+    {
+    iString = new (ELeave) THelloTraceDllExampleString;
+    }
+
+EXPORT_C CHelloTraceInterface::~CHelloTraceInterface()
+    {
+    delete iString;
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_DTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+EXPORT_C TVersion CHelloTraceInterface::Version()
+    {
+    const TInt KMajor = 1;
+    const TInt KMinor = 0;
+    const TInt KBuild = 1;
+    TVersion version = TVersion(KMajor, KMinor, KBuild);
+    OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION, "CHelloTraceInterface::Version = %S", version.Name());   
+    return version;
+    }
+
+EXPORT_C const TPtrC CHelloTraceInterface::String() const
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING, 
+                     "[0x%08x] Returned %S", (TUint32) this, *iString);   
+    return *iString;
+    }
+
+EXPORT_C void CHelloTraceInterface::AddCharL(const TChar& aChar)
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL, 
+                  "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+    if (iString->Length() >= KHelloTraceDllBufferLength)
+        {
+        OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR,
+                   "[0x%08x] Not enough space to add character", (TUint32) this);
+        User::Leave( KErrTooBig);
+        }
+    iString->Append(aChar);
+    }
+
+EXPORT_C void CHelloTraceInterface::RemoveLast()
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST, 
+                  "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+    if (iString->Length() > 0)
+        {
+        iString->SetLength(iString->Length() - 1);
+        }
+    else
+        {
+        OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN, "[0x%08x] String already empty", (TUint32) this);   
+        }
+    }
+
+EXPORT_C void CHelloTraceInterface::ResetString()
+    {
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+    if (iString == NULL)
+        {
+        iString = new (ELeave) THelloTraceDllExampleString;
+        }
+    else
+        {
+        iString->SetLength(0);
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/src/HelloTracePanic.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32std.h>		 // GLDEF_C
+
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTracePanicTraces.h"
+#endif
+
+GLDEF_C void Panic(THelloTraceDllPanic aPanic)
+    {
+    OstTrace1( TRACE_FATAL, PANIC, "Panic(%{THelloTraceDllPanic})", (TUint) aPanic );    
+    User::Panic(_L("HelloTraceDll"), aPanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/src/HelloTraceTypes.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include <e32std.h>
+
+#include "HelloTraceTypes.h"
+#include "HelloTraceTypesDup.h"
+#include "HelloTraceTypesDup2.inl"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesTraces.h"
+#endif
+
+void HelloTraceTypes::SignedIntegers()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+void HelloTraceTypes::UnsignedIntegers()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+void HelloTraceTypes::Descriptors()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE, "16 bit descriptor: %S", KUnicode() );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/traces/hellotracedll2_dll/trace.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<trace_properties>
+<enum name="TFnEnum">
+<value id="0">EExample1</value>
+<value id="2">EExample2</value>
+</enum>
+<enum name="THelloTraceDllPanic">
+<value id="0">EHelloTraceDllExamplePanic</value>
+<value id="1">EHelloTraceDllNullPointer</value>
+</enum>
+<file>../../incDup/HelloTraceInterfaceDup.h</file>
+<file>../../incDup/HelloTraceInterfaceDup2.inl</file>
+<file>../../incDup/HelloTraceFnDup.h</file>
+<file>../../incDup/HelloTraceFnDup2.inl</file>
+<file>../../incDup/HelloTraceTypesDup.h</file>
+<file>../../incDup/HelloTraceTypesDup2.inl</file>
+</trace_properties>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/dll/traces/hellotracedll_dll/trace.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<trace_properties>
+<enum name="TFnEnum">
+<value id="0">EExample1</value>
+<value id="2">EExample2</value>
+</enum>
+<enum name="THelloTraceDllPanic">
+<value id="0">EHelloTraceDllExamplePanic</value>
+<value id="1">EHelloTraceDllNullPointer</value>
+</enum>
+<file>../../incDup/HelloTraceInterfaceDup.h</file>
+<file>../../incDup/HelloTraceInterfaceDup2.inl</file>
+<file>../../incDup/HelloTraceFnDup.h</file>
+<file>../../incDup/HelloTraceFnDup2.inl</file>
+<file>../../incDup/HelloTraceTypesDup.h</file>
+<file>../../incDup/HelloTraceTypesDup2.inl</file>
+</trace_properties>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_comm_source_tracesplus/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#include "../dll/group/bld.inf"
+#include "../console/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/console/group/HelloTraceConsole.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceConsole.exe
+TARGETTYPE	  exe
+UID			  0 0xE40349E4
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE	   ../inc
+USERINCLUDE    ../../dll/inc
+USERINCLUDE    ../traces
+
+SOURCEPATH	  ../src
+SOURCE		  HelloTraceConsole.cpp
+
+LIBRARY		  euser.lib
+LIBRARY       HelloTraceDll.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/console/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotraceconsole.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotraceconsole.iby)
+
+PRJ_MMPFILES
+HelloTraceConsole.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/console/group/hellotraceconsole.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACECONSOLE_IBY
+#define HELLOTRACECONSOLE_IBY
+
+#include <core\os\hellotracedll.iby>
+
+file=ABI_DIR\BUILD_DIR\hellotraceconsole.exe    Sys\Bin\hellotraceconsole.exe
+
+#endif //HELLOTRACECONSOLE_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/console/inc/HelloTraceConsole.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACECONSOLE_H__
+#define __HELLOTRACECONSOLE_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __HELLOTRACECONSOLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/console/src/HelloTraceConsole.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32cons.h>			// Console
+
+#include "HelloTraceConsole.h"
+#include "HelloTraceExample.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceConsoleTraces.h"
+#endif
+
+
+_LIT(KTextConsoleTitle, "HelloTrace");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+LOCAL_C void DoExamples()
+    {
+    TInt err = KErrNone;
+
+    console->Printf(_L("Before main tracing examples ...\n"));
+
+    console->Printf(_L(" Before type examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::JustTypes());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+
+    console->Printf(_L(" Before Interface examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::Interface());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+    
+    console->Printf(_L(" Before FnEntryExit examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::FnEntryExit());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);    
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    DoExamples();
+    
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    OstTraceFunctionEntry0( E32MAIN_ENTRY );
+    
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, 
+          console = Console::NewL(KTextConsoleTitle, 
+                                  TSize(KConsFullScreen, KConsFullScreen)));    
+    if (createError)
+        {
+        delete cleanup;
+        OstTrace1( TRACE_ERROR, E32MAIN_CREATE_ERROR, "Failed to create console error: %d", createError);
+        OstTraceFunctionExit0( E32MAIN_EXIT_ERR );
+        return createError;
+        }
+
+    TRAPD(mainError, DoStartL());    
+    if (mainError)
+        {
+        OstTrace1( TRACE_ERROR, E32MAIN_START_ERROR, "DoStartL failed with error: %d", mainError);
+        console->Printf(_L("DoStartL failed with error: %d\n\n"), mainError);
+        }
+    else 
+        {
+        console->Printf(_L("Before panic tracing example ..."));
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+    
+        OstTrace0( TRACE_FLOW, E32MAIN_BEFORE_PANIC, "About to cause a panic ..." );
+        HelloTraceExample::PanicTrace();
+        
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+        }
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    
+    OstTraceFunctionExit0( E32MAIN_EXIT );
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/bwins/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,14 @@
+EXPORTS
+	?Version@CHelloTraceInterface@@SA?AVTVersion@@XZ @ 1 NONAME ; class TVersion CHelloTraceInterface::Version(void)
+	?NewLC@CHelloTraceInterface@@SAPAV1@XZ @ 2 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewLC(void)
+	?JustTypes@HelloTraceExample@@SAXXZ @ 3 NONAME ; void HelloTraceExample::JustTypes(void)
+	?Interface@HelloTraceExample@@SAXXZ @ 4 NONAME ; void HelloTraceExample::Interface(void)
+	?FnEntryExit@HelloTraceExample@@SAXXZ @ 5 NONAME ; void HelloTraceExample::FnEntryExit(void)
+	?ResetString@CHelloTraceInterface@@QAEXXZ @ 6 NONAME ; void CHelloTraceInterface::ResetString(void)
+	?AddCharL@CHelloTraceInterface@@QAEXABVTChar@@@Z @ 7 NONAME ; void CHelloTraceInterface::AddCharL(class TChar const &)
+	?PanicTrace@HelloTraceExample@@SAXXZ @ 8 NONAME ; void HelloTraceExample::PanicTrace(void)
+	??1CHelloTraceInterface@@UAE@XZ @ 9 NONAME ; CHelloTraceInterface::~CHelloTraceInterface(void)
+	?String@CHelloTraceInterface@@QBE?BVTPtrC16@@XZ @ 10 NONAME ; class TPtrC16 const CHelloTraceInterface::String(void) const
+	?RemoveLast@CHelloTraceInterface@@QAEXXZ @ 11 NONAME ; void CHelloTraceInterface::RemoveLast(void)
+	?NewL@CHelloTraceInterface@@SAPAV1@XZ @ 12 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/eabi/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,20 @@
+EXPORTS
+	_ZN17HelloTraceExample10PanicTraceEv @ 1 NONAME
+	_ZN17HelloTraceExample11FnEntryExitEv @ 2 NONAME
+	_ZN17HelloTraceExample9InterfaceEv @ 3 NONAME
+	_ZN17HelloTraceExample9JustTypesEv @ 4 NONAME
+	_ZN20CHelloTraceInterface10RemoveLastEv @ 5 NONAME
+	_ZN20CHelloTraceInterface11ResetStringEv @ 6 NONAME
+	_ZN20CHelloTraceInterface4NewLEv @ 7 NONAME
+	_ZN20CHelloTraceInterface5NewLCEv @ 8 NONAME
+	_ZN20CHelloTraceInterface7VersionEv @ 9 NONAME
+	_ZN20CHelloTraceInterface8AddCharLERK5TChar @ 10 NONAME
+	_ZN20CHelloTraceInterfaceD0Ev @ 11 NONAME
+	_ZN20CHelloTraceInterfaceD1Ev @ 12 NONAME
+	_ZN20CHelloTraceInterfaceD2Ev @ 13 NONAME
+	_ZNK20CHelloTraceInterface6StringEv @ 14 NONAME
+	_ZTI13CHelloTraceFn @ 15 NONAME
+	_ZTI20CHelloTraceInterface @ 16 NONAME
+	_ZTV13CHelloTraceFn @ 17 NONAME
+	_ZTV20CHelloTraceInterface @ 18 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/group/HelloTraceDll.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceDll.dll
+TARGETTYPE	  dll
+UID			  0x1000008d 0xE43DF43E
+CAPABILITY    ReadUserData
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE  ../inc ../incDup
+USERINCLUDE  ../traces
+
+SOURCEPATH	 ../src
+SOURCE       HelloTraceExample.cpp 
+SOURCE       HelloTraceTypes.cpp
+SOURCE       HelloTraceInterface.cpp 
+SOURCE       HelloTraceFn.cpp 
+SOURCE       HelloTracePanic.cpp 
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/group/HelloTraceDll2.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceDll2.dll
+TARGETTYPE	  dll
+UID			  0x1000008d 0xE43DF43E
+CAPABILITY    ReadUserData
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE  ../inc ../incDup
+USERINCLUDE  ../traces
+
+SOURCEPATH	 ../src
+SOURCE       HelloTraceExample2.cpp 
+SOURCE       HelloTraceTypes2.cpp
+SOURCE       HelloTraceInterface2.cpp 
+SOURCE       HelloTraceFn2.cpp 
+SOURCE       HelloTracePanic2.cpp 
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotracedll.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotracedll.iby)
+
+PRJ_MMPFILES
+HelloTraceDll.mmp
+HelloTraceDll2.mmp
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/group/hellotracedll.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACEDLL_IBY
+#define HELLOTRACEDLL_IBY
+
+file=ABI_DIR\BUILD_DIR\hellotracedll.dll        Sys\Bin\hellotracedll.dll
+file=ABI_DIR\BUILD_DIR\hellotracedll2.dll        Sys\Bin\hellotracedll2.dll
+
+#endif //HELLOTRACEDLL_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceExample.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEEXAMPLE_H__
+#define __HELLOTRACEEXAMPLE_H__
+
+#include <e32std.h>
+
+class HelloTraceExample
+    {
+public:
+    IMPORT_C static void JustTypes();    
+    IMPORT_C static void Interface();    
+    IMPORT_C static void FnEntryExit();    
+    IMPORT_C static void PanicTrace();    
+
+    // @TODO add examples for state macros
+    // @TODO add examples for event macros
+    // @TODO add examples for OstTraceData
+    // @TODO add compile-time selector examples
+    // @TODO add macro wrapper examples
+    };
+
+#endif  // __HELLOTRACEEXAMPLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceFn.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFN_H_
+#define HELLOTRACEFN_H_
+
+#include <e32base.h>    // CBase
+
+class CHelloTraceFn : public CBase
+    {
+public:
+    
+    // Note the Trace Builder will only parse this if it's in a cpp file
+    // but not from here :(
+    // Also if you add a new enum you need to reparse the enum - it doesn't
+    // get automatically reparsed by the Trace Compiler :(
+    enum TFnEnum
+        {
+        EExample1,
+        EExample2 = 2, 
+        // EExample3 = EExample2 + 1, // The Trace Builder can't parse this :(
+        };
+    
+public:
+    static CHelloTraceFn* NewL();
+    static CHelloTraceFn* NewLC();
+    ~CHelloTraceFn();
+   
+public: // Fn entry / exit tracing examples 
+    void Simple();
+    void OutputsParams(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValue();
+    TInt64 OutputsTInt64ReturnValue();
+    TFnEnum OutputsTFnEnumReturnValue();
+
+    CActive* OutputsUnknownPtrType(CActive* aActive);
+    CActive& OutputsUnknownRefType(CActive& aActive);
+    
+    void OutputMissingParams(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFn(TInt aDbgParam);
+#else
+    void PreProcessedFn();
+#endif
+    
+    static void StaticOutputsParamsL(TInt aParam);  
+    
+    // duplicate all the function and put the impl in the header file HelloTraceFnDup.h
+    void SimpleDup();
+    void OutputsParamsDup(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup();
+    TInt64 OutputsTInt64ReturnValueDup();
+    TFnEnum OutputsTFnEnumReturnValueDup();
+
+    CActive* OutputsUnknownPtrTypeDup(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup(CActive& aActive);
+    
+    void OutputMissingParamsDup(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup(TInt aDbgParam);
+#else
+    void PreProcessedFnDup();
+#endif
+    static void StaticOutputsParamsDupL(TInt aParam);  
+    
+    // duplicate all the function again and put the impl in the header file HelloTraceFnDup2.h
+    void SimpleDup2();
+    void OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup2();
+    TInt64 OutputsTInt64ReturnValueDup2();
+    TFnEnum OutputsTFnEnumReturnValueDup2();
+
+    CActive* OutputsUnknownPtrTypeDup2(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup2(CActive& aActive);
+    
+    void OutputMissingParamsDup2(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup2(TInt aDbgParam);
+#else
+    void PreProcessedFnDup2();
+#endif
+    static void StaticOutputsParamsDup2L(TInt aParam);  
+
+
+private:
+    CHelloTraceFn();
+    };
+
+#endif /* HELLOTRACEFN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceFn2.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFN2_H_
+#define HELLOTRACEFN2_H_
+
+#include <e32base.h>    // CBase
+
+class CHelloTraceFn : public CBase
+    {
+public:
+    
+    // Note the Trace Builder will only parse this if it's in a cpp file
+    // but not from here :(
+    // Also if you add a new enum you need to reparse the enum - it doesn't
+    // get automatically reparsed by the Trace Compiler :(
+    enum TFnEnum
+        {
+        EExample1,
+        EExample2 = 2, 
+        // EExample3 = EExample2 + 1, // The Trace Builder can't parse this :(
+        };
+    
+public:
+    static CHelloTraceFn* NewL();
+    static CHelloTraceFn* NewLC();
+    ~CHelloTraceFn();
+   
+public: // Fn entry / exit tracing examples 
+    void Simple();
+    void OutputsParams(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValue();
+    TInt64 OutputsTInt64ReturnValue();
+    TFnEnum OutputsTFnEnumReturnValue();
+
+    CActive* OutputsUnknownPtrType(CActive* aActive);
+    CActive& OutputsUnknownRefType(CActive& aActive);
+    
+    void OutputMissingParams(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFn(TInt aDbgParam);
+#else
+    void PreProcessedFn();
+#endif
+    
+    static void StaticOutputsParamsL(TInt aParam);  
+    
+    // duplicate all the function and put the impl in the header file HelloTraceFnDup.h
+    void SimpleDup();
+    void OutputsParamsDup(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup();
+    TInt64 OutputsTInt64ReturnValueDup();
+    TFnEnum OutputsTFnEnumReturnValueDup();
+
+    CActive* OutputsUnknownPtrTypeDup(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup(CActive& aActive);
+    
+    void OutputMissingParamsDup(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup(TInt aDbgParam);
+#else
+    void PreProcessedFnDup();
+#endif
+    static void StaticOutputsParamsDupL(TInt aParam);  
+    
+    // duplicate all the function again and put the impl in the header file HelloTraceFnDup2.h
+    void SimpleDup2();
+    void OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup2();
+    TInt64 OutputsTInt64ReturnValueDup2();
+    TFnEnum OutputsTFnEnumReturnValueDup2();
+
+    CActive* OutputsUnknownPtrTypeDup2(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup2(CActive& aActive);
+    
+    void OutputMissingParamsDup2(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup2(TInt aDbgParam);
+#else
+    void PreProcessedFnDup2();
+#endif
+    static void StaticOutputsParamsDup2L(TInt aParam);  
+
+
+private:
+    CHelloTraceFn();
+    };
+
+#endif /* HELLOTRACEFN2_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceInterface.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE_H__
+#define __HELLOTRACEINTERFACE_H__
+
+#include <e32base.h>	// CBase
+#include <e32std.h>	 // TBuf
+
+const TInt KHelloTraceDllBufferLength = 10;
+typedef TBuf<KHelloTraceDllBufferLength> THelloTraceDllExampleString;
+
+class CHelloTraceInterface : public CBase
+    {
+public:
+    IMPORT_C static CHelloTraceInterface* NewL();
+    IMPORT_C static CHelloTraceInterface* NewLC();
+    IMPORT_C ~CHelloTraceInterface();
+
+public:
+    IMPORT_C static TVersion Version();
+    IMPORT_C const TPtrC String() const;
+    IMPORT_C void AddCharL(const TChar& aChar);
+    IMPORT_C void RemoveLast();
+    IMPORT_C void ResetString();
+    
+    IMPORT_C static TVersion VersionDup();
+    IMPORT_C const TPtrC StringDup() const;
+    IMPORT_C void AddCharDupL(const TChar& aChar);
+    IMPORT_C void RemoveLastDup();
+    IMPORT_C void ResetStringDup();
+
+    IMPORT_C static TVersion VersionDup2();
+    IMPORT_C const TPtrC StringDup2() const;
+    IMPORT_C void AddCharDup2L(const TChar& aChar);
+    IMPORT_C void RemoveLastDup2();
+    IMPORT_C void ResetStringDup2();
+private:
+    CHelloTraceInterface();
+    void ConstructL();
+
+private:
+    // data
+    THelloTraceDllExampleString* iString;
+    };
+
+#endif  // __HELLOTRACEINTERFACE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceInterface2.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE2_H__
+#define __HELLOTRACEINTERFACE2_H__
+
+#include <e32base.h>	// CBase
+#include <e32std.h>	 // TBuf
+
+const TInt KHelloTraceDllBufferLength = 10;
+typedef TBuf<KHelloTraceDllBufferLength> THelloTraceDllExampleString;
+
+class CHelloTraceInterface : public CBase
+    {
+public:
+    IMPORT_C static CHelloTraceInterface* NewL();
+    IMPORT_C static CHelloTraceInterface* NewLC();
+    IMPORT_C ~CHelloTraceInterface();
+
+public:
+    IMPORT_C static TVersion Version();
+    IMPORT_C const TPtrC String() const;
+    IMPORT_C void AddCharL(const TChar& aChar);
+    IMPORT_C void RemoveLast();
+    IMPORT_C void ResetString();
+    
+    IMPORT_C static TVersion VersionDup();
+    IMPORT_C const TPtrC StringDup() const;
+    IMPORT_C void AddCharDupL(const TChar& aChar);
+    IMPORT_C void RemoveLastDup();
+    IMPORT_C void ResetStringDup();
+
+    IMPORT_C static TVersion VersionDup2();
+    IMPORT_C const TPtrC StringDup2() const;
+    IMPORT_C void AddCharDup2L(const TChar& aChar);
+    IMPORT_C void RemoveLastDup2();
+    IMPORT_C void ResetStringDup2();
+private:
+    CHelloTraceInterface();
+    void ConstructL();
+
+private:
+    // data
+    THelloTraceDllExampleString* iString;
+    };
+
+#endif  // __HELLOTRACEINTERFACE2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTracePanic.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEDLL_PAN__
+#define __HELLOTRACEDLL_PAN__
+
+//  Data Types
+
+enum THelloTraceDllPanic
+    {
+    EHelloTraceDllExamplePanic,
+    EHelloTraceDllNullPointer,
+    };
+
+//  Function Prototypes
+
+GLREF_C void Panic(THelloTraceDllPanic aPanic);
+
+#endif  // __HELLOTRACEDLL_PAN__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceTypes.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES_H__
+#define __HELLOTRACETYPES_H__
+
+class HelloTraceTypes
+    {
+public:
+    static void SignedIntegers();
+    static void UnsignedIntegers();
+    static void Descriptors();
+    
+    static void SignedIntegersDup();
+    static void UnsignedIntegersDup();
+    static void DescriptorsDup();
+        
+    static void SignedIntegersDup2();
+    static void UnsignedIntegersDup2();
+    static void DescriptorsDup2();
+    };
+
+#endif  // __HELLOTRACETYPES_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/inc/HelloTraceTypes2.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES2_H__
+#define __HELLOTRACETYPES2_H__
+
+class HelloTraceTypes
+    {
+public:
+    static void SignedIntegers();
+    static void UnsignedIntegers();
+    static void Descriptors();
+    
+    static void SignedIntegersDup();
+    static void UnsignedIntegersDup();
+    static void DescriptorsDup();
+        
+    static void SignedIntegersDup2();
+    static void UnsignedIntegersDup2();
+    static void DescriptorsDup2();
+    };
+
+#endif  // __HELLOTRACETYPES2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceFn2Dup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#ifndef HELLOTRACEFNDUP2_H_
+#define HELLOTRACEFNDUP2_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFn2DupTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE2_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE2_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS2_DUP_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS2_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDupL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS2_DUP_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS2_DUP_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS2_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS2_DUP_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS2_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS2_DUP_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE2_DUP_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE2_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE2_DUP_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE2_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE2_DUP_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE2_DUP_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE2_DUP_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE2_DUP_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE2_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE2_DUP_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS2_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS2_DUP_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFN2DUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceFn2Dup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFN2DUP2_H_
+#define HELLOTRACEFN2DUP2_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFn2Dup2Traces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE2_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE2_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS2_DUP2_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS2_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDup2L(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS2_DUP2_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup2();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS2_DUP2_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS2_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS2_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS2_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS2_DUP2_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE2_DUP2_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE2_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE2_DUP2_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE2_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE2_DUP2_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE2_DUP2_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup2(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE2_DUP2_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE2_DUP2_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup2(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE2_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE2_DUP2_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup2(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS2_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS2_DUP2_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup2(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP2_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup2()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP2_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup2();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN2_DUP2_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFN2DUP2_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceFnDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP_H_
+#define HELLOTRACEFNDUP_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDupTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDupL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceFnDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP2_H_
+#define HELLOTRACEFNDUP2_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDup2Traces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDup2L(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup2();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup2(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup2(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup2(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup2(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup2()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup2();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP2_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceInterface2Dup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE2DUP_H__
+#define __HELLOTRACEINTERFACE2DUP_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterface2DupTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION2_DUP, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING2_DUP, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDupL(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL2_DUP, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR2_DUP,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST2_DUP, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN2_DUP, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING2_DUP, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACE2DUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceInterface2Dup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE2DUP2_H__
+#define __HELLOTRACEINTERFACE2DUP2_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterface2Dup2Traces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup2()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION2_DUP2, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup2() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING2_DUP2, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDup2L(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL2_DUP2, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR2_DUP2,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup2()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST2_DUP2, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN2_DUP2, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup2()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING2_DUP2, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACE2DUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceInterfaceDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP_H__
+#define __HELLOTRACEINTERFACEDUP_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDupTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDupL(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceInterfaceDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP2_H__
+#define __HELLOTRACEINTERFACEDUP2_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDup2Traces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup2()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP2, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup2() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP2, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDup2L(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP2, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP2,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup2()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP2, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP2, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup2()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP2, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceTypes2Dup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES2DUP_H__
+#define __HELLOTRACETYPES2DUP_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypes2DupTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII2DUP, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE2DUP, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPES2DUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceTypes2Dup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES2DUP2_H__
+#define __HELLOTRACETYPES2DUP2_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypes2Dup2Traces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup2()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP2_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP2_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP2_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS2DUP2_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup2()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP2_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP2_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP2_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS2DUP2_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup2()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII2DUP2, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE2DUP2, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPES2DUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceTypesDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP_H__
+#define __HELLOTRACETYPESDUP_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDupTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/incDup/HelloTraceTypesDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP2_H__
+#define __HELLOTRACETYPESDUP2_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDup2Traces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup2()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup2()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup2()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP2, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP2, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceExample.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceExample.h"
+#include "HelloTraceTypes.h"
+#include "HelloTraceInterface.h"
+#include "HelloTraceFn.h"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceExampleTraces.h"
+#endif
+
+EXPORT_C void HelloTraceExample::JustTypes()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_JUSTTYPES, "*********************************************** " );
+    
+    HelloTraceTypes::SignedIntegers();
+    HelloTraceTypes::UnsignedIntegers();
+    HelloTraceTypes::Descriptors();    
+    }
+
+EXPORT_C void HelloTraceExample::Interface()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_INTERFACE, "*********************************************** " );
+    
+    TVersion version = CHelloTraceInterface::Version();   
+    if (version.iMajor >= 1) 
+        {
+        CHelloTraceInterface* example = CHelloTraceInterface::NewLC();
+        example->AddCharL('H');
+        example->AddCharL('e');
+        example->AddCharL('l');
+        example->AddCharL('l');
+        example->AddCharL('o');
+        example->AddCharL('T');        
+        example->RemoveLast();        
+        example->AddCharL(' ');
+        example->AddCharL('T');
+        example->AddCharL('r');
+        example->AddCharL('a');
+        example->AddCharL('c');
+        example->AddCharL('e');
+        example->AddCharL('!');
+        CleanupStack::PopAndDestroy(example);
+        }
+    else
+        {
+        OstTrace0( TRACE_ERROR, HELLOTRACEEXAMPLE_UNSUPPORTED_VERSION, "Unsupported version!");
+        }
+    }
+
+EXPORT_C void HelloTraceExample::FnEntryExit()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_FNENTRYEXIT, "*********************************************** " );
+       
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    CIdle* idle = CIdle::NewL(CActive::EPriorityIdle);
+    CleanupStack::PushL(idle);
+
+    CHelloTraceFn::StaticOutputsParamsL(1);
+   
+    example->Simple();
+    example->OutputsParams(2, CHelloTraceFn::EExample1);
+    example->OutputsParams(3, CHelloTraceFn::EExample2);
+    example->OutputsSignedIntegers(-4, -5, -6, -7);
+    example->OutputsUnsignedIntegers(8, 9, 10, 11);
+    example->OutputsTIntReturnValue();    
+    example->OutputsTInt64ReturnValue(); 
+    example->OutputsTFnEnumReturnValue();
+    example->OutputsUnknownPtrType(idle);    
+    example->OutputsUnknownRefType(*idle);
+#ifdef _DEBUG
+    example->PreProcessedFn(12);
+#else
+    example->PreProcessedFn();
+#endif
+    example->OutputMissingParams(13, 14, 15);
+
+    CleanupStack::PopAndDestroy(idle);
+    CleanupStack::PopAndDestroy(example);
+    }
+
+EXPORT_C void HelloTraceExample::PanicTrace()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_PANIC, "*********************************************** " );
+
+    Panic(EHelloTraceDllExamplePanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceExample2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceExample.h"
+#include "HelloTraceTypes2.h"
+#include "HelloTraceInterface2.h"
+#include "HelloTraceFn2.h"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceExample2Traces.h"
+#endif
+
+EXPORT_C void HelloTraceExample::JustTypes()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_JUSTTYPES, "*********************************************** " );
+    
+    HelloTraceTypes::SignedIntegers();
+    HelloTraceTypes::UnsignedIntegers();
+    HelloTraceTypes::Descriptors();    
+    }
+
+EXPORT_C void HelloTraceExample::Interface()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_INTERFACE, "*********************************************** " );
+    
+    TVersion version = CHelloTraceInterface::Version();   
+    if (version.iMajor >= 1) 
+        {
+        CHelloTraceInterface* example = CHelloTraceInterface::NewLC();
+        example->AddCharL('H');
+        example->AddCharL('e');
+        example->AddCharL('l');
+        example->AddCharL('l');
+        example->AddCharL('o');
+        example->AddCharL('T');        
+        example->RemoveLast();        
+        example->AddCharL(' ');
+        example->AddCharL('T');
+        example->AddCharL('r');
+        example->AddCharL('a');
+        example->AddCharL('c');
+        example->AddCharL('e');
+        example->AddCharL('!');
+        CleanupStack::PopAndDestroy(example);
+        }
+    else
+        {
+        OstTrace0( TRACE_ERROR, HELLOTRACEEXAMPLE_UNSUPPORTED_VERSION, "Unsupported version!");
+        }
+    }
+
+EXPORT_C void HelloTraceExample::FnEntryExit()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_FNENTRYEXIT, "*********************************************** " );
+       
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    CIdle* idle = CIdle::NewL(CActive::EPriorityIdle);
+    CleanupStack::PushL(idle);
+
+    CHelloTraceFn::StaticOutputsParamsL(1);
+   
+    example->Simple();
+    example->OutputsParams(2, CHelloTraceFn::EExample1);
+    example->OutputsParams(3, CHelloTraceFn::EExample2);
+    example->OutputsSignedIntegers(-4, -5, -6, -7);
+    example->OutputsUnsignedIntegers(8, 9, 10, 11);
+    example->OutputsTIntReturnValue();    
+    example->OutputsTInt64ReturnValue(); 
+    example->OutputsTFnEnumReturnValue();
+    example->OutputsUnknownPtrType(idle);    
+    example->OutputsUnknownRefType(*idle);
+#ifdef _DEBUG
+    example->PreProcessedFn(12);
+#else
+    example->PreProcessedFn();
+#endif
+    example->OutputMissingParams(13, 14, 15);
+
+    CleanupStack::PopAndDestroy(idle);
+    CleanupStack::PopAndDestroy(example);
+    }
+
+EXPORT_C void HelloTraceExample::PanicTrace()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_PANIC, "*********************************************** " );
+
+    Panic(EHelloTraceDllExamplePanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceFn.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+ 
+#include "HelloTraceFn.h"
+#include "HelloTraceFnDup.h"
+#include "HelloTraceFnDup2.inl"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnTraces.h"
+#endif
+
+CHelloTraceFn* CHelloTraceFn::NewLC()
+    {
+    CHelloTraceFn* self = new (ELeave) CHelloTraceFn;
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CHelloTraceFn* CHelloTraceFn::NewL()
+    {
+    CHelloTraceFn* self = CHelloTraceFn::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceFn::CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_CTOR, "[0x%08x] Constructor", this );    
+    }
+
+CHelloTraceFn::~CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_DTOR, "[0x%08x] Destructor", this );    
+    }
+
+void CHelloTraceFn::Simple()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsParams(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_EXIT, this );
+    }
+
+void CHelloTraceFn::StaticOutputsParamsL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->Simple();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_EXIT );    
+    }
+
+void CHelloTraceFn::OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_EXIT, this );
+    }
+
+
+TInt CHelloTraceFn::OutputsTIntReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+TInt64 CHelloTraceFn::OutputsTInt64ReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_EXIT, this, ret );
+    return ret;    
+    }
+
+CActive* CHelloTraceFn::OutputsUnknownPtrType(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+CActive& CHelloTraceFn::OutputsUnknownRefType(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+void CHelloTraceFn::OutputMissingParams(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+void CHelloTraceFn::PreProcessedFn()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    Simple();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceFn2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+ 
+#include "HelloTraceFn2.h"
+#include "HelloTraceFn2Dup.h"
+#include "HelloTraceFn2Dup2.inl"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFn2Traces.h"
+#endif
+
+CHelloTraceFn* CHelloTraceFn::NewLC()
+    {
+    CHelloTraceFn* self = new (ELeave) CHelloTraceFn;
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CHelloTraceFn* CHelloTraceFn::NewL()
+    {
+    CHelloTraceFn* self = CHelloTraceFn::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceFn::CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_CTOR, "[0x%08x] Constructor", this );    
+    }
+
+CHelloTraceFn::~CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_DTOR, "[0x%08x] Destructor", this );    
+    }
+
+void CHelloTraceFn::Simple()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsParams(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_EXIT, this );
+    }
+
+void CHelloTraceFn::StaticOutputsParamsL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->Simple();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_EXIT );    
+    }
+
+void CHelloTraceFn::OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_EXIT, this );
+    }
+
+
+TInt CHelloTraceFn::OutputsTIntReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+TInt64 CHelloTraceFn::OutputsTInt64ReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_EXIT, this, ret );
+    return ret;    
+    }
+
+CActive* CHelloTraceFn::OutputsUnknownPtrType(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+CActive& CHelloTraceFn::OutputsUnknownRefType(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+void CHelloTraceFn::OutputMissingParams(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+void CHelloTraceFn::PreProcessedFn()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    Simple();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceInterface.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceInterface.h"
+#include "HelloTraceInterfaceDup.h"
+#include "HelloTraceInterfaceDup2.inl"
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceTraces.h"
+#endif
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewLC()
+    {
+    CHelloTraceInterface* self = new (ELeave) CHelloTraceInterface;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewL()
+    {
+    CHelloTraceInterface* self = CHelloTraceInterface::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceInterface::CHelloTraceInterface()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_CTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+void CHelloTraceInterface::ConstructL()
+    {
+    iString = new (ELeave) THelloTraceDllExampleString;
+    }
+
+EXPORT_C CHelloTraceInterface::~CHelloTraceInterface()
+    {
+    delete iString;
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_DTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+EXPORT_C TVersion CHelloTraceInterface::Version()
+    {
+    const TInt KMajor = 1;
+    const TInt KMinor = 0;
+    const TInt KBuild = 1;
+    TVersion version = TVersion(KMajor, KMinor, KBuild);
+    OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION, "CHelloTraceInterface::Version = %S", version.Name());   
+    return version;
+    }
+
+EXPORT_C const TPtrC CHelloTraceInterface::String() const
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING, 
+                     "[0x%08x] Returned %S", (TUint32) this, *iString);   
+    return *iString;
+    }
+
+EXPORT_C void CHelloTraceInterface::AddCharL(const TChar& aChar)
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL, 
+                  "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+    if (iString->Length() >= KHelloTraceDllBufferLength)
+        {
+        OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR,
+                   "[0x%08x] Not enough space to add character", (TUint32) this);
+        User::Leave( KErrTooBig);
+        }
+    iString->Append(aChar);
+    }
+
+EXPORT_C void CHelloTraceInterface::RemoveLast()
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST, 
+                  "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+    if (iString->Length() > 0)
+        {
+        iString->SetLength(iString->Length() - 1);
+        }
+    else
+        {
+        OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN, "[0x%08x] String already empty", (TUint32) this);   
+        }
+    }
+
+EXPORT_C void CHelloTraceInterface::ResetString()
+    {
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+    if (iString == NULL)
+        {
+        iString = new (ELeave) THelloTraceDllExampleString;
+        }
+    else
+        {
+        iString->SetLength(0);
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceInterface2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceInterface2.h"
+#include "HelloTraceInterface2Dup.h"
+#include "HelloTraceInterface2Dup2.inl"
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterface2Traces.h"
+#endif
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewLC()
+    {
+    CHelloTraceInterface* self = new (ELeave) CHelloTraceInterface;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewL()
+    {
+    CHelloTraceInterface* self = CHelloTraceInterface::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceInterface::CHelloTraceInterface()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_CTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+void CHelloTraceInterface::ConstructL()
+    {
+    iString = new (ELeave) THelloTraceDllExampleString;
+    }
+
+EXPORT_C CHelloTraceInterface::~CHelloTraceInterface()
+    {
+    delete iString;
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_DTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+EXPORT_C TVersion CHelloTraceInterface::Version()
+    {
+    const TInt KMajor = 1;
+    const TInt KMinor = 0;
+    const TInt KBuild = 1;
+    TVersion version = TVersion(KMajor, KMinor, KBuild);
+    OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION, "CHelloTraceInterface::Version = %S", version.Name());   
+    return version;
+    }
+
+EXPORT_C const TPtrC CHelloTraceInterface::String() const
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING, 
+                     "[0x%08x] Returned %S", (TUint32) this, *iString);   
+    return *iString;
+    }
+
+EXPORT_C void CHelloTraceInterface::AddCharL(const TChar& aChar)
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL, 
+                  "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+    if (iString->Length() >= KHelloTraceDllBufferLength)
+        {
+        OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR,
+                   "[0x%08x] Not enough space to add character", (TUint32) this);
+        User::Leave( KErrTooBig);
+        }
+    iString->Append(aChar);
+    }
+
+EXPORT_C void CHelloTraceInterface::RemoveLast()
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST, 
+                  "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+    if (iString->Length() > 0)
+        {
+        iString->SetLength(iString->Length() - 1);
+        }
+    else
+        {
+        OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN, "[0x%08x] String already empty", (TUint32) this);   
+        }
+    }
+
+EXPORT_C void CHelloTraceInterface::ResetString()
+    {
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+    if (iString == NULL)
+        {
+        iString = new (ELeave) THelloTraceDllExampleString;
+        }
+    else
+        {
+        iString->SetLength(0);
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTracePanic.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32std.h>		 // GLDEF_C
+
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTracePanicTraces.h"
+#endif
+
+GLDEF_C void Panic(THelloTraceDllPanic aPanic)
+    {
+    OstTrace1( TRACE_FATAL, PANIC, "Panic(%{THelloTraceDllPanic})", (TUint) aPanic );    
+    User::Panic(_L("HelloTraceDll"), aPanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTracePanic2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32std.h>		 // GLDEF_C
+
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTracePanic2Traces.h"
+#endif
+
+GLDEF_C void Panic(THelloTraceDllPanic aPanic)
+    {
+    OstTrace1( TRACE_FATAL, PANIC, "Panic(%{THelloTraceDllPanic})", (TUint) aPanic );    
+    User::Panic(_L("HelloTraceDll"), aPanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceTypes.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include <e32std.h>
+
+#include "HelloTraceTypes.h"
+#include "HelloTraceTypesDup.h"
+#include "HelloTraceTypesDup2.inl"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesTraces.h"
+#endif
+
+void HelloTraceTypes::SignedIntegers()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+void HelloTraceTypes::UnsignedIntegers()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+void HelloTraceTypes::Descriptors()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE, "16 bit descriptor: %S", KUnicode() );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/src/HelloTraceTypes2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include <e32std.h>
+
+#include "HelloTraceTypes2.h"
+#include "HelloTraceTypes2Dup.h"
+#include "HelloTraceTypes2Dup2.inl"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypes2Traces.h"
+#endif
+
+void HelloTraceTypes::SignedIntegers()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+void HelloTraceTypes::UnsignedIntegers()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+void HelloTraceTypes::Descriptors()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE, "16 bit descriptor: %S", KUnicode() );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/dll/traces/trace.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<trace_properties>
+<enum name="TFnEnum">
+<value id="0">EExample1</value>
+<value id="2">EExample2</value>
+</enum>
+<enum name="THelloTraceDllPanic">
+<value id="0">EHelloTraceDllExamplePanic</value>
+<value id="1">EHelloTraceDllNullPointer</value>
+</enum>
+<file>../incDup/HelloTraceInterfaceDup.h</file>
+<file>../incDup/HelloTraceInterfaceDup2.inl</file>
+<file>../incDup/HelloTraceFnDup.h</file>
+<file>../incDup/HelloTraceFnDup2.inl</file>
+<file>../incDup/HelloTraceTypesDup.h</file>
+<file>../incDup/HelloTraceTypesDup2.inl</file>
+<file>../incDup/HelloTraceInterface2Dup.h</file>
+<file>../incDup/HelloTraceInterface2Dup2.inl</file>
+<file>../incDup/HelloTraceFn2Dup.h</file>
+<file>../incDup/HelloTraceFn2Dup2.inl</file>
+<file>../incDup/HelloTraceTypes2Dup.h</file>
+<file>../incDup/HelloTraceTypes2Dup2.inl</file>
+</trace_properties>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/multmmp_separate_source/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#include "../dll/group/bld.inf"
+#include "../console/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/console/group/HelloTraceConsole.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceConsole.exe
+TARGETTYPE	  exe
+UID			  0 0xE40349E4
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE	   ../inc
+USERINCLUDE    ../../dll/inc
+USERINCLUDE    ../traces
+
+SOURCEPATH	  ../src
+SOURCE		  HelloTraceConsole.cpp
+
+LIBRARY		  euser.lib
+LIBRARY       HelloTraceDll.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/console/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotraceconsole.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotraceconsole.iby)
+
+PRJ_MMPFILES
+HelloTraceConsole.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/console/group/hellotraceconsole.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACECONSOLE_IBY
+#define HELLOTRACECONSOLE_IBY
+
+#include <core\os\hellotracedll.iby>
+
+file=ABI_DIR\BUILD_DIR\hellotraceconsole.exe    Sys\Bin\hellotraceconsole.exe
+
+#endif //HELLOTRACECONSOLE_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/console/inc/HelloTraceConsole.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACECONSOLE_H__
+#define __HELLOTRACECONSOLE_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __HELLOTRACECONSOLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/bwins/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,14 @@
+EXPORTS
+	?Version@CHelloTraceInterface@@SA?AVTVersion@@XZ @ 1 NONAME ; class TVersion CHelloTraceInterface::Version(void)
+	?NewLC@CHelloTraceInterface@@SAPAV1@XZ @ 2 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewLC(void)
+	?JustTypes@HelloTraceExample@@SAXXZ @ 3 NONAME ; void HelloTraceExample::JustTypes(void)
+	?Interface@HelloTraceExample@@SAXXZ @ 4 NONAME ; void HelloTraceExample::Interface(void)
+	?FnEntryExit@HelloTraceExample@@SAXXZ @ 5 NONAME ; void HelloTraceExample::FnEntryExit(void)
+	?ResetString@CHelloTraceInterface@@QAEXXZ @ 6 NONAME ; void CHelloTraceInterface::ResetString(void)
+	?AddCharL@CHelloTraceInterface@@QAEXABVTChar@@@Z @ 7 NONAME ; void CHelloTraceInterface::AddCharL(class TChar const &)
+	?PanicTrace@HelloTraceExample@@SAXXZ @ 8 NONAME ; void HelloTraceExample::PanicTrace(void)
+	??1CHelloTraceInterface@@UAE@XZ @ 9 NONAME ; CHelloTraceInterface::~CHelloTraceInterface(void)
+	?String@CHelloTraceInterface@@QBE?BVTPtrC16@@XZ @ 10 NONAME ; class TPtrC16 const CHelloTraceInterface::String(void) const
+	?RemoveLast@CHelloTraceInterface@@QAEXXZ @ 11 NONAME ; void CHelloTraceInterface::RemoveLast(void)
+	?NewL@CHelloTraceInterface@@SAPAV1@XZ @ 12 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/eabi/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,20 @@
+EXPORTS
+	_ZN17HelloTraceExample10PanicTraceEv @ 1 NONAME
+	_ZN17HelloTraceExample11FnEntryExitEv @ 2 NONAME
+	_ZN17HelloTraceExample9InterfaceEv @ 3 NONAME
+	_ZN17HelloTraceExample9JustTypesEv @ 4 NONAME
+	_ZN20CHelloTraceInterface10RemoveLastEv @ 5 NONAME
+	_ZN20CHelloTraceInterface11ResetStringEv @ 6 NONAME
+	_ZN20CHelloTraceInterface4NewLEv @ 7 NONAME
+	_ZN20CHelloTraceInterface5NewLCEv @ 8 NONAME
+	_ZN20CHelloTraceInterface7VersionEv @ 9 NONAME
+	_ZN20CHelloTraceInterface8AddCharLERK5TChar @ 10 NONAME
+	_ZN20CHelloTraceInterfaceD0Ev @ 11 NONAME
+	_ZN20CHelloTraceInterfaceD1Ev @ 12 NONAME
+	_ZN20CHelloTraceInterfaceD2Ev @ 13 NONAME
+	_ZNK20CHelloTraceInterface6StringEv @ 14 NONAME
+	_ZTI13CHelloTraceFn @ 15 NONAME
+	_ZTI20CHelloTraceInterface @ 16 NONAME
+	_ZTV13CHelloTraceFn @ 17 NONAME
+	_ZTV20CHelloTraceInterface @ 18 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/group/HelloTraceDll.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceDll.dll
+TARGETTYPE	  dll
+UID			  0x1000008d 0xE43DF43E
+CAPABILITY    ReadUserData
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE  ../inc ../incDup
+USERINCLUDE  ../traces
+
+SOURCEPATH	 ../src
+SOURCE       HelloTraceExample.cpp 
+SOURCE       HelloTraceTypes.cpp
+SOURCE       HelloTraceInterface.cpp 
+SOURCE       HelloTraceFn.cpp 
+SOURCE       HelloTracePanic.cpp 
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotracedll.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotracedll.iby)
+../inc/hellotracefn.h		      OS_LAYER_PLATFORM_EXPORT_PATH(hellotracefn.h)
+
+PRJ_MMPFILES
+HelloTraceDll.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/group/hellotracedll.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACEDLL_IBY
+#define HELLOTRACEDLL_IBY
+
+file=ABI_DIR\BUILD_DIR\hellotracedll.dll        Sys\Bin\hellotracedll.dll
+
+#endif //HELLOTRACEDLL_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/inc/HelloTraceExample.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEEXAMPLE_H__
+#define __HELLOTRACEEXAMPLE_H__
+
+#include <e32std.h>
+
+class HelloTraceExample
+    {
+public:
+    IMPORT_C static void JustTypes();    
+    IMPORT_C static void Interface();    
+    IMPORT_C static void FnEntryExit();    
+    IMPORT_C static void PanicTrace();    
+
+    // @TODO add examples for state macros
+    // @TODO add examples for event macros
+    // @TODO add examples for OstTraceData
+    // @TODO add compile-time selector examples
+    // @TODO add macro wrapper examples
+    };
+
+#endif  // __HELLOTRACEEXAMPLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/inc/HelloTraceFn.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+ 
+
+#ifndef HELLOTRACEFN_H_
+#define HELLOTRACEFN_H_
+
+#include <e32base.h>    // CBase
+
+class CHelloTraceFn : public CBase
+    {
+public:
+    
+    // Note the Trace Builder will only parse this if it's in a cpp file
+    // but not from here :(
+    // Also if you add a new enum you need to reparse the enum - it doesn't
+    // get automatically reparsed by the Trace Compiler :(
+    enum TFnEnum
+        {
+        EExample1,
+        EExample2 = 2, 
+        // EExample3 = EExample2 + 1, // The Trace Builder can't parse this :(
+        };
+    
+public:
+    static CHelloTraceFn* NewL();
+    static CHelloTraceFn* NewLC();
+    ~CHelloTraceFn();
+   
+public: // Fn entry / exit tracing examples 
+    void Simple();
+    void OutputsParams(TInt aParam, TFnEnum aEnumParam);
+    void OutputsParams2(TInt aParam, TFnEnum aEnumParam);
+    void OutputsParams3(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValue();
+    TInt64 OutputsTInt64ReturnValue();
+    TFnEnum OutputsTFnEnumReturnValue();
+
+    CActive* OutputsUnknownPtrType(CActive* aActive);
+    CActive& OutputsUnknownRefType(CActive& aActive);
+    
+    void OutputMissingParams(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFn(TInt aDbgParam);
+#else
+    void PreProcessedFn();
+#endif
+    
+    static void StaticOutputsParamsL(TInt aParam);  
+    
+    // duplicate all the function and put the impl in the header file HelloTraceFnDup.h
+    void SimpleDup();
+    void OutputsParamsDup(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup();
+    TInt64 OutputsTInt64ReturnValueDup();
+    TFnEnum OutputsTFnEnumReturnValueDup();
+
+    CActive* OutputsUnknownPtrTypeDup(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup(CActive& aActive);
+    
+    void OutputMissingParamsDup(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup(TInt aDbgParam);
+#else
+    void PreProcessedFnDup();
+#endif
+    static void StaticOutputsParamsDupL(TInt aParam);  
+    
+    // duplicate all the function again and put the impl in the header file HelloTraceFnDup2.h
+    void SimpleDup2();
+    void OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup2();
+    TInt64 OutputsTInt64ReturnValueDup2();
+    TFnEnum OutputsTFnEnumReturnValueDup2();
+
+    CActive* OutputsUnknownPtrTypeDup2(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup2(CActive& aActive);
+    
+    void OutputMissingParamsDup2(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup2(TInt aDbgParam);
+#else
+    void PreProcessedFnDup2();
+#endif
+    static void StaticOutputsParamsDup2L(TInt aParam);  
+
+
+private:
+    CHelloTraceFn();
+    };
+
+#endif /* HELLOTRACEFN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/inc/HelloTraceInterface.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE_H__
+#define __HELLOTRACEINTERFACE_H__
+
+#include <e32base.h>	// CBase
+#include <e32std.h>	 // TBuf
+
+const TInt KHelloTraceDllBufferLength = 10;
+typedef TBuf<KHelloTraceDllBufferLength> THelloTraceDllExampleString;
+
+class CHelloTraceInterface : public CBase
+    {
+public:
+    IMPORT_C static CHelloTraceInterface* NewL();
+    IMPORT_C static CHelloTraceInterface* NewLC();
+    IMPORT_C ~CHelloTraceInterface();
+
+public:
+    IMPORT_C static TVersion Version();
+    IMPORT_C const TPtrC String() const;
+    IMPORT_C void AddCharL(const TChar& aChar);
+    IMPORT_C void RemoveLast();
+    IMPORT_C void ResetString();
+    
+    IMPORT_C static TVersion VersionDup();
+    IMPORT_C const TPtrC StringDup() const;
+    IMPORT_C void AddCharDupL(const TChar& aChar);
+    IMPORT_C void RemoveLastDup();
+    IMPORT_C void ResetStringDup();
+
+    IMPORT_C static TVersion VersionDup2();
+    IMPORT_C const TPtrC StringDup2() const;
+    IMPORT_C void AddCharDup2L(const TChar& aChar);
+    IMPORT_C void RemoveLastDup2();
+    IMPORT_C void ResetStringDup2();
+private:
+    CHelloTraceInterface();
+    void ConstructL();
+
+private:
+    // data
+    THelloTraceDllExampleString* iString;
+    };
+
+#endif  // __HELLOTRACEINTERFACE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/inc/HelloTracePanic.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEDLL_PAN__
+#define __HELLOTRACEDLL_PAN__
+
+//  Data Types
+
+enum THelloTraceDllPanic
+    {
+    EHelloTraceDllExamplePanic,
+    EHelloTraceDllNullPointer,
+    };
+
+//  Function Prototypes
+
+GLREF_C void Panic(THelloTraceDllPanic aPanic);
+
+#endif  // __HELLOTRACEDLL_PAN__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/inc/HelloTraceTypes.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES_H__
+#define __HELLOTRACETYPES_H__
+
+class HelloTraceTypes
+    {
+public:
+    static void SignedIntegers();
+    static void UnsignedIntegers();
+    static void Descriptors();
+    
+    static void SignedIntegersDup();
+    static void UnsignedIntegersDup();
+    static void DescriptorsDup();
+        
+    static void SignedIntegersDup2();
+    static void UnsignedIntegersDup2();
+    static void DescriptorsDup2();
+    };
+
+#endif  // __HELLOTRACETYPES_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceFnDup.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#ifndef HELLOTRACEFNDUP_H_
+#define HELLOTRACEFNDUP_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDupTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDupL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceFnDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP2_H_
+#define HELLOTRACEFNDUP2_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDup2Traces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDup2L(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup2();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup2(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup2(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup2(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup2(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup2()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup2();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP2_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceInterfaceDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP_H__
+#define __HELLOTRACEINTERFACEDUP_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDupTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDupL(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceInterfaceDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP2_H__
+#define __HELLOTRACEINTERFACEDUP2_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDup2Traces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup2()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP2, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup2() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP2, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDup2L(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP2, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP2,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup2()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP2, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP2, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup2()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP2, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceTypesDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP_H__
+#define __HELLOTRACETYPESDUP_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDupTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/incDup/HelloTraceTypesDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP2_H__
+#define __HELLOTRACETYPESDUP2_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDup2Traces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup2()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup2()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup2()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP2, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP2, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/src/HelloTraceExample.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include "HelloTraceExample.h"
+#include "HelloTraceTypes.h"
+#include "HelloTraceInterface.h"
+#include "HelloTraceFn.h"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceExampleTraces.h"
+#endif
+
+EXPORT_C void HelloTraceExample::JustTypes()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_JUSTTYPES, "*********************************************** " );
+    
+    HelloTraceTypes::SignedIntegers();
+    HelloTraceTypes::UnsignedIntegers();
+    HelloTraceTypes::Descriptors();    
+    }
+
+EXPORT_C void HelloTraceExample::Interface()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_INTERFACE, "*********************************************** " );
+    
+    TVersion version = CHelloTraceInterface::Version();   
+    if (version.iMajor >= 1) 
+        {
+        CHelloTraceInterface* example = CHelloTraceInterface::NewLC();
+        example->AddCharL('H');
+        example->AddCharL('e');
+        example->AddCharL('l');
+        example->AddCharL('l');
+        example->AddCharL('o');
+        example->AddCharL('T');        
+        example->RemoveLast();        
+        example->AddCharL(' ');
+        example->AddCharL('T');
+        example->AddCharL('r');
+        example->AddCharL('a');
+        example->AddCharL('c');
+        example->AddCharL('e');
+        example->AddCharL('!');
+        CleanupStack::PopAndDestroy(example);
+        }
+    else
+        {
+        OstTrace0( TRACE_ERROR, HELLOTRACEEXAMPLE_UNSUPPORTED_VERSION, "Unsupported version!");
+        }
+    }
+
+EXPORT_C void HelloTraceExample::FnEntryExit()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_FNENTRYEXIT, "*********************************************** " );
+       
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    CIdle* idle = CIdle::NewL(CActive::EPriorityIdle);
+    CleanupStack::PushL(idle);
+
+    CHelloTraceFn::StaticOutputsParamsL(1);
+   
+    example->Simple();
+    example->OutputsParams(2, CHelloTraceFn::EExample1);
+    example->OutputsParams2(2, CHelloTraceFn::EExample1);
+    example->OutputsParams3(2, CHelloTraceFn::EExample1);
+    example->OutputsParams(3, CHelloTraceFn::EExample2);
+    example->OutputsSignedIntegers(-4, -5, -6, -7);
+    example->OutputsUnsignedIntegers(8, 9, 10, 11);
+    example->OutputsTIntReturnValue();    
+    example->OutputsTInt64ReturnValue(); 
+    example->OutputsTFnEnumReturnValue();
+    example->OutputsUnknownPtrType(idle);    
+    example->OutputsUnknownRefType(*idle);
+#ifdef _DEBUG
+    example->PreProcessedFn(12);
+#else
+    example->PreProcessedFn();
+#endif
+    example->OutputMissingParams(13, 14, 15);
+
+    CleanupStack::PopAndDestroy(idle);
+    CleanupStack::PopAndDestroy(example);
+    }
+
+EXPORT_C void HelloTraceExample::PanicTrace()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_PANIC, "*********************************************** " );
+
+    Panic(EHelloTraceDllExamplePanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/src/HelloTraceFn.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+ 
+#include "HelloTraceFn.h"
+#include "HelloTraceFnDup.inl"
+#include "HelloTraceFnDup2.inl"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnTraces.h"
+#endif
+
+
+CHelloTraceFn* CHelloTraceFn::NewLC()
+    {
+    CHelloTraceFn* self = new (ELeave) CHelloTraceFn;
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CHelloTraceFn* CHelloTraceFn::NewL()
+    {
+    CHelloTraceFn* self = CHelloTraceFn::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceFn::CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_CTOR, "[0x%08x] Constructor", this );  
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_CTOR_TEXTWITHTAB, "[0x%08x] Constructor -   Trace text with tabs", this );
+    }
+
+CHelloTraceFn::~CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_DTOR, "[0x%08x] Destructor", this );    
+    }
+
+void CHelloTraceFn::Simple()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_ENTRY, this );
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_SIMPLE_ENTRY_EXT_NO_PARAM, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsParams(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_EXIT, this );
+    }
+void CHelloTraceFn::OutputsParams2(TInt /*aParam*/, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS2_PRAMCOMMENTED_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS2_EXIT, this );
+    }
+    
+void CHelloTraceFn::OutputsParams3(TInt /*aParam*/, TFnEnum /*aEnumParam*/)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS3_ALLPARAMCOMMENTED_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS3_EXIT, this );
+    }    
+
+void CHelloTraceFn::StaticOutputsParamsL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->Simple();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_EXIT );    
+    }
+
+void CHelloTraceFn::OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_EXIT, this );
+    }
+
+
+TInt CHelloTraceFn::OutputsTIntReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+TInt64 CHelloTraceFn::OutputsTInt64ReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_EXIT, this, ret );
+    return ret;    
+    }
+
+CActive* CHelloTraceFn::OutputsUnknownPtrType(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+CActive& CHelloTraceFn::OutputsUnknownRefType(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+void CHelloTraceFn::OutputMissingParams(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+void CHelloTraceFn::PreProcessedFn()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    Simple();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/src/HelloTraceInterface.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceInterface.h"
+#include "HelloTraceInterfaceDup.h"
+#include "HelloTraceInterfaceDup2.inl"
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceTraces.h"
+#endif
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewLC()
+    {
+    CHelloTraceInterface* self = new (ELeave) CHelloTraceInterface;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewL()
+    {
+    CHelloTraceInterface* self = CHelloTraceInterface::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceInterface::CHelloTraceInterface()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_CTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+void CHelloTraceInterface::ConstructL()
+    {
+    iString = new (ELeave) THelloTraceDllExampleString;
+    }
+
+EXPORT_C CHelloTraceInterface::~CHelloTraceInterface()
+    {
+    delete iString;
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_DTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+EXPORT_C TVersion CHelloTraceInterface::Version()
+    {
+    const TInt KMajor = 1;
+    const TInt KMinor = 0;
+    const TInt KBuild = 1;
+    TVersion version = TVersion(KMajor, KMinor, KBuild);
+    OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION, "CHelloTraceInterface::Version = %S", version.Name());   
+    return version;
+    }
+
+EXPORT_C const TPtrC CHelloTraceInterface::String() const
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING, 
+                     "[0x%08x] Returned %S", (TUint32) this, *iString);   
+    return *iString;
+    }
+
+EXPORT_C void CHelloTraceInterface::AddCharL(const TChar& aChar)
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL, 
+                  "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+    if (iString->Length() >= KHelloTraceDllBufferLength)
+        {
+        OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR,
+                   "[0x%08x] Not enough space to add character", (TUint32) this);
+        User::Leave( KErrTooBig);
+        }
+    iString->Append(aChar);
+    }
+
+EXPORT_C void CHelloTraceInterface::RemoveLast()
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST, 
+                  "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+    if (iString->Length() > 0)
+        {
+        iString->SetLength(iString->Length() - 1);
+        }
+    else
+        {
+        OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN, "[0x%08x] String already empty", (TUint32) this);   
+        }
+    }
+
+EXPORT_C void CHelloTraceInterface::ResetString()
+    {
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+    if (iString == NULL)
+        {
+        iString = new (ELeave) THelloTraceDllExampleString;
+        }
+    else
+        {
+        iString->SetLength(0);
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/src/HelloTracePanic.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32std.h>		 // GLDEF_C
+
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTracePanicTraces.h"
+#endif
+
+GLDEF_C void Panic(THelloTraceDllPanic aPanic)
+    {
+    OstTrace1( TRACE_FATAL, PANIC, "Panic(%{THelloTraceDllPanic})", (TUint) aPanic );    
+    User::Panic(_L("HelloTraceDll"), aPanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/src/HelloTraceTypes.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include <e32std.h>
+
+#include "HelloTraceTypes.h"
+#include "HelloTraceTypesDup.h"
+#include "HelloTraceTypesDup2.inl"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesTraces.h"
+#endif
+
+void HelloTraceTypes::SignedIntegers()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+void HelloTraceTypes::UnsignedIntegers()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+void HelloTraceTypes::Descriptors()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE, "16 bit descriptor: %S", KUnicode() );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/dll/traces/trace.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<trace_properties>
+<enum name="TFnEnum">
+<value id="0">EExample1</value>
+<value id="2">EExample2</value>
+</enum>
+<enum name="THelloTraceDllPanic">
+<value id="0">EHelloTraceDllExamplePanic</value>
+<value id="1">EHelloTraceDllNullPointer</value>
+</enum>
+<file>../incDup/HelloTraceInterfaceDup.h</file>
+<file>../incDup/HelloTraceInterfaceDup2.inl</file>
+<file>../incDup/HelloTraceFnDup.inl</file>
+<file>../incDup/HelloTraceFnDup2.inl</file>
+<file>../incDup/HelloTraceTypesDup.h</file>
+<file>../incDup/HelloTraceTypesDup2.inl</file>
+</trace_properties>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#include "../dll/group/bld.inf"
+#include "../console/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/console/group/HelloTraceConsole.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceConsole.exe
+TARGETTYPE	  exe
+UID			  0 0xE40349E4
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE	   ../inc
+USERINCLUDE    ../../dll/inc
+USERINCLUDE    ../traces
+
+SOURCEPATH	  ../src
+SOURCE		  HelloTraceConsole.cpp
+
+LIBRARY		  euser.lib
+LIBRARY       HelloTraceDll.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/console/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotraceconsole.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotraceconsole.iby)
+
+PRJ_MMPFILES
+HelloTraceConsole.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/console/group/hellotraceconsole.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACECONSOLE_IBY
+#define HELLOTRACECONSOLE_IBY
+
+#include <core\os\hellotracedll.iby>
+
+file=ABI_DIR\BUILD_DIR\hellotraceconsole.exe    Sys\Bin\hellotraceconsole.exe
+
+#endif //HELLOTRACECONSOLE_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/console/inc/HelloTraceConsole.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACECONSOLE_H__
+#define __HELLOTRACECONSOLE_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __HELLOTRACECONSOLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/console/src/HelloTraceConsole.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32cons.h>			// Console
+
+#include "HelloTraceConsole.h"
+#include "HelloTraceExample.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceConsoleTraces.h"
+#endif
+
+
+_LIT(KTextConsoleTitle, "HelloTrace");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+LOCAL_C void DoExamples()
+    {
+    TInt err = KErrNone;
+
+    console->Printf(_L("Before main tracing examples ...\n"));
+
+    console->Printf(_L(" Before type examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::JustTypes());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+
+    console->Printf(_L(" Before Interface examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::Interface());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+    
+    console->Printf(_L(" Before FnEntryExit examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::FnEntryExit());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);    
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    DoExamples();
+    
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    OstTraceFunctionEntry0( E32MAIN_ENTRY );
+    
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, 
+          console = Console::NewL(KTextConsoleTitle, 
+                                  TSize(KConsFullScreen, KConsFullScreen)));    
+    if (createError)
+        {
+        delete cleanup;
+        OstTrace1( TRACE_ERROR, E32MAIN_CREATE_ERROR, "Failed to create console error: %d", createError);
+        OstTraceFunctionExit0( E32MAIN_EXIT_ERR );
+        return createError;
+        }
+
+    TRAPD(mainError, DoStartL());    
+    if (mainError)
+        {
+        OstTrace1( TRACE_ERROR, E32MAIN_START_ERROR, "DoStartL failed with error: %d", mainError);
+        console->Printf(_L("DoStartL failed with error: %d\n\n"), mainError);
+        }
+    else 
+        {
+        console->Printf(_L("Before panic tracing example ..."));
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+    
+        OstTrace0( TRACE_FLOW, E32MAIN_BEFORE_PANIC, "About to cause a panic ..." );
+        HelloTraceExample::PanicTrace();
+        
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+        }
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    
+    OstTraceFunctionExit0( E32MAIN_EXIT );
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/bwins/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,14 @@
+EXPORTS
+	?Version@CHelloTraceInterface@@SA?AVTVersion@@XZ @ 1 NONAME ; class TVersion CHelloTraceInterface::Version(void)
+	?NewLC@CHelloTraceInterface@@SAPAV1@XZ @ 2 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewLC(void)
+	?JustTypes@HelloTraceExample@@SAXXZ @ 3 NONAME ; void HelloTraceExample::JustTypes(void)
+	?Interface@HelloTraceExample@@SAXXZ @ 4 NONAME ; void HelloTraceExample::Interface(void)
+	?FnEntryExit@HelloTraceExample@@SAXXZ @ 5 NONAME ; void HelloTraceExample::FnEntryExit(void)
+	?ResetString@CHelloTraceInterface@@QAEXXZ @ 6 NONAME ; void CHelloTraceInterface::ResetString(void)
+	?AddCharL@CHelloTraceInterface@@QAEXABVTChar@@@Z @ 7 NONAME ; void CHelloTraceInterface::AddCharL(class TChar const &)
+	?PanicTrace@HelloTraceExample@@SAXXZ @ 8 NONAME ; void HelloTraceExample::PanicTrace(void)
+	??1CHelloTraceInterface@@UAE@XZ @ 9 NONAME ; CHelloTraceInterface::~CHelloTraceInterface(void)
+	?String@CHelloTraceInterface@@QBE?BVTPtrC16@@XZ @ 10 NONAME ; class TPtrC16 const CHelloTraceInterface::String(void) const
+	?RemoveLast@CHelloTraceInterface@@QAEXXZ @ 11 NONAME ; void CHelloTraceInterface::RemoveLast(void)
+	?NewL@CHelloTraceInterface@@SAPAV1@XZ @ 12 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/eabi/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,20 @@
+EXPORTS
+	_ZN17HelloTraceExample10PanicTraceEv @ 1 NONAME
+	_ZN17HelloTraceExample11FnEntryExitEv @ 2 NONAME
+	_ZN17HelloTraceExample9InterfaceEv @ 3 NONAME
+	_ZN17HelloTraceExample9JustTypesEv @ 4 NONAME
+	_ZN20CHelloTraceInterface10RemoveLastEv @ 5 NONAME
+	_ZN20CHelloTraceInterface11ResetStringEv @ 6 NONAME
+	_ZN20CHelloTraceInterface4NewLEv @ 7 NONAME
+	_ZN20CHelloTraceInterface5NewLCEv @ 8 NONAME
+	_ZN20CHelloTraceInterface7VersionEv @ 9 NONAME
+	_ZN20CHelloTraceInterface8AddCharLERK5TChar @ 10 NONAME
+	_ZN20CHelloTraceInterfaceD0Ev @ 11 NONAME
+	_ZN20CHelloTraceInterfaceD1Ev @ 12 NONAME
+	_ZN20CHelloTraceInterfaceD2Ev @ 13 NONAME
+	_ZNK20CHelloTraceInterface6StringEv @ 14 NONAME
+	_ZTI13CHelloTraceFn @ 15 NONAME
+	_ZTI20CHelloTraceInterface @ 16 NONAME
+	_ZTV13CHelloTraceFn @ 17 NONAME
+	_ZTV20CHelloTraceInterface @ 18 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/group/HelloTraceDll.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceDll.dll
+TARGETTYPE	  dll
+UID			  0x1000008d 0xE43DF43E
+CAPABILITY    ReadUserData
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE  ../inc ../incDup
+USERINCLUDE  ../traces/HelloTraceDll_dll
+
+SOURCEPATH	 ../src
+SOURCE       HelloTraceExample.cpp 
+SOURCE       HelloTraceTypes.cpp
+SOURCE       HelloTraceInterface.cpp 
+SOURCE       HelloTraceFn.cpp 
+SOURCE       HelloTracePanic.cpp 
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotracedll.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotracedll.iby)
+
+PRJ_MMPFILES
+HelloTraceDll.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/group/hellotracedll.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACEDLL_IBY
+#define HELLOTRACEDLL_IBY
+
+file=ABI_DIR\BUILD_DIR\hellotracedll.dll        Sys\Bin\hellotracedll.dll
+
+#endif //HELLOTRACEDLL_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/inc/HelloTraceExample.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEEXAMPLE_H__
+#define __HELLOTRACEEXAMPLE_H__
+
+#include <e32std.h>
+
+class HelloTraceExample
+    {
+public:
+    IMPORT_C static void JustTypes();    
+    IMPORT_C static void Interface();    
+    IMPORT_C static void FnEntryExit();    
+    IMPORT_C static void PanicTrace();    
+
+    // @TODO add examples for state macros
+    // @TODO add examples for event macros
+    // @TODO add examples for OstTraceData
+    // @TODO add compile-time selector examples
+    // @TODO add macro wrapper examples
+    };
+
+#endif  // __HELLOTRACEEXAMPLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/inc/HelloTraceFn.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFN_H_
+#define HELLOTRACEFN_H_
+
+#include <e32base.h>    // CBase
+
+class CHelloTraceFn : public CBase
+    {
+public:
+    
+    // Note the Trace Builder will only parse this if it's in a cpp file
+    // but not from here :(
+    // Also if you add a new enum you need to reparse the enum - it doesn't
+    // get automatically reparsed by the Trace Compiler :(
+    enum TFnEnum
+        {
+        EExample1,
+        EExample2 = 2, 
+        // EExample3 = EExample2 + 1, // The Trace Builder can't parse this :(
+        };
+    
+public:
+    static CHelloTraceFn* NewL();
+    static CHelloTraceFn* NewLC();
+    ~CHelloTraceFn();
+   
+public: // Fn entry / exit tracing examples 
+    void Simple();
+    void OutputsParams(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValue();
+    TInt64 OutputsTInt64ReturnValue();
+    TFnEnum OutputsTFnEnumReturnValue();
+
+    CActive* OutputsUnknownPtrType(CActive* aActive);
+    CActive& OutputsUnknownRefType(CActive& aActive);
+    
+    void OutputMissingParams(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFn(TInt aDbgParam);
+#else
+    void PreProcessedFn();
+#endif
+    
+    static void StaticOutputsParamsL(TInt aParam);  
+    
+    // duplicate all the function and put the impl in the header file HelloTraceFnDup.h
+    void SimpleDup();
+    void OutputsParamsDup(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup();
+    TInt64 OutputsTInt64ReturnValueDup();
+    TFnEnum OutputsTFnEnumReturnValueDup();
+
+    CActive* OutputsUnknownPtrTypeDup(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup(CActive& aActive);
+    
+    void OutputMissingParamsDup(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup(TInt aDbgParam);
+#else
+    void PreProcessedFnDup();
+#endif
+    static void StaticOutputsParamsDupL(TInt aParam);  
+    
+    // duplicate all the function again and put the impl in the header file HelloTraceFnDup2.h
+    void SimpleDup2();
+    void OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup2();
+    TInt64 OutputsTInt64ReturnValueDup2();
+    TFnEnum OutputsTFnEnumReturnValueDup2();
+
+    CActive* OutputsUnknownPtrTypeDup2(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup2(CActive& aActive);
+    
+    void OutputMissingParamsDup2(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup2(TInt aDbgParam);
+#else
+    void PreProcessedFnDup2();
+#endif
+    static void StaticOutputsParamsDup2L(TInt aParam);  
+
+
+private:
+    CHelloTraceFn();
+    };
+
+#endif /* HELLOTRACEFN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/inc/HelloTraceInterface.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE_H__
+#define __HELLOTRACEINTERFACE_H__
+
+#include <e32base.h>	// CBase
+#include <e32std.h>	 // TBuf
+
+const TInt KHelloTraceDllBufferLength = 10;
+typedef TBuf<KHelloTraceDllBufferLength> THelloTraceDllExampleString;
+
+class CHelloTraceInterface : public CBase
+    {
+public:
+    IMPORT_C static CHelloTraceInterface* NewL();
+    IMPORT_C static CHelloTraceInterface* NewLC();
+    IMPORT_C ~CHelloTraceInterface();
+
+public:
+    IMPORT_C static TVersion Version();
+    IMPORT_C const TPtrC String() const;
+    IMPORT_C void AddCharL(const TChar& aChar);
+    IMPORT_C void RemoveLast();
+    IMPORT_C void ResetString();
+    
+    IMPORT_C static TVersion VersionDup();
+    IMPORT_C const TPtrC StringDup() const;
+    IMPORT_C void AddCharDupL(const TChar& aChar);
+    IMPORT_C void RemoveLastDup();
+    IMPORT_C void ResetStringDup();
+
+    IMPORT_C static TVersion VersionDup2();
+    IMPORT_C const TPtrC StringDup2() const;
+    IMPORT_C void AddCharDup2L(const TChar& aChar);
+    IMPORT_C void RemoveLastDup2();
+    IMPORT_C void ResetStringDup2();
+private:
+    CHelloTraceInterface();
+    void ConstructL();
+
+private:
+    // data
+    THelloTraceDllExampleString* iString;
+    };
+
+#endif  // __HELLOTRACEINTERFACE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/inc/HelloTracePanic.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEDLL_PAN__
+#define __HELLOTRACEDLL_PAN__
+
+//  Data Types
+
+enum THelloTraceDllPanic
+    {
+    EHelloTraceDllExamplePanic,
+    EHelloTraceDllNullPointer,
+    };
+
+//  Function Prototypes
+
+GLREF_C void Panic(THelloTraceDllPanic aPanic);
+
+#endif  // __HELLOTRACEDLL_PAN__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/inc/HelloTraceTypes.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES_H__
+#define __HELLOTRACETYPES_H__
+
+class HelloTraceTypes
+    {
+public:
+    static void SignedIntegers();
+    static void UnsignedIntegers();
+    static void Descriptors();
+    
+    static void SignedIntegersDup();
+    static void UnsignedIntegersDup();
+    static void DescriptorsDup();
+        
+    static void SignedIntegersDup2();
+    static void UnsignedIntegersDup2();
+    static void DescriptorsDup2();
+    };
+
+#endif  // __HELLOTRACETYPES_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceFnDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP_H_
+#define HELLOTRACEFNDUP_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDupTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDupL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceFnDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP2_H_
+#define HELLOTRACEFNDUP2_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDup2Traces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDup2L(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup2();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup2(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup2(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup2(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup2(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup2()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup2();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP2_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceInterfaceDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP_H__
+#define __HELLOTRACEINTERFACEDUP_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDupTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDupL(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceInterfaceDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP2_H__
+#define __HELLOTRACEINTERFACEDUP2_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDup2Traces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup2()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP2, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup2() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP2, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDup2L(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP2, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP2,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup2()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP2, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP2, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup2()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP2, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceTypesDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP_H__
+#define __HELLOTRACETYPESDUP_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDupTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/incDup/HelloTraceTypesDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP2_H__
+#define __HELLOTRACETYPESDUP2_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDup2Traces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup2()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup2()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup2()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP2, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP2, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/src/HelloTraceExample.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceExample.h"
+#include "HelloTraceTypes.h"
+#include "HelloTraceInterface.h"
+#include "HelloTraceFn.h"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceExampleTraces.h"
+#endif
+
+EXPORT_C void HelloTraceExample::JustTypes()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_JUSTTYPES, "*********************************************** " );
+    
+    HelloTraceTypes::SignedIntegers();
+    HelloTraceTypes::UnsignedIntegers();
+    HelloTraceTypes::Descriptors();    
+    }
+
+EXPORT_C void HelloTraceExample::Interface()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_INTERFACE, "*********************************************** " );
+    
+    TVersion version = CHelloTraceInterface::Version();   
+    if (version.iMajor >= 1) 
+        {
+        CHelloTraceInterface* example = CHelloTraceInterface::NewLC();
+        example->AddCharL('H');
+        example->AddCharL('e');
+        example->AddCharL('l');
+        example->AddCharL('l');
+        example->AddCharL('o');
+        example->AddCharL('T');        
+        example->RemoveLast();        
+        example->AddCharL(' ');
+        example->AddCharL('T');
+        example->AddCharL('r');
+        example->AddCharL('a');
+        example->AddCharL('c');
+        example->AddCharL('e');
+        example->AddCharL('!');
+        CleanupStack::PopAndDestroy(example);
+        }
+    else
+        {
+        OstTrace0( TRACE_ERROR, HELLOTRACEEXAMPLE_UNSUPPORTED_VERSION, "Unsupported version!");
+        }
+    }
+
+EXPORT_C void HelloTraceExample::FnEntryExit()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_FNENTRYEXIT, "*********************************************** " );
+       
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    CIdle* idle = CIdle::NewL(CActive::EPriorityIdle);
+    CleanupStack::PushL(idle);
+
+    CHelloTraceFn::StaticOutputsParamsL(1);
+   
+    example->Simple();
+    example->OutputsParams(2, CHelloTraceFn::EExample1);
+    example->OutputsParams(3, CHelloTraceFn::EExample2);
+    example->OutputsSignedIntegers(-4, -5, -6, -7);
+    example->OutputsUnsignedIntegers(8, 9, 10, 11);
+    example->OutputsTIntReturnValue();    
+    example->OutputsTInt64ReturnValue(); 
+    example->OutputsTFnEnumReturnValue();
+    example->OutputsUnknownPtrType(idle);    
+    example->OutputsUnknownRefType(*idle);
+#ifdef _DEBUG
+    example->PreProcessedFn(12);
+#else
+    example->PreProcessedFn();
+#endif
+    example->OutputMissingParams(13, 14, 15);
+
+    CleanupStack::PopAndDestroy(idle);
+    CleanupStack::PopAndDestroy(example);
+    }
+
+EXPORT_C void HelloTraceExample::PanicTrace()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_PANIC, "*********************************************** " );
+
+    Panic(EHelloTraceDllExamplePanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/src/HelloTraceFn.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+ 
+#include "HelloTraceFn.h"
+#include "HelloTraceFnDup.h"
+#include "HelloTraceFnDup2.inl"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnTraces.h"
+#endif
+
+CHelloTraceFn* CHelloTraceFn::NewLC()
+    {
+    CHelloTraceFn* self = new (ELeave) CHelloTraceFn;
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CHelloTraceFn* CHelloTraceFn::NewL()
+    {
+    CHelloTraceFn* self = CHelloTraceFn::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceFn::CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_CTOR, "[0x%08x] Constructor", this );    
+    }
+
+CHelloTraceFn::~CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_DTOR, "[0x%08x] Destructor", this );    
+    }
+
+void CHelloTraceFn::Simple()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsParams(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_EXIT, this );
+    }
+
+void CHelloTraceFn::StaticOutputsParamsL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->Simple();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_EXIT );    
+    }
+
+void CHelloTraceFn::OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_EXIT, this );
+    }
+
+
+TInt CHelloTraceFn::OutputsTIntReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+TInt64 CHelloTraceFn::OutputsTInt64ReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_EXIT, this, ret );
+    return ret;    
+    }
+
+CActive* CHelloTraceFn::OutputsUnknownPtrType(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+CActive& CHelloTraceFn::OutputsUnknownRefType(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+void CHelloTraceFn::OutputMissingParams(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+void CHelloTraceFn::PreProcessedFn()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    Simple();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/src/HelloTraceInterface.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceInterface.h"
+#include "HelloTraceInterfaceDup.h"
+#include "HelloTraceInterfaceDup2.inl"
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceTraces.h"
+#endif
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewLC()
+    {
+    CHelloTraceInterface* self = new (ELeave) CHelloTraceInterface;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewL()
+    {
+    CHelloTraceInterface* self = CHelloTraceInterface::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceInterface::CHelloTraceInterface()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_CTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+void CHelloTraceInterface::ConstructL()
+    {
+    iString = new (ELeave) THelloTraceDllExampleString;
+    }
+
+EXPORT_C CHelloTraceInterface::~CHelloTraceInterface()
+    {
+    delete iString;
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_DTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+EXPORT_C TVersion CHelloTraceInterface::Version()
+    {
+    const TInt KMajor = 1;
+    const TInt KMinor = 0;
+    const TInt KBuild = 1;
+    TVersion version = TVersion(KMajor, KMinor, KBuild);
+    OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION, "CHelloTraceInterface::Version = %S", version.Name());   
+    return version;
+    }
+
+EXPORT_C const TPtrC CHelloTraceInterface::String() const
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING, 
+                     "[0x%08x] Returned %S", (TUint32) this, *iString);   
+    return *iString;
+    }
+
+EXPORT_C void CHelloTraceInterface::AddCharL(const TChar& aChar)
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL, 
+                  "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+    if (iString->Length() >= KHelloTraceDllBufferLength)
+        {
+        OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR,
+                   "[0x%08x] Not enough space to add character", (TUint32) this);
+        User::Leave( KErrTooBig);
+        }
+    iString->Append(aChar);
+    }
+
+EXPORT_C void CHelloTraceInterface::RemoveLast()
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST, 
+                  "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+    if (iString->Length() > 0)
+        {
+        iString->SetLength(iString->Length() - 1);
+        }
+    else
+        {
+        OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN, "[0x%08x] String already empty", (TUint32) this);   
+        }
+    }
+
+EXPORT_C void CHelloTraceInterface::ResetString()
+    {
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+    if (iString == NULL)
+        {
+        iString = new (ELeave) THelloTraceDllExampleString;
+        }
+    else
+        {
+        iString->SetLength(0);
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/src/HelloTracePanic.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32std.h>		 // GLDEF_C
+
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTracePanicTraces.h"
+#endif
+
+GLDEF_C void Panic(THelloTraceDllPanic aPanic)
+    {
+    OstTrace1( TRACE_FATAL, PANIC, "Panic(%{THelloTraceDllPanic})", (TUint) aPanic );    
+    User::Panic(_L("HelloTraceDll"), aPanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/src/HelloTraceTypes.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include <e32std.h>
+
+#include "HelloTraceTypes.h"
+#include "HelloTraceTypesDup.h"
+#include "HelloTraceTypesDup2.inl"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesTraces.h"
+#endif
+
+void HelloTraceTypes::SignedIntegers()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+void HelloTraceTypes::UnsignedIntegers()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+void HelloTraceTypes::Descriptors()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE, "16 bit descriptor: %S", KUnicode() );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/dll/traces/hellotracedll_dll/trace.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<trace_properties>
+<enum name="TFnEnum">
+<value id="0">EExample1</value>
+<value id="2">EExample2</value>
+</enum>
+<enum name="THelloTraceDllPanic">
+<value id="0">EHelloTraceDllExamplePanic</value>
+<value id="1">EHelloTraceDllNullPointer</value>
+</enum>
+<file>../../incDup/HelloTraceInterfaceDup.h</file>
+<file>../../incDup/HelloTraceInterfaceDup2.inl</file>
+<file>../../incDup/HelloTraceFnDup.h</file>
+<file>../../incDup/HelloTraceFnDup2.inl</file>
+<file>../../incDup/HelloTraceTypesDup.h</file>
+<file>../../incDup/HelloTraceTypesDup2.inl</file>
+</trace_properties>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_diffnames_tracesplus/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#include "../dll/group/bld.inf"
+#include "../console/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/console/group/HelloTraceConsole.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceConsole.exe
+TARGETTYPE	  exe
+UID			  0 0xE40349E4
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE	   ../inc
+USERINCLUDE    ../../dll/inc
+USERINCLUDE    ../traces
+
+SOURCEPATH	  ../src
+SOURCE		  HelloTraceConsole.cpp
+
+LIBRARY		  euser.lib
+LIBRARY       HelloTraceDll.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/console/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotraceconsole.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotraceconsole.iby)
+
+PRJ_MMPFILES
+HelloTraceConsole.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/console/group/hellotraceconsole.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACECONSOLE_IBY
+#define HELLOTRACECONSOLE_IBY
+
+#include <core\os\hellotracedll.iby>
+
+file=ABI_DIR\BUILD_DIR\hellotraceconsole.exe    Sys\Bin\hellotraceconsole.exe
+
+#endif //HELLOTRACECONSOLE_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/console/inc/HelloTraceConsole.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACECONSOLE_H__
+#define __HELLOTRACECONSOLE_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __HELLOTRACECONSOLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/console/src/HelloTraceConsole.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32cons.h>			// Console
+
+#include "HelloTraceConsole.h"
+#include "HelloTraceExample.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceConsoleTraces.h"
+#endif
+
+
+_LIT(KTextConsoleTitle, "HelloTrace");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+LOCAL_C void DoExamples()
+    {
+    TInt err = KErrNone;
+
+    console->Printf(_L("Before main tracing examples ...\n"));
+
+    console->Printf(_L(" Before type examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::JustTypes());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+
+    console->Printf(_L(" Before Interface examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::Interface());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+    
+    console->Printf(_L(" Before FnEntryExit examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::FnEntryExit());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);    
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    DoExamples();
+    
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    OstTraceFunctionEntry0( E32MAIN_ENTRY );
+    
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, 
+          console = Console::NewL(KTextConsoleTitle, 
+                                  TSize(KConsFullScreen, KConsFullScreen)));    
+    if (createError)
+        {
+        delete cleanup;
+        OstTrace1( TRACE_ERROR, E32MAIN_CREATE_ERROR, "Failed to create console error: %d", createError);
+        OstTraceFunctionExit0( E32MAIN_EXIT_ERR );
+        return createError;
+        }
+
+    TRAPD(mainError, DoStartL());    
+    if (mainError)
+        {
+        OstTrace1( TRACE_ERROR, E32MAIN_START_ERROR, "DoStartL failed with error: %d", mainError);
+        console->Printf(_L("DoStartL failed with error: %d\n\n"), mainError);
+        }
+    else 
+        {
+        console->Printf(_L("Before panic tracing example ..."));
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+    
+        OstTrace0( TRACE_FLOW, E32MAIN_BEFORE_PANIC, "About to cause a panic ..." );
+        HelloTraceExample::PanicTrace();
+        
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+        }
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    
+    OstTraceFunctionExit0( E32MAIN_EXIT );
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/bwins/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,14 @@
+EXPORTS
+	?Version@CHelloTraceInterface@@SA?AVTVersion@@XZ @ 1 NONAME ; class TVersion CHelloTraceInterface::Version(void)
+	?NewLC@CHelloTraceInterface@@SAPAV1@XZ @ 2 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewLC(void)
+	?JustTypes@HelloTraceExample@@SAXXZ @ 3 NONAME ; void HelloTraceExample::JustTypes(void)
+	?Interface@HelloTraceExample@@SAXXZ @ 4 NONAME ; void HelloTraceExample::Interface(void)
+	?FnEntryExit@HelloTraceExample@@SAXXZ @ 5 NONAME ; void HelloTraceExample::FnEntryExit(void)
+	?ResetString@CHelloTraceInterface@@QAEXXZ @ 6 NONAME ; void CHelloTraceInterface::ResetString(void)
+	?AddCharL@CHelloTraceInterface@@QAEXABVTChar@@@Z @ 7 NONAME ; void CHelloTraceInterface::AddCharL(class TChar const &)
+	?PanicTrace@HelloTraceExample@@SAXXZ @ 8 NONAME ; void HelloTraceExample::PanicTrace(void)
+	??1CHelloTraceInterface@@UAE@XZ @ 9 NONAME ; CHelloTraceInterface::~CHelloTraceInterface(void)
+	?String@CHelloTraceInterface@@QBE?BVTPtrC16@@XZ @ 10 NONAME ; class TPtrC16 const CHelloTraceInterface::String(void) const
+	?RemoveLast@CHelloTraceInterface@@QAEXXZ @ 11 NONAME ; void CHelloTraceInterface::RemoveLast(void)
+	?NewL@CHelloTraceInterface@@SAPAV1@XZ @ 12 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/eabi/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,20 @@
+EXPORTS
+	_ZN17HelloTraceExample10PanicTraceEv @ 1 NONAME
+	_ZN17HelloTraceExample11FnEntryExitEv @ 2 NONAME
+	_ZN17HelloTraceExample9InterfaceEv @ 3 NONAME
+	_ZN17HelloTraceExample9JustTypesEv @ 4 NONAME
+	_ZN20CHelloTraceInterface10RemoveLastEv @ 5 NONAME
+	_ZN20CHelloTraceInterface11ResetStringEv @ 6 NONAME
+	_ZN20CHelloTraceInterface4NewLEv @ 7 NONAME
+	_ZN20CHelloTraceInterface5NewLCEv @ 8 NONAME
+	_ZN20CHelloTraceInterface7VersionEv @ 9 NONAME
+	_ZN20CHelloTraceInterface8AddCharLERK5TChar @ 10 NONAME
+	_ZN20CHelloTraceInterfaceD0Ev @ 11 NONAME
+	_ZN20CHelloTraceInterfaceD1Ev @ 12 NONAME
+	_ZN20CHelloTraceInterfaceD2Ev @ 13 NONAME
+	_ZNK20CHelloTraceInterface6StringEv @ 14 NONAME
+	_ZTI13CHelloTraceFn @ 15 NONAME
+	_ZTI20CHelloTraceInterface @ 16 NONAME
+	_ZTV13CHelloTraceFn @ 17 NONAME
+	_ZTV20CHelloTraceInterface @ 18 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/group/HelloTraceDll.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceDll.dll
+TARGETTYPE	  dll
+UID			  0x1000008d 0xE43DF43E
+CAPABILITY    ReadUserData
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE  ../inc ../incDup
+USERINCLUDE  ../traces
+
+SOURCEPATH	 ../src
+SOURCE       HelloTraceExample.cpp 
+SOURCE       HelloTraceTypes.cpp
+SOURCE       HelloTraceInterface.cpp 
+SOURCE       HelloTraceFn.cpp 
+SOURCE       HelloTracePanic.cpp 
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotracedll.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotracedll.iby)
+
+PRJ_MMPFILES
+HelloTraceDll.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/group/hellotracedll.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACEDLL_IBY
+#define HELLOTRACEDLL_IBY
+
+file=ABI_DIR\BUILD_DIR\hellotracedll.dll        Sys\Bin\hellotracedll.dll
+
+#endif //HELLOTRACEDLL_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/inc/HelloTraceExample.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEEXAMPLE_H__
+#define __HELLOTRACEEXAMPLE_H__
+
+#include <e32std.h>
+
+class HelloTraceExample
+    {
+public:
+    IMPORT_C static void JustTypes();    
+    IMPORT_C static void Interface();    
+    IMPORT_C static void FnEntryExit();    
+    IMPORT_C static void PanicTrace();    
+
+    // @TODO add examples for state macros
+    // @TODO add examples for event macros
+    // @TODO add examples for OstTraceData
+    // @TODO add compile-time selector examples
+    // @TODO add macro wrapper examples
+    };
+
+#endif  // __HELLOTRACEEXAMPLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/inc/HelloTraceInterface.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE_H__
+#define __HELLOTRACEINTERFACE_H__
+
+#include <e32base.h>	// CBase
+#include <e32std.h>	 // TBuf
+
+const TInt KHelloTraceDllBufferLength = 10;
+typedef TBuf<KHelloTraceDllBufferLength> THelloTraceDllExampleString;
+
+class CHelloTraceInterface : public CBase
+    {
+public:
+    IMPORT_C static CHelloTraceInterface* NewL();
+    IMPORT_C static CHelloTraceInterface* NewLC();
+    IMPORT_C ~CHelloTraceInterface();
+
+public:
+    IMPORT_C static TVersion Version();
+    IMPORT_C const TPtrC String() const;
+    IMPORT_C void AddCharL(const TChar& aChar);
+    IMPORT_C void RemoveLast();
+    IMPORT_C void ResetString();
+    
+    IMPORT_C static TVersion VersionDup();
+    IMPORT_C const TPtrC StringDup() const;
+    IMPORT_C void AddCharDupL(const TChar& aChar);
+    IMPORT_C void RemoveLastDup();
+    IMPORT_C void ResetStringDup();
+
+    IMPORT_C static TVersion VersionDup2();
+    IMPORT_C const TPtrC StringDup2() const;
+    IMPORT_C void AddCharDup2L(const TChar& aChar);
+    IMPORT_C void RemoveLastDup2();
+    IMPORT_C void ResetStringDup2();
+private:
+    CHelloTraceInterface();
+    void ConstructL();
+
+private:
+    // data
+    THelloTraceDllExampleString* iString;
+    };
+
+#endif  // __HELLOTRACEINTERFACE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/inc/HelloTracePanic.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEDLL_PAN__
+#define __HELLOTRACEDLL_PAN__
+
+//  Data Types
+
+enum THelloTraceDllPanic
+    {
+    EHelloTraceDllExamplePanic,
+    EHelloTraceDllNullPointer,
+    };
+
+//  Function Prototypes
+
+GLREF_C void Panic(THelloTraceDllPanic aPanic);
+
+#endif  // __HELLOTRACEDLL_PAN__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/inc/HelloTraceTypes.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES_H__
+#define __HELLOTRACETYPES_H__
+
+class HelloTraceTypes
+    {
+public:
+    static void SignedIntegers();
+    static void UnsignedIntegers();
+    static void Descriptors();
+    
+    static void SignedIntegersDup();
+    static void UnsignedIntegersDup();
+    static void DescriptorsDup();
+        
+    static void SignedIntegersDup2();
+    static void UnsignedIntegersDup2();
+    static void DescriptorsDup2();
+    };
+
+#endif  // __HELLOTRACETYPES_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceFnDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP_H_
+#define HELLOTRACEFNDUP_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDupTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDupL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceFnDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP2_H_
+#define HELLOTRACEFNDUP2_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDup2Traces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDup2L(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup2();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup2(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup2(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup2(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup2(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup2()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup2();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP2_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceInterfaceDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP_H__
+#define __HELLOTRACEINTERFACEDUP_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDupTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDupL(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceInterfaceDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP2_H__
+#define __HELLOTRACEINTERFACEDUP2_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDup2Traces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup2()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP2, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup2() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP2, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDup2L(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP2, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP2,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup2()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP2, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP2, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup2()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP2, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceTypesDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP_H__
+#define __HELLOTRACETYPESDUP_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDupTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/incDup/HelloTraceTypesDup2.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP2_H__
+#define __HELLOTRACETYPESDUP2_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDup2Traces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup2()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup2()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup2()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP2, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP2, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP2_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/src/HelloTraceExample.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceExample.h"
+#include "HelloTraceTypes.h"
+#include "HelloTraceInterface.h"
+#include "HelloTraceFn.h"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceExampleTraces.h"
+#endif
+
+EXPORT_C void HelloTraceExample::JustTypes()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_JUSTTYPES, "*********************************************** " );
+    
+    HelloTraceTypes::SignedIntegers();
+    HelloTraceTypes::UnsignedIntegers();
+    HelloTraceTypes::Descriptors();    
+    }
+
+EXPORT_C void HelloTraceExample::Interface()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_INTERFACE, "*********************************************** " );
+    
+    TVersion version = CHelloTraceInterface::Version();   
+    if (version.iMajor >= 1) 
+        {
+        CHelloTraceInterface* example = CHelloTraceInterface::NewLC();
+        example->AddCharL('H');
+        example->AddCharL('e');
+        example->AddCharL('l');
+        example->AddCharL('l');
+        example->AddCharL('o');
+        example->AddCharL('T');        
+        example->RemoveLast();        
+        example->AddCharL(' ');
+        example->AddCharL('T');
+        example->AddCharL('r');
+        example->AddCharL('a');
+        example->AddCharL('c');
+        example->AddCharL('e');
+        example->AddCharL('!');
+        CleanupStack::PopAndDestroy(example);
+        }
+    else
+        {
+        OstTrace0( TRACE_ERROR, HELLOTRACEEXAMPLE_UNSUPPORTED_VERSION, "Unsupported version!");
+        }
+    }
+
+EXPORT_C void HelloTraceExample::FnEntryExit()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_FNENTRYEXIT, "*********************************************** " );
+       
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    CIdle* idle = CIdle::NewL(CActive::EPriorityIdle);
+    CleanupStack::PushL(idle);
+
+    CHelloTraceFn::StaticOutputsParamsL(1);
+   
+    example->Simple();
+    example->OutputsParams(2, CHelloTraceFn::EExample1);
+    example->OutputsParams(3, CHelloTraceFn::EExample2);
+    example->OutputsSignedIntegers(-4, -5, -6, -7);
+    example->OutputsUnsignedIntegers(8, 9, 10, 11);
+    example->OutputsTIntReturnValue();    
+    example->OutputsTInt64ReturnValue(); 
+    example->OutputsTFnEnumReturnValue();
+    example->OutputsUnknownPtrType(idle);    
+    example->OutputsUnknownRefType(*idle);
+#ifdef _DEBUG
+    example->PreProcessedFn(12);
+#else
+    example->PreProcessedFn();
+#endif
+    example->OutputMissingParams(13, 14, 15);
+
+    CleanupStack::PopAndDestroy(idle);
+    CleanupStack::PopAndDestroy(example);
+    }
+
+EXPORT_C void HelloTraceExample::PanicTrace()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_PANIC, "*********************************************** " );
+
+    Panic(EHelloTraceDllExamplePanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/src/HelloTraceFn.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+ 
+#include <HelloTraceFn.h>
+#include "HelloTraceFnDup.h"
+#include "HelloTraceFnDup2.inl"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnTraces.h"
+#endif
+
+CHelloTraceFn* CHelloTraceFn::NewLC()
+    {
+    CHelloTraceFn* self = new (ELeave) CHelloTraceFn;
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CHelloTraceFn* CHelloTraceFn::NewL()
+    {
+    CHelloTraceFn* self = CHelloTraceFn::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceFn::CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_CTOR, "[0x%08x] Constructor", this );    
+    }
+
+CHelloTraceFn::~CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_DTOR, "[0x%08x] Destructor", this );    
+    }
+
+void CHelloTraceFn::Simple()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsParams(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_EXIT, this );
+    }
+
+void CHelloTraceFn::StaticOutputsParamsL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->Simple();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_EXIT );    
+    }
+
+void CHelloTraceFn::OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_EXIT, this );
+    }
+
+
+TInt CHelloTraceFn::OutputsTIntReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+TInt64 CHelloTraceFn::OutputsTInt64ReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_EXIT, this, ret );
+    return ret;    
+    }
+
+CActive* CHelloTraceFn::OutputsUnknownPtrType(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+CActive& CHelloTraceFn::OutputsUnknownRefType(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+void CHelloTraceFn::OutputMissingParams(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+void CHelloTraceFn::PreProcessedFn()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    Simple();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/src/HelloTraceInterface.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include "HelloTraceInterface.h"
+#include "HelloTraceInterfaceDup.h"
+#include "HelloTraceInterfaceDup2.inl"
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceTraces.h"
+#endif
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewLC()
+    {
+    CHelloTraceInterface* self = new (ELeave) CHelloTraceInterface;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewL()
+    {
+    CHelloTraceInterface* self = CHelloTraceInterface::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceInterface::CHelloTraceInterface()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_CTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+void CHelloTraceInterface::ConstructL()
+    {
+    iString = new (ELeave) THelloTraceDllExampleString;
+    }
+
+EXPORT_C CHelloTraceInterface::~CHelloTraceInterface()
+    {
+    delete iString;
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_DTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+EXPORT_C TVersion CHelloTraceInterface::Version()
+    {
+    const TInt KMajor = 1;
+    const TInt KMinor = 0;
+    const TInt KBuild = 1;
+    TVersion version = TVersion(KMajor, KMinor, KBuild);
+    OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION, "CHelloTraceInterface::Version = %S", version.Name());   
+    return version;
+    }
+
+EXPORT_C const TPtrC CHelloTraceInterface::String() const
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING, 
+                     "[0x%08x] Returned %S", (TUint32) this, *iString);   
+    return *iString;
+    }
+
+EXPORT_C void CHelloTraceInterface::AddCharL(const TChar& aChar)
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL, 
+                  "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+    if (iString->Length() >= KHelloTraceDllBufferLength)
+        {
+        OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR,
+                   "[0x%08x] Not enough space to add character", (TUint32) this);
+        User::Leave( KErrTooBig);
+        }
+    iString->Append(aChar);
+    }
+
+EXPORT_C void CHelloTraceInterface::RemoveLast()
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST, 
+                  "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+    if (iString->Length() > 0)
+        {
+        iString->SetLength(iString->Length() - 1);
+        }
+    else
+        {
+        OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN, "[0x%08x] String already empty", (TUint32) this);   
+        }
+    }
+
+EXPORT_C void CHelloTraceInterface::ResetString()
+    {
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+    if (iString == NULL)
+        {
+        iString = new (ELeave) THelloTraceDllExampleString;
+        }
+    else
+        {
+        iString->SetLength(0);
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/src/HelloTracePanic.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32std.h>		 // GLDEF_C
+
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTracePanicTraces.h"
+#endif
+
+GLDEF_C void Panic(THelloTraceDllPanic aPanic)
+    {
+    OstTrace1( TRACE_FATAL, PANIC, "Panic(%{THelloTraceDllPanic})", (TUint) aPanic );    
+    User::Panic(_L("HelloTraceDll"), aPanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/src/HelloTraceTypes.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include <e32std.h>
+
+#include "HelloTraceTypes.h"
+#include "HelloTraceTypesDup.h"
+#include "HelloTraceTypesDup2.inl"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesTraces.h"
+#endif
+
+void HelloTraceTypes::SignedIntegers()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+void HelloTraceTypes::UnsignedIntegers()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+void HelloTraceTypes::Descriptors()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE, "16 bit descriptor: %S", KUnicode() );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/dll/traces/trace.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<trace_properties>
+<enum name="TFnEnum">
+<value id="0">EExample1</value>
+<value id="2">EExample2</value>
+</enum>
+<enum name="THelloTraceDllPanic">
+<value id="0">EHelloTraceDllExamplePanic</value>
+<value id="1">EHelloTraceDllNullPointer</value>
+</enum>
+<file>../incDup/HelloTraceInterfaceDup.h</file>
+<file>../incDup/HelloTraceInterfaceDup2.inl</file>
+<file>../incDup/HelloTraceFnDup2.inl</file>
+<file>../incDup/HelloTraceTypesDup.h</file>
+<file>../incDup/HelloTraceTypesDup2.inl</file>
+</trace_properties>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_import/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#include "../dll/group/bld.inf"
+#include "../console/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/console/group/HelloTraceConsole.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceConsole.exe
+TARGETTYPE	  exe
+UID			  0 0xE40349E4
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE	   ../inc
+USERINCLUDE    ../../dll/inc
+USERINCLUDE    ../traces
+
+SOURCEPATH	  ../src
+SOURCE		  HelloTraceConsole.cpp
+
+LIBRARY		  euser.lib
+LIBRARY       HelloTraceDll.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/console/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotraceconsole.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotraceconsole.iby)
+
+PRJ_MMPFILES
+HelloTraceConsole.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/console/group/hellotraceconsole.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACECONSOLE_IBY
+#define HELLOTRACECONSOLE_IBY
+
+#include <core\os\hellotracedll.iby>
+
+file=ABI_DIR\BUILD_DIR\hellotraceconsole.exe    Sys\Bin\hellotraceconsole.exe
+
+#endif //HELLOTRACECONSOLE_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/console/inc/HelloTraceConsole.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACECONSOLE_H__
+#define __HELLOTRACECONSOLE_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __HELLOTRACECONSOLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/console/src/HelloTraceConsole.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32cons.h>			// Console
+
+#include "HelloTraceConsole.h"
+#include "HelloTraceExample.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceConsoleTraces.h"
+#endif
+
+
+_LIT(KTextConsoleTitle, "HelloTrace");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+LOCAL_C void DoExamples()
+    {
+    TInt err = KErrNone;
+
+    console->Printf(_L("Before main tracing examples ...\n"));
+
+    console->Printf(_L(" Before type examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::JustTypes());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+
+    console->Printf(_L(" Before Interface examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::Interface());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+    
+    console->Printf(_L(" Before FnEntryExit examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::FnEntryExit());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);    
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    DoExamples();
+    
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    OstTraceFunctionEntry0( E32MAIN_ENTRY );
+    
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, 
+          console = Console::NewL(KTextConsoleTitle, 
+                                  TSize(KConsFullScreen, KConsFullScreen)));    
+    if (createError)
+        {
+        delete cleanup;
+        OstTrace1( TRACE_ERROR, E32MAIN_CREATE_ERROR, "Failed to create console error: %d", createError);
+        OstTraceFunctionExit0( E32MAIN_EXIT_ERR );
+        return createError;
+        }
+
+    TRAPD(mainError, DoStartL());    
+    if (mainError)
+        {
+        OstTrace1( TRACE_ERROR, E32MAIN_START_ERROR, "DoStartL failed with error: %d", mainError);
+        console->Printf(_L("DoStartL failed with error: %d\n\n"), mainError);
+        }
+    else 
+        {
+        console->Printf(_L("Before panic tracing example ..."));
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+    
+        OstTrace0( TRACE_FLOW, E32MAIN_BEFORE_PANIC, "About to cause a panic ..." );
+        HelloTraceExample::PanicTrace();
+        
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+        }
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    
+    OstTraceFunctionExit0( E32MAIN_EXIT );
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/bwins/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,14 @@
+EXPORTS
+	?Version@CHelloTraceInterface@@SA?AVTVersion@@XZ @ 1 NONAME ; class TVersion CHelloTraceInterface::Version(void)
+	?NewLC@CHelloTraceInterface@@SAPAV1@XZ @ 2 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewLC(void)
+	?JustTypes@HelloTraceExample@@SAXXZ @ 3 NONAME ; void HelloTraceExample::JustTypes(void)
+	?Interface@HelloTraceExample@@SAXXZ @ 4 NONAME ; void HelloTraceExample::Interface(void)
+	?FnEntryExit@HelloTraceExample@@SAXXZ @ 5 NONAME ; void HelloTraceExample::FnEntryExit(void)
+	?ResetString@CHelloTraceInterface@@QAEXXZ @ 6 NONAME ; void CHelloTraceInterface::ResetString(void)
+	?AddCharL@CHelloTraceInterface@@QAEXABVTChar@@@Z @ 7 NONAME ; void CHelloTraceInterface::AddCharL(class TChar const &)
+	?PanicTrace@HelloTraceExample@@SAXXZ @ 8 NONAME ; void HelloTraceExample::PanicTrace(void)
+	??1CHelloTraceInterface@@UAE@XZ @ 9 NONAME ; CHelloTraceInterface::~CHelloTraceInterface(void)
+	?String@CHelloTraceInterface@@QBE?BVTPtrC16@@XZ @ 10 NONAME ; class TPtrC16 const CHelloTraceInterface::String(void) const
+	?RemoveLast@CHelloTraceInterface@@QAEXXZ @ 11 NONAME ; void CHelloTraceInterface::RemoveLast(void)
+	?NewL@CHelloTraceInterface@@SAPAV1@XZ @ 12 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/eabi/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,20 @@
+EXPORTS
+	_ZN17HelloTraceExample10PanicTraceEv @ 1 NONAME
+	_ZN17HelloTraceExample11FnEntryExitEv @ 2 NONAME
+	_ZN17HelloTraceExample9InterfaceEv @ 3 NONAME
+	_ZN17HelloTraceExample9JustTypesEv @ 4 NONAME
+	_ZN20CHelloTraceInterface10RemoveLastEv @ 5 NONAME
+	_ZN20CHelloTraceInterface11ResetStringEv @ 6 NONAME
+	_ZN20CHelloTraceInterface4NewLEv @ 7 NONAME
+	_ZN20CHelloTraceInterface5NewLCEv @ 8 NONAME
+	_ZN20CHelloTraceInterface7VersionEv @ 9 NONAME
+	_ZN20CHelloTraceInterface8AddCharLERK5TChar @ 10 NONAME
+	_ZN20CHelloTraceInterfaceD0Ev @ 11 NONAME
+	_ZN20CHelloTraceInterfaceD1Ev @ 12 NONAME
+	_ZN20CHelloTraceInterfaceD2Ev @ 13 NONAME
+	_ZNK20CHelloTraceInterface6StringEv @ 14 NONAME
+	_ZTI13CHelloTraceFn @ 15 NONAME
+	_ZTI20CHelloTraceInterface @ 16 NONAME
+	_ZTV13CHelloTraceFn @ 17 NONAME
+	_ZTV20CHelloTraceInterface @ 18 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/group/HelloTraceDll.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceDll.dll
+TARGETTYPE	  dll
+UID			  0x1000008d 0xE43DF43E
+CAPABILITY    ReadUserData
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE  ../inc ../incDup
+USERINCLUDE  ../traces
+
+SOURCEPATH	 ../src
+SOURCE       HelloTraceExample.cpp 
+SOURCE       HelloTraceTypes.cpp
+SOURCE       HelloTraceInterface.cpp 
+SOURCE       HelloTraceFn.cpp 
+SOURCE       HelloTracePanic.cpp 
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotracedll.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotracedll.iby)
+
+PRJ_MMPFILES
+HelloTraceDll.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/group/hellotracedll.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACEDLL_IBY
+#define HELLOTRACEDLL_IBY
+
+file=ABI_DIR\BUILD_DIR\hellotracedll.dll        Sys\Bin\hellotracedll.dll
+
+#endif //HELLOTRACEDLL_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/inc/HelloTraceExample.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEEXAMPLE_H__
+#define __HELLOTRACEEXAMPLE_H__
+
+#include <e32std.h>
+
+class HelloTraceExample
+    {
+public:
+    IMPORT_C static void JustTypes();    
+    IMPORT_C static void Interface();    
+    IMPORT_C static void FnEntryExit();    
+    IMPORT_C static void PanicTrace();    
+
+    // @TODO add examples for state macros
+    // @TODO add examples for event macros
+    // @TODO add examples for OstTraceData
+    // @TODO add compile-time selector examples
+    // @TODO add macro wrapper examples
+    };
+
+#endif  // __HELLOTRACEEXAMPLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/inc/HelloTraceFn.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFN_H_
+#define HELLOTRACEFN_H_
+
+#include <e32base.h>    // CBase
+
+class CHelloTraceFn : public CBase
+    {
+public:
+    
+    // Note the Trace Builder will only parse this if it's in a cpp file
+    // but not from here :(
+    // Also if you add a new enum you need to reparse the enum - it doesn't
+    // get automatically reparsed by the Trace Compiler :(
+    enum TFnEnum
+        {
+        EExample1,
+        EExample2 = 2, 
+        // EExample3 = EExample2 + 1, // The Trace Builder can't parse this :(
+        };
+    
+public:
+    static CHelloTraceFn* NewL();
+    static CHelloTraceFn* NewLC();
+    ~CHelloTraceFn();
+   
+public: // Fn entry / exit tracing examples 
+    void Simple();
+    void OutputsParams(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValue();
+    TInt64 OutputsTInt64ReturnValue();
+    TFnEnum OutputsTFnEnumReturnValue();
+
+    CActive* OutputsUnknownPtrType(CActive* aActive);
+    CActive& OutputsUnknownRefType(CActive& aActive);
+    
+    void OutputMissingParams(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFn(TInt aDbgParam);
+#else
+    void PreProcessedFn();
+#endif
+    
+    static void StaticOutputsParamsL(TInt aParam);  
+    
+    // duplicate all the function and put the impl in the header file HelloTraceFnDup.h
+    void SimpleDup();
+    void OutputsParamsDup(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup();
+    TInt64 OutputsTInt64ReturnValueDup();
+    TFnEnum OutputsTFnEnumReturnValueDup();
+
+    CActive* OutputsUnknownPtrTypeDup(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup(CActive& aActive);
+    
+    void OutputMissingParamsDup(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup(TInt aDbgParam);
+#else
+    void PreProcessedFnDup();
+#endif
+    static void StaticOutputsParamsDupL(TInt aParam);  
+    
+    // duplicate all the function again and put the impl in the header file HelloTraceFnDup2.h
+    void SimpleDup2();
+    void OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup2();
+    TInt64 OutputsTInt64ReturnValueDup2();
+    TFnEnum OutputsTFnEnumReturnValueDup2();
+
+    CActive* OutputsUnknownPtrTypeDup2(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup2(CActive& aActive);
+    
+    void OutputMissingParamsDup2(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup2(TInt aDbgParam);
+#else
+    void PreProcessedFnDup2();
+#endif
+    static void StaticOutputsParamsDup2L(TInt aParam);  
+
+
+private:
+    CHelloTraceFn();
+    };
+
+#endif /* HELLOTRACEFN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/inc/HelloTraceInterface.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE_H__
+#define __HELLOTRACEINTERFACE_H__
+
+#include <e32base.h>	// CBase
+#include <e32std.h>	 // TBuf
+
+const TInt KHelloTraceDllBufferLength = 10;
+typedef TBuf<KHelloTraceDllBufferLength> THelloTraceDllExampleString;
+
+class CHelloTraceInterface : public CBase
+    {
+public:
+    IMPORT_C static CHelloTraceInterface* NewL();
+    IMPORT_C static CHelloTraceInterface* NewLC();
+    IMPORT_C ~CHelloTraceInterface();
+
+public:
+    IMPORT_C static TVersion Version();
+    IMPORT_C const TPtrC String() const;
+    IMPORT_C void AddCharL(const TChar& aChar);
+    IMPORT_C void RemoveLast();
+    IMPORT_C void ResetString();
+    
+    IMPORT_C static TVersion VersionDup();
+    IMPORT_C const TPtrC StringDup() const;
+    IMPORT_C void AddCharDupL(const TChar& aChar);
+    IMPORT_C void RemoveLastDup();
+    IMPORT_C void ResetStringDup();
+
+    IMPORT_C static TVersion VersionDup2();
+    IMPORT_C const TPtrC StringDup2() const;
+    IMPORT_C void AddCharDup2L(const TChar& aChar);
+    IMPORT_C void RemoveLastDup2();
+    IMPORT_C void ResetStringDup2();
+private:
+    CHelloTraceInterface();
+    void ConstructL();
+
+private:
+    // data
+    THelloTraceDllExampleString* iString;
+    };
+
+#endif  // __HELLOTRACEINTERFACE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/inc/HelloTracePanic.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEDLL_PAN__
+#define __HELLOTRACEDLL_PAN__
+
+//  Data Types
+
+enum THelloTraceDllPanic
+    {
+    EHelloTraceDllExamplePanic,
+    EHelloTraceDllNullPointer,
+    };
+
+//  Function Prototypes
+
+GLREF_C void Panic(THelloTraceDllPanic aPanic);
+
+#endif  // __HELLOTRACEDLL_PAN__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/inc/HelloTraceTypes.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES_H__
+#define __HELLOTRACETYPES_H__
+
+class HelloTraceTypes
+    {
+public:
+    static void SignedIntegers();
+    static void UnsignedIntegers();
+    static void Descriptors();
+    
+    static void SignedIntegersDup();
+    static void UnsignedIntegersDup();
+    static void DescriptorsDup();
+        
+    static void SignedIntegersDup2();
+    static void UnsignedIntegersDup2();
+    static void DescriptorsDup2();
+    };
+
+#endif  // __HELLOTRACETYPES_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceFn.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNINL_H_
+#define HELLOTRACEFNINL_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDup2L(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup2();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup2(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup2(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup2(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup2(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup2()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup2();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNINL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceFnDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP_H_
+#define HELLOTRACEFNDUP_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDupTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDupL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceInterface.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEINL_H__
+#define __HELLOTRACEINTERFACEINL_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup2()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP2, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup2() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP2, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDup2L(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP2, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP2,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup2()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP2, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP2, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup2()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP2, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEINL_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceInterfaceDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP_H__
+#define __HELLOTRACEINTERFACEDUP_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDupTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDupL(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceTypes.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESINL_H__
+#define __HELLOTRACETYPESINL_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup2()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup2()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup2()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP2, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP2, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESINL_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/incDup/HelloTraceTypesDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP_H__
+#define __HELLOTRACETYPESDUP_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDupTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/src/HelloTraceExample.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceExample.h"
+#include "HelloTraceTypes.h"
+#include "HelloTraceInterface.h"
+#include "HelloTraceFn.h"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceExampleTraces.h"
+#endif
+
+EXPORT_C void HelloTraceExample::JustTypes()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_JUSTTYPES, "*********************************************** " );
+    
+    HelloTraceTypes::SignedIntegers();
+    HelloTraceTypes::UnsignedIntegers();
+    HelloTraceTypes::Descriptors();    
+    }
+
+EXPORT_C void HelloTraceExample::Interface()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_INTERFACE, "*********************************************** " );
+    
+    TVersion version = CHelloTraceInterface::Version();   
+    if (version.iMajor >= 1) 
+        {
+        CHelloTraceInterface* example = CHelloTraceInterface::NewLC();
+        example->AddCharL('H');
+        example->AddCharL('e');
+        example->AddCharL('l');
+        example->AddCharL('l');
+        example->AddCharL('o');
+        example->AddCharL('T');        
+        example->RemoveLast();        
+        example->AddCharL(' ');
+        example->AddCharL('T');
+        example->AddCharL('r');
+        example->AddCharL('a');
+        example->AddCharL('c');
+        example->AddCharL('e');
+        example->AddCharL('!');
+        CleanupStack::PopAndDestroy(example);
+        }
+    else
+        {
+        OstTrace0( TRACE_ERROR, HELLOTRACEEXAMPLE_UNSUPPORTED_VERSION, "Unsupported version!");
+        }
+    }
+
+EXPORT_C void HelloTraceExample::FnEntryExit()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_FNENTRYEXIT, "*********************************************** " );
+       
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    CIdle* idle = CIdle::NewL(CActive::EPriorityIdle);
+    CleanupStack::PushL(idle);
+
+    CHelloTraceFn::StaticOutputsParamsL(1);
+   
+    example->Simple();
+    example->OutputsParams(2, CHelloTraceFn::EExample1);
+    example->OutputsParams(3, CHelloTraceFn::EExample2);
+    example->OutputsSignedIntegers(-4, -5, -6, -7);
+    example->OutputsUnsignedIntegers(8, 9, 10, 11);
+    example->OutputsTIntReturnValue();    
+    example->OutputsTInt64ReturnValue(); 
+    example->OutputsTFnEnumReturnValue();
+    example->OutputsUnknownPtrType(idle);    
+    example->OutputsUnknownRefType(*idle);
+#ifdef _DEBUG
+    example->PreProcessedFn(12);
+#else
+    example->PreProcessedFn();
+#endif
+    example->OutputMissingParams(13, 14, 15);
+
+    CleanupStack::PopAndDestroy(idle);
+    CleanupStack::PopAndDestroy(example);
+    }
+
+EXPORT_C void HelloTraceExample::PanicTrace()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_PANIC, "*********************************************** " );
+
+    Panic(EHelloTraceDllExamplePanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/src/HelloTraceFn.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+ 
+#include "HelloTraceFn.h"
+#include "HelloTraceFnDup.h"
+#include "HelloTraceFn.inl"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnTraces.h"
+#endif
+
+CHelloTraceFn* CHelloTraceFn::NewLC()
+    {
+    CHelloTraceFn* self = new (ELeave) CHelloTraceFn;
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CHelloTraceFn* CHelloTraceFn::NewL()
+    {
+    CHelloTraceFn* self = CHelloTraceFn::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceFn::CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_CTOR, "[0x%08x] Constructor", this );    
+    }
+
+CHelloTraceFn::~CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_DTOR, "[0x%08x] Destructor", this );    
+    }
+
+void CHelloTraceFn::Simple()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsParams(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_EXIT, this );
+    }
+
+void CHelloTraceFn::StaticOutputsParamsL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->Simple();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_EXIT );    
+    }
+
+void CHelloTraceFn::OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_EXIT, this );
+    }
+
+
+TInt CHelloTraceFn::OutputsTIntReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+TInt64 CHelloTraceFn::OutputsTInt64ReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_EXIT, this, ret );
+    return ret;    
+    }
+
+CActive* CHelloTraceFn::OutputsUnknownPtrType(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+CActive& CHelloTraceFn::OutputsUnknownRefType(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+void CHelloTraceFn::OutputMissingParams(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+void CHelloTraceFn::PreProcessedFn()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    Simple();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/src/HelloTraceInterface.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceInterface.h"
+#include "HelloTraceInterfaceDup.h"
+#include "HelloTraceInterface.inl"
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceTraces.h"
+#endif
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewLC()
+    {
+    CHelloTraceInterface* self = new (ELeave) CHelloTraceInterface;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewL()
+    {
+    CHelloTraceInterface* self = CHelloTraceInterface::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceInterface::CHelloTraceInterface()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_CTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+void CHelloTraceInterface::ConstructL()
+    {
+    iString = new (ELeave) THelloTraceDllExampleString;
+    }
+
+EXPORT_C CHelloTraceInterface::~CHelloTraceInterface()
+    {
+    delete iString;
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_DTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+EXPORT_C TVersion CHelloTraceInterface::Version()
+    {
+    const TInt KMajor = 1;
+    const TInt KMinor = 0;
+    const TInt KBuild = 1;
+    TVersion version = TVersion(KMajor, KMinor, KBuild);
+    OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION, "CHelloTraceInterface::Version = %S", version.Name());   
+    return version;
+    }
+
+EXPORT_C const TPtrC CHelloTraceInterface::String() const
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING, 
+                     "[0x%08x] Returned %S", (TUint32) this, *iString);   
+    return *iString;
+    }
+
+EXPORT_C void CHelloTraceInterface::AddCharL(const TChar& aChar)
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL, 
+                  "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+    if (iString->Length() >= KHelloTraceDllBufferLength)
+        {
+        OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR,
+                   "[0x%08x] Not enough space to add character", (TUint32) this);
+        User::Leave( KErrTooBig);
+        }
+    iString->Append(aChar);
+    }
+
+EXPORT_C void CHelloTraceInterface::RemoveLast()
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST, 
+                  "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+    if (iString->Length() > 0)
+        {
+        iString->SetLength(iString->Length() - 1);
+        }
+    else
+        {
+        OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN, "[0x%08x] String already empty", (TUint32) this);   
+        }
+    }
+
+EXPORT_C void CHelloTraceInterface::ResetString()
+    {
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+    if (iString == NULL)
+        {
+        iString = new (ELeave) THelloTraceDllExampleString;
+        }
+    else
+        {
+        iString->SetLength(0);
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/src/HelloTracePanic.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32std.h>		 // GLDEF_C
+
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTracePanicTraces.h"
+#endif
+
+GLDEF_C void Panic(THelloTraceDllPanic aPanic)
+    {
+    OstTrace1( TRACE_FATAL, PANIC, "Panic(%{THelloTraceDllPanic})", (TUint) aPanic );    
+    User::Panic(_L("HelloTraceDll"), aPanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/src/HelloTraceTypes.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include <e32std.h>
+
+#include "HelloTraceTypes.h"
+#include "HelloTraceTypesDup.h"
+#include "HelloTraceTypes.inl"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesTraces.h"
+#endif
+
+void HelloTraceTypes::SignedIntegers()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+void HelloTraceTypes::UnsignedIntegers()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+void HelloTraceTypes::Descriptors()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE, "16 bit descriptor: %S", KUnicode() );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/dll/traces/trace.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<trace_properties>
+<enum name="TFnEnum">
+<value id="0">EExample1</value>
+<value id="2">EExample2</value>
+</enum>
+<enum name="THelloTraceDllPanic">
+<value id="0">EHelloTraceDllExamplePanic</value>
+<value id="1">EHelloTraceDllNullPointer</value>
+</enum>
+<file>../incDup/HelloTraceInterfaceDup.h</file>
+<file>../incDup/HelloTraceInterface.inl</file>
+<file>../incDup/HelloTraceFnDup.h</file>
+<file>../incDup/HelloTraceFn.inl</file>
+<file>../incDup/HelloTraceTypesDup.h</file>
+<file>../incDup/HelloTraceTypes.inl</file>
+</trace_properties>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#include "../dll/group/bld.inf"
+#include "../console/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/console/group/HelloTraceConsole.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceConsole.exe
+TARGETTYPE	  exe
+UID			  0 0xE40349E4
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE	   ../inc
+USERINCLUDE    ../../dll/inc
+USERINCLUDE    ../traces
+
+SOURCEPATH	  ../src
+SOURCE		  HelloTraceConsole.cpp
+
+LIBRARY		  euser.lib
+LIBRARY       HelloTraceDll.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/console/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotraceconsole.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotraceconsole.iby)
+
+PRJ_MMPFILES
+HelloTraceConsole.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/console/group/hellotraceconsole.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACECONSOLE_IBY
+#define HELLOTRACECONSOLE_IBY
+
+#include <core\os\hellotracedll.iby>
+
+file=ABI_DIR\BUILD_DIR\hellotraceconsole.exe    Sys\Bin\hellotraceconsole.exe
+
+#endif //HELLOTRACECONSOLE_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/console/inc/HelloTraceConsole.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACECONSOLE_H__
+#define __HELLOTRACECONSOLE_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __HELLOTRACECONSOLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/console/src/HelloTraceConsole.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32cons.h>			// Console
+
+#include "HelloTraceConsole.h"
+#include "HelloTraceExample.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceConsoleTraces.h"
+#endif
+
+
+_LIT(KTextConsoleTitle, "HelloTrace");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+LOCAL_C void DoExamples()
+    {
+    TInt err = KErrNone;
+
+    console->Printf(_L("Before main tracing examples ...\n"));
+
+    console->Printf(_L(" Before type examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::JustTypes());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+
+    console->Printf(_L(" Before Interface examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::Interface());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);
+    
+    console->Printf(_L(" Before FnEntryExit examples ..."));
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    TRAP(err, HelloTraceExample::FnEntryExit());    
+    if (err)
+        console->Printf(_L(" Failed with error %d\n"), err);    
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    DoExamples();
+    
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    OstTraceFunctionEntry0( E32MAIN_ENTRY );
+    
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, 
+          console = Console::NewL(KTextConsoleTitle, 
+                                  TSize(KConsFullScreen, KConsFullScreen)));    
+    if (createError)
+        {
+        delete cleanup;
+        OstTrace1( TRACE_ERROR, E32MAIN_CREATE_ERROR, "Failed to create console error: %d", createError);
+        OstTraceFunctionExit0( E32MAIN_EXIT_ERR );
+        return createError;
+        }
+
+    TRAPD(mainError, DoStartL());    
+    if (mainError)
+        {
+        OstTrace1( TRACE_ERROR, E32MAIN_START_ERROR, "DoStartL failed with error: %d", mainError);
+        console->Printf(_L("DoStartL failed with error: %d\n\n"), mainError);
+        }
+    else 
+        {
+        console->Printf(_L("Before panic tracing example ..."));
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+    
+        OstTrace0( TRACE_FLOW, E32MAIN_BEFORE_PANIC, "About to cause a panic ..." );
+        HelloTraceExample::PanicTrace();
+        
+        console->Printf(KTextPressAnyKey);
+        console->Getch();
+        }
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    
+    OstTraceFunctionExit0( E32MAIN_EXIT );
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/bwins/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,14 @@
+EXPORTS
+	?Version@CHelloTraceInterface@@SA?AVTVersion@@XZ @ 1 NONAME ; class TVersion CHelloTraceInterface::Version(void)
+	?NewLC@CHelloTraceInterface@@SAPAV1@XZ @ 2 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewLC(void)
+	?JustTypes@HelloTraceExample@@SAXXZ @ 3 NONAME ; void HelloTraceExample::JustTypes(void)
+	?Interface@HelloTraceExample@@SAXXZ @ 4 NONAME ; void HelloTraceExample::Interface(void)
+	?FnEntryExit@HelloTraceExample@@SAXXZ @ 5 NONAME ; void HelloTraceExample::FnEntryExit(void)
+	?ResetString@CHelloTraceInterface@@QAEXXZ @ 6 NONAME ; void CHelloTraceInterface::ResetString(void)
+	?AddCharL@CHelloTraceInterface@@QAEXABVTChar@@@Z @ 7 NONAME ; void CHelloTraceInterface::AddCharL(class TChar const &)
+	?PanicTrace@HelloTraceExample@@SAXXZ @ 8 NONAME ; void HelloTraceExample::PanicTrace(void)
+	??1CHelloTraceInterface@@UAE@XZ @ 9 NONAME ; CHelloTraceInterface::~CHelloTraceInterface(void)
+	?String@CHelloTraceInterface@@QBE?BVTPtrC16@@XZ @ 10 NONAME ; class TPtrC16 const CHelloTraceInterface::String(void) const
+	?RemoveLast@CHelloTraceInterface@@QAEXXZ @ 11 NONAME ; void CHelloTraceInterface::RemoveLast(void)
+	?NewL@CHelloTraceInterface@@SAPAV1@XZ @ 12 NONAME ; class CHelloTraceInterface * CHelloTraceInterface::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/eabi/HelloTraceDllu.def	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,20 @@
+EXPORTS
+	_ZN17HelloTraceExample10PanicTraceEv @ 1 NONAME
+	_ZN17HelloTraceExample11FnEntryExitEv @ 2 NONAME
+	_ZN17HelloTraceExample9InterfaceEv @ 3 NONAME
+	_ZN17HelloTraceExample9JustTypesEv @ 4 NONAME
+	_ZN20CHelloTraceInterface10RemoveLastEv @ 5 NONAME
+	_ZN20CHelloTraceInterface11ResetStringEv @ 6 NONAME
+	_ZN20CHelloTraceInterface4NewLEv @ 7 NONAME
+	_ZN20CHelloTraceInterface5NewLCEv @ 8 NONAME
+	_ZN20CHelloTraceInterface7VersionEv @ 9 NONAME
+	_ZN20CHelloTraceInterface8AddCharLERK5TChar @ 10 NONAME
+	_ZN20CHelloTraceInterfaceD0Ev @ 11 NONAME
+	_ZN20CHelloTraceInterfaceD1Ev @ 12 NONAME
+	_ZN20CHelloTraceInterfaceD2Ev @ 13 NONAME
+	_ZNK20CHelloTraceInterface6StringEv @ 14 NONAME
+	_ZTI13CHelloTraceFn @ 15 NONAME
+	_ZTI20CHelloTraceInterface @ 16 NONAME
+	_ZTV13CHelloTraceFn @ 17 NONAME
+	_ZTV20CHelloTraceInterface @ 18 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/group/HelloTraceDll.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  HelloTraceDll.dll
+TARGETTYPE	  dll
+UID			  0x1000008d 0xE43DF43E
+CAPABILITY    ReadUserData
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE  ../inc ../incDup
+USERINCLUDE  ../traces/HelloTraceDll_dll
+
+SOURCEPATH	 ../src
+SOURCE       HelloTraceExample.cpp 
+SOURCE       HelloTraceTypes.cpp
+SOURCE       HelloTraceInterface.cpp 
+SOURCE       HelloTraceFn.cpp 
+SOURCE       HelloTracePanic.cpp 
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+hellotracedll.iby             CORE_OS_LAYER_IBY_EXPORT_PATH(hellotracedll.iby)
+
+PRJ_MMPFILES
+HelloTraceDll.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/group/hellotracedll.iby	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2007-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:
+// ROM build file for tracecore project
+
+#ifndef HELLOTRACEDLL_IBY
+#define HELLOTRACEDLL_IBY
+
+file=ABI_DIR\BUILD_DIR\hellotracedll.dll        Sys\Bin\hellotracedll.dll
+
+#endif //HELLOTRACEDLL_IBY
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/inc/HelloTraceExample.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEEXAMPLE_H__
+#define __HELLOTRACEEXAMPLE_H__
+
+#include <e32std.h>
+
+class HelloTraceExample
+    {
+public:
+    IMPORT_C static void JustTypes();    
+    IMPORT_C static void Interface();    
+    IMPORT_C static void FnEntryExit();    
+    IMPORT_C static void PanicTrace();    
+
+    // @TODO add examples for state macros
+    // @TODO add examples for event macros
+    // @TODO add examples for OstTraceData
+    // @TODO add compile-time selector examples
+    // @TODO add macro wrapper examples
+    };
+
+#endif  // __HELLOTRACEEXAMPLE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/inc/HelloTraceFn.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFN_H_
+#define HELLOTRACEFN_H_
+
+#include <e32base.h>    // CBase
+
+class CHelloTraceFn : public CBase
+    {
+public:
+    
+    // Note the Trace Builder will only parse this if it's in a cpp file
+    // but not from here :(
+    // Also if you add a new enum you need to reparse the enum - it doesn't
+    // get automatically reparsed by the Trace Compiler :(
+    enum TFnEnum
+        {
+        EExample1,
+        EExample2 = 2, 
+        // EExample3 = EExample2 + 1, // The Trace Builder can't parse this :(
+        };
+    
+public:
+    static CHelloTraceFn* NewL();
+    static CHelloTraceFn* NewLC();
+    ~CHelloTraceFn();
+   
+public: // Fn entry / exit tracing examples 
+    void Simple();
+    void OutputsParams(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValue();
+    TInt64 OutputsTInt64ReturnValue();
+    TFnEnum OutputsTFnEnumReturnValue();
+
+    CActive* OutputsUnknownPtrType(CActive* aActive);
+    CActive& OutputsUnknownRefType(CActive& aActive);
+    
+    void OutputMissingParams(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFn(TInt aDbgParam);
+#else
+    void PreProcessedFn();
+#endif
+    
+    static void StaticOutputsParamsL(TInt aParam);  
+    
+    // duplicate all the function and put the impl in the header file HelloTraceFnDup.h
+    void SimpleDup();
+    void OutputsParamsDup(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup();
+    TInt64 OutputsTInt64ReturnValueDup();
+    TFnEnum OutputsTFnEnumReturnValueDup();
+
+    CActive* OutputsUnknownPtrTypeDup(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup(CActive& aActive);
+    
+    void OutputMissingParamsDup(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup(TInt aDbgParam);
+#else
+    void PreProcessedFnDup();
+#endif
+    static void StaticOutputsParamsDupL(TInt aParam);  
+    
+    // duplicate all the function again and put the impl in the header file HelloTraceFnDup2.h
+    void SimpleDup2();
+    void OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam);
+    void OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                               TInt32 aParam32, TInt64 aParam64);
+    void OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                 TUint32 aParam32, TUint64 aParam64);
+     
+    TInt OutputsTIntReturnValueDup2();
+    TInt64 OutputsTInt64ReturnValueDup2();
+    TFnEnum OutputsTFnEnumReturnValueDup2();
+
+    CActive* OutputsUnknownPtrTypeDup2(CActive* aActive);
+    CActive& OutputsUnknownRefTypeDup2(CActive& aActive);
+    
+    void OutputMissingParamsDup2(TInt aUsedParam, TInt aCommentParam, TInt aMissingParam);
+
+#ifdef _DEBUG    
+    void PreProcessedFnDup2(TInt aDbgParam);
+#else
+    void PreProcessedFnDup2();
+#endif
+    static void StaticOutputsParamsDup2L(TInt aParam);  
+
+
+private:
+    CHelloTraceFn();
+    };
+
+#endif /* HELLOTRACEFN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/inc/HelloTraceInterface.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACE_H__
+#define __HELLOTRACEINTERFACE_H__
+
+#include <e32base.h>	// CBase
+#include <e32std.h>	 // TBuf
+
+const TInt KHelloTraceDllBufferLength = 10;
+typedef TBuf<KHelloTraceDllBufferLength> THelloTraceDllExampleString;
+
+class CHelloTraceInterface : public CBase
+    {
+public:
+    IMPORT_C static CHelloTraceInterface* NewL();
+    IMPORT_C static CHelloTraceInterface* NewLC();
+    IMPORT_C ~CHelloTraceInterface();
+
+public:
+    IMPORT_C static TVersion Version();
+    IMPORT_C const TPtrC String() const;
+    IMPORT_C void AddCharL(const TChar& aChar);
+    IMPORT_C void RemoveLast();
+    IMPORT_C void ResetString();
+    
+    IMPORT_C static TVersion VersionDup();
+    IMPORT_C const TPtrC StringDup() const;
+    IMPORT_C void AddCharDupL(const TChar& aChar);
+    IMPORT_C void RemoveLastDup();
+    IMPORT_C void ResetStringDup();
+
+    IMPORT_C static TVersion VersionDup2();
+    IMPORT_C const TPtrC StringDup2() const;
+    IMPORT_C void AddCharDup2L(const TChar& aChar);
+    IMPORT_C void RemoveLastDup2();
+    IMPORT_C void ResetStringDup2();
+private:
+    CHelloTraceInterface();
+    void ConstructL();
+
+private:
+    // data
+    THelloTraceDllExampleString* iString;
+    };
+
+#endif  // __HELLOTRACEINTERFACE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/inc/HelloTracePanic.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEDLL_PAN__
+#define __HELLOTRACEDLL_PAN__
+
+//  Data Types
+
+enum THelloTraceDllPanic
+    {
+    EHelloTraceDllExamplePanic,
+    EHelloTraceDllNullPointer,
+    };
+
+//  Function Prototypes
+
+GLREF_C void Panic(THelloTraceDllPanic aPanic);
+
+#endif  // __HELLOTRACEDLL_PAN__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/inc/HelloTraceTypes.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPES_H__
+#define __HELLOTRACETYPES_H__
+
+class HelloTraceTypes
+    {
+public:
+    static void SignedIntegers();
+    static void UnsignedIntegers();
+    static void Descriptors();
+    
+    static void SignedIntegersDup();
+    static void UnsignedIntegersDup();
+    static void DescriptorsDup();
+        
+    static void SignedIntegersDup2();
+    static void UnsignedIntegersDup2();
+    static void DescriptorsDup2();
+    };
+
+#endif  // __HELLOTRACETYPES_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceFn.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNINL_H_
+#define HELLOTRACEFNINL_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup2(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDup2L(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup2();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP2_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup2(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsUnsignedIntegersDup2(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP2_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup2()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP2_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup2(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP2_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup2(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP2_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup2(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP2_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup2(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup2()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup2();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP2_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNINL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceFnDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef HELLOTRACEFNDUP_H_
+#define HELLOTRACEFNDUP_H_
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnDupTraces.h"
+#endif
+
+inline void CHelloTraceFn::SimpleDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::OutputsParamsDup(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_DUP_EXIT, this );
+    }
+
+inline void CHelloTraceFn::StaticOutputsParamsDupL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->SimpleDup();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_DUP_EXIT );    
+    }
+
+inline void CHelloTraceFn::OutputsSignedIntegersDup(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegersDup(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_DUP_EXIT, this );
+    }
+
+
+inline TInt CHelloTraceFn::OutputsTIntReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline TInt64 CHelloTraceFn::OutputsTInt64ReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_DUP_EXIT, this, ret );
+    return ret;
+    }
+
+inline CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValueDup()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_DUP_EXIT, this, ret );
+    return ret;    
+    }
+
+inline CActive* CHelloTraceFn::OutputsUnknownPtrTypeDup(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_DUP_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+inline CActive& CHelloTraceFn::OutputsUnknownRefTypeDup(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_DUP_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+inline void CHelloTraceFn::OutputMissingParamsDup(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_DUP_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+inline void CHelloTraceFn::PreProcessedFnDup(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+    inline void CHelloTraceFn::PreProcessedFnDup()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    SimpleDup();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_DUP_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
+#endif /* HELLOTRACEFNDUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceInterface.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEINL_H__
+#define __HELLOTRACEINTERFACEINL_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup2()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP2, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup2() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP2, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDup2L(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP2, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP2,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup2()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP2, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP2, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup2()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP2, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEINL_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceInterfaceDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACEINTERFACEDUP_H__
+#define __HELLOTRACEINTERFACEDUP_H__
+
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceDupTraces.h"
+#endif
+
+ inline EXPORT_C TVersion CHelloTraceInterface::VersionDup()
+        {
+        const TInt KMajor = 1;
+        const TInt KMinor = 0;
+        const TInt KBuild = 1;
+        TVersion version = TVersion(KMajor, KMinor, KBuild);
+        OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION_DUP, "CHelloTraceInterface::Version = %S", version.Name());   
+        return version;
+        }
+
+ inline EXPORT_C const TPtrC CHelloTraceInterface::StringDup() const
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING_DUP, 
+                         "[0x%08x] Returned %S", (TUint32) this, *iString);   
+        return *iString;
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::AddCharDupL(const TChar& aChar)
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL_DUP, 
+                      "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+        if (iString->Length() >= KHelloTraceDllBufferLength)
+            {
+            OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR_DUP,
+                       "[0x%08x] Not enough space to add character", (TUint32) this);
+            User::Leave( KErrTooBig);
+            }
+        iString->Append(aChar);
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::RemoveLastDup()
+        {
+        __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST_DUP, 
+                      "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+        if (iString->Length() > 0)
+            {
+            iString->SetLength(iString->Length() - 1);
+            }
+        else
+            {
+            OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN_DUP, "[0x%08x] String already empty", (TUint32) this);   
+            }
+        }
+
+ inline EXPORT_C void CHelloTraceInterface::ResetStringDup()
+        {
+        OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING_DUP, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+        if (iString == NULL)
+            {
+            iString = new (ELeave) THelloTraceDllExampleString;
+            }
+        else
+            {
+            iString->SetLength(0);
+            }
+        }
+#endif  // __HELLOTRACEINTERFACEDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceTypes.inl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESINL_H__
+#define __HELLOTRACETYPESINL_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup2()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP2_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup2()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP2_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup2()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP2, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP2, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESINL_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/incDup/HelloTraceTypesDup.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __HELLOTRACETYPESDUP_H__
+#define __HELLOTRACETYPESDUP_H__
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesDupTraces.h"
+#endif
+
+inline void HelloTraceTypes::SignedIntegersDup()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERSDUP_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::UnsignedIntegersDup()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERSDUP_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+inline void HelloTraceTypes::DescriptorsDup()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCIIDUP, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODEDUP, "16 bit descriptor: %S", KUnicode() );
+    }
+
+#endif  // __HELLOTRACETYPESDUP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/src/HelloTraceExample.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceExample.h"
+#include "HelloTraceTypes.h"
+#include "HelloTraceInterface.h"
+#include "HelloTraceFn.h"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceExampleTraces.h"
+#endif
+
+EXPORT_C void HelloTraceExample::JustTypes()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_JUSTTYPES, "*********************************************** " );
+    
+    HelloTraceTypes::SignedIntegers();
+    HelloTraceTypes::UnsignedIntegers();
+    HelloTraceTypes::Descriptors();    
+    }
+
+EXPORT_C void HelloTraceExample::Interface()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_INTERFACE, "*********************************************** " );
+    
+    TVersion version = CHelloTraceInterface::Version();   
+    if (version.iMajor >= 1) 
+        {
+        CHelloTraceInterface* example = CHelloTraceInterface::NewLC();
+        example->AddCharL('H');
+        example->AddCharL('e');
+        example->AddCharL('l');
+        example->AddCharL('l');
+        example->AddCharL('o');
+        example->AddCharL('T');        
+        example->RemoveLast();        
+        example->AddCharL(' ');
+        example->AddCharL('T');
+        example->AddCharL('r');
+        example->AddCharL('a');
+        example->AddCharL('c');
+        example->AddCharL('e');
+        example->AddCharL('!');
+        CleanupStack::PopAndDestroy(example);
+        }
+    else
+        {
+        OstTrace0( TRACE_ERROR, HELLOTRACEEXAMPLE_UNSUPPORTED_VERSION, "Unsupported version!");
+        }
+    }
+
+EXPORT_C void HelloTraceExample::FnEntryExit()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_FNENTRYEXIT, "*********************************************** " );
+       
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    CIdle* idle = CIdle::NewL(CActive::EPriorityIdle);
+    CleanupStack::PushL(idle);
+
+    CHelloTraceFn::StaticOutputsParamsL(1);
+   
+    example->Simple();
+    example->OutputsParams(2, CHelloTraceFn::EExample1);
+    example->OutputsParams(3, CHelloTraceFn::EExample2);
+    example->OutputsSignedIntegers(-4, -5, -6, -7);
+    example->OutputsUnsignedIntegers(8, 9, 10, 11);
+    example->OutputsTIntReturnValue();    
+    example->OutputsTInt64ReturnValue(); 
+    example->OutputsTFnEnumReturnValue();
+    example->OutputsUnknownPtrType(idle);    
+    example->OutputsUnknownRefType(*idle);
+#ifdef _DEBUG
+    example->PreProcessedFn(12);
+#else
+    example->PreProcessedFn();
+#endif
+    example->OutputMissingParams(13, 14, 15);
+
+    CleanupStack::PopAndDestroy(idle);
+    CleanupStack::PopAndDestroy(example);
+    }
+
+EXPORT_C void HelloTraceExample::PanicTrace()
+    {
+    OstTrace0( TRACE_EXAMPLE, HELLOTRACEEXAMPLE_PANIC, "*********************************************** " );
+
+    Panic(EHelloTraceDllExamplePanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/src/HelloTraceFn.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+ 
+#include "HelloTraceFn.h"
+#include "HelloTraceFnDup.h"
+#include "HelloTraceFn.inl"
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceFnTraces.h"
+#endif
+
+CHelloTraceFn* CHelloTraceFn::NewLC()
+    {
+    CHelloTraceFn* self = new (ELeave) CHelloTraceFn;
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CHelloTraceFn* CHelloTraceFn::NewL()
+    {
+    CHelloTraceFn* self = CHelloTraceFn::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceFn::CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_CTOR, "[0x%08x] Constructor", this );    
+    }
+
+CHelloTraceFn::~CHelloTraceFn()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEFN_CHELLOTRACEFN_DTOR, "[0x%08x] Destructor", this );    
+    }
+
+void CHelloTraceFn::Simple()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_SIMPLE_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_SIMPLE_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsParams(TInt aParam, TFnEnum aEnumParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSPARAMS_ENTRY, this );
+    Simple();
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSPARAMS_EXIT, this );
+    }
+
+void CHelloTraceFn::StaticOutputsParamsL(TInt aParam)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_STATICOUTPUTSPARAMS_ENTRY, NULL );
+    CHelloTraceFn* example = CHelloTraceFn::NewLC();
+    example->Simple();    
+    CleanupStack::PopAndDestroy(example);
+    OstTraceFunctionExit0( CHELLOTRACEFN_STATICOUTPUTSPARAMS_EXIT );    
+    }
+
+void CHelloTraceFn::OutputsSignedIntegers(TInt8 aParam8,   TInt16 aParam16, 
+                                          TInt32 aParam32, TInt64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSSIGNEDINTEGERS_EXIT, this );
+    }
+
+void CHelloTraceFn::OutputsUnsignedIntegers(TUint8 aParam8,   TUint16 aParam16, 
+                                            TUint32 aParam32, TUint64 aParam64)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTSUNSIGNEDINTEGERS_EXIT, this );
+    }
+
+
+TInt CHelloTraceFn::OutputsTIntReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_ENTRY, this );
+    TInt ret = KErrNone;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINTRETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+TInt64 CHelloTraceFn::OutputsTInt64ReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_ENTRY, this );
+    TInt64 ret = (TInt64) 2 << 40;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTINT64RETURNVALUE_EXIT, this, ret );
+    return ret;
+    }
+
+CHelloTraceFn::TFnEnum CHelloTraceFn::OutputsTFnEnumReturnValue()
+    {
+    OstTraceFunctionEntry1( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_ENTRY, this );
+    TFnEnum ret = EExample1;
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSTFNENUMRETURNVALUE_EXIT, this, ret );
+    return ret;    
+    }
+
+CActive* CHelloTraceFn::OutputsUnknownPtrType(CActive* aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_ENTRY, this );    
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNPTRTYPE_EXIT, this, (TUint) aActive );
+    return aActive;
+    }
+
+CActive& CHelloTraceFn::OutputsUnknownRefType(CActive& aActive)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_ENTRY, this );
+    // ...
+    OstTraceFunctionExitExt( CHELLOTRACEFN_OUTPUTSUNKNOWNREFTYPE_EXIT, this, (TUint) &aActive );    
+    return aActive;
+    }
+
+// The following doesn't compile as the Trace Compiler doesn't generate
+// the correct OstTraceGenExt(...) function for it
+//void CHelloTraceFn::OutputMissingParamsBug(TInt /*aCommentParam*/, TInt)
+//    {
+//    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_ENTRY, this );
+//    // ...
+//    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMSBUG_EXIT, this );    
+//    }
+
+// The following compiles and works but outputs the following warning
+// warning: HelloTraceFn.cpp, line xxx: Parameter did not have a name and was not added to trace
+// The fact that this cannot be suppressed is a known problem we're working on.
+void CHelloTraceFn::OutputMissingParams(TInt aUsedParam, TInt /*aCommentParam*/, TInt)
+    {
+    OstTraceFunctionEntryExt( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_ENTRY, this );
+    // ...
+    OstTraceFunctionExit1( CHELLOTRACEFN_OUTPUTMISSINGPARAMS_EXIT, this );
+    }
+
+// The following doesn't work as the Trace Compiler outputs:
+// error: HelloTraceFn.cpp, line xxx: Class / function name for trace could not be determined x3
+//#ifdef _DEBUG
+//void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+//    {
+//    OstTraceFunctionEntryExt( PRE_PROCESSED_ENTRTY_1, this );
+//#else
+//void CHelloTraceFn::PreProcessedFn()
+//    {
+//    OstTraceFunctionEntry1( PRE_PROCESSED_ENTRTY_2, this );
+//#endif
+//    Simple();
+//    OstTraceFunctionExit1( CHELLOTRACEFN_PREPROCESSEDFN_EXIT, this );
+//    }
+
+// Workaround example code until a proper fix is provided
+#ifdef _DEBUG
+void CHelloTraceFn::PreProcessedFn(TInt aDbgParam)
+    {
+    OstTraceExt2( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_1, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;aDbgParam=%d;this=%x", (TInt) aDbgParam, (TUint) this);
+#else
+void CHelloTraceFn::PreProcessedFn()
+    {
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_ENTRY_2, "CHelloTraceFn::PreProcessedFn: > CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+#endif
+    Simple();
+    OstTrace1( TRACE_FLOW, CHELLOTRACEFN_PREPROCESSEDFN_EXIT, "CHelloTraceFn::PreProcessedFn: < CHelloTraceFn::PreProcessedFn;this=%x", (TUint) this);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/src/HelloTraceInterface.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "HelloTraceInterface.h"
+#include "HelloTraceInterfaceDup.h"
+#include "HelloTraceInterface.inl"
+#include "HelloTracePanic.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceInterfaceTraces.h"
+#endif
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewLC()
+    {
+    CHelloTraceInterface* self = new (ELeave) CHelloTraceInterface;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+EXPORT_C CHelloTraceInterface* CHelloTraceInterface::NewL()
+    {
+    CHelloTraceInterface* self = CHelloTraceInterface::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CHelloTraceInterface::CHelloTraceInterface()
+    {
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_CTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+void CHelloTraceInterface::ConstructL()
+    {
+    iString = new (ELeave) THelloTraceDllExampleString;
+    }
+
+EXPORT_C CHelloTraceInterface::~CHelloTraceInterface()
+    {
+    delete iString;
+    OstTrace1( TRACE_NORMAL, CHELLOTRACEDLL_CHELLOTRACEDLL_DTOR, "[0x%08x]", (TUint32) this );    
+    }
+
+EXPORT_C TVersion CHelloTraceInterface::Version()
+    {
+    const TInt KMajor = 1;
+    const TInt KMinor = 0;
+    const TInt KBuild = 1;
+    TVersion version = TVersion(KMajor, KMinor, KBuild);
+    OstTraceExt1( TRACE_BORDER, CHELLOTRACEDLL_VERSION, "CHelloTraceInterface::Version = %S", version.Name());   
+    return version;
+    }
+
+EXPORT_C const TPtrC CHelloTraceInterface::String() const
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceDefExt2( OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CHELLOTRACEDLL_STRING, 
+                     "[0x%08x] Returned %S", (TUint32) this, *iString);   
+    return *iString;
+    }
+
+EXPORT_C void CHelloTraceInterface::AddCharL(const TChar& aChar)
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt3( TRACE_BORDER, CHELLOTRACEDLL_ADDCHARL, 
+                  "[0x%08x] Adding %d to %S", (TUint32) this, (TInt32) aChar, *iString);   
+    if (iString->Length() >= KHelloTraceDllBufferLength)
+        {
+        OstTrace1( TRACE_ERROR, CHELLOTRACEDLL_ADDCHARL_ERR,
+                   "[0x%08x] Not enough space to add character", (TUint32) this);
+        User::Leave( KErrTooBig);
+        }
+    iString->Append(aChar);
+    }
+
+EXPORT_C void CHelloTraceInterface::RemoveLast()
+    {
+    __ASSERT_ALWAYS(iString != NULL, Panic(EHelloTraceDllNullPointer));
+
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_REMOVELAST, 
+                  "[0x%08x] Attempting to remove last character from %S", (TUint32) this, *iString);
+    if (iString->Length() > 0)
+        {
+        iString->SetLength(iString->Length() - 1);
+        }
+    else
+        {
+        OstTrace1( TRACE_WARNING, CHELLOTRACEDLL_REMOVELAST_WARN, "[0x%08x] String already empty", (TUint32) this);   
+        }
+    }
+
+EXPORT_C void CHelloTraceInterface::ResetString()
+    {
+    OstTraceExt2( TRACE_BORDER, CHELLOTRACEDLL_RESETSTRING, "[0x%08x] Reseting string %S", (TUint32) this, *iString);
+    if (iString == NULL)
+        {
+        iString = new (ELeave) THelloTraceDllExampleString;
+        }
+    else
+        {
+        iString->SetLength(0);
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/src/HelloTracePanic.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#include <e32std.h>		 // GLDEF_C
+
+#include "HelloTracePanic.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTracePanicTraces.h"
+#endif
+
+GLDEF_C void Panic(THelloTraceDllPanic aPanic)
+    {
+    OstTrace1( TRACE_FATAL, PANIC, "Panic(%{THelloTraceDllPanic})", (TUint) aPanic );    
+    User::Panic(_L("HelloTraceDll"), aPanic);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/src/HelloTraceTypes.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include <e32std.h>
+
+#include "HelloTraceTypes.h"
+#include "HelloTraceTypesDup.h"
+#include "HelloTraceTypes.inl"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloTraceTypesTraces.h"
+#endif
+
+void HelloTraceTypes::SignedIntegers()
+    {
+    TInt8  eightBit     = - (TInt8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_8, 
+                  "8 bit signed: %hhd", eightBit );
+    
+    TInt16 sixteenBit   = - (TInt16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_16, 
+                  "16 bit signed: %hd", sixteenBit );
+
+    TInt32 thirtyTwoBit = - (TInt32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_32, 
+               "32 bit signed: %d", thirtyTwoBit );
+
+    TInt64 sixtyFourBit = - (TInt64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_SIGNEDINTEGERS_64, 
+                  "64 bit signed: %Ld", sixtyFourBit );
+    }
+
+void HelloTraceTypes::UnsignedIntegers()
+    {
+    TUint8  eightBit     = (TUint8)  1 << 6;
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_8, 
+                  "8 bit unsigned: %hhu", eightBit );
+    
+    TUint16 sixteenBit   = (TUint16) 1 << 14; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_16, 
+                  "16 bit unsigned: %hu", sixteenBit );
+
+    TUint32 thirtyTwoBit = (TUint32) 1 << 30; 
+    OstTrace1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_32, 
+               "32 bit unsigned: %u", thirtyTwoBit );
+
+    TUint64 sixtyFourBit = (TUint64) 1 << 62; 
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNSIGNEDINTEGERS_64, 
+                  "64 bit unsigned: %Lu", sixtyFourBit );
+    }
+
+void HelloTraceTypes::Descriptors()
+    {
+    _LIT8(KAscii, "Some ASCII text");
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_ASCII, "8 bit descriptor: %s", KAscii() );
+
+    _LIT16(KUnicode, "Some unicode text");    
+    OstTraceExt1( TRACE_INTERNALS, HELLOTRACETYPES_UNICODE, "16 bit descriptor: %S", KUnicode() );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/dll/traces/hellotracedll_dll/trace.properties	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<trace_properties>
+<enum name="TFnEnum">
+<value id="0">EExample1</value>
+<value id="2">EExample2</value>
+</enum>
+<enum name="THelloTraceDllPanic">
+<value id="0">EHelloTraceDllExamplePanic</value>
+<value id="1">EHelloTraceDllNullPointer</value>
+</enum>
+<file>../../incDup/HelloTraceInterfaceDup.h</file>
+<file>../../incDup/HelloTraceInterface.inl</file>
+<file>../../incDup/HelloTraceFnDup.h</file>
+<file>../../incDup/HelloTraceFn.inl</file>
+<file>../../incDup/HelloTraceTypesDup.h</file>
+<file>../../incDup/HelloTraceTypes.inl</file>
+</trace_properties>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/TracesInHeadersApps/singlemmp_samenames_tracesplus/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#include "../dll/group/bld.inf"
+#include "../console/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2008 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: 
+*
+* TraceCompiler
+*/
+
+prj_platforms
+TOOLS2
+
+
+
+
+prj_testextensions
+start   extension   tools\ant_launch
+option  build_xml   build.xml
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/group/build.xml	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,235 @@
+<project name="OstTraceCompilerTest" default="build" basedir="..">
+
+<condition property="isLinux">
+    <os name="linux"/>
+</condition>
+
+<condition property="isWindows">
+	<not>
+		<os name="linux"/>
+	</not>
+</condition>
+
+<!-- EMMA configuration -->
+<path id="emma.lib" >
+	<pathelement location="${ant.home}/lib/emma.jar" />
+	<pathelement location="${ant.home}/lib/emma_ant.jar" />
+</path>
+
+<taskdef resource="emma_ant.properties" classpathref="emma.lib" />
+
+<target name="init_windows_epocroot" if="isWindows">
+	<property environment="env" />
+	<echo message="Init Windows epocroot"/>
+	<property name="epoc.root" value="${env.EPOCROOT}"/>
+</target>
+
+<target name="init_linux_epocroot" if="isLinux">
+	<property environment="env" />
+	<echo message="Init Linux epocroot"/>
+	<property name="epoc.root" value="${env.EPOCROOT}//" />
+</target>
+
+<target name="init" depends="init_windows_epocroot, init_linux_epocroot">
+	<property name="src.dir" value="src" />
+	<property name="build.dir" value="build" />
+	<property name="jar.dir" value="jar" />
+	<property name="instr.dir" location="instr"/>
+	<property name="testdata.dir" location="${epoc.root}testdata"/>
+	<property name="reports.dir" value="${epoc.root}testdata/reports" />	
+	<property name="emma.dir" location="${epoc.root}testdata/reports/emma"/>
+	<property name="tools.dir" location="${epoc.root}epoc32/tools"/>
+</target>
+
+<target name="clean" depends="init">
+	<echo>Cleaning the ${build.dir}</echo>
+	<delete dir="${build.dir}"/>
+	<echo>Creating the ${build.dir} directory</echo>
+	<mkdir dir="${build.dir}"/>
+	<echo>Cleaning the ${reports.dir}</echo>
+	<delete dir="${reports.dir}"/>
+	<echo>Creating the ${reports.dir} directory</echo>
+	<mkdir dir="${reports.dir}"/>
+	<echo>Cleaning the ${instr.dir}</echo>
+	<delete dir="${instr.dir}"/>
+	<echo>Creating the ${instr.dir} directory</echo>
+	<mkdir dir="${instr.dir}"/>
+	<echo>Deleting test exports</echo>
+	<delete file="${epoc.root}epoc32/include/platform/test_opensystemtrace_types.h"/>
+	<delete file="${epoc.root}epoc32/build/buildlog_tc.txt"/>
+	<delete file="${epoc.root}epoc32/build/parsedlogs_tc.txt"/>
+	<delete file="${epoc.root}epoc32/build/buildlog_sbs.txt"/>
+	<delete file="${epoc.root}epoc32/build/parsedlogs_sbs.txt"/>
+	<delete file="${epoc.root}epoc32/build/buildlog_mult_cpp.txt"/>
+	<delete file="${epoc.root}epoc32/build/parsedlogs_mult_cpp.txt"/>
+	<delete file="${epoc.root}epoc32/build/buildlog_mult_mmp.txt"/>
+	<delete file="${epoc.root}epoc32/build/parsedlogs_mult_mmp.txt"/>	
+	<delete dir="${testdata.dir}/TraceErrorApp"/>
+	<delete dir="${testdata.dir}/MultipleCppTraceErrorApp"/>
+	<delete dir="${testdata.dir}/MultipleMmpTraceErrorApps"/>
+	<delete dir="${testdata.dir}/FixedIdDefinitionsTestApp"/>
+	<delete dir="${testdata.dir}/MultipleMmpTestCases"/>
+	<delete dir="${epoc.root}testdata/MultipleMmpTestCases"/>
+	<delete dir="${testdata.dir}TracesInHeadersApps"/>
+	<delete dir="${epoc.root}epoc32/build/testdata/MultipleMmpTestCases"/>
+	<delete dir="${epoc.root}epoc32/build/testdata/MultipleCppTraceErrorApp"/>
+	<delete dir="${epoc.root}epoc32/build/testdata/TracesInHeadersApps"/>
+</target>
+
+<target name="build" depends="clean">
+	<property name="classpath" value="${build.dir}:lib/junit-4.7.jar:../jar/tracecompiler.jar" />
+	<copy todir="${epoc.root}epoc32/include/platform">
+		<fileset dir="testdata"/>
+	</copy>
+	<copy todir="${epoc.root}testdata/TraceErrorApp">
+		<fileset dir="TraceErrorApp"/>
+	</copy>	
+	<copy todir="${epoc.root}testdata/MultipleCppTraceErrorApp">
+		<fileset dir="MultipleCppTraceErrorApp"/>
+	</copy>	
+	<copy todir="${epoc.root}testdata/MultipleMmpTraceErrorApps">
+		<fileset dir="MultipleMmpTraceErrorApps"/>
+	</copy>
+	<copy todir="${epoc.root}testdata/FixedIdDefinitionsTestApp">
+		<fileset dir="FixedIdDefinitionsTestApp"/>
+	</copy>			
+	<copy todir="${epoc.root}testdata/MultipleMmpTestCases">
+		<fileset dir="MultipleMmpTestCases"/>
+	</copy>
+    	<copy todir="${epoc.root}testdata/TracesInHeadersApps">
+		<fileset dir="TracesInHeadersApps"/>
+	</copy>
+	<javac  classpath="${classpath}" srcdir="${src.dir}" destdir="${build.dir}" debug="false" target="1.5" >
+	</javac>
+</target>
+
+<target name="run" depends="build" description="run the junit tests">
+
+	<echo>---- Note ANT 1.7 or greater is required for the junit task ----</echo>
+
+	<!-- generate classpath -->
+	<path id="lib.path.ref">
+		<pathelement location="build"/>
+   		<fileset dir="lib" includes="*.jar"/>
+   		<fileset dir="../jar" includes="*.jar"/>
+ 	</path>
+	
+	<junit printsummary="yes" haltonfailure="yes">		
+	 	<classpath path="${toString:lib.path.ref}"/>
+	 	<formatter type="plain"/>
+	
+		<!--complete test code should be in the $src.dir so run all of them except ErrorLogsTestBase.java-->
+		<!--that is the base class of ErrorLogsTestUnit.java and ErrorLogsTestSystem.java-->	 	 	
+	 	<batchtest fork="yes" todir="${reports.dir}">
+	 		<fileset dir="${src.dir}">
+	      		<include name="*.java"/>
+	      		<exclude name="ErrorLogsTestBase.java"/>
+	 		</fileset>
+	 	</batchtest>	
+	</junit>
+
+</target>
+
+<!-- Instrumentation target, depends on JAR -->
+<target name="instr" depends="build">
+	<!-- Instrument the source code -->
+	<emma>
+		<instr instrpath="${tools.dir}/tracecompiler" metadatafile="${emma.dir}/metadata.emma" merge="true" mode="overwrite"/>
+	</emma>
+</target>
+
+<!--target to execute pure unit tests and measure test coverage-->		 
+<target name="run_unit_emma" depends="instr" description="run the TraceCompiler unit tests and measure test coverage">
+	<echo>---- Note ANT 1.7 or greater is required for the junit task ----</echo>
+
+	<!-- generate classpath -->
+	<path id="lib.path.ref">
+		<!-- Instrumented class files -->
+		<pathelement location="${epoc.root}epoc32/tools/tracecompiler"/>
+		<pathelement location="build"/>
+		<fileset dir="${instr.dir}" includes="*.class"/>
+		<fileset dir="lib" includes="*.jar"/>
+
+		<!-- EMMA -->
+		<pathelement path="${ant.home}/lib/emma.jar"/>
+ 	</path>
+	
+	<echo>${toString:lib.path.ref}</echo> 
+	
+	<junit printsummary="yes" haltonfailure="yes">		
+	 	<classpath path="${toString:lib.path.ref}"/>
+	 	<formatter type="plain"/>
+		<formatter type="xml"/>
+
+		<!-- Instrumentation arguments to JVM -->
+		<jvmarg value="-Demma.coverage.out.file=${emma.dir}/coverage.emma" />
+		<jvmarg value="-Demma.coverage.out.merge=true" />
+
+		<!--complete test code should be in the $src.dir so run all of them except ErrorLogsTestSystem.java, MultipleMmpTest.java and-->
+		<!--ErrorLogsTestBase.java that is the base class of ErrorLogsTestUnit.java and ErrorLogsTestSystem.java-->		 	
+	 	<batchtest fork="yes" todir="${reports.dir}">
+	 		<fileset dir="${src.dir}">
+	      		<include name="*.java"/>
+	      		<exclude name="ErrorLogsTestSystem.java"/>
+	      		<exclude name="ErrorLogsTestBase.java"/>
+	      		<exclude name="MultipleMmpTest.java"/>
+	      		<exclude name="TracesInHeadersTest.java"/>	      		
+                <exclude name="TraceHeadersLicenceTest.java"/>
+	 		</fileset>
+		</batchtest>
+	</junit>
+		
+	<!-- Create EMMA report -->
+	<emma>
+		<report sourcepath="src/" >
+			<fileset dir="${emma.dir}" >
+				<include name="*.emma" />
+			</fileset>
+			<xml outfile="${emma.dir}/coverage.xml" />
+		</report>
+	</emma>
+</target>
+
+<!--target to execute pure unit tests-->		 
+<target name="run_unit" depends="build" description="run the TraceCompiler unit tests">
+
+	<echo>---- Note ANT 1.7 or greater is required for the junit task ----</echo>
+
+	<!-- generate classpath -->
+	<path id="lib.path.ref">
+		<pathelement location="build"/>
+   		<fileset dir="lib" includes="*.jar"/>
+   		<fileset dir="../jar" includes="*.jar"/>
+ 	</path>
+	
+	<junit printsummary="yes" haltonfailure="yes">		
+	 	<classpath path="${toString:lib.path.ref}"/>
+	 	<formatter type="plain"/>
+	 	<formatter type="xml"/>
+	
+		<!--complete test code should be in the $src.dir so run all of them except ErrorLogsTestBase.java-->
+		<!--that is the base class of ErrorLogsTestUnit.java and ErrorLogsTestSystem.java-->	 	 	
+	 	<batchtest fork="yes" todir="${reports.dir}">
+	 		<fileset dir="${src.dir}">
+	      		<include name="*.java"/>
+	      		<exclude name="ErrorLogsTestSystem.java"/>
+	      		<exclude name="ErrorLogsTestBase.java"/>
+	      		<exclude name="MultipleMmpTest.java"/>
+	      		<exclude name="TracesInHeadersTest.java"/>	 
+	      		<exclude name="TraceHeadersLicenceTest.java"/>                
+	 		</fileset>
+	 	</batchtest>	
+	</junit>
+
+</target>
+
+<target name="jar" depends="build">
+	<mkdir dir="${jar.dir}"/>
+        <jar destfile="${jar.dir}/tests.jar" basedir="${build.dir}">
+            <manifest>
+                <attribute name="Main-Class" value="GroupNamesTest"/>
+            </manifest>
+        </jar>
+</target>
+
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/group/ccbuild.xml	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="com.nokia.tracecompiler" default="cc" basedir="..">
+
+	<target name="cc" depends="init, test, analyze" description="Run unit tests and analyze code"/>
+
+	<property name="javacVerbose" value="false"/>
+
+
+	<!-- declare ant4eclipse -->
+	<taskdef resource="net/sf/ant4eclipse/antlib.xml" />
+
+	
+	<!-- PMD configuration -->
+	<path id="pmd.lib" >
+    	<pathelement location="${ant.home}/lib/pmd-4.2.jar" />
+    	<pathelement location="${ant.home}/lib/asm-3.1.jar" />
+    	<pathelement location="${ant.home}/lib/jaxen-1.1.1.jar" />
+  	</path>
+	
+	<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd.lib" />
+
+	<!-- Init target -->
+	<target name="init">
+		<property environment="env"/>
+		<property name="testdata.dir" location="${env.EPOCROOT}testdata"/>
+		<property name="reports.dir" location="${env.EPOCROOT}testdata/reports"/>
+		<property name="hudson_reports.dir" location="reports"/>
+		
+		<echo>Cleaning the ${hudson_reports.dir}</echo>
+		<delete dir="${hudson_reports.dir}"/>
+		<echo>Creating the ${hudson_reports.dir} directory</echo>
+		<mkdir dir="${hudson_reports.dir}"/>
+	</target>
+
+	<!-- Test target -->
+	<target name="test" depends="init">
+		<ant antfile="group/build.xml" target="run_unit"/>
+		
+		<!-- Copy reports folder to reports forder in Hudson workspace, so reports can be used in Hudson -->
+		<copy todir="${hudson_reports.dir}">
+			<fileset dir="${reports.dir}"/>
+		</copy>
+	</target>
+
+	<!-- Analyze target -->
+	<target name="analyze" depends="init">
+		<!-- PMD -->
+		<pmd>
+			<!-- Rules -->
+			<ruleset>basic</ruleset>
+			<ruleset>codesize</ruleset>
+			<ruleset>coupling</ruleset>
+			<ruleset>design</ruleset>
+			<ruleset>strictexception</ruleset>
+			<ruleset>strings</ruleset>
+			<ruleset>sunsecure</ruleset>
+			<ruleset>unusedcode</ruleset>
+			
+			<!-- Output PMD report directly to reports forder in Hudson workspace, so report can be used in Hudson -->
+			<formatter type="xml" toFile="${hudson_reports.dir}/report.pmd.xml"/>
+			
+			<!-- Files to analyze -->
+			<fileset dir="../src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</pmd>
+	</target>
+
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/group/readme.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,6 @@
+build.xml adds ant support for running and building the tests
+
+
+ant build - builds test code
+ant run builds & runs test code
+ant jar generates executable jar file
Binary file tracefw/tracecompiler/test/lib/junit-4.7.jar has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+#include "../mmp_traces/group/bld.inf"
+#include "../mmp_traces_mmpname/group/bld.inf"
+#include "../mmp_traces_slash_target_ext/group/bld.inf"
+#include "../mmp_traces_target_type/group/bld.inf"
+#include "../mmp_traces_mixed/group/bld.inf"
+#include "../mmp_traces_slash_target_ext_commonsource/group/bld.inf"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+mmp_traces1.mmp
+mmp_traces2.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/group/mmp_traces1.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  target1.exe
+TARGETTYPE	  exe
+UID			 0 0xE8576D96
+
+USERINCLUDE	 ../inc
+USERINCLUDE  ../traces
+
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   /epoc32/include
+
+SOURCEPATH	  ../src
+SOURCE		  MultipleMmpApp1.cpp 
+SOURCE 		  ExtraCppFile1.cpp
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/group/mmp_traces2.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  target2.exe
+TARGETTYPE	  exe
+UID			 0 0xE8576D95
+
+USERINCLUDE	 ../inc
+USERINCLUDE  ../traces
+
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   /epoc32/include
+
+SOURCEPATH	  ../src
+SOURCE		  MultipleMmpApp2.cpp 
+SOURCE		  ExtraCppFile2.cpp
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/inc/MultipleMmpApp.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __MULTIPLEMMPAPP_H__
+#define __MULTIPLEMMPAPP_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+void CallSomeMoreTraceStatements();
+
+#endif  // __MULTIPLEMMPAPP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/src/ExtraCppFile1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyriight (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile1Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+
+    OstTrace1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTrace1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/src/ExtraCppFile2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,45 @@
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile2Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+
+    OstTrace1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTrace1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/src/MultipleMmpApp1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,77 @@
+
+//  Include Files  
+
+#include "MultipleMmpApp.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>			// Console
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpApp1Traces.h"
+#endif
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    /****************************TRACE STATEMENTS*********************************/
+    OstTrace0( TRACE_FLOW, TEST1_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST2_MAINL, "MainL()" );    
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces/src/MultipleMmpApp2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpApp.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>			// Console
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpApp2Traces.h"
+#endif
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    /****************************TRACE STATEMENTS*********************************/
+    OstTrace0( TRACE_FLOW, TEST1_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST2_MAINL, "MainL()" );    
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+mmp_traces_mixed1.mmp
+mmp_traces_mixed2.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/group/mmp_traces_mixed1.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+TARGET		  target3.dll
+TARGETTYPE	  kext
+UID			 0 0xE8576D96
+
+USERINCLUDE	 ..\inc
+USERINCLUDE  ..\traces
+USERINCLUDE  ..\traces_target3_kext
+USERINCLUDE  ..\traces\target3_dll //traces should be generated here
+
+OS_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   \epoc32\include
+
+SOURCEPATH	  ..\src
+SOURCE		  MultipleMmpApp1.cpp 
+SOURCE 		  ExtraCppFile1.cpp
+
+#include "kernel/kern_ext.mmh"
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/group/mmp_traces_mixed2.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+TARGET		  target4.dll
+TARGETTYPE	  kext
+UID			 0 0xE8576D95
+
+USERINCLUDE	 ..\inc
+USERINCLUDE  ..\traces
+USERINCLUDE  ..\traces_target4_kext //traces should be generated here
+
+OS_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   \epoc32\include
+
+SOURCEPATH	  ..\src
+SOURCE		  MultipleMmpApp2.cpp 
+SOURCE		  ExtraCppFile2.cpp
+
+#include "kernel/kern_ext.mmh"
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/inc/MultipleMmpApp.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __MULTIPLEMMPAPP_H__
+#define __MULTIPLEMMPAPP_H__
+
+//  Include Files
+
+#include <e32def.h>
+
+
+//  Function Prototypes
+
+void CallSomeMoreTraceStatements();
+
+#endif  // __MULTIPLEMMPAPP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/src/ExtraCppFile1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile1Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+
+    OstTrace1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTrace1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/src/ExtraCppFile2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile2Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+
+    OstTrace1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTrace1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/src/MultipleMmpApp1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpApp.h"
+#include <kernel/kernel.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpApp1Traces.h"
+#endif
+
+
+
+DECLARE_STANDARD_EXTENSION()
+    {
+    /****************************TRACE STATEMENTS*********************************/
+    OstTrace0( TRACE_FLOW, TEST1_DECLARE_STANDARD_EXTENSION, "DECLARE_STANDARD_EXTENSION()" );
+    OstTrace0( TRACE_FLOW, TEST2_DECLARE_STANDARD_EXTENSION, "DECLARE_STANDARD_EXTENSION()" );    
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    return 0;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mixed/src/MultipleMmpApp2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpApp.h"
+#include <kernel/kernel.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpApp2Traces.h"
+#endif
+
+
+DECLARE_STANDARD_EXTENSION()
+    {
+    /****************************TRACE STATEMENTS*********************************/
+    OstTrace0( TRACE_FLOW, TEST1_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST2_MAINL, "MainL()" );    
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    return 0;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+mmp_traces_mmpname1.mmp
+mmp_traces_mmpname2.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/group/mmp_traces_mmpname1.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  target5.exe
+TARGETTYPE	  exe
+UID			 0 0xE8576D96
+
+USERINCLUDE	 ../inc
+USERINCLUDE  ../traces
+USERINCLUDE  ../traces_mmp_traces_mmpname1
+
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   /epoc32/include
+
+SOURCEPATH	  ../src
+SOURCE		  MultipleMmpApp1.cpp 
+SOURCE 		  ExtraCppFile1.cpp
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/group/mmp_traces_mmpname2.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  target6.exe
+TARGETTYPE	  exe
+UID			 0 0xE8576D95
+
+USERINCLUDE	 ../inc
+USERINCLUDE  ../traces
+USERINCLUDE  ../traces_mmp_traces_mmpname2
+
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE  /epoc32/include
+
+SOURCEPATH	  ../src
+SOURCE		  MultipleMmpApp2.cpp 
+SOURCE		  ExtraCppFile2.cpp
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/inc/MultipleMmpApp.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __MULTIPLEMMPAPP_H__
+#define __MULTIPLEMMPAPP_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+void CallSomeMoreTraceStatements();
+
+#endif  // __MULTIPLEMMPAPP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/src/ExtraCppFile1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile1Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+
+    OstTrace1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTrace1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/src/ExtraCppFile2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile2Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+
+    OstTrace1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTrace1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/src/MultipleMmpApp1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpApp.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>			// Console
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpApp1Traces.h"
+#endif
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    /****************************TRACE STATEMENTS*********************************/
+    OstTrace0( TRACE_FLOW, TEST1_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST2_MAINL, "MainL()" );    
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_mmpname/src/MultipleMmpApp2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpApp.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>			// Console
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpApp2Traces.h"
+#endif
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    /****************************TRACE STATEMENTS*********************************/
+    OstTrace0( TRACE_FLOW, TEST1_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST2_MAINL, "MainL()" );    
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+mmp_traces_slash_target_ext1.mmp
+mmp_traces_slash_target_ext2.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/group/mmp_traces_slash_target_ext1.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  target7.dll
+TARGETTYPE	  kext
+UID			 0 0xE8576D96
+
+USERINCLUDE	 ..\inc
+USERINCLUDE  ..\traces\target7_dll
+
+OS_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   \epoc32\include
+
+SOURCEPATH	  ..\src
+SOURCE		  MultipleMmpApp1.cpp 
+SOURCE 		  ExtraCppFile1.cpp
+
+#include "kernel/kern_ext.mmh"
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/group/mmp_traces_slash_target_ext2.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  target8.dll
+TARGETTYPE	  kext
+UID			 0 0xE8576D95
+
+USERINCLUDE	 ..\inc
+USERINCLUDE  ..\traces\target8_dll
+
+OS_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   \epoc32\include
+
+SOURCEPATH	  ..\src
+SOURCE		  MultipleMmpApp2.cpp 
+SOURCE		  ExtraCppFile2.cpp
+
+#include "kernel/kern_ext.mmh"
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/inc/MultipleMmpApp.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __MULTIPLEMMPAPP_H__
+#define __MULTIPLEMMPAPP_H__
+
+//  Include Files
+
+#include <e32def.h>
+
+
+//  Function Prototypes
+
+void CallSomeMoreTraceStatements();
+
+#endif  // __MULTIPLEMMPAPP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/src/ExtraCppFile1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile1Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+
+    OstTrace1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTrace1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/src/ExtraCppFile2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile2Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+
+    OstTrace1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTrace1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/src/MultipleMmpApp1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpApp.h"
+#include <kernel/kernel.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpApp1Traces.h"
+#endif
+
+
+
+DECLARE_STANDARD_EXTENSION()
+    {
+    /****************************TRACE STATEMENTS*********************************/
+    OstTrace0( TRACE_FLOW, TEST1_DECLARE_STANDARD_EXTENSION, "DECLARE_STANDARD_EXTENSION()" );
+    OstTrace0( TRACE_FLOW, TEST2_DECLARE_STANDARD_EXTENSION, "DECLARE_STANDARD_EXTENSION()" );    
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    return 0;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext/src/MultipleMmpApp2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpApp.h"
+#include <kernel/kernel.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpApp2Traces.h"
+#endif
+
+
+DECLARE_STANDARD_EXTENSION()
+    {
+    /****************************TRACE STATEMENTS*********************************/
+    OstTrace0( TRACE_FLOW, TEST1_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST2_MAINL, "MainL()" );    
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    return 0;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+mmp_traces_slash_target_cs_ext1.mmp
+mmp_traces_slash_target_cs_ext2.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/group/mmp_traces_slash_target_cs_ext1.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  target9.dll
+TARGETTYPE	  kext
+UID			 0 0xE8576D96
+
+USERINCLUDE	 ..\inc
+USERINCLUDE  ..\traces\target9_dll
+
+OS_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   \epoc32\include
+
+SOURCEPATH	  ..\src
+SOURCE		  MultipleMmpApp1.cpp 
+SOURCE 		  ExtraCppFile1.cpp
+
+#include "kernel/kern_ext.mmh"
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/group/mmp_traces_slash_target_cs_ext2.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  target10.dll
+TARGETTYPE	  kext
+UID			 0 0xE8576D95
+
+USERINCLUDE	 ..\inc
+USERINCLUDE  ..\traces\target10_dll
+
+OS_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   \epoc32\include
+
+SOURCEPATH	  ..\src
+SOURCE		  MultipleMmpApp1.cpp 
+SOURCE		  ExtraCppFile1.cpp
+
+#include "kernel/kern_ext.mmh"
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/inc/MultipleMmpApp.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __MULTIPLEMMPAPP_H__
+#define __MULTIPLEMMPAPP_H__
+
+//  Include Files
+
+#include <e32def.h>
+
+
+//  Function Prototypes
+
+void CallSomeMoreTraceStatements();
+
+#endif  // __MULTIPLEMMPAPP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/src/ExtraCppFile1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile1Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+
+    OstTrace1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTrace1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_slash_target_ext_commonsource/src/MultipleMmpApp1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpApp.h"
+#include <kernel/kernel.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpApp1Traces.h"
+#endif
+
+
+
+DECLARE_STANDARD_EXTENSION()
+    {
+    /****************************TRACE STATEMENTS*********************************/
+    OstTrace0( TRACE_FLOW, TEST1_DECLARE_STANDARD_EXTENSION, "DECLARE_STANDARD_EXTENSION()" );
+    OstTrace0( TRACE_FLOW, TEST2_DECLARE_STANDARD_EXTENSION, "DECLARE_STANDARD_EXTENSION()" );    
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    return 0;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/group/bld.inf	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+mmp_traces_target_type1.mmp
+mmp_traces_target_type2.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/group/mmp_traces_target_type1.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		  target11.exe
+TARGETTYPE	exe
+UID			 0 0xE8576D96
+
+USERINCLUDE	 ..\inc
+USERINCLUDE  ..\traces_target11_exe
+
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   \epoc32\include
+
+SOURCEPATH	  ..\src
+SOURCE		  MultipleMmpApp1.cpp 
+SOURCE 		  ExtraCppFile1.cpp
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/group/mmp_traces_target_type2.mmp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+
+TARGET		   target12.exe
+TARGETTYPE	  exe
+UID			 0 0xE8576D95
+
+USERINCLUDE	 ..\inc
+USERINCLUDE  ..\traces_target12_exe
+
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   \epoc32\include
+
+SOURCEPATH	  ..\src
+SOURCE		  MultipleMmpApp2.cpp 
+SOURCE		  ExtraCppFile2.cpp
+
+LIBRARY		 euser.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/inc/MultipleMmpApp.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+#ifndef __MULTIPLEMMPAPP_H__
+#define __MULTIPLEMMPAPP_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+void CallSomeMoreTraceStatements();
+
+#endif  // __MULTIPLEMMPAPP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/src/ExtraCppFile1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile1Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+
+    OstTrace1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTrace1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/src/ExtraCppFile2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+/*
+ * ExtraCppFile.cpp
+ *
+ *  Created on: Dec 7, 2009
+ *      Author: cajagu
+ */
+
+#include "MultipleMmpApp.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ExtraCppFile2Traces.h"
+#endif
+
+void CallSomeMoreTraceStatements()
+    {
+    TInt32 x = 555;
+    TUint32 y = 666;
+
+    OstTrace1( TRACE_FLOW, TEST1_CALLMORE, "CallSomeMoreTraceStatements(): x=%d" , x );
+    OstTrace1( TRACE_FLOW, TEST2_CALLMORE, "CallSomeMoreTraceStatements(): y=%u" , y );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/src/MultipleMmpApp1.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpApp.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>			// Console
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpApp1Traces.h"
+#endif
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    /****************************TRACE STATEMENTS*********************************/
+    OstTrace0( TRACE_FLOW, TEST1_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST2_MAINL, "MainL()" );    
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/multipleMmpTestCases/mmp_traces_target_type/src/MultipleMmpApp2.cpp	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+//  Include Files  
+
+#include "MultipleMmpApp.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>			// Console
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "MultipleMmpApp2Traces.h"
+#endif
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    /****************************TRACE STATEMENTS*********************************/
+    OstTrace0( TRACE_FLOW, TEST1_MAINL, "MainL()" );
+    OstTrace0( TRACE_FLOW, TEST2_MAINL, "MainL()" );    
+    /*****************************************************************************/
+    
+    CallSomeMoreTraceStatements();
+    
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/ErrorLogsTestBase.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,269 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+import static org.junit.Assert.fail;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+
+public class ErrorLogsTestBase {
+	
+	/****************************************************UTILITY FUNCTIONS FOR TESTS************************************************************/
+	
+	/**
+	 * This function gets an environment variable value given the name.
+	 * @param variablename The name of the variable for which the value is required.
+	 * @return The variable value.
+	 */
+	public String GetEnvironmentVariablePath(String variablename) {
+		String variablevalue = System.getenv(variablename);
+		if(variablevalue == null || (variablevalue.length()==0)){
+			fail();
+		}
+		
+		// need to check that the path ends in a backslash
+		if(!variablevalue.endsWith(File.separator)){ 
+			variablevalue += File.separator; 
+		}
+		return variablevalue;
+	}
+	
+	/**
+	 * This function invokes the desired compiler for a particular test case depending
+	 * on the string passed
+	 * @param compiler String specifying the compiler to run, and also specifying where
+	 * 		  		   the logs should be stored.
+	 */
+	public void InvokeCompiler(String compiler) {
+		System.out.println ("InvokeCompiler()");
+		//get epocroot location
+		String e32=GetEnvironmentVariablePath("EPOCROOT");
+		
+		String TraceErrorAppPath = e32 + "testdata" + File.separator + "TraceErrorApp" + File.separator;
+		try{
+			File compilerpath = new File (e32 + "epoc32" + File.separator + "tools" + File.separator + "tracecompiler" + File.separator);
+			
+			if (compiler.compareTo("_sbs")==0){//raptor
+				compilerpath = new File (e32 + "testdata" + File.separator + "TraceErrorApp" + File.separator +"group" + File.separator);
+			}
+			else if (compiler.compareTo("_mult_cpp")==0){//raptor compiling project with multiple source files
+				compilerpath = new File (e32 + "testdata" + File.separator + "MultipleCppTraceErrorApp" + File.separator + "group" + File.separator);
+			}
+			else if (compiler.compareTo("_mult_mmp")==0){//raptor compiling project with multiple source files
+				compilerpath = new File (e32 + "testdata" + File.separator + "MultipleMmpTraceErrorApps" + File.separator + "group" + File.separator);
+			}
+			else if (compiler.compareTo("_tc")!=0){
+				System.out.println("Error: Unrecognised test case. Use either _tc, _sbs, _mult_cpp or _mult_mmp");
+				fail();
+			}
+			
+			//set up the process builder object
+	 		ProcessBuilder pb; 
+	 		//commands to be used to invoke the compiler
+	 		if (compiler.compareTo("_tc")==0){//tracecompiler
+	 			// These EMMA flags are added, because of EMMA reporting in Hudson
+				// EMMA lfags are commented out, because it does not work in Hudson at the moment
+//	 			String emmaOutputFileFlag = "-Demma.coverage.out.file=" + e32 + "testdata" + File.separator + "reports" + File.separator + "emma" + File.separator + "coverage.emma";
+//	 			String emmaOutputMergeFlag = "-Demma.coverage.out.merge=true";
+	 			String emmaOutputFileFlag = "";
+	 			String emmaOutputMergeFlag = "";
+	 			pb = new ProcessBuilder("java", emmaOutputFileFlag, emmaOutputMergeFlag, "-classpath",".", "com.nokia.tracecompiler.TraceCompiler", "E8576D92", "TraceErrorApp",TraceErrorAppPath+"group"+File.separator+"TraceErrorApp.mmp",TraceErrorAppPath+"src"+File.separator+"TraceErrorApp.cpp");
+	 		}
+	 		else /*if (compiler.compareTo("_sbs")==0)*/{//for all other raptor cases
+	 			pb = new ProcessBuilder("sbs.bat","-c","armv5.tracecompiler");
+	 		}
+	 		
+			pb.directory(compilerpath);
+			pb.redirectErrorStream(true);
+			
+			//start the compiler
+			Process p = pb.start();
+			InputStream inp = p.getInputStream();
+	        int c = -1;
+	        
+	        
+	        String str = "";
+	        
+	        /*
+	        //read the output from the compiler into the input stream
+	        while ((c = inp.read()) != -1) {
+	            str= str +((char)c);
+	        }
+	        */
+	        
+	        StringBuilder sb = new StringBuilder();
+	        //read the output from the compiler into the input stream
+	        while ((c = inp.read()) != -1) {
+	        	sb.append(((char)c));
+	        }
+	        str = sb.toString();
+	        
+	        
+	    	//Declare output file to write logs to
+	    	FileOutputStream outstream; 
+			PrintStream ps; 
+			System.out.println ("creating output logs in buildlog"+compiler+".txt");
+			outstream = new FileOutputStream(e32+"epoc32"+File.separator+"build"+File.separator+"buildlog"+compiler+".txt");
+			ps = new PrintStream( outstream );
+			ps.println (str);
+			
+			//check return code if tracecompiler.. we don't check error code for raptor:
+			int ret = p.exitValue();
+			if ((ret==0)&&(compiler.compareTo("_tc")==0)){
+				System.out.println("FAIL: TraceCompiler does not exit with error");
+				fail();
+			}
+			inp.close();
+			outstream.close();
+		}
+		
+    	catch (IOException e){//Catch IOException
+    		System.err.println("Error: " + e.getMessage());
+    		fail();
+        }
+		
+	}
+	
+	/**
+	 * This function parses the log files (as specified by the passed string) for errors and warnings
+	 *  and stores them in a separate file (also specified by the same passed string)
+	 * 
+	 * @param pathext  String specifying the part of the name of the build log file to parse which is 
+	 * 				   also part of the name of the file where parsed logs are written to.	  		   
+	 */
+	public void ParseLogFile(String pathext) {
+		System.out.println ("ParseLogFile()");
+		//get epocroot location
+		String e32=GetEnvironmentVariablePath("EPOCROOT");
+		
+		
+	    try{
+	    	// Open the file
+	    	System.out.println ("opening buildlog"+pathext+".txt");
+	    	FileInputStream fstream = new FileInputStream(e32+"epoc32"+File.separator+"build"+File.separator+"buildlog"+pathext+".txt");
+
+	    	// Get the object of DataInputStream
+	    	//System.out.println ("creating input stream");
+	    	DataInputStream in = new DataInputStream(fstream);
+	        BufferedReader br = new BufferedReader(new InputStreamReader(in));
+	    	String strLine;
+	    	
+	    	//Declare output file to write parsed logs to
+	    	FileOutputStream out; 
+			PrintStream p; 
+			//System.out.println ("creating output stream");
+			out = new FileOutputStream(e32+"epoc32"+File.separator+"build"+File.separator+"parsedlogs"+pathext+".txt");
+			p = new PrintStream( out );
+	    	
+	    	//Read File Line By Line and write to parsedlogs.txt
+	    	System.out.println ("Writing to parsedlogs"+pathext+".txt");
+	    	while ((strLine = br.readLine()) != null&&(strLine.length()) >= 9)   {
+	    		//remove any leading white spaces because there are spaces when printed to standard output.
+	    		strLine=strLine.trim();
+		    	if((strLine.startsWith("error:")==true)||(strLine.startsWith("warning:")==true)){
+			    	// Write to a separate file
+			    	p.println (strLine);
+	    	}
+      	
+    	}
+    	
+    	//Close the input and output streams
+    	in.close();
+    	out.close();
+    	}
+    	
+    	catch (IOException e){//Catch IOException
+    		System.err.println("Error: " + e.getMessage());
+    		fail();
+    	}
+	
+	}
+	
+	/**
+	 * This function validates the parsed log file by comparing it to a reference file containg
+	 * the knows warnings and errors 
+	 * @param project String specifying the name of the project folder that was compiled.
+	 * @param pathext String specifying the part of the name of the parsed log file to validate.	   
+	 */
+	public void ValidateLogs(String project, String pathext) {
+		System.out.println ("ValidateLogs()");
+		//get epocroot location
+		String e32=GetEnvironmentVariablePath("EPOCROOT");
+		
+	try{
+		// Open the files
+		System.out.println ("opening referencelog.txt and parsedlogs"+pathext+".txt");
+		FileInputStream fstream1 = new FileInputStream(e32+"testdata"+File.separator+project+File.separator+"data"+File.separator+"referencelog.txt");
+		FileInputStream fstream2 = new FileInputStream(e32+"epoc32"+File.separator+"build"+File.separator+"parsedlogs"+pathext+".txt");
+	
+		// Get the objects of DataInputStream
+		//System.out.println ("creating input streams");
+		DataInputStream in1 = new DataInputStream(fstream1);
+		DataInputStream in2 = new DataInputStream(fstream2);
+		//System.out.println ("creating buffered readers");
+	    BufferedReader br1 = new BufferedReader(new InputStreamReader(in1));
+	    BufferedReader br2 = new BufferedReader(new InputStreamReader(in2));
+		String strLine1;
+		String strLine2;
+		int i=1;
+		
+		//compare the two files
+		while (((strLine1 = br1.readLine()) != null)&&(((strLine2 = br2.readLine()) != null)))   {
+			if (pathext.compareTo("_mult_mmp")!=0){//if this is not the multiple mmp test, then compare the whole error string
+				if(strLine1.compareTo(strLine2)==0){
+					System.out.println ("Validated line "+i+": "+strLine1);
+				}
+				else{
+					System.out.println ("Line "+i+" ("+strLine2+") is not correct.");
+					fail();
+				}
+			}
+			else{//else if this is the multiple mmp test, compare only the last 40 characters of the string because
+				//raptor does not have a specified order in which it compiles mmps using trace compiler so we can't validate exactly
+				if(strLine1.substring(strLine1.length()-40, strLine1.length()).compareTo(strLine2.substring(strLine1.length()-40, strLine2.length()))==0){
+					System.out.println ("Validated line "+i+": "+strLine1);
+				}
+				else{
+					System.out.println ("Line "+i+" ("+strLine2+") is not correct.");
+					fail();
+				}			
+			}
+		i++;
+		}
+		
+		if (i==1) {//never entered loop therefore there were no errors or warnings in the build logs
+			System.out.println("FAIL: Compiler did not output any correct errors to logs");
+			fail();
+		}
+		in1.close();
+		in2.close();
+	}
+	
+	catch (IOException e){//Catch IOException
+		System.err.println("Error: " + e.getMessage());
+		fail();
+    }
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/ErrorLogsTestSystem.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+import org.junit.Test;
+
+public class ErrorLogsTestSystem extends ErrorLogsTestBase{
+	
+	public static void main(String args[]) {		
+	      	org.junit.runner.JUnitCore.main(ErrorLogsTestSystem.class.getName());
+	    }
+	
+	/**
+	 * This test calls Trace Compiler via Raptor and invokes it against a simple c++ project with one mmp file containing one cpp 
+	 * The logs from Raptor (written to std::out) are checked to ensure the errors and warnings from traceCompiler are correct.
+	 */
+	@Test
+	public void SystemTestTraceCompilerAndRaptor (){
+		System.out.println ("****************SystemTestTraceCompilerAndRaptor()**********************");
+		//Call Raptor
+		InvokeCompiler("_sbs");
+		
+		//Parse the Raptor log files (from standard output)
+		ParseLogFile("_sbs");
+		
+		//Validate the Raptor log files
+		ValidateLogs("TraceErrorApp","_sbs");		
+	}
+	
+	/**
+	 * This test calls Trace Compiler via Raptor and invokes it against a c++ project with one mmp file containing two cpp files.
+	 * The logs from Raptor (written to std::out) are checked to ensure the errors and warnings from traceCompiler are correct.
+	 * It is expected that all errors from all ccp files are written to the logs.
+	 */
+	@Test
+	public void SystemTestTraceCompilerAndRaptorMultipleCpps (){
+		System.out.println ("**********SystemTestTraceCompilerAndRaptorMultipleCpps()****************");
+		//Call Raptor
+		InvokeCompiler("_mult_cpp");
+		
+		//Parse the Raptor log files (from standard output)
+		ParseLogFile("_mult_cpp");
+		
+		//Validate the Raptor log files
+		ValidateLogs("MultipleCppTraceErrorApp","_mult_cpp");		
+	}
+	
+	/**
+	 * This test calls Trace Compiler via Raptor and invokes it against a c++ project with two mmp files each containing two cpp files.
+	 * The logs from Raptor (written to std::out) are checked to ensure the erros and warnings from traceCompiler are correct.
+	 * It is expected that all errors from all cpp files in the first mmp which is compiled are written to the logs. Any mmp after that
+	 * point is not compiled.
+	 */
+	@Test
+	public void SystemTestTraceCompilerAndRaptorMultipleMmps (){
+		System.out.println ("**********SystemTestTraceCompilerAndRaptorMultipleMmps()****************");
+		//Call Raptor
+		InvokeCompiler("_mult_mmp");
+		
+		//Parse the Raptor log files (from standard output)
+		ParseLogFile("_mult_mmp");
+		
+		//Validate the Raptor log files
+		ValidateLogs("MultipleMmpTraceErrorApps","_mult_mmp");	
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/ErrorLogsTestUnit.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+import org.junit.Test;
+
+public class ErrorLogsTestUnit extends ErrorLogsTestBase {
+	
+	public static void main(String args[]) {		
+	      	org.junit.runner.JUnitCore.main(ErrorLogsTestUnit.class.getName());
+	    }
+	
+	/**
+	 * This test calls Trace Compiler directly and invokes it against a simple c++ project with one cpp and one mmp file
+	 * The exit code from tracecompiler is checked to ensure an error is indicated and the logs are also checked
+	 */
+	@Test
+	public void UnitTestTraceCompiler (){
+		System.out.println ("*********************UnitTestTraceCompiler()****************************");
+		//Call Trace Compiler
+		InvokeCompiler("_tc");
+		
+		//Parse the Trace Compiler log files
+		ParseLogFile("_tc");
+		
+		//Validate the Trace Compiler log files
+		ValidateLogs("TraceErrorApp","_tc");		
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/FixedIdDefinitionsTest.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,597 @@
+/*
+ * 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:
+ *
+ * JUnit tests for fixed_id.definitions file
+ *
+ */
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Writer;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+import com.nokia.tracecompiler.file.FileUtils;
+import com.nokia.tracecompiler.source.SourceDocumentFactory;
+
+public class FixedIdDefinitionsTest extends TestCase {
+
+	/**
+	 * EMMA output prefix
+	 */
+	private static final String EMMA_OUTPUT_PREFIX = "EMMA: "; //$NON-NLS-1$
+	
+	/**
+	 * Fixed id definitions test app took note prefix
+	 */
+	private static final String FIXED_ID_DEFINITIONS_TEST_APP_TOOK_NOTE_PREFIX = "FixedIdDefinitionsTestApp took"; //$NON-NLS-1$
+
+	/**
+	 * UID3 of FixedIdDefinitionsTestApp
+	 */
+	private static final String FIXED_ID_DEFINITIONS_TEST_APP_UID3 = "E8576D92"; //$NON-NLS-1$
+
+	/**
+	 * txt extension
+	 */
+	private static final String TXT_EXTENSION = ".txt"; //$NON-NLS-1$
+
+	/**
+	 * Reference fid file name prefix
+	 */
+	private static final String REFERENCE_FID_FILE_NAME_PREFIX = "reference_fid_file_"; //$NON-NLS-1$
+
+	/**
+	 * Reference fid file name prefix
+	 */
+	private static final String REFERENCE_TC_OUTPUT_NAME_PREFIX = "reference_tc_output_"; //$NON-NLS-1$	
+
+	/**
+	 * data directory name
+	 */
+	private static final String DATA_DIRECTORY = "data"; //$NON-NLS-1$
+
+	/**
+	 * traces directory name
+	 */
+	private static final String TRACES_DIRECTORY = "traces"; //$NON-NLS-1$
+
+	/**
+	 * fixed_id.definitions file name
+	 */
+	private static final String FIXED_ID_DEFINITIONS_FILE_NAME = "fixed_id.definitions"; //$NON-NLS-1$
+
+	/**
+	 * Line comment tag
+	 */
+	private static final String LINE_COMMENT_TAG = "//"; //$NON-NLS-1$
+
+	/**
+	 * TRACE_USED_IN_TEST_CASE tag
+	 */
+	private static final String TRACE_USED_IN_TEST_CASE_TAG = "TRACE_USED_IN_TEST_CASE"; //$NON-NLS-1$
+
+	/**
+	 * Error text prefix
+	 */
+	private static final String ERROR_TEXT_PREFIX = "Error: "; //$NON-NLS-1$
+
+	/**
+	 * src directory name
+	 */
+	private static final String SRC_DIRECTORY = "src"; //$NON-NLS-1$
+
+	/**
+	 * .cpp extension
+	 */
+	private static final String CPP_EXTENSION = ".cpp"; //$NON-NLS-1$
+
+	/**
+	 * FixedIdDefinitionsTestApp
+	 */
+	private static final String FIXED_ID_DEFINITIONS_TEST_APP = "FixedIdDefinitionsTestApp"; //$NON-NLS-1$
+
+	/**
+	 * Variable for epocroot
+	 */
+	String e32;
+
+	/**
+	 * Path to FixedIdDefinitionsTestApp application
+	 */
+	String fixedIdDefinitionsTestAppPath;
+
+	/**
+	 * Process builder
+	 */
+	ProcessBuilder pb = null;
+
+	/**
+	 * Compiler path
+	 */
+	File compilerPath = null;
+
+	/**
+	 * Line separator
+	 */
+	String lineSeparator;
+
+	/**
+	 * Source file name with full path
+	 */
+	String sourceFileNameWithFullPath;
+
+	/**
+	 * fixed_id.definitions file name with full path
+	 */
+	String fixedIdDefinitionsFileNameWithFullPath;
+
+	/**
+	 * SourceDocumentFactory
+	 */
+	SourceDocumentFactory factory = null;
+
+	public static void main(String[] args) {
+		org.junit.runner.JUnitCore.main(FixedIdDefinitionsTest.class.getName());
+	}
+
+	/**
+	 * setup
+	 */
+	@Test
+	public void setUp() {
+		System.out.println("Setup class variables"); //$NON-NLS-1$
+
+		e32 = System.getenv("EPOCROOT"); //$NON-NLS-1$
+
+		if (!e32.endsWith(File.separator)) {
+			e32 += File.separator;
+		}
+
+		fixedIdDefinitionsTestAppPath = e32 + "testdata" + File.separator //$NON-NLS-1$
+				+ FIXED_ID_DEFINITIONS_TEST_APP + File.separator;
+				
+		// These EMMA flags are added, because of EMMA reporting in Hudson
+		String emmaOutputFileFlag = "-Demma.coverage.out.file=" + e32 + "testdata" + File.separator + "reports" + File.separator + "emma" + File.separator + "coverage.emma";
+		String emmaOutputMergeFlag = "-Demma.coverage.out.merge=true";
+
+		pb = new ProcessBuilder("java", emmaOutputFileFlag, emmaOutputMergeFlag, "-classpath", ".", //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+				"com.nokia.tracecompiler.TraceCompiler", FIXED_ID_DEFINITIONS_TEST_APP_UID3, //$NON-NLS-1$
+				FIXED_ID_DEFINITIONS_TEST_APP, fixedIdDefinitionsTestAppPath
+						+ "group" + File.separator //$NON-NLS-1$
+						+ FIXED_ID_DEFINITIONS_TEST_APP + ".mmp", //$NON-NLS-1$
+				fixedIdDefinitionsTestAppPath + SRC_DIRECTORY + File.separator
+						+ FIXED_ID_DEFINITIONS_TEST_APP + CPP_EXTENSION);
+
+		compilerPath = new File(e32 + "epoc32" + File.separator + "tools" //$NON-NLS-1$//$NON-NLS-2$
+				+ File.separator + "tracecompiler" + File.separator); //$NON-NLS-1$
+
+		lineSeparator = System.getProperty("line.separator"); //$NON-NLS-1$
+
+		sourceFileNameWithFullPath = fixedIdDefinitionsTestAppPath
+				+ SRC_DIRECTORY + File.separator
+				+ FIXED_ID_DEFINITIONS_TEST_APP + CPP_EXTENSION;
+
+		fixedIdDefinitionsFileNameWithFullPath = fixedIdDefinitionsTestAppPath
+				+ TRACES_DIRECTORY + File.separator
+				+ FIXED_ID_DEFINITIONS_FILE_NAME;
+	}
+
+	/**
+	 * Check if fixed id file is created correctly when it doesn't already exist
+	 */
+	@Test
+	public void testFixedIdDefinitionsFunctionalityTestCase_1() {
+		int testCaseNumber = 1;
+		System.out
+				.println("*** Check if fixed id file is created correctly when it doesn't already exist ***"); //$NON-NLS-1$
+		executeTestCase(testCaseNumber, 0);
+	}
+
+	/**
+	 * Check new trace points are assigned values correctly (i.e. existing ones
+	 * don't change)
+	 */
+	@Test
+	public void testFixedIdDefinitionsFunctionalityTestCase_2() {
+		int testCaseNumber = 2;
+		System.out
+				.println("*** Check new trace points are assigned values correctly (i.e. existing ones don't change) ***"); //$NON-NLS-1$
+		executeTestCase(testCaseNumber, 0);
+	}
+
+	/**
+	 * Check removed trace points / user-defined groups are obsoleted correctly
+	 */
+	@Test
+	public void testFixedIdDefinitionsFunctionalityTestCase_3() {
+		int testCaseNumber = 3;
+		System.out
+				.println("*** Check removed trace points / user-defined groups are obsoleted correctly ***"); //$NON-NLS-1$
+		executeTestCase(testCaseNumber, 0);
+	}
+
+	/**
+	 * Check that adding a trace point with an obsoleted name is given a new
+	 * value.
+	 */
+	@Test
+	public void testFixedIdDefinitionsFunctionalityTestCase_4() {
+		int testCaseNumber = 4;
+		System.out
+				.println("*** Check that adding a trace point with an obsoleted name is given a new value. ***"); //$NON-NLS-1$
+		executeTestCase(testCaseNumber, 0);
+	}
+
+	/**
+	 * Check that obsoleting all trace points in a component that refer to a
+	 * common group id (e.g. TRACE_FLOW) does NOT mark group as obsolete
+	 */
+	@Test
+	public void testFixedIdDefinitionsFunctionalityTestCase_5() {
+		int testCaseNumber = 5;
+		System.out
+				.println("*** Check that obsoleting all trace points in a component that refer to a common group id (e.g. TRACE_FLOW) does NOT mark group as obsolete ***"); //$NON-NLS-1$
+		executeTestCase(testCaseNumber, 0);
+	}
+
+	/**
+	 * Check that repeatedly obsoleting a trace point does not mess
+	 * TraceCompiler.
+	 */
+	@Test
+	public void testFixedIdDefinitionsFunctionalityTestCase_6() {
+		int testCaseNumber = 6;
+		int subTestNumber = 1;
+		System.out
+				.println("*** Check that repeatedly obsoleting a trace point does not mess TraceCompiler. ***"); //$NON-NLS-1$
+		int numberOfSubTests = 4;
+		while (subTestNumber < numberOfSubTests) {
+			executeTestCase(testCaseNumber, subTestNumber);
+			subTestNumber++;
+		}
+	}
+
+	/**
+	 * Check that repeatedly changing group of the trace point does not mess
+	 * TraceCompiler.
+	 */
+	@Test
+	public void testFixedIdDefinitionsFunctionalityTestCase_7() {
+		int testCaseNumber = 7;
+		int subTestNumber = 1;
+		System.out
+				.println("*** Check that repeatedly changing group of the trace point does not mess TraceCompiler. ***"); //$NON-NLS-1$
+		int numberOfSubTests = 3;
+		while (subTestNumber < numberOfSubTests) {
+			executeTestCase(testCaseNumber, subTestNumber);
+			subTestNumber++;
+		}
+	}
+
+	/**
+	 * Check that a OSTv1 common group id values results in new fixed id file.
+	 */
+	@Test
+	public void testFixedIdDefinitionsFunctionalityTestCase_8() {
+		int testCaseNumber = 8;
+		System.out
+				.println("*** Check that a OSTv1 common group id values results in new fixed id file. ***"); //$NON-NLS-1$
+		executeTestCaseWithTraceCompilerOutputCheck(testCaseNumber, 0);
+	}
+
+	/**
+	 * Check that a OSTv1 user group id values results in new fixed id file.
+	 */
+	@Test
+	public void testFixedIdDefinitionsFunctionalityTestCase_9() {
+		int testCaseNumber = 9;
+		System.out
+				.println("*** Check that a OSTv1 user group id values results in new fixed id file. ***"); //$NON-NLS-1$
+		executeTestCaseWithTraceCompilerOutputCheck(testCaseNumber, 0);
+	}
+
+	/**
+	 * Sub function to execute test case with TraceCompiler output check
+	 * 
+	 * @param testCaseNumber
+	 *            Test case number
+	 */
+	private void executeTestCaseWithTraceCompilerOutputCheck(
+			int testCaseNumber, int subTestNumber) {
+		System.out
+				.println("Start to execute test case with TraceCompiler output check."); //$NON-NLS-1$
+		modifyFixedIdDefinitionsTestApp(testCaseNumber, subTestNumber);
+		InputStream traceCompilerOutput = runTraceCompiler();
+		verifyTraceCompilerOutput(testCaseNumber, subTestNumber,
+				traceCompilerOutput);
+		verifyTestResults(testCaseNumber, subTestNumber);
+	}
+
+	/**
+	 * Sub function to execute test case
+	 * 
+	 * @param testCaseNumber
+	 *            Test case number
+	 */
+	private void executeTestCase(int testCaseNumber, int subTestNumber) {
+		System.out.println("Start to execute test case."); //$NON-NLS-1$
+		modifyFixedIdDefinitionsTestApp(testCaseNumber, subTestNumber);
+		if (testCaseNumber > 1) {
+			initializeFixedIDDefinitionsFile(testCaseNumber, subTestNumber);
+		}
+		runTraceCompiler();
+		verifyTestResults(testCaseNumber, subTestNumber);
+	}
+
+	/**
+	 * Initialize fixed_id.defitions file
+	 * 
+	 * @param testCaseNumber
+	 *            Test case number
+	 */
+	private void initializeFixedIDDefinitionsFile(int testCaseNumber,
+			int subTestNumber) {
+		System.out.println("Initialize fixed_id.defitions file"); //$NON-NLS-1$
+		String refesenceFileName;
+		if (subTestNumber == 0) {
+			refesenceFileName = REFERENCE_FID_FILE_NAME_PREFIX
+					+ (testCaseNumber - 1);
+		} else {
+			refesenceFileName = REFERENCE_FID_FILE_NAME_PREFIX + testCaseNumber
+					+ "_" + (subTestNumber - 1); //$NON-NLS-1$
+		}
+		refesenceFileName = refesenceFileName + TXT_EXTENSION;
+		String sourceFile = fixedIdDefinitionsTestAppPath + DATA_DIRECTORY
+				+ File.separator + refesenceFileName;
+		File source = new File(sourceFile);
+		File target = new File(fixedIdDefinitionsFileNameWithFullPath);
+		FileUtils.copyFile(source, target);
+	}
+
+	/**
+	 * Modify FixedIdDefinitionsTestApp application source code
+	 * 
+	 * @param testCaseNumber
+	 *            test case number
+	 */
+	private void modifyFixedIdDefinitionsTestApp(int testCaseNumber,
+			int subTestNumber) {
+		System.out
+				.println("Modify FixedIdDefinitionsTestApp application source code"); //$NON-NLS-1$
+		try {
+			StringBuilder modifiedContents = new StringBuilder();
+			File sourceFile = new File(sourceFileNameWithFullPath);
+			BufferedReader input = new BufferedReader(
+					new FileReader(sourceFile));
+			String line;
+			String currentTestCaseTag = TRACE_USED_IN_TEST_CASE_TAG
+					+ "_" + testCaseNumber; //$NON-NLS-1$
+			if (subTestNumber != 0) {
+				currentTestCaseTag = currentTestCaseTag + "_" + subTestNumber; //$NON-NLS-1$
+			}
+			while ((line = input.readLine()) != null) {
+				if (line.indexOf(TRACE_USED_IN_TEST_CASE_TAG) != -1) {
+					if (line.indexOf(currentTestCaseTag) != -1) {
+						if (line.startsWith(LINE_COMMENT_TAG)) {
+							line = line.substring(LINE_COMMENT_TAG.length());
+						}
+					} else {
+						if (!line.startsWith(LINE_COMMENT_TAG)) {
+							line = LINE_COMMENT_TAG + line;
+						}
+					}
+				}
+				modifiedContents.append(line);
+				modifiedContents.append(lineSeparator);
+			}
+			input.close();
+			Writer sourceFileWriter = new BufferedWriter(new FileWriter(
+					sourceFileNameWithFullPath));
+			sourceFileWriter.write(modifiedContents.toString());
+			sourceFileWriter.close();
+
+			if (testCaseNumber == 8 || testCaseNumber == 9) {
+				String fileContent = "#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt." + lineSeparator; //$NON-NLS-1$
+
+				if (testCaseNumber == 8) {
+					fileContent += "[GROUP]TRACE_FLOW=0x7" + lineSeparator //$NON-NLS-1$
+							+ "[TRACE]TRACE_FLOW[0x7]_TRACE1=0x1"; //$NON-NLS-1$
+				} else if (testCaseNumber == 9) {
+					fileContent += "[GROUP]MY_GROUP=0x70" + lineSeparator //$NON-NLS-1$
+							+ "[TRACE]MY_GROUP [0x70]_TRACE1=0x1"; //$NON-NLS-1$
+				}
+				Writer fixedIDDefinitionsFileWriter = new BufferedWriter(
+						new FileWriter(fixedIdDefinitionsFileNameWithFullPath));
+				fixedIDDefinitionsFileWriter.write(fileContent);
+				fixedIDDefinitionsFileWriter.close();
+			}
+
+		} catch (Exception e) {
+			System.err.println(ERROR_TEXT_PREFIX + e.getMessage());
+			fail();
+		}
+	}
+
+	/**
+	 * Run TraceCompiler
+	 */
+	private InputStream runTraceCompiler() {
+		System.out.println("Run TraceCompiler"); //$NON-NLS-1$
+		InputStream inp = null;
+		pb.directory(compilerPath);
+		pb.redirectErrorStream(true);
+		// start the compiler
+		try {
+			Process p = pb.start();
+			p.waitFor();
+			inp = p.getInputStream();
+		} catch (Exception e) {// Catch exception if any
+			System.err.println(ERROR_TEXT_PREFIX + e.getMessage());
+			fail();
+		}
+
+		return inp;
+	}
+
+	/**
+	 * Verify TraceCompiler output
+	 * 
+	 * @param traceCompilerOutput
+	 *            TraceCompiler output
+	 */
+	private void verifyTraceCompilerOutput(int testCaseNumber,
+			int subTestNumber, InputStream traceCompilerOutput) {
+		System.out.println("Verify TraceCompiler output"); //$NON-NLS-1$
+
+		String refesenceFileName = REFERENCE_TC_OUTPUT_NAME_PREFIX
+				+ testCaseNumber;
+		if (subTestNumber != 0) {
+			refesenceFileName = refesenceFileName + "_" + subTestNumber; //$NON-NLS-1$
+		}
+		refesenceFileName = refesenceFileName + TXT_EXTENSION;
+
+		try {
+			FileInputStream fstreamExpected = new FileInputStream(
+					fixedIdDefinitionsTestAppPath + DATA_DIRECTORY
+							+ File.separator + refesenceFileName);
+			compareExpectedAndActual(fstreamExpected, traceCompilerOutput);
+		} catch (FileNotFoundException e) {
+			System.err.println(ERROR_TEXT_PREFIX + e.getMessage());
+			fail();
+		}
+	}
+
+	/**
+	 * Verify test result
+	 * 
+	 * @param testCaseNumber
+	 *            test case number
+	 */
+	private void verifyTestResults(int testCaseNumber, int subTestNumber) {
+		System.out.println("Verify test result"); //$NON-NLS-1$
+		String refesenceFileName = REFERENCE_FID_FILE_NAME_PREFIX
+				+ testCaseNumber;
+
+		if (subTestNumber != 0) {
+			refesenceFileName = refesenceFileName + "_" + subTestNumber; //$NON-NLS-1$
+		}
+
+		refesenceFileName = refesenceFileName + TXT_EXTENSION;
+		try {
+			FileInputStream fstreamExpected = new FileInputStream(
+					fixedIdDefinitionsTestAppPath + DATA_DIRECTORY
+							+ File.separator + refesenceFileName);
+			FileInputStream fstreamActual = new FileInputStream(
+					fixedIdDefinitionsFileNameWithFullPath);
+			compareExpectedAndActual(fstreamExpected, fstreamActual);
+		} catch (FileNotFoundException e) {
+			System.err.println(ERROR_TEXT_PREFIX + e.getMessage());
+			fail();
+		}
+	}
+
+	/**
+	 * Compare expected and actual input streams
+	 * 
+	 * @param streamExpected
+	 *            Expected input stream
+	 * @param streamActual
+	 *            Actual input stream
+	 */
+	private void compareExpectedAndActual(InputStream streamExpected,
+			InputStream streamActual) {
+		System.out.println("Compare expected and actual input streams"); //$NON-NLS-1$
+		try {
+			// Get the objects of DataInputStream
+			DataInputStream inExpected = new DataInputStream(streamExpected);
+			DataInputStream inActual = new DataInputStream(streamActual);
+			BufferedReader brExpected = new BufferedReader(
+					new InputStreamReader(inExpected));
+			BufferedReader brActual = new BufferedReader(new InputStreamReader(
+					inActual));
+
+			String strLineExpected;
+			String strLineActual;
+			int i = 1;
+			// compare the expected and actual input streams
+			while (((strLineExpected = brExpected.readLine()) != null)
+					&& (((strLineActual = brActual.readLine()) != null))) {
+
+				// Skip EMMA outputs if those exists
+				if (strLineActual.trim().startsWith(EMMA_OUTPUT_PREFIX)) {
+						strLineActual = brActual.readLine();
+						if (strLineActual == null) {
+							break;
+						}
+				}
+
+				// Following check skips different TraceCompiler execution time
+				// values
+				if (strLineExpected
+						.indexOf(FIXED_ID_DEFINITIONS_TEST_APP_TOOK_NOTE_PREFIX) != -1
+						&& strLineActual
+								.indexOf(FIXED_ID_DEFINITIONS_TEST_APP_TOOK_NOTE_PREFIX) != -1) {
+					strLineActual = strLineActual.trim().substring(
+							0,
+							FIXED_ID_DEFINITIONS_TEST_APP_TOOK_NOTE_PREFIX
+									.length());
+
+				}
+				assertTrue(ERROR_TEXT_PREFIX + "Line \"" + strLineActual //$NON-NLS-1$
+						+ "\" does not match to \"" + strLineExpected + "\"", //$NON-NLS-1$ //$NON-NLS-2$
+						strLineExpected.compareTo(strLineActual) == 0);
+				i++;
+			}
+			
+			// Check that actual file does not contain any extra lines, it could be that there are some EMMA outputs and those are ok
+			while ((strLineActual = brActual.readLine()) != null) {
+				assertTrue(
+						ERROR_TEXT_PREFIX
+								+ "Actual file does contain extra lines", strLineActual.trim().startsWith(EMMA_OUTPUT_PREFIX)); //$NON-NLS-1$				
+			}
+			
+			// never entered loop therefore there actual file was empty or
+			// missing
+			assertTrue(ERROR_TEXT_PREFIX + "Actual file was empty or missing", //$NON-NLS-1$
+					i > 0);
+
+			inExpected.close();
+			inActual.close();
+		} catch (Exception e) {
+			System.err.println(ERROR_TEXT_PREFIX + e.getMessage());
+			fail();
+		}
+	}
+
+	/**
+	 * tearDown
+	 */
+	@Test
+	public void tearDown() {
+		System.out.println("Comment out all trace points in FixedIdDefinitionsTestApp"); //$NON-NLS-1$
+		modifyFixedIdDefinitionsTestApp(0, 0);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/GroupNamesTest.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+import static org.junit.Assert.*;
+import java.io.*;
+
+import org.junit.Test;
+
+import com.nokia.tracecompiler.TraceCompilerRootException;
+import com.nokia.tracecompiler.project.*;
+
+public class GroupNamesTest { 
+
+	
+	public static void main(String args[]) {		
+	      	org.junit.runner.JUnitCore.main(GroupNamesTest.class.getName());
+	    }
+			
+	@Test
+	public void testGetGroupNameVector() {
+		
+	
+		try {
+			GroupNames.initialiseGroupName();
+		} catch (TraceCompilerRootException e) {
+			fail();
+		}
+					
+		// test group id values obtain by name
+		assertEquals("TRACE_FATAL gid check", GroupNames.getIdByName("TRACE_FATAL"), 129);
+		assertEquals("TRACE_ERROR gid check", GroupNames.getIdByName("TRACE_ERROR"), 130);
+		assertEquals("TRACE_WARNING gid check", GroupNames.getIdByName("TRACE_WARNING"), 131);
+		assertEquals("TRACE_BORDER gid check", GroupNames.getIdByName("TRACE_BORDER"), 132);	    
+		assertEquals("TRACE_API gid check", GroupNames.getIdByName("TRACE_API"), 132);
+		assertEquals("TRACE_IMPORTANT gid check", GroupNames.getIdByName("TRACE_IMPORTANT"), 133);
+		assertEquals("TRACE_NORMAL gid check", GroupNames.getIdByName("TRACE_NORMAL"), 134);
+		assertEquals("TRACE_STATE gid check", GroupNames.getIdByName("TRACE_STATE"), 135);
+		assertEquals("TRACE_INTERNALS gid check", GroupNames.getIdByName("TRACE_INTERNALS"), 136);
+		assertEquals("TRACE_DETAILED", GroupNames.getIdByName("TRACE_DETAILED"), 136);
+		assertEquals("TRACE_DUMP gid check", GroupNames.getIdByName("TRACE_DUMP"), 137);
+		assertEquals("TRACE_DEBUG gid check", GroupNames.getIdByName("TRACE_DEBUG"), 137);
+		assertEquals("TRACE_FLOW gid check", GroupNames.getIdByName("TRACE_FLOW"), 138);
+		assertEquals("TRACE_PERFORMANCE gid check", GroupNames.getIdByName("TRACE_PERFORMANCE"), 139);
+		assertEquals("TRACE_ADHOC gid check", GroupNames.getIdByName("TRACE_ADHOC"), 140);
+		assertEquals("TRACE_EXTENSION gid check", GroupNames.getIdByName("TRACE_EXTENSION"), 141);
+
+		// test GID strings obtained by id
+//		assertEquals("TRACE_FATAL string check", GroupNames.getNameById(129), "TRACE_FATAL");
+//		assertEquals("TRACE_ERROR string check", GroupNames.getNameById(130), "TRACE_ERROR");
+//		assertEquals("TRACE_WARNING string check", GroupNames.getNameById(131), "TRACE_WARNING");
+//		assertEquals("TRACE_BORDER string check", GroupNames.getNameById(132), "TRACE_BORDER");	    
+//		assertEquals("TRACE_IMPORTANT string check", GroupNames.getNameById(133), "TRACE_IMPORTANT");
+//		assertEquals("TRACE_NORMAL string check", GroupNames.getNameById(134), "TRACE_NORMAL");
+//		assertEquals("TRACE_STATE string check", GroupNames.getNameById(135), "TRACE_STATE");
+//		assertEquals("TRACE_INTERNALS string check", GroupNames.getNameById(136), "TRACE_INTERNALS");
+//		assertEquals("TRACE_DUMP string check", GroupNames.getNameById(137), "TRACE_DUMP");
+//		assertEquals("TRACE_FLOW string check", GroupNames.getNameById(138), "TRACE_FLOW");
+//		assertEquals("TRACE_PERFORMANCE string check", GroupNames.getNameById(139), "TRACE_PERFORMANCE");
+//		assertEquals("TRACE_ADHOC string check", GroupNames.getNameById(140), "TRACE_ADHOC");
+//		assertEquals("TRACE_EXTENSION string check", GroupNames.getNameById(141), "TRACE_EXTENSION");	
+//		assertEquals("TRACE_TESTING1 string check", GroupNames.getNameById(254), "TRACE_TESTING1");
+//		assertEquals("TRACE_TESTING2 string check", GroupNames.getNameById(255), "TRACE_TESTING2");	
+	}
+	
+	
+	@Test
+	public void testUserDefinedRange(){
+		// test that the user defined range starts at the expected value
+		assertEquals("user defined range check", GroupNames.USER_GROUP_ID_FIRST, 222);		
+		assertEquals("user defined range check", GroupNames.USER_GROUP_ID_LAST, 253);
+			
+	}
+	
+	@Test
+	public void testModifiedOstHeaderFile(){
+		// copy a modfified file to epoc32\platform\include, rename ost_types.h, run tests, and then replace original ost_types
+	    
+		String e32 = System.getenv("EPOCROOT");
+		if(e32 == null || (e32.length()==0)){
+			fail();
+		}
+		
+		// need to check that e32 ends in a backslash
+		if(!e32.endsWith(File.separator)){ 
+			e32 += File.separator; 
+		}
+		
+		e32 = e32 + "epoc32"+File.separator+"include"+File.separator+"platform"+File.separator;
+		
+		System.out.println(e32);
+		
+		System.setProperty("user.dir", e32);
+		
+		String curDir = System.getProperty("user.dir");
+		System.out.println(curDir);
+		
+		// File (or directory) with old name
+	    File file = new File(e32 + "opensystemtrace_types.h");
+	    
+	    // File (or directory) with new name
+	    File file2 = new File(e32 + "CBR_opensystemtrace_types.h");
+	    
+	    // File (or directory) with new name
+	    File file3 = new File(e32 + "test_opensystemtrace_types.h");
+	    
+	    // Rename file (or directory)
+	    boolean success = file.renameTo(file2);
+	    if (!success) {
+	        // File was not successfully renamed
+	    	fail();
+	    }
+	    
+	    // Rename file (or directory)
+	    success = file3.renameTo(file);
+	    if (!success) {
+	        // File was not successfully renamed
+	    	fail();
+	    }
+	    
+		try {
+			GroupNames.initialiseGroupName();
+		} catch (TraceCompilerRootException e) {
+			fail();
+		}
+		
+		// test group id values obtain by name
+		assertEquals("TRACE_FATAL gid check", GroupNames.getIdByName("TRACE_FATAL"), 149);
+		assertEquals("TRACE_ERROR gid check", GroupNames.getIdByName("TRACE_ERROR"), 150);
+		assertEquals("TRACE_WARNING gid check", GroupNames.getIdByName("TRACE_WARNING"), 151);
+		assertEquals("TRACE_BORDER gid check", GroupNames.getIdByName("TRACE_BORDER"), 152);	    
+		assertEquals("TRACE_API gid check", GroupNames.getIdByName("TRACE_API"), 152);
+		assertEquals("TRACE_IMPORTANT gid check", GroupNames.getIdByName("TRACE_IMPORTANT"), 153);
+		assertEquals("TRACE_NORMAL gid check", GroupNames.getIdByName("TRACE_NORMAL"), 154);
+		assertEquals("TRACE_STATE gid check", GroupNames.getIdByName("TRACE_STATE"), 155);
+		assertEquals("TRACE_INTERNALS gid check", GroupNames.getIdByName("TRACE_INTERNALS"), 156);
+		assertEquals("TRACE_DETAILED", GroupNames.getIdByName("TRACE_DETAILED"), 156);
+		assertEquals("TRACE_DUMP gid check", GroupNames.getIdByName("TRACE_DUMP"), 157);
+		assertEquals("TRACE_DEBUG gid check", GroupNames.getIdByName("TRACE_DEBUG"), 157);
+		assertEquals("TRACE_FLOW gid check", GroupNames.getIdByName("TRACE_FLOW"), 158);
+		assertEquals("TRACE_PERFORMANCE gid check", GroupNames.getIdByName("TRACE_PERFORMANCE"), 159);
+		assertEquals("TRACE_ADHOC gid check", GroupNames.getIdByName("TRACE_ADHOC"), 160);
+		assertEquals("TRACE_EXTENSION gid check", GroupNames.getIdByName("TRACE_EXTENSION"), 161);
+
+		// test GID strings obtained by id
+//		assertEquals("TRACE_FATAL string check", GroupNames.getNameById(149), "TRACE_FATAL");
+//		assertEquals("TRACE_ERROR string check", GroupNames.getNameById(150), "TRACE_ERROR");
+//		assertEquals("TRACE_WARNING string check", GroupNames.getNameById(151), "TRACE_WARNING");
+//		assertEquals("TRACE_BORDER string check", GroupNames.getNameById(152), "TRACE_BORDER");	    
+//		assertEquals("TRACE_IMPORTANT string check", GroupNames.getNameById(153), "TRACE_IMPORTANT");
+//		assertEquals("TRACE_NORMAL string check", GroupNames.getNameById(154), "TRACE_NORMAL");
+//		assertEquals("TRACE_STATE string check", GroupNames.getNameById(155), "TRACE_STATE");
+//		assertEquals("TRACE_INTERNALS string check", GroupNames.getNameById(156), "TRACE_INTERNALS");
+//		assertEquals("TRACE_DUMP string check", GroupNames.getNameById(157), "TRACE_DUMP");
+//		assertEquals("TRACE_FLOW string check", GroupNames.getNameById(158), "TRACE_FLOW");
+//		assertEquals("TRACE_PERFORMANCE string check", GroupNames.getNameById(159), "TRACE_PERFORMANCE");
+//		assertEquals("TRACE_ADHOC string check", GroupNames.getNameById(160), "TRACE_ADHOC");
+//		assertEquals("TRACE_EXTENSION string check", GroupNames.getNameById(161), "TRACE_EXTENSION");
+	} 
+   
+	@Test
+    public void tearDown() {
+        // release objects under test here, if necessary
+		
+		String e32 = System.getenv("EPOCROOT");
+		if(e32 == null || (e32.length()==0)){
+			fail();
+		}
+		
+		// need to check that e32 ends in a backslash
+		if(!e32.endsWith(File.separator)){ 
+			e32 += File.separator; 
+		}
+		
+		e32 = e32 + "epoc32"+File.separator+"include"+File.separator+"platform"+File.separator;
+		
+		System.out.println(e32);
+		
+		System.setProperty("user.dir", e32);
+		
+		String curDir = System.getProperty("user.dir");
+		System.out.println(curDir);
+		
+		// File (or directory) with old name
+	    File file = new File(e32 + "opensystemtrace_types.h");
+	    
+	    // File (or directory) with new name
+	    File file2 = new File(e32 + "CBR_opensystemtrace_types.h");
+	    
+	    	    
+	    boolean i = file.exists();
+	    System.out.println(i);
+	    
+	    // Rename file (or directory)
+	    boolean success = (file.delete());
+	    if (!success) {
+	        fail();
+	    }
+	    
+	    success = file2.renameTo(file);
+	    if (!success) {
+	        // File was not successfully renamed
+	    	fail();
+	    }
+	    
+
+		
+		// File (or directory) with old name
+	    
+	    
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/MacroWrappersTest.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,239 @@
+/*
+* 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:
+*
+* JUnit tests for OST MacroWrappers
+*
+*/
+
+
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import org.junit.Assert;
+import org.junit.Test;
+import com.nokia.tracecompiler.source.*;
+import com.nokia.tracecompiler.document.*;
+
+public class MacroWrappersTest {
+
+	public static void main(String[] args) {
+		org.junit.runner.JUnitCore.main(MacroWrappersTest.class.getName());
+	}
+	
+	@Test
+	public void testMacroWrappers(){
+		
+		// this string should parse down to the following members in list	
+		final String REFERENCE_STR = 
+			"TRACE_DEBUG_ONLY ( mystuff,…, OstTraceExt3( TRACE_DEBUG,DUP7__CONSTRUCTL,\"::ConstructL;x=%d;y=%d;z=%d\",x,y,z ) );";
+		FileDocumentMonitor monitor = new FileDocumentMonitor();		
+		SourceDocumentFactory factory = monitor.getFactory();
+
+		// construct the reference parameter array
+		ArrayList<String> expectedTokens = new ArrayList<String>();
+		expectedTokens.add("TRACE_DEBUG");
+		expectedTokens.add("DUP7__CONSTRUCTL");
+		expectedTokens.add("\"::ConstructL;x=%d;y=%d;z=%d\"");
+		expectedTokens.add("x");
+		expectedTokens.add("y");
+		expectedTokens.add("z");
+
+		// construct the trace string from reference parameters
+		final String TRACE_STR = "OstTraceExt3( "+ expectedTokens.get(0) + 
+								 "," + expectedTokens.get(1) + 
+								 "," + expectedTokens.get(2) +
+								 "," + expectedTokens.get(3) + 
+								 "," + expectedTokens.get(4) +
+								 "," + expectedTokens.get(5) + " )";
+				
+		// first test the parser on an unwrapped string
+		SourceParser sourceParser = new SourceParser(factory, factory.createDocument(TRACE_STR));
+		ArrayList<String> actualTokens = new ArrayList<String>();
+		// parse string
+		try{
+			sourceParser.tokenizeParameters(0, actualTokens, true);			
+		}catch(SourceParserException e){
+			Assert.fail(e.getMessage());
+		}
+						
+		checkContents(actualTokens, expectedTokens); 
+						
+		// Create the wrapped OstTrace...  	
+		final String WRAPPED_STR = "TRACE_DEBUG_ONLY ( mystuff,…, " + TRACE_STR + " );";
+		
+		// do a quick check to see that the reference string matches the string generated from list
+		// we could use java.util.StringTokenizer to generate the expected list, 
+		// but this is test code for tracecompiler after all
+		assertTrue(REFERENCE_STR.compareTo(WRAPPED_STR) == 0 );
+
+		sourceParser = new SourceParser(factory, factory.createDocument(WRAPPED_STR));
+		
+
+		actualTokens.clear();
+		// this string should parse down to the following members in list
+		// [0]	"mystuff"	
+		// [1]	"…"	
+		// [2]	"OstTraceExt3( TRACE_DEBUG, DUP7__CONSTRUCTL, "::ConstructL;x=%d;y=%d;z=%d",x,y,z )"	
+		try{
+			sourceParser.tokenizeParameters(0, actualTokens, true);			
+		}catch(SourceParserException e){
+			Assert.fail(e.getMessage());
+		}
+
+		assertTrue(actualTokens.size() == 3);
+		assertTrue(((String)actualTokens.get(0)).compareTo("mystuff") == 0);
+		assertTrue(((String)actualTokens.get(1)).compareTo("…") == 0);
+		
+		// now check the extracted OstTrace part
+		String ostStr = (String)actualTokens.get(2);
+		assertTrue(ostStr.compareTo(TRACE_STR) == 0);
+		
+		sourceParser = new SourceParser(factory, factory.createDocument(ostStr));
+		actualTokens.clear();
+
+		try{
+			sourceParser.tokenizeParameters(0, actualTokens, true);			
+		}catch(SourceParserException e){
+			Assert.fail(e.getMessage());
+		}
+						
+		checkContents(actualTokens, expectedTokens); 
+	}
+	
+	
+	@Test
+	public void testMultipleMacroWrappers(){
+		
+		// testing parsing of macro in this format
+		//TRACE_DEBUG_ONLY (OstTrace0( TRACE_DETAILED, DUP5__CONSTRUCTL, "::ConstructL" )
+		// , OstTraceExt3( TRACE_BORDER, DUP99__CONSTRUCTL, "::ConstructL;x=%x;y=%x;z=%x",x,y, (x+y) ));
+		
+		final String REFERENCE_STR = 
+			"TRACE_DEBUG_ONLY (OstTrace0( TRACE_DETAILED,DUP5__CONSTRUCTL ),OstTraceExt3( TRACE_BORDER,DUP99__CONSTRUCTL,\"::ConstructL;x=%x;y=%x;z=%x\",x,y,(x+y) ));";
+
+		FileDocumentMonitor monitor = new FileDocumentMonitor();		
+		SourceDocumentFactory factory = monitor.getFactory();
+
+		
+		// construct the reference parameter array
+		ArrayList<String> expectedTokens1 = new ArrayList<String>();
+		expectedTokens1.add("TRACE_DETAILED");
+		expectedTokens1.add("DUP5__CONSTRUCTL");
+		
+		
+		ArrayList<String> expectedTokens2 = new ArrayList<String>();
+		expectedTokens2.add("TRACE_BORDER");
+		expectedTokens2.add("DUP99__CONSTRUCTL");
+		expectedTokens2.add("\"::ConstructL;x=%x;y=%x;z=%x\"");
+		expectedTokens2.add("x");
+		expectedTokens2.add("y");
+		expectedTokens2.add("(x+y)");
+
+		// construct the trace strings from reference parameters
+		final String TRACE_STR1 = "OstTrace0( "+ expectedTokens1.get(0) + 
+								 "," + expectedTokens1.get(1) + " )";
+
+		final String TRACE_STR2 = "OstTraceExt3( "+ expectedTokens2.get(0) + 
+								  "," + expectedTokens2.get(1) + 
+								  "," + expectedTokens2.get(2) +
+								  "," + expectedTokens2.get(3) + 
+								  "," + expectedTokens2.get(4) +
+								  "," + expectedTokens2.get(5) + " )";
+
+		// check it works with TRACE_STR1
+		SourceParser sourceParser = new SourceParser(factory, factory.createDocument(TRACE_STR1));
+		ArrayList<String> actualTokens = new ArrayList<String>();
+		// parse string
+		try{
+			sourceParser.tokenizeParameters(0, actualTokens, true);			
+		}catch(SourceParserException e){
+			Assert.fail(e.getMessage());
+		}
+						
+		checkContents(actualTokens, expectedTokens1); 
+
+		// check it works with TRACE_STR2
+		sourceParser = new SourceParser(factory, factory.createDocument(TRACE_STR2));
+		actualTokens.clear();
+		
+		// parse string
+		try{
+			sourceParser.tokenizeParameters(0, actualTokens, true);			
+		}catch(SourceParserException e){
+			Assert.fail(e.getMessage());
+		}
+						
+		checkContents(actualTokens, expectedTokens2); 
+
+		// create the composite string
+		String TRACE_STR3 = "TRACE_DEBUG_ONLY (" + TRACE_STR1 + "," + TRACE_STR2 + ");";
+
+		// do a quick check to see that the reference string matches the string generated from list
+		// we could use java.util.StringTokenizer to generate the expected list, 
+		// but this is test code for tracecompiler after all
+		assertTrue(REFERENCE_STR.compareTo(TRACE_STR3) == 0);
+		
+		sourceParser = new SourceParser(factory, factory.createDocument(TRACE_STR3));
+		actualTokens.clear();
+
+		// this string should parse down to the following members in list
+		// [0]	"OstTraceExt0( TRACE_DETAILED,DUP5__CONSTRUCTL )" (id=77)	
+		// [1]	"OstTraceExt3( TRACE_BORDER,DUP99__CONSTRUCTL,"::ConstructL;x=%d;y=%d;z=%d",x,y,z )" (id=78)	
+		try{
+			sourceParser.tokenizeParameters(0, actualTokens, true);			
+		}catch(SourceParserException e){
+			Assert.fail(e.getMessage());
+		}
+		
+		assertTrue(actualTokens.size() == 2);
+		final String OST_STR1 = actualTokens.get(0);
+		assertTrue(OST_STR1.compareTo(TRACE_STR1) == 0);
+		final String OST_STR2 = actualTokens.get(1);
+		assertTrue(OST_STR2.compareTo(TRACE_STR2) == 0);
+		
+		
+		// check parsing of first OST macro
+		sourceParser = new SourceParser(factory, factory.createDocument(OST_STR1));
+		actualTokens.clear();
+		try{
+			sourceParser.tokenizeParameters(0, actualTokens, true);			
+		}catch(SourceParserException e){
+			Assert.fail(e.getMessage());
+		}
+
+		checkContents(actualTokens, expectedTokens1);
+		
+
+		// check parsing of second OST macro
+		sourceParser = new SourceParser(factory, factory.createDocument(OST_STR2));
+		actualTokens.clear();
+		try{
+			sourceParser.tokenizeParameters(0, actualTokens, true);			
+		}catch(SourceParserException e){
+			Assert.fail(e.getMessage());
+		}
+
+		checkContents(actualTokens, expectedTokens2);
+		
+	}
+
+	
+	private static void checkContents(final ArrayList<String> ACTUAL, final ArrayList<String> EXPECTED ){
+		assertTrue(ACTUAL.size() == EXPECTED.size());
+		for(int i=0;i < ACTUAL.size();i++){
+			assertTrue( ACTUAL.get(i).compareTo(EXPECTED.get(i)) == 0);			
+		}		
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/MultipleMmpTest.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,754 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+import static org.junit.Assert.fail;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+
+public class MultipleMmpTest {
+	
+	public static void main(String args[]) {		
+	      	org.junit.runner.JUnitCore.main(MultipleMmpTest.class.getName());
+	    }
+	
+	/****************************************************UTILITY FUNCTIONS FOR TESTS************************************************************/
+	
+	private static String epocroot = null; 
+	private static String projectdir = "testdata\\MultipleMmpTestCases\\"; //$NON-NLS-1$
+	private static String dictpath= "epoc32\\ost_dictionaries\\"; //$NON-NLS-1$
+	private static String autogenpath= "epoc32\\include\\platform\\symbiantraces\\autogen\\"; //$NON-NLS-1$
+	private static Pattern versionPattern = Pattern.compile("^.*(\\d+\\.\\d+\\.\\d+).*$"); //$NON-NLS-1$
+	private static Pattern oldversionPat = Pattern.compile("^(1\\..*)|(2\\.1.*)"); //$NON-NLS-1$
+	//old TC version should be up to 2.12.5 as new functionality was submitted to 2.12.6 (we hope)
+	private static Pattern sbsoldversionPat = Pattern.compile("^(1\\..*)|(2\\.[01]\\..*)|(2\\.1[0-2]\\.[0-3].*)"); //$NON-NLS-1$
+	private static String TCversion = ""; //$NON-NLS-1$
+	private static String SBSversion = ""; //$NON-NLS-1$
+	private static File compilerpath;
+	private static boolean oldTC = false;
+	private static boolean oldBuilder = false; 
+	private static HashMap<String, List<File>> headers = new HashMap<String, List<File>>();
+	private static HashMap<String, List<File>> dicts = new HashMap<String, List<File>>();
+	private static HashMap<String, List<File>> sources = new HashMap<String, List<File>>();
+	private static ProcessBuilder sbs_build = new ProcessBuilder("sbs.bat","-k","-c","winscw_udeb.tracecompiler");
+	private static ProcessBuilder sbs_reallyclean = new ProcessBuilder("sbs.bat","-k","-c","winscw_udeb.tracecompiler", "reallyclean");
+	
+
+	@BeforeClass
+	static public void setEnvVariables() {
+		epocroot = System.getenv("EPOCROOT"); //$NON-NLS-1$
+		if(epocroot == null || (epocroot.length()==0)){
+			fail();
+		}
+		
+		// need to check that the path ends in a backslash
+		if(!epocroot.endsWith("\\")){ 
+			epocroot += "\\"; 
+		}
+
+		compilerpath = new File (epocroot + "epoc32" + File.separator + "tools" + File.separator +"tracecompiler" + File.separator); //default value to remove warnings. //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+
+		ProcessBuilder tc = new ProcessBuilder("java", "-classpath", compilerpath.getPath(), //$NON-NLS-1$//$NON-NLS-2$
+				"com.nokia.tracecompiler.TraceCompiler", "-v"); //$NON-NLS-1$//$NON-NLS-2$
+		System.out.println("compilerPath= " + compilerpath); //$NON-NLS-1$
+		tc.directory(compilerpath);
+		tc.redirectErrorStream(true);
+		try {
+		Process p = tc.start();
+		p.waitFor();	
+
+		
+		String str = readProcessOutput(p);
+		System.out.println("TC version = " + str); //$NON-NLS-1$
+		Matcher m = versionPattern.matcher(str.trim());
+		if (m.matches()) {
+			TCversion = m.group(1);
+			System.out.println("TC Version = " + TCversion); //$NON-NLS-1$
+		}
+		
+		m = oldversionPat.matcher(TCversion);
+		if (m.matches()){
+			oldTC=true;
+		}
+
+		System.out.println("TC version = " + TCversion); //$NON-NLS-1$ 
+		System.out.println("OLD TC version = " + oldTC); //$NON-NLS-1$
+
+		ProcessBuilder sbs = new ProcessBuilder("sbs.bat","-v"); //$NON-NLS-1$ //$NON-NLS-2$
+		sbs.directory(compilerpath);
+		sbs.redirectErrorStream(true);
+			
+		//start the compiler
+		p = sbs.start();
+		p.waitFor();
+			
+		InputStream inp = p.getInputStream();
+			
+	        str = ""; //$NON-NLS-1$
+	        int c;
+	        //read the output from the compiler into the input stream
+	        while ((c = inp.read()) != -1) {
+	           	 str= str +((char)c);
+	        }
+
+		System.out.println("SBS version = " + str); //$NON-NLS-1$
+		m = versionPattern.matcher(str.trim());
+		if (m.matches()) {
+			SBSversion = m.group(1);
+		}
+		
+		m = sbsoldversionPat.matcher(SBSversion);
+		if (m.matches()){
+			oldBuilder=true;
+		}
+		
+		} catch (Exception e) {// Catch exception if any
+			System.err.println(e.getMessage());
+		}
+	}
+	
+	
+	public void createListHeadersDicts(String builder)
+	{
+		//The whole logic of what is expected is built here whether we build with sbs 
+		//new TC or old, The structure is re-built for each case.
+		
+		
+		Matcher m = sbsoldversionPat.matcher(SBSversion);
+		if (m.matches()){
+			oldBuilder=true;
+		} else {
+			oldBuilder=false;
+		}
+		
+		
+		System.out.println("OLD Builder :" + builder + ": = " + oldBuilder); //$NON-NLS-1$
+		
+		File tracesHeader1;
+		File tracesHeader2;
+		File tracesHeader3;
+		File tracesHeader4;
+		File source1;
+		File source2;
+		File source3;
+		File source4;
+		File ostTraceDefinitions;
+		File fixedidDefinitions;
+		File ostDict1;
+		File ostDict2;
+		File autogenDict1;
+		File autogenDict2;
+		String loc = "traces\\"; //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces", Arrays.asList(source1, source2, source3, source4));
+		
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces\\traces\\MultipleMmpApp1Traces.h"); //$NON-NLS-1$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces\\traces\\ExtraCppFile1Traces.h"); //$NON-NLS-1$
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces\\traces\\MultipleMmpApp2Traces.h"); //$NON-NLS-1$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces\\traces\\ExtraCppFile2Traces.h"); //$NON-NLS-1$
+		
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces\\traces\\OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces\\traces\\fixed_id.definitions"); //$NON-NLS-1$)
+		headers.put("_traces", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		ostDict1     = new File(epocroot+dictpath+"mmp_traces1_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		ostDict2     = new File(epocroot+dictpath+"mmp_traces2_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$	
+		autogenDict1 = new File(epocroot+autogenpath+"mmp_traces1_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$	
+		autogenDict2 = new File(epocroot+autogenpath+"mmp_traces2_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$
+		
+		//=============================
+		
+		if (!oldBuilder && !oldTC) {
+			loc = "traces_mmp_traces_mmpname1\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_mmpname\\"+ loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldBuilder && !oldTC) {
+			loc = "traces_mmp_traces_mmpname2\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_mmpname", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_mmpname", Arrays.asList(source1, source2, source3, source4));
+		
+		ostDict1     = new File(epocroot+dictpath+"mmp_traces_mmpname1_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		ostDict2     = new File(epocroot+dictpath+"mmp_traces_mmpname2_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$	
+		autogenDict1 = new File(epocroot+autogenpath+"mmp_traces_mmpname1_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$	
+		autogenDict2 = new File(epocroot+autogenpath+"mmp_traces_mmpname2_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces_mmpname", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$
+
+	    //=============================
+	    
+	    loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC) {
+			loc = "traces\\target7_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC) {
+			loc = "traces\\target8_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_slash_target_ext", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_slash_target_ext", Arrays.asList(source1, source2, source3, source4));
+
+		
+		String name1 = "";
+		String name2 = "";
+		if (oldTC) {
+			name1 = "mmp_traces_slash_target_ext1";
+			name2 = "mmp_traces_slash_target_ext2";
+		} else {
+			name1 = "target7_dll";
+			name2 = "target8_dll";
+		}
+		
+		ostDict1     = new File(epocroot+dictpath + name1 + "_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		ostDict2     = new File(epocroot+dictpath + name2 + "_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$	
+		autogenDict1 = new File(epocroot+autogenpath + name1 + "_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$	
+		autogenDict2 = new File(epocroot+autogenpath + name2 + "_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces_slash_target_ext", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$
+		
+	    //================================
+	    loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC) {
+			loc = "traces\\target9_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC) {
+			loc = "traces\\target10_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_slash_target_ext_commonsource", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		sources.put("_traces_slash_target_ext_commonsource", Arrays.asList(source1, source2, source3, source4));
+
+		
+		if (oldTC) {
+			name1 = "mmp_traces_slash_target_ext1_cs";
+			name2 = "mmp_traces_slash_target_ext2_cs";
+		} else {
+			name1 = "target9_dll";
+			name2 = "target10_dll";
+		}
+		ostDict1     = new File(epocroot+dictpath + name1 + "_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		ostDict2     = new File(epocroot+dictpath + name2 + "_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$	
+		autogenDict1 = new File(epocroot+autogenpath + name1 + "_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$	
+		autogenDict2 = new File(epocroot+autogenpath + name2 + "_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces_slash_target_ext_commonsource", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$
+		
+		//==================================
+		loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces_target11_exe\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc +"MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc +"ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces_target12_exe\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_target_type\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_target_type\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_target_type", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_target_type", Arrays.asList(source1, source2, source3, source4));
+
+		ostDict1     = new File(epocroot+dictpath+"target11_exe_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		ostDict2     = new File(epocroot+dictpath+"target12_exe_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$	
+		autogenDict1 = new File(epocroot+autogenpath+"target11_exe_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$	
+		autogenDict2 = new File(epocroot+autogenpath+"target12_exe_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces_target_type", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$	
+		
+		//==================================
+		
+		loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces\\target3_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces_target4_kext\\"; //$NON-NLS-1$ 
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$		
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_mixed\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_mixed\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_mixed", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$		
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_mixed", Arrays.asList(source1, source2, source3, source4));
+
+		String suffix = ""; //$NON-NLS-1$
+		String name = "";
+		if (!oldBuilder) {
+			suffix = "_dll"; //$NON-NLS-1$
+			name = "target3";
+		} else {
+		        name = "mmp_traces_mixed1";
+		}
+
+		ostDict1     = new File(epocroot+dictpath+name + suffix + "_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		autogenDict1 = new File(epocroot+autogenpath+name + suffix + "_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$
+		if (!oldBuilder) {
+			suffix = "_kext"; //$NON-NLS-1$
+			name = "target4";
+		} else {
+			name = "mmp_traces_mixed2";
+		}
+		ostDict2     = new File(epocroot+dictpath+name + suffix + "_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$
+		autogenDict2 = new File(epocroot+autogenpath+name + suffix + "_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces_mixed", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$	
+	}
+	
+	
+	/**
+	 * This function invokes raptor on the desired test c++ project
+	 * 
+	 * @param path String specifying the path the compiler needs
+	 * 				  to run from
+	 */
+	public void InvokeCompiler(String path, String builder) {
+		System.out.println ("InvokeCompiler() for : " + builder);
+		
+		List<File> headersList;
+		List<File> dictsList;
+		try{
+			
+			//set up the directory from which the process will be called
+			if (path.compareTo("_traces")==0){ //$NON-NLS-1$
+				headersList = headers.get("_traces"); //$NON-NLS-1$
+				System.out.println("deleting file " + headersList.toString()); //$NON-NLS-1$
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				dictsList = dicts.get("_traces"); //$NON-NLS-1$
+				System.out.println("deleting file " + dictsList.toString()); //$NON-NLS-1$
+				for (File dict : dictsList) {
+					if (dict.exists()) dict.delete();
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces\\group\\"); //$NON-NLS-1$
+			}
+			else if (path.compareTo("_traces_mmpname")==0){ //$NON-NLS-1$
+				headersList = headers.get("_traces_mmpname"); //$NON-NLS-1$
+				System.out.println("deleting file " + headersList.toString()); //$NON-NLS-1$
+				for (File header : headersList) {
+					if (header.exists()) {
+						header.delete();
+					}
+				}
+				
+				dictsList = dicts.get("_traces_mmpname");
+				System.out.println("deleting file " + dictsList.toString());
+				for (File dict : dictsList) {
+					if (dict.exists()) {
+						dict.delete();
+					}
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_mmpname\\group\\");
+			}
+			else if (path.compareTo("_traces_slash_target_ext")==0){
+				headersList = headers.get("_traces_slash_target_ext");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				dictsList = dicts.get("_traces_slash_target_ext");
+				System.out.println("deleting file " + dictsList.toString());
+				for (File dict : dictsList) {
+					if (dict.exists()) dict.delete();
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\group\\");
+			}
+			else if (path.compareTo("_traces_slash_target_ext_commonsource")==0){
+				headersList = headers.get("_traces_slash_target_ext_commonsource");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				dictsList = dicts.get("_traces_slash_target_ext_commonsource");
+				System.out.println("deleting file " + dictsList.toString());
+				for (File dict : dictsList) {
+					if (dict.exists()) dict.delete();
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\group\\");
+			}
+			else if (path.compareTo("_traces_target_type")==0){
+				headersList = headers.get("_traces_target_type");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				dictsList = dicts.get("_traces_target_type");
+				System.out.println("deleting file " + dictsList.toString());
+				for (File dict : dictsList) {
+					if (dict.exists()) dict.delete();
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_target_type\\group\\");
+			}
+			else if (path.compareTo("_traces_mixed")==0){
+				headersList = headers.get("_traces_mixed");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				dictsList = dicts.get("_traces_mixed");
+				System.out.println("deleting file " + dictsList.toString());
+				for (File dict : dictsList) {
+					if (dict.exists()) dict.delete();
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_mixed\\group\\");
+			}
+			else{
+			
+				System.out.println("Error: Unrecognised test case.");
+				fail();
+			}
+			
+			//set up the process builder object
+			sbs_build.directory(compilerpath);
+			sbs_reallyclean.directory(compilerpath);
+			sbs_build.redirectErrorStream(true);
+			
+			
+			
+			Process p;
+			String str = "";
+			//start the compiler
+			System.out.println("Starting build process ....");
+			
+				System.out.println("Running sbs reallyclean on : " + compilerpath + " command: " + sbs_reallyclean.command().toString());
+				p = sbs_reallyclean.start();
+				readProcessOutput(p);
+				System.out.println("Running sbs on : " + compilerpath + " command: " + sbs_build.command().toString());
+				p = sbs_build.start();
+				str = readProcessOutput(p);
+			
+			
+			int ret = p.exitValue();
+			System.out.println("build process ended....");
+			if (ret!=0){
+				System.out.println("build process failed:"+str);
+			}
+		}
+		
+    	catch (Exception e){//Catch exception if any
+    		System.err.println("Error: " + e.getMessage());
+    		fail();
+        }
+		
+	}
+
+
+	static private String readProcessOutput(Process p) throws IOException {
+		InputStream inp = p.getInputStream();
+		
+			int c;
+			String str = "";	        
+			//read the output from the compiler into the input stream
+			while ((c = inp.read()) != -1) {
+		   	 str= str +((char)c);
+			}
+		return str;
+	}
+	
+	/**
+	 * This function checks that the traces header files have been generated in the expected locations
+	 * 
+	 * @param path  String specifying where to look for the traces header file.  		   
+	 */
+	public void CheckForTracesHeaders(String path) {
+		System.out.println ("CheckForTracesHeaders()");
+		System.out.println("Old Builder : " + oldBuilder + "......Old TC : " + oldTC);
+		List<File> headersList = headers.get(path);
+		List<File> sourceList =  sources.get(path);
+		System.out.println("checking files " + headersList.toString());
+		boolean error = false;
+		if ((path.compareTo("_traces_slash_target_ext")==0 || path.compareTo("_traces_slash_target_ext_commonsource")==0) && oldBuilder && !oldTC){
+			System.out.println("No need to check for header files as old sbs cannot call TC");
+		} else {
+			try {
+				TraceCompilerEngineGlobals.start();
+			} catch (TraceCompilerException e) {
+				fail();
+			}
+			for (File header : headersList) {
+				if (!header.exists()) {
+					error = true;
+					System.out.println("Error: "+header+" does not exist/hasn't been generated by TraceCompiler");
+				} else {
+					String licenceInSource = null;
+					String licenceInHeader = null;
+					File source = null;
+					// read the licence from the header file
+					if (header.getName().trim().equalsIgnoreCase("OstTraceDefinitions.h")) {
+						licenceInSource = TraceCompilerEngineGlobals.getDefaultLicence(true);
+						System.out.println("Reading default licence for OstTraceDefinitions.h" + licenceInSource);
+					} else {
+						if (header.getName().trim().equalsIgnoreCase("fixed_id.definitions")) {
+							licenceInSource = TraceCompilerEngineGlobals.getDefaultLicence(false);
+							System.out.println("Reading default licence for fixed_id.definitions" + licenceInSource);
+						} else {
+							licenceInHeader = readFirstMultiLineComment(header.getAbsolutePath());
+							System.out.println("Reading licence from " + header.getAbsolutePath() + " == " + licenceInHeader);
+							source = sourceList.get(headersList.indexOf(header));
+
+							licenceInSource = readFirstMultiLineComment(source.getAbsolutePath());
+							System.out.println("Reading licence from " + source.getAbsolutePath() + " == " + licenceInSource);
+							if (licenceInSource == null) {
+								//licence should be EPL
+								licenceInSource = TraceCompilerEngineGlobals.getDefaultLicence(true);
+								System.out.println("Reading default licence for " + header.getAbsolutePath() + " == " + licenceInSource);
+							}
+						}
+					}
+					if (licenceInHeader != licenceInHeader) {
+						System.out.println("Error: licence in header " + header + " is not the same in source." + source);
+						fail();
+					}
+				}
+			}
+		
+			if(!error){
+				System.out.println("All Traces Header files have been generated as expected");
+			}
+			else {
+				fail();
+				}
+		}
+	}
+
+
+	/**
+	 * @param path
+	 */
+	private String readFirstMultiLineComment(String path) {
+		StringBuffer sb = new StringBuffer();
+		try {
+			FileReader reader = new FileReader(new File(path));
+			BufferedReader br = new BufferedReader(reader);
+			String line;
+			boolean inComment = false;
+			
+			while ((line = br.readLine()) != null) {
+				if (line.trim().startsWith("/*")) {
+					inComment = true;
+				}
+				if (inComment) {
+					sb.append(line + System.getProperty("line.separator"));
+				}
+				if (line.trim().endsWith("*/") && inComment) {
+					break;
+				}
+			}
+			br.close();
+		} catch (Exception e) {
+			System.out.println("Failed to open/read file " + path + "  " + e.getMessage());
+			fail();
+		}
+		String licence = null;
+		if (sb.length()> 0) {
+			licence = sb.toString();
+			if (!licence.contains("Copyright")) {
+				licence = null;
+			}
+		}
+			
+		return licence;
+	}
+	
+	/**
+	 * This function checks that the dictionary files have been generated in the expected locations with the right name
+	 * 
+	 * @param path.  		   
+	 */
+	public void CheckForDictionary(String path) {
+		System.out.println ("CheckForDictionaries()");
+
+		List<File> dictsList = dicts.get(path);
+		System.out.println("checking files " + dictsList.toString());
+		boolean error = false;
+
+		if ((path.compareTo("_traces_slash_target_ext")==0 || path.compareTo("_traces_slash_target_ext_commonsource")==0) && oldBuilder && !oldTC){
+			System.out.println("No need to check for dictionary as old sbs cannot call TC");
+		} else {
+			for (File dict : dictsList) {
+				if(!dict.exists()) {
+					error = true;
+					System.out.println("Error: "+dict+" does not exist/hasn't been generated by TraceCompiler");
+				}
+			}
+
+			if (!error) {
+				System.out.println("Dictionary files have been generated as expected");
+			}
+			else {
+				fail();
+			}
+		}
+	}
+	
+
+	/****************************************************ACTUAL TESTS************************************************************/
+	@Test
+	public void MultipleMmpsTest1 (){
+		System.out.println ("*********************traces****************************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces", "sbs");		
+		//Check for header files
+		CheckForTracesHeaders("_traces");
+		//Check dictionary
+		CheckForDictionary("_traces");	
+		
+	
+	}
+	
+
+	@Test
+	public void MultipleMmpsTest2 (){
+		System.out.println ("****************traces_mmpname**********************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_mmpname", "sbs");
+		//Check for header files
+		CheckForTracesHeaders("_traces_mmpname");
+		//Check dictionary
+		CheckForDictionary("_traces_mmpname");
+		
+		
+	}
+	
+
+	@Test
+	public void MultipleMmpsTest3 (){
+		System.out.println ("**********traces_slash_target_ext****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_slash_target_ext", "sbs");
+		//Check for header files
+		CheckForTracesHeaders("_traces_slash_target_ext");
+		//Check dictionary
+		CheckForDictionary("_traces_slash_target_ext");	
+		
+		
+	}
+
+	@Test
+	public void MultipleMmpsTest4 (){
+		System.out.println ("**********traces_slash_target_ext_commonsource****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_slash_target_ext_commonsource", "sbs");
+		//Check for header files
+		CheckForTracesHeaders("_traces_slash_target_ext_commonsource");
+		//Check dictionary
+		CheckForDictionary("_traces_slash_target_ext_commonsource");
+		
+		
+				
+	}
+
+	@Test
+	public void MultipleMmpsTest5 (){
+		System.out.println ("**********traces_target_type****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_target_type", "sbs");
+		//Check for header files
+		CheckForTracesHeaders("_traces_target_type");
+		//Check dictionary
+		CheckForDictionary("_traces_target_type");
+		
+		
+	}
+
+	@Test
+	public void MultipleMmpsTest6 (){
+		System.out.println ("**********traces_mixed****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_mixed", "sbs");
+		//Check for header files
+		CheckForTracesHeaders("_traces_mixed");
+		//Check dictionary
+		CheckForDictionary("_traces_mixed");	
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/ParseFunctionParametersTest.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,228 @@
+/*
+ * 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:
+ *
+ * JUnit tests for function parameters parsing
+ *
+ */
+
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import org.junit.Assert;
+import org.junit.Test;
+import com.nokia.tracecompiler.source.*;
+import com.nokia.tracecompiler.document.*;
+
+public class ParseFunctionParametersTest {
+
+	/**
+	 * SourceDocumentFactory
+	 */
+	SourceDocumentFactory iFactory = null;
+
+	public static void main(String[] args) {
+		org.junit.runner.JUnitCore.main(ParseFunctionParametersTest.class
+				.getName());
+	}
+
+	/**
+	 * jUnit test to test function parameter parsing
+	 */
+	@Test
+	public void testFunctionParameterParsing() {
+
+		FileDocumentMonitor monitor = new FileDocumentMonitor();
+		iFactory = monitor.getFactory();
+
+		ArrayList<String> expectedParameterNames = new ArrayList<String>();
+		ArrayList<String> expectedParameterTypes = new ArrayList<String>();
+		String functionHeader;
+
+		// Function header 1
+
+		// First expected parameter
+		expectedParameterNames.add("aLenght"); //$NON-NLS-1$
+		expectedParameterTypes.add("TUint32"); //$NON-NLS-1$
+
+		// Second expected parameter
+		expectedParameterNames.add("aWidth"); //$NON-NLS-1$
+		expectedParameterTypes.add("TUint16"); //$NON-NLS-1$
+
+		// Third expected parameter
+		expectedParameterNames.add("aDelay"); //$NON-NLS-1$
+		expectedParameterTypes.add("TUint32"); //$NON-NLS-1$
+
+		// construct the function header
+		functionHeader = "DHelloWorld::DHelloWorld(TUint32 aLenght, TUint16 aWidth, TUint32 aDelay)\n" //$NON-NLS-1$
+				+ "{"; //$NON-NLS-1$
+
+		System.out.println("Execute test to function header 1"); //$NON-NLS-1$
+		executeTest(expectedParameterNames, expectedParameterTypes,
+				functionHeader);
+
+		// Function header 2
+
+		// Clear expected names and types arrays
+		expectedParameterNames.clear();
+		expectedParameterTypes.clear();
+
+		// construct the function header
+		functionHeader = "EXPORT_C DMessageHandler::DMessageHandler()\n" //$NON-NLS-1$
+				+ ": iWriter( NULL )\n" //$NON-NLS-1$
+				+ ", iSettings( NULL )\n" //$NON-NLS-1$				
+				+ "{"; //$NON-NLS-1$
+
+		System.out.println("Execute test to function header 2"); //$NON-NLS-1$
+		executeTest(expectedParameterNames, expectedParameterTypes,
+				functionHeader);
+
+		// Test headers those caused defects in TraceCompiler version 2.1.0 and
+		// 2.1.1
+		// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+		// x
+
+		System.out
+				.println("Execute tests to function headers those caused defects in TraceCompiler version 2.1.0 and 2.1.1"); //$NON-NLS-1$
+
+		// Clear expected names and types arrays
+		expectedParameterNames.clear();
+		expectedParameterTypes.clear();
+
+		// First expected parameter
+		expectedParameterNames.add("aObserver"); //$NON-NLS-1$
+		expectedParameterTypes.add("MModemLcsServerObserver"); //$NON-NLS-1$
+
+		// Second expected parameter
+		expectedParameterNames.add("aIsiMsgObserver"); //$NON-NLS-1$
+		expectedParameterTypes.add("MModemLcsIsiMsgObserver"); //$NON-NLS-1$
+
+		// construct the function header
+		functionHeader = "Cmodemlcsserverrrc::Cmodemlcsserverrrc(MModemLcsServerObserver *aObserver, MModemLcsIsiMsgObserver* aIsiMsgObserver):\n" //$NON-NLS-1$
+				+ " CActive(EPriorityStandard) // Standard priority\n" //$NON-NLS-1$
+				+ "{"; //$NON-NLS-1$
+
+		executeTest(expectedParameterNames, expectedParameterTypes,
+				functionHeader);
+
+		// Clear expected names and types arrays
+		expectedParameterNames.clear();
+		expectedParameterTypes.clear();
+
+		// First expected parameter
+		expectedParameterNames.add("aDriver"); //$NON-NLS-1$
+		expectedParameterTypes.add("RMeDriver"); //$NON-NLS-1$
+
+		// Second expected parameter
+		expectedParameterNames.add("aMaxMsgLength"); //$NON-NLS-1$
+		expectedParameterTypes.add("TUint16"); //$NON-NLS-1$
+
+		// construct the function header
+		functionHeader = "CNpeSendData::CNpeSendData(RMeDriver* aDriver, TUint16 aMaxMsgLength): CActive(EPriorityStandard),\n" //$NON-NLS-1$
+				+ "iDriver(aDriver),\n" //$NON-NLS-1$
+				+ "iMaxMsgLength(aMaxMsgLength)\n" //$NON-NLS-1$
+				+ "{"; //$NON-NLS-1$
+
+		executeTest(expectedParameterNames, expectedParameterTypes,
+				functionHeader);
+
+		// Same expected parameter names and types are used as previous case
+
+		// construct the function header
+		functionHeader = "CNpeReceiveData::CNpeReceiveData(RMeDriver* aDriver, TUint16 aMaxMsgLength): CActive(EPriorityStandard),\n" //$NON-NLS-1$
+				+ "iDriver(aDriver),\n" //$NON-NLS-1$
+				+ "iMaxMsgLength(aMaxMsgLength)\n" //$NON-NLS-1$
+				+ "{"; //$NON-NLS-1$
+
+		executeTest(expectedParameterNames, expectedParameterTypes,
+				functionHeader);
+		// x
+		// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+	}
+
+	/**
+	 * Execute test for function header
+	 * 
+	 * @param expectedParameterNames
+	 *            expected parameter names
+	 * @param expectedParameterTypes
+	 *            expected parameter types
+	 * @param functionHeader
+	 *            function header to be parsed
+	 */
+	private void executeTest(ArrayList<String> expectedParameterNames,
+			ArrayList<String> expectedParameterTypes,
+			final String functionHeader) {
+
+		// first test the parser on an unwrapped string
+		SourceParser sourceParser = new SourceParser(iFactory, iFactory
+				.createDocument(functionHeader));
+
+		// ArrayList<String> actualTokens = new ArrayList<String>();
+		ArrayList<SourceParameter> actualParameters = new ArrayList<SourceParameter>();
+
+		// parse string
+		try {
+			sourceParser.parseFunctionParameters(0, actualParameters);
+
+		} catch (SourceParserException e) {
+			Assert.fail(e.getMessage());
+		}
+
+		checkContents(actualParameters, expectedParameterNames,
+				expectedParameterTypes);
+	}
+
+	/**
+	 * Check contents
+	 * 
+	 * @param actualParameters
+	 *            actual parsed parameters
+	 * @param expectedParameterNames
+	 *            expected parameter names
+	 * @param expectedParameterTypes
+	 *            expected parameter types
+	 */
+	private static void checkContents(
+			final ArrayList<SourceParameter> actualParameters,
+			final ArrayList<String> expectedParameterNames,
+			final ArrayList<String> expectedParameterTypes) {
+
+		// Confirm count of parsed parameters
+		
+		System.out.println("Confirm count of parsed parameters:"); //$NON-NLS-1$
+		System.out.println("actualParameters.size() = " + actualParameters.size()); //$NON-NLS-1$
+		System.out.println("expectedParameterNames() = " + expectedParameterNames.size()); //$NON-NLS-1$
+		assertTrue(actualParameters.size() == expectedParameterNames.size());
+		for (int i = 0; i < actualParameters.size(); i++) {
+
+			// Confirm parsed parameter names
+			
+			System.out.println("Confirm parsed parameter names:"); //$NON-NLS-1$
+			System.out.println("actualParameters name = " + actualParameters.get(i).getName()); //$NON-NLS-1$
+			System.out.println("expectedParameter name = " + expectedParameterNames.get(i)); //$NON-NLS-1$
+			assertTrue(actualParameters.get(i).getName().compareTo(
+					expectedParameterNames.get(i)) == 0);
+
+			// Confirm parsed parameter types
+			
+			System.out.println("Confirm parsed parameter types:"); //$NON-NLS-1$
+			System.out.println("actualParameters type = " + actualParameters.get(i).getType()); //$NON-NLS-1$
+			System.out.println("expectedParameter type = " + expectedParameterTypes.get(i)); //$NON-NLS-1$
+			assertTrue(actualParameters.get(i).getType().compareTo(
+					expectedParameterTypes.get(i)) == 0);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/PluginTracePropertyVerifierTest.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 2009-2010 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:
+ *
+ * JUnit tests for PluginTracePropertyVerifier
+ *
+ */
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class PluginTracePropertyVerifierTest extends TestCase {
+
+	/**
+	 * Class to PluginTracePropertyVerifier
+	 */
+	static Class<?> pluginTracePropertyVerifier;
+
+	/**
+	 * PluginTracePropertyVerifier object
+	 */
+	static Object ptpvObject;
+
+	/**
+	 * Empty string
+	 */
+	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+
+	/**
+	 * White space
+	 */
+	private static final String WHITE_SPACE = " "; //$NON-NLS-1$
+
+	/**
+	 * Enum for different functions to test
+	 * 
+	 */
+	private enum FunctionToTest {
+		ISVALIDDATA
+	}
+
+	/**
+	 * TestData class
+	 * 
+	 */
+	private class TestData {
+		String testString;
+		boolean expectedIsValidDataResult;
+
+		/**
+		 * 
+		 * Constructor
+		 * 
+		 * @param testStringParam
+		 *            the test string
+		 * @param expectedIsValidDataResultParam
+		 *            the expected return value in case of isValidData
+		 *            method
+		 */
+		TestData(String testStringParam, boolean expectedIsValidDataResultParam) {
+			this.testString = testStringParam;
+			this.expectedIsValidDataResult = expectedIsValidDataResultParam;
+		}
+	}
+
+	/**
+	 * List of test data
+	 */
+	List<TestData> testDataList = new ArrayList<TestData>();
+
+	/**
+	 * main
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		org.junit.runner.JUnitCore
+				.main(PluginTracePropertyVerifierTest.class.getName());
+	}
+
+	/**
+	 * setUp
+	 */
+	@Before
+	public void setUp() {
+
+		if (testDataList.size() == 0) {
+			initializeTestDataList();
+		}
+
+		if (pluginTracePropertyVerifier == null && ptpvObject == null) {
+			try {
+				pluginTracePropertyVerifier = Class
+						.forName("com.nokia.tracecompiler.engine.plugin.PluginTracePropertyVerifier"); //$NON-NLS-1$
+				ptpvObject = pluginTracePropertyVerifier.newInstance();
+			} catch (Exception e) {
+				Assert.fail(e.toString());
+			}
+		}
+
+	}
+
+	/**
+	 * Initialize test data list
+	 */
+	private void initializeTestDataList() {
+		char VTAB = 0xB; //vertical TAB
+		testDataList.add(new TestData("Some valid text", true)); //valid text //$NON-NLS-1$
+		testDataList.add(new TestData("Some text with non-valid character - vertical TAB - : " + String.valueOf(VTAB) , false)); //$NON-NLS-1$
+		testDataList.add(new TestData("Some valid text with TAB	: " , true)); //$NON-NLS-1$
+		testDataList.add(new TestData("Some valid text with TABs				: " , true)); //$NON-NLS-1$
+	}
+
+	/**
+	 * Execute tests
+	 * 
+	 * @param nameOfFunctionUnderTest
+	 *            the name of the function that should be tested
+	 * @param testType
+	 *            the number of expected result column
+	 */
+	private void executeTests(String nameOfFunctionUnderTest,
+			FunctionToTest testType) {
+		for (int i = 0; i < testDataList.size(); i++) {
+			String testString = testDataList.get(i).testString;
+			boolean expectedResult = false;
+
+			switch (testType) {
+			case ISVALIDDATA:
+				expectedResult = testDataList.get(i).expectedIsValidDataResult;
+				break;
+			}
+
+			executeTest(nameOfFunctionUnderTest, testString, expectedResult);
+		}
+	}
+
+	/**
+	 * Execute test
+	 * 
+	 * @param nameOfFunctionUnderTest
+	 *            the name of the function that should be tested
+	 * @param testString
+	 *            the test string that is used in test
+	 * @param columNumberOfExpectedResult
+	 *            the number of expected result column
+	 */
+	private void executeTest(String nameOfFunctionUnderTest, String testString,
+			boolean expectedResult) {
+		Method functionUnderTest = null;
+		try {
+			functionUnderTest = pluginTracePropertyVerifier.getDeclaredMethod(
+					nameOfFunctionUnderTest, String.class);
+			// change access of the function under test because otherwise we can
+			// test to private functions
+			functionUnderTest.setAccessible(true);
+			// invoke the function and get result
+			Object retObj = null;
+
+			// remove white spaces from test string, because those those does
+			// not exist in real life either
+			retObj = functionUnderTest.invoke(ptpvObject, testString.replace(
+					WHITE_SPACE, EMPTY_STRING));
+
+			// cast the result to the expected return type.
+			Boolean res = (Boolean) retObj;
+
+			String msg = functionUnderTest.getName() + "  invoked on \"" //$NON-NLS-1$
+					+ testString + "\" returned " + res.toString(); //$NON-NLS-1$
+			Assert.assertEquals(msg, expectedResult, res.booleanValue());
+		} catch (Exception e) {
+			Assert.fail(e.getMessage());
+		}
+	}
+
+	/**
+	 * Test isValidData method
+	 */
+	@Test
+	public void testIsValidDataMethod() {
+		executeTests("isValidData", FunctionToTest.ISVALIDDATA); //$NON-NLS-1$
+	}
+
+	//add future methods tests after this point.
+	
+	/**
+	 * tearDown
+	 */
+	@After
+	public void tearDown() {
+		// nothing to do
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/TraceHeadersLicenceTest.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,600 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+import static org.junit.Assert.fail;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+
+public class TraceHeadersLicenceTest {
+	
+	public static void main(String args[]) {		
+	      	org.junit.runner.JUnitCore.main(TraceHeadersLicenceTest.class.getName());
+	    }
+	
+	/****************************************************UTILITY FUNCTIONS FOR TESTS************************************************************/
+	
+	private static String epocroot = null; 
+	private static String projectdir = "testdata\\MultipleMmpTestCases\\"; //$NON-NLS-1$
+	private static Pattern versionPattern = Pattern.compile("^.*(\\d+\\.\\d+\\.\\d+).*$"); //$NON-NLS-1$
+	private static Pattern oldversionPat = Pattern.compile("^(1\\..*)|(2\\.1.*)"); //$NON-NLS-1$
+	//old TC version should be up to 2.12.5 as new functionality was submitted to 2.12.6 (we hope)
+	private static Pattern sbsoldversionPat = Pattern.compile("^(1\\..*)|(2\\.[01]\\..*)|(2\\.1[0-2]\\.[0-3].*)"); //$NON-NLS-1$
+	private static String TCversion = ""; //$NON-NLS-1$
+	private static String SBSversion = ""; //$NON-NLS-1$
+	private static File compilerpath;
+	private static boolean oldTC = false;
+	private static boolean oldBuilder = false; 
+	private static HashMap<String, List<File>> headers = new HashMap<String, List<File>>();
+	private static HashMap<String, List<File>> sources = new HashMap<String, List<File>>();
+	private static ProcessBuilder sbs_build = new ProcessBuilder("sbs.bat","-k","-c","winscw_udeb.tracecompiler");
+	private static ProcessBuilder sbs_reallyclean = new ProcessBuilder("sbs.bat","-k","-c","winscw_udeb.tracecompiler", "reallyclean");
+	
+
+	@BeforeClass
+	static public void setEnvVariables() {
+		epocroot = System.getenv("EPOCROOT"); //$NON-NLS-1$
+		if(epocroot == null || (epocroot.length()==0)){
+			fail();
+		}
+		
+		// need to check that the path ends in a backslash
+		if(!epocroot.endsWith("\\")){ 
+			epocroot += "\\"; 
+		}
+
+		compilerpath = new File (epocroot + "epoc32" + File.separator + "tools" + File.separator +"tracecompiler" + File.separator); //default value to remove warnings. //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+
+		ProcessBuilder tc = new ProcessBuilder("java", "-classpath", compilerpath.getPath(), //$NON-NLS-1$//$NON-NLS-2$
+				"com.nokia.tracecompiler.TraceCompiler", "-v"); //$NON-NLS-1$//$NON-NLS-2$
+		System.out.println("compilerPath= " + compilerpath); //$NON-NLS-1$
+		tc.directory(compilerpath);
+		tc.redirectErrorStream(true);
+		try {
+		Process p = tc.start();
+		p.waitFor();	
+
+		
+		String str = readProcessOutput(p);
+		System.out.println("TC version = " + str); //$NON-NLS-1$
+		Matcher m = versionPattern.matcher(str.trim());
+		if (m.matches()) {
+			TCversion = m.group(1);
+			System.out.println("TC Version = " + TCversion); //$NON-NLS-1$
+		}
+		
+		m = oldversionPat.matcher(TCversion);
+		if (m.matches()){
+			oldTC=true;
+		}
+
+		System.out.println("TC version = " + TCversion); //$NON-NLS-1$ 
+		System.out.println("OLD TC version = " + oldTC); //$NON-NLS-1$
+
+		ProcessBuilder sbs = new ProcessBuilder("sbs.bat","-v"); //$NON-NLS-1$ //$NON-NLS-2$
+		sbs.directory(compilerpath);
+		sbs.redirectErrorStream(true);
+			
+		//start the compiler
+		p = sbs.start();
+		p.waitFor();
+			
+		InputStream inp = p.getInputStream();
+			
+	        str = ""; //$NON-NLS-1$
+	        int c;
+	        //read the output from the compiler into the input stream
+	        while ((c = inp.read()) != -1) {
+	           	 str= str +((char)c);
+	        }
+
+		System.out.println("SBS version = " + str); //$NON-NLS-1$
+		m = versionPattern.matcher(str.trim());
+		if (m.matches()) {
+			SBSversion = m.group(1);
+		}
+		
+		m = sbsoldversionPat.matcher(SBSversion);
+		if (m.matches()){
+			oldBuilder=true;
+		}
+		
+		} catch (Exception e) {// Catch exception if any
+			System.err.println(e.getMessage());
+		}
+	}
+	
+	
+	public void createListHeadersDicts(String builder)
+	{
+		//The whole logic of what is expected is built here whether we build with sbs 
+		//new TC or old, The structure is re-built for each case.
+		
+		
+		Matcher m = sbsoldversionPat.matcher(SBSversion);
+		if (m.matches()){
+			oldBuilder=true;
+		} else {
+			oldBuilder=false;
+		}
+		
+		
+		System.out.println("OLD Builder :" + builder + ": = " + oldBuilder); //$NON-NLS-1$
+		
+		File tracesHeader1;
+		File tracesHeader2;
+		File tracesHeader3;
+		File tracesHeader4;
+		File source1;
+		File source2;
+		File source3;
+		File source4;
+		File ostTraceDefinitions;
+		File fixedidDefinitions;
+		String loc = "traces\\"; //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces", Arrays.asList(source1, source2, source3, source4));
+		
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces\\traces\\MultipleMmpApp1Traces.h"); //$NON-NLS-1$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces\\traces\\ExtraCppFile1Traces.h"); //$NON-NLS-1$
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces\\traces\\MultipleMmpApp2Traces.h"); //$NON-NLS-1$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces\\traces\\ExtraCppFile2Traces.h"); //$NON-NLS-1$
+		
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces\\traces\\OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces\\traces\\fixed_id.definitions"); //$NON-NLS-1$)
+		headers.put("_traces", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		
+		//=============================
+		
+		if (!oldBuilder && !oldTC) {
+			loc = "traces_mmp_traces_mmpname1\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_mmpname\\"+ loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldBuilder && !oldTC) {
+			loc = "traces_mmp_traces_mmpname2\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_mmpname", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_mmpname", Arrays.asList(source1, source2, source3, source4));
+		
+	    //=============================
+	    
+	    loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC) {
+			loc = "traces\\target7_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC) {
+			loc = "traces\\target8_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_slash_target_ext", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_slash_target_ext", Arrays.asList(source1, source2, source3, source4));
+				
+	    //================================
+	    loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC) {
+			loc = "traces\\target9_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC) {
+			loc = "traces\\target10_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_slash_target_ext_commonsource", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		sources.put("_traces_slash_target_ext_commonsource", Arrays.asList(source1, source2, source3, source4));
+		
+		//==================================
+		loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces_target11_exe\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc +"MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc +"ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces_target12_exe\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_target_type\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_target_type\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_target_type", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_target_type", Arrays.asList(source1, source2, source3, source4));
+
+		
+		//==================================
+		
+		loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces\\target3_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces_target4_kext\\"; //$NON-NLS-1$ 
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$		
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_mixed\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_mixed\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_mixed", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$		
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_mixed", Arrays.asList(source1, source2, source3, source4));
+	}
+	
+	
+	/**
+	 * This function invokes raptor on the desired test c++ project
+	 * 
+	 * @param path String specifying the path the compiler needs
+	 * 				  to run from
+	 */
+	public void InvokeCompiler(String path, String builder) {
+		System.out.println ("InvokeCompiler() for : " + builder);
+		
+		List<File> headersList;
+		try{
+			
+			//set up the directory from which the process will be called
+			if (path.compareTo("_traces")==0){ //$NON-NLS-1$
+				headersList = headers.get("_traces"); //$NON-NLS-1$
+				System.out.println("deleting file " + headersList.toString()); //$NON-NLS-1$
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				compilerpath = new File (epocroot+projectdir+"mmp_traces\\group\\"); //$NON-NLS-1$
+			}
+			else if (path.compareTo("_traces_mmpname")==0){ //$NON-NLS-1$
+				headersList = headers.get("_traces_mmpname"); //$NON-NLS-1$
+				System.out.println("deleting file " + headersList.toString()); //$NON-NLS-1$
+				for (File header : headersList) {
+					if (header.exists()) {
+						header.delete();
+					}
+				}
+				
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_mmpname\\group\\");
+			}
+			else if (path.compareTo("_traces_slash_target_ext")==0){
+				headersList = headers.get("_traces_slash_target_ext");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\group\\");
+			}
+			else if (path.compareTo("_traces_slash_target_ext_commonsource")==0){
+				headersList = headers.get("_traces_slash_target_ext_commonsource");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\group\\");
+			}
+			else if (path.compareTo("_traces_target_type")==0){
+				headersList = headers.get("_traces_target_type");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_target_type\\group\\");
+			}
+			else if (path.compareTo("_traces_mixed")==0){
+				headersList = headers.get("_traces_mixed");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_mixed\\group\\");
+			}
+			else{
+			
+				System.out.println("Error: Unrecognised test case.");
+				fail();
+			}
+			
+			//set up the process builder object
+			sbs_build.directory(compilerpath);
+			sbs_reallyclean.directory(compilerpath);
+			sbs_build.redirectErrorStream(true);
+			
+			
+			
+			Process p;
+			String str = "";
+			//start the compiler
+			System.out.println("Starting build process ....");
+			
+				System.out.println("Running sbs reallyclean on : " + compilerpath + " command: " + sbs_reallyclean.command().toString());
+				p = sbs_reallyclean.start();
+				readProcessOutput(p);
+				System.out.println("Running sbs on : " + compilerpath + " command: " + sbs_build.command().toString());
+				p = sbs_build.start();
+				str = readProcessOutput(p);
+			
+			
+			int ret = p.exitValue();
+			System.out.println("build process ended....");
+			if (ret!=0){
+				System.out.println("build process failed:"+str);
+			}
+		}
+		
+    	catch (Exception e){//Catch exception if any
+    		System.err.println("Error: " + e.getMessage());
+    		fail();
+        }
+		
+	}
+
+
+	static private String readProcessOutput(Process p) throws IOException {
+		InputStream inp = p.getInputStream();
+		
+			int c;
+			String str = "";	        
+			//read the output from the compiler into the input stream
+			while ((c = inp.read()) != -1) {
+		   	 str= str +((char)c);
+			}
+		return str;
+	}
+	
+	/**
+	 * This function checks that the traces header files have been generated in the expected locations
+	 * 
+	 * @param path  String specifying where to look for the traces header file.  		   
+	 */
+	public void checkForTracesHeadersAndLicence(String path) {
+		System.out.println ("CheckForTracesHeaders()");
+		System.out.println("Old Builder : " + oldBuilder + "......Old TC : " + oldTC);
+		List<File> headersList = headers.get(path);
+		List<File> sourceList =  sources.get(path);
+		System.out.println("checking files " + headersList.toString());
+		boolean error = false;
+		if ((path.compareTo("_traces_slash_target_ext")==0 || path.compareTo("_traces_slash_target_ext_commonsource")==0) && oldBuilder && !oldTC){
+			System.out.println("No need to check for header files as old sbs cannot call TC");
+		} else {
+			try {
+				TraceCompilerEngineGlobals.start();
+			} catch (TraceCompilerException e) {
+				fail();
+			}
+			for (File header : headersList) {
+				if (!header.exists()) {
+					error = true;
+					System.out.println("Error: "+header+" does not exist/hasn't been generated by TraceCompiler");
+				} else {
+					String licenceInSource = null;
+					String licenceInHeader = null;
+					File source = null;
+					// read the licence from the header file
+					if (header.getName().trim().equalsIgnoreCase("OstTraceDefinitions.h")) {
+						licenceInSource = TraceCompilerEngineGlobals.getDefaultLicence(true);
+						System.out.println("Reading default licence for OstTraceDefinitions.h" + licenceInSource);
+					} else {
+						if (header.getName().trim().equalsIgnoreCase("fixed_id.definitions")) {
+							licenceInSource = TraceCompilerEngineGlobals.getDefaultLicence(false);
+							System.out.println("Reading default licence for fixed_id.definitions" + licenceInSource);
+						} else {
+							licenceInHeader = readFirstMultiLineComment(header.getAbsolutePath());
+							System.out.println("Reading licence from " + header.getAbsolutePath() + " == " + licenceInHeader);
+							if (licenceInHeader == null) {
+								System.out.println("No licence found in header file, so fail().");
+								fail();
+							}
+							source = sourceList.get(headersList.indexOf(header));
+
+							licenceInSource = readFirstMultiLineComment(source.getAbsolutePath());
+							System.out.println("Reading licence from " + source.getAbsolutePath() + " == " + licenceInSource);
+							if (licenceInSource == null) {
+								//licence should be EPL
+								System.out.println("No licence found in source file, so get default one.");
+								licenceInSource = TraceCompilerEngineGlobals.getDefaultLicence(true);
+								System.out.println("Reading default licence for " + header.getAbsolutePath() + " == " + licenceInSource);
+							}
+						}
+					}
+					if (licenceInHeader != licenceInHeader) {
+						System.out.println("Error: licence in header " + header + " is not the same in source." + source);
+						fail();
+					}
+				}
+			}
+		
+			if(!error){
+				System.out.println("All Traces Header files have been generated as expected");
+			}
+			else {
+				fail();
+				}
+		}
+	}
+
+
+	/**
+	 * @param path
+	 */
+	private String readFirstMultiLineComment(String path) {
+		StringBuffer sb = new StringBuffer();
+		try {
+			FileReader reader = new FileReader(new File(path));
+			BufferedReader br = new BufferedReader(reader);
+			String line;
+			boolean inComment = false;
+			
+			while ((line = br.readLine()) != null) {
+				if (line.trim().startsWith("/*")) {
+					inComment = true;
+				}
+				if (inComment) {
+					sb.append(line + System.getProperty("line.separator"));
+				}
+				if (line.trim().endsWith("*/") && inComment) {
+					break;
+				}
+			}
+			br.close();
+		} catch (Exception e) {
+			System.out.println("Failed to open/read file " + path + "  " + e.getMessage());
+			fail();
+		}
+		String licence = null;
+		if (sb.length()> 0) {
+			licence = sb.toString();
+			if (!licence.contains("Copyright")) {
+				licence = null;
+			}
+		}
+			
+		return licence;
+	}
+	
+
+	/****************************************************ACTUAL TESTS************************************************************/
+	@Test
+	public void MultipleMmpsTest1 (){
+		System.out.println ("*********************traces****************************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces", "sbs");		
+		//Check for header files
+		checkForTracesHeadersAndLicence("_traces");		
+	
+	}
+	
+
+	@Test
+	public void MultipleMmpsTest2 (){
+		System.out.println ("****************traces_mmpname**********************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_mmpname", "sbs");
+		//Check for header files
+		checkForTracesHeadersAndLicence("_traces_mmpname");		
+		
+	}
+	
+
+	@Test
+	public void MultipleMmpsTest3 (){
+		System.out.println ("**********traces_slash_target_ext****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_slash_target_ext", "sbs");
+		//Check for header files
+		checkForTracesHeadersAndLicence("_traces_slash_target_ext");		
+		
+	}
+
+	@Test
+	public void MultipleMmpsTest4 (){
+		System.out.println ("**********traces_slash_target_ext_commonsource****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_slash_target_ext_commonsource", "sbs");
+		//Check for header files
+		checkForTracesHeadersAndLicence("_traces_slash_target_ext_commonsource");						
+	}
+
+	@Test
+	public void MultipleMmpsTest5 (){
+		System.out.println ("**********traces_target_type****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_target_type", "sbs");
+		//Check for header files
+		checkForTracesHeadersAndLicence("_traces_target_type");
+	}
+
+	@Test
+	public void MultipleMmpsTest6 (){
+		System.out.println ("**********traces_mixed****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_mixed", "sbs");
+		//Check for header files
+		checkForTracesHeadersAndLicence("_traces_mixed");
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/TraceLocationConverterTest.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+import com.nokia.tracecompiler.TraceCompilerRootException;
+import com.nokia.tracecompiler.engine.*;
+import static org.junit.Assert.*;
+import java.io.*;
+
+import org.junit.Test;
+
+import com.nokia.tracecompiler.project.*;
+
+
+public class TraceLocationConverterTest { 
+
+	
+	public static void main(String args[]) {		
+	      	org.junit.runner.JUnitCore.main(TraceLocationConverterTest.class.getName());
+	    }
+	
+	@Test
+    public void searchForOldGroupIdsTest() {  
+		
+		
+		try {
+			GroupNames.initialiseGroupName();
+		} catch (TraceCompilerRootException e) {
+			fail();
+		}
+		
+		
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds(""));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("                              "));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("123456789"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_FATAL=0x1"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_IMPORTANT=0x2"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_NORMAL=0x77"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_PERFORMANCE=0x4"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_STATE=0x5"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_STATE=5"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_STATE=5555"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_STATE=565nh"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_API=0x6"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_FLOW=0x7"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_DETAILED=0x8"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_DEBUG=0x9"));
+		assertFalse("Test case 1",TraceLocationConverter.searchForOldGroupIds("USER_DEFINED_TRACE=0xA1"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("USER_DEFINED_TRACE=0xEA"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_FATAL=0x81"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_ERROR=0x82"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_WARNING=0x83"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_BORDER=0x84"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_API=0x84"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_IMPORTANT=0x85"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_NORMAL=0x86"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_STATE=0x87"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_INTERNALS=0x88"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_DUMP=0x89"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_DEBUG=0x89"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_FLOW=0x8a"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_PERFORMANCE=0x8b"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_ADHOC=0x8c"));
+		assertTrue("Test case 1",TraceLocationConverter.searchForOldGroupIds("TRACE_EXTENSION=0x8d"));
+	}
+	
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/TracesInHeadersTest.java	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+
+public class TracesInHeadersTest {
+	
+		public static void main(String args[]) {		
+	      	org.junit.runner.JUnitCore.main(TracesInHeadersTest.class.getName());
+	    }
+	/****************************************************UTILITY FUNCTIONS FOR TESTS************************************************************/
+	
+	private static String epocroot = null; 
+	private static String projectdir = "testdata\\TracesInHeadersApps\\"; //$NON-NLS-1$
+	private static File compilerpath;
+	private static ProcessBuilder sbs_build = new ProcessBuilder("sbs.bat","-k","-c","winscw_udeb.tracecompiler");
+	private static ProcessBuilder sbs_reallyclean = new ProcessBuilder("sbs.bat","-k","-c","winscw_udeb.tracecompiler", "reallyclean");
+
+	@BeforeClass
+	static public void setEnvVariables() {
+		epocroot = System.getenv("EPOCROOT"); //$NON-NLS-1$
+		if(epocroot == null || (epocroot.length()==0)){
+			fail();
+		}
+		
+		// need to check that the path ends in a backslash
+		if(!epocroot.endsWith("\\")){ 
+			epocroot += "\\"; 
+		}
+	}
+	
+	
+	/**
+	 * This function invokes raptor on the desired test c++ project
+	 * 
+	 * @param path String specifying the path the compiler needs
+	 * 				  to run from
+	 */
+	public void InvokeCompiler(String path, String builder) {
+		System.out.println ("InvokeCompiler() for : " + builder);
+		
+		try{
+			
+			//set up the directory from which the process will be called
+			if (path.compareTo("_diffnames")==0){ //$NON-NLS-1$
+				
+				compilerpath = new File (epocroot+projectdir+"singlemmp_diffnames\\group\\"); //$NON-NLS-1$
+			} else if (path.compareTo("_samenames")==0){ //$NON-NLS-1$
+				
+				compilerpath = new File (epocroot+projectdir+"singlemmp_samenames\\group\\"); //$NON-NLS-1$
+			} else if (path.compareTo("_diffnames_tracesplus")==0){ //$NON-NLS-1$
+				
+				compilerpath = new File (epocroot+projectdir+"singlemmp_diffnames_tracesplus\\group\\"); //$NON-NLS-1$
+			} else if (path.compareTo("_samenames_tracesplus")==0){ //$NON-NLS-1$
+				
+				compilerpath = new File (epocroot+projectdir+"singlemmp_samenames_tracesplus\\group\\"); //$NON-NLS-1$
+			} else if (path.compareTo("_samenames")==0){ //$NON-NLS-1$
+				
+				compilerpath = new File (epocroot+projectdir+"singlemmp_samenames\\group\\"); //$NON-NLS-1$
+			} else if (path.compareTo("_separate_source")==0){ //$NON-NLS-1$
+				
+				compilerpath = new File (epocroot+projectdir+"multmmp_separate_source\\group\\"); //$NON-NLS-1$
+			} else if (path.compareTo("_comm_source")==0){ //$NON-NLS-1$
+				
+				compilerpath = new File (epocroot+projectdir+"multmmp_comm_source\\group\\"); //$NON-NLS-1$
+			} else if (path.compareTo("_comm_source_tracesplus")==0){ //$NON-NLS-1$
+				
+				compilerpath = new File (epocroot+projectdir+"multmmp_comm_source_tracesplus\\group\\"); //$NON-NLS-1$
+			} else if (path.compareTo("_import")==0){ //$NON-NLS-1$
+				
+				compilerpath = new File (epocroot+projectdir+"singlemmp_import\\group\\"); //$NON-NLS-1$
+			} 
+			else{
+			
+				System.out.println("Error: Unrecognised test case.");
+				fail();
+			}
+			
+			//set up the process builder object
+			sbs_build.directory(compilerpath);
+			sbs_reallyclean.directory(compilerpath);
+			sbs_build.redirectErrorStream(true);
+						
+			Process p = null;
+			String str = "";
+			//start the compiler
+			System.out.println("Starting build process ....");
+
+				System.out.println("Running sbs reallyclean on : " + compilerpath + " command: " + sbs_reallyclean.command().toString());
+				p = sbs_reallyclean.start();
+				readProcessOutput(p);
+				System.out.println("Running sbs on : " + compilerpath + " command: " + sbs_build.command().toString());
+				p = sbs_build.start();
+				str = readProcessOutput(p);
+			
+			int ret = p.exitValue();
+			System.out.println("build process ended....");
+			if (ret!=0){
+				if (path.compareTo("_import")==0){ //$NON-NLS-1$
+					System.out.println("build process expected to fail: "+str);
+				} else {
+					System.out.println("build process failed:"+str);
+					fail();
+				}
+			}
+		}
+		
+    	catch (Exception e){//Catch exception if any
+    		System.err.println("Error: " + e.getMessage());
+    		fail();
+        }
+		
+	}
+
+
+	static private String readProcessOutput(Process p) throws IOException {
+		InputStream inp = p.getInputStream();
+		
+			int c;
+			String str = "";	        
+			//read the output from the compiler into the input stream
+			while ((c = inp.read()) != -1) {
+		   	 str= str +((char)c);
+			}
+		return str;
+	}
+
+	
+
+	/****************************************************ACTUAL TESTS************************************************************/
+	@Test
+	public void TracesInHeradersTest1 (){
+		System.out.println ("*********************single mmp with diff names****************************");
+		//Call Raptor
+		InvokeCompiler("_diffnames", "sbs");
+	}
+	
+	@Test
+	public void TracesInHeradersTest2 (){
+		System.out.println ("*********************single mmp with same names****************************");
+		//Call Raptor
+		InvokeCompiler("_samenames", "sbs");
+	}
+	
+	@Test
+	public void TracesInHeradersTest3 (){
+		System.out.println ("*********************single mmp with diff names and using tarce/<taget>_<ext>****************************");
+		//Call Raptor
+		InvokeCompiler("_diffnames_tracesplus", "sbs");
+	}
+	
+	@Test
+	public void TracesInHeradersTest4 (){
+		System.out.println ("*********************single mmp with same names and using tarce/<taget>_<ext>****************************");
+		//Call Raptor
+		InvokeCompiler("_samenames_tracesplus", "sbs");
+	}
+	
+	@Test
+	public void TracesInHeradersTest5 (){
+		System.out.println ("*********************multiple mmp with separate source ****************************");
+		//Call Raptor
+		InvokeCompiler("_separate_source", "sbs");
+	}
+	
+	@Test
+	public void TracesInHeradersTest6 (){
+		System.out.println ("*********************multiple mmp with common source ****************************");
+		//Call Raptor
+		InvokeCompiler("_comm_source", "sbs");
+	}
+	
+	@Test
+	public void TracesInHeradersTest7 (){
+		System.out.println ("*********************multiple mmp with common source and traces/<target>_<ext> ****************************");
+		//Call Raptor
+		InvokeCompiler("_comm_source_tracesplus", "sbs");
+	}
+	
+	@Test
+	public void TracesInHeradersTest8 (){
+		System.out.println ("*********************Traces in header exported to epoc32 by another mmp****************************");
+		//Call Raptor
+		InvokeCompiler("_import", "sbs");
+	}
+	
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/testdata/test_opensystemtrace_types.h	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,532 @@
+/**
+* Copyright (c) 2007-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:
+* Trace API
+*
+*/
+
+
+
+/**
+ @file
+ @publishedPartner
+ @prototype
+*/
+
+
+#ifndef OPENSYSTEMTRACE_TYPES_H
+#define OPENSYSTEMTRACE_TYPES_H
+
+#ifdef __KERNEL_MODE__
+#include <kernel.h>
+#else //__KERNEL_MODE__
+#include <e32std.h>
+#endif //__KERNEL_MODE__
+
+
+/**
+@file
+@publishedPartner
+@prototype
+*/
+
+
+/**
+ * Every trace point must be statically assigned a group ID. This is
+ * essentially a “label” that allows identification of the intended use of
+ * the trace packets generated by the trace point. The Group ID will either 
+ * reflect a system wide Tracing use cases, such as identifying why a panic 
+ * occurred, or is assigned a meaning specific to a component, such as the 
+ * heap trace output from the kernel. In essence the Group ID is a way of 
+ * indicating that trace points / packets are related in some way. 
+ * @see TGroupIdRange for more information.
+ */
+typedef TUint8  TGroupId;
+
+/**
+ * The maximum possible value for TGroupId
+ */
+const static TGroupId KMaxGroupId = 255; // 2^8 - 1
+
+/**
+ * @deprecated Use TGroupId instead
+ * @see TGroupId
+ */
+typedef TUint8  TClassification;
+
+/**
+ * @deprecated Use KMaxGroupId instead
+ * @see KMaxGroupId
+ */
+const static TClassification KMaxClassification = KMaxGroupId;
+
+/**
+ * Each trace point must be statically assigned a ComponentId to indicate the
+ * module in which the trace point is defined. It should always be the UID3
+ * of the binary containing the trace point associated with the component ID. 
+
+ * The ComponentId and Group ID attributes of a trace point are independent.
+ */
+typedef TUint32 TComponentId;
+
+/**
+ * The maximum possible value for TComponentId
+ */
+const static TComponentId KMaxComponentId = 0xFFFFFFFF; // 2^32 - 1, or 4294967295 - 1
+
+/**
+ * The EXECUTABLE_DEFAULT_COMPONENTID can be used to define your own default
+ * specific ComponentId. This is done by defining the macro to be your new
+ * default value.
+ */
+#ifdef EXECUTABLE_DEFAULT_COMPONENTID
+#define FW_DEFAULT_COMPONENTID EXECUTABLE_DEFAULT_COMPONENTID
+#else
+#define FW_DEFAULT_COMPONENTID TTraceContext::DefaultComponentId()
+#endif
+
+/**
+ * Trace IDs have two functions in a trace packet:
+ * 
+ * 1. They identify the individual trace point that created the trace packet.
+ * 2. They specify the format of the trace packet payload. 
+ * 
+ * This only works if the Trace ID value is unique for a given Group ID and 
+ * Component ID, if present, and should be statically assigned during development 
+ * when a trace point is created.  
+ * 
+ * The meaning of a TraceId is specific to the ComponentId and Group ID of the
+ * associated trace point.
+ */
+typedef TUint16 TTraceId;
+
+/**
+ * The maximum possible value for TTraceId
+ */
+const static TTraceId KMaxTraceId = 65535; // 2^16 - 1
+
+/**
+ * Used in packets produced by the Print and Printf functions.
+ *
+ * Note that this format should not be used on the
+ * device by clients of OST. This symbol is only marked
+ * as published to partners to give host side tools access to
+ * it.
+ *
+ * @deprecated No replacement is provided as this symbol is no 
+ * longer needed as a result of the alignment of trace attributes 
+ * in OSTv2.
+ * @see TTraceId
+ */
+const static TTraceId KFormatPrintf = 0;
+
+/**
+ * Used in packets produced by the Print and Printf functions 
+ * for unicode descriptors.
+ *
+ * Note that this format should not be used on the
+ * device by clients of OST. This symbol is only marked
+ * as published to partners to give host side tools access to
+ * it.
+ * 
+ * @deprecated No replacement is provided as this symbol is no 
+ * longer needed as a result of the alignment of trace attributes 
+ * in OSTv2.
+ * @see TTraceId
+ */
+const static TTraceId KFormatPrintfUnicode = 1;
+
+/**
+ * This value was used by UTFv2 clients to specify the start of 
+ * the range of enums used to define their format ids. This is 
+ * no longer necessary as in OSTv2 clients are allowed to use the
+ * whole range without exception. 
+ *
+ * @deprecated No replacement is provided as this symbol is no 
+ * longer needed as a result of the alignment of trace attributes 
+ * in OSTv2.
+ * @see TTraceId
+ */
+const static TTraceId KInitialClientFormat = 512;
+
+/**
+ * Include the thread identification into the trace packet at run-time.
+ * The thread identification is used as an identifier to resolve
+ * thread and process names in conjunction with
+ * Group ID EThreadIdentification = 3.
+ */
+enum THasThreadIdentification
+    {
+    /** Do add the thread identification to the trace packet */
+    EAddThreadIdentification = ETrue,
+    /** Don't add the thread identification */
+    ENoThreadIdentification = EFalse
+    };
+
+
+/**
+ * The EXECUTABLE_DEFAULT_HAS_THREAD_IDENTIFICATION can be used to
+ * define the default setting for adding or not adding the thread
+ * identification in a trace packet. This is done by defining
+ * the macro to be your new default value.
+ */
+#ifdef EXECUTABLE_DEFAULT_HAS_THREAD_IDENTIFICATION
+#define FW_DEFAULT_HAS_THREAD_IDENTIFICATION EXECUTABLE_DEFAULT_HAS_THREAD_IDENTIFICATION
+#else
+#define FW_DEFAULT_HAS_THREAD_IDENTIFICATION EAddThreadIdentification
+#endif
+
+
+/**
+ * Add the program counter into the trace packet at run-time.
+ * The program counter is used to indicate where the CPU is in the
+ * instruction sequence. This can be used to locate the line of code
+ * or routine the trace was sent from.
+ */
+enum THasProgramCounter
+    {
+    /** Do add the program counter to the trace packet. */
+    EAddProgramCounter = ETrue,
+    /** Don't add the program counter */
+    ENoProgramCounter = EFalse
+    };
+
+
+/**
+ * The EXECUTABLE_DEFAULT_HAS_PC can be used to
+ * define the default setting for adding or not adding the
+ * program counter in a trace packet. This is done by defining
+ * the macro to be your new default value.
+ */
+#ifdef EXECUTABLE_DEFAULT_HAS_PC
+#define FW_DEFAULT_HAS_PC EXECUTABLE_DEFAULT_HAS_PC
+#else
+#define FW_DEFAULT_HAS_PC ENoProgramCounter
+#endif
+
+/**
+ * The division of the Group IDs into different ranges aims to manage the
+ * contention for the namespace.
+ *
+ * It is recommended that all developers use the Reserved range as far as possible.
+ *
+ * @see TGroupId
+ */
+enum TGroupIdRange
+    {
+    /**
+     * The Group IDs in the Reserved range should be used by the majority of trace
+     * points. This range of Group IDs are intended to identify which of the
+     * most common trace use-cases a trace point is contributing to. They are unique
+     * across the system.
+     *
+     * The Group IDs in this series are defined solely by the Symbian Foundation but are
+     * intended for use by any software on a device.
+     *
+     * These Group IDs should only be enabled at run-time if the filtering on
+     * ComponentIds functionality is also enabled. This is to avoid accidentally causing
+     * trace live-locks from occurring when just the Group IDs is enabled. This could
+     * happen because trace points in components involved in the current trace output
+     * path might also be assigned these Group IDs. Filtering on ComponentIds means
+     * that those trace points can be activated only when it’s known to be safe to do
+     * so and not accidentally enabled with a Group IDs.
+     *
+     * @see TGroupIdReserved
+     */
+    EOstReservedRangeFirst = 0,
+
+    /**
+     * @see EOstReservedRangeFirst
+     */
+    EOstReservedRangeLast = 221,
+
+    /**
+     * The meaning of Group IDs in this range are defined on a per-component basis.
+     * They are to be unique within a component.
+     */
+    EUserDefinedRangeFirst = 222,
+
+    /**
+     * @see EUserDefinedRangeFirst
+     */
+    EUserDefinedRangeLast = 253,
+    
+    /**
+     * Only for use on the device by test code.
+     *
+     * Trace points with these Group IDs should not be released as part of a
+     * production device.
+     */
+    ETestingRangeFirst = 154,
+
+    /**
+     * @see ETestingRangeFirst
+     */
+    ETestingRangeLast = KMaxGroupId
+    };
+
+/**
+ * The Group IDs in the Reserved range should be used by the majority of
+ * trace points. This range of Group IDs are intended to identify which
+ * of the most common trace use-cases a trace point is contributing to.
+ *
+ * @see TGroupId
+ * @see TGroupIdRange
+ * @see EOstReservedRangeFirst
+ */
+enum TGroupIdReserved
+    {
+    /**
+     * Used when a fatal error, such as a panic, has occurred or when providing information 
+     * on the execution state immediately before the decision to panic.
+     *
+     * A trace point with this Group ID should be used when a fatal condition is detected 
+     * which will result in the flow of execution being halted in the thread associated with 
+     * the trace point.
+     *
+     * Can also provide information describing where a panic has been dealt with. 
+     *
+     * Trace points using this Group ID should be present in a release device. 
+     */
+    TRACE_FATAL = 149,
+
+    /**
+     * Used when an error has occurred which means that the current operation cannot continue 
+     * but is not sufficiently serious to cause a fatal error. These trace packets should 
+     * contain not just the error code but any relevant information about the execution state 
+     * when the error occurred.
+     *
+     * To be used for all types of error including include situations where the errors are 
+     * returned from a function or via a leave. 
+     *
+     * This Group ID also provides information describing where an error has been handled. 
+     */
+    TRACE_ERROR=150,
+
+    /**
+     * Used when something unexpected or unusual has occurred that does not stop the
+     * current operation from happening but may result in unintended side effects or
+     * actual errors later on.
+     */
+    TRACE_WARNING = 151,
+
+    /**
+     * Used to describe activity at the edges of a trace component. 
+     *
+     * Includes data about exported or published functions defined by a trace component as 
+     * well as calls out of the component to get significant information. Exactly what 
+     * is significant depends on the trace component in question. For instance, reading in a 
+     * setting from an INI file would be significant but calling RArray::Count() would not be. 
+     *
+     * The information in this Group ID should be enough to allow someone unfamiliar with the 
+     * trace component to get a high level understanding of what functionality it has executed.
+     */
+    TRACE_BORDER = 152,
+    
+    /**
+    * @deprecated Use TRACE_BORDER instead
+    */
+    TRACE_API = TRACE_BORDER,
+    
+    /**
+     * @deprecated Use TRACE_NORMAL or one of the other reserved Group IDs instead
+     */
+    TRACE_IMPORTANT = 153,
+    
+    /**
+     * Used to described the normal activity within a trace component that might be of interest
+     * to people who use the component.
+     *
+     * The information in this Group ID should be enough to allow someone unfamiliar with the 
+     * trace component to start to understand why a component is behaving the way it is perhaps 
+     * to help with diagnosing problems with the way the component is being used.
+     */
+    TRACE_NORMAL = 154,
+
+    /**
+     * Intended for tracing the state transitions of an application or service such as those
+     * performed by a machine.
+     *
+     * Trace packets using this Group ID should contain the name of the
+     * changed state variable and the new value.
+     */
+    TRACE_STATE  = 155,
+
+    /**
+     * Used to provide detailed information about the normal activity of a trace component
+     * to help a developer, who is familiar with the component, to understand what it is doing.
+     */
+    TRACE_INTERNALS = 156,
+
+    /**
+    * @deprecated Use TRACE_INTERNALS instead
+    */
+    TRACE_DETAILED = TRACE_INTERNALS,
+    
+    /**
+     * Used when there is a need to output large amounts of data through individual trace
+     * points that would likely cause significant intrusion if included under one of the
+     * other Group IDs.
+     *
+     * This Group ID is intended to be used in conjunction with the TRACE_INTERNALS
+     * Group ID to provide more details when debugging a specific trace component.
+     */
+    TRACE_DUMP = 157,
+
+    /**
+    * @deprecated Use TRACE_DUMP instead
+    */    
+    TRACE_DEBUG = TRACE_DUMP,
+    
+    /**
+     * Used to provide comprehensive information on what paths the execution takes within
+     * functions.
+     *
+     * This Group ID is intended mainly to be used by tools that add temporary instrumentation 
+     * points specifically to output this data.
+     */
+    TRACE_FLOW = 158,
+
+    /**
+     * Used to output data about the execution time, memory usage, disk usage, power
+     * utilisation and any other performance characteristics of the associated trace 
+     * component.
+     *
+     * This data may need to be processed before it can provide effective metrics. E.g.
+     * the time between two timestamps might need to be computed.
+     *
+     * Intended only to be used to output a small amount of data to ensure that it 
+     * creates the smallest possible intrusion since otherwise the act of tracing would 
+     * devalue the information it is intended to provide.
+     */
+    TRACE_PERFORMANCE = 159,
+
+    /**
+     * May be used when adding temporary trace points during a debugging session to 
+     * distinguish them from existing instrumentation. 
+     */
+    TRACE_ADHOC = 160,
+    
+    /**
+     * This Group ID is reserved for future use to allow the Group ID range to be expanded 
+     * to cover more than current 256 different values.
+     *
+     * If trace is output on this Group ID at some point in the future then this indicates 
+     * that another mechanism (yet to be decided) will be used to indicate the actual 
+     * Group ID for the trace.
+     */
+    TRACE_EXTENSION = 161,
+
+    /**
+	 * Not intended to be used by code including this header.
+	 * 
+     * Provided to allow the following compile time assert (should NOT be used):
+     * EGroupIdReservedHighWaterMark <= EOstReservedRangeLast + 1
+     *
+     */
+    EGroupIdReservedHighWaterMark
+    } ;
+
+// Check high water mark for the reserved Group ID range
+__ASSERT_COMPILE(EGroupIdReservedHighWaterMark <= EOstReservedRangeLast + 1);
+
+/**
+ * @see TGroupId
+ * @see ETestingRangeFirst
+ * @test
+ */
+enum TGroupIdTesting
+    {
+    /**
+     * This Group ID may be used for testing purposes and is not intended to be used in 
+     * production code. 
+     */
+    TRACE_TESTING1 = ETestingRangeFirst,
+
+    /**
+     * The same as for TRACE_TESTING1
+     */
+    TRACE_TESTING2 = 155,
+
+    /**
+	 * Not intended to be used by code including this header.
+	 * 
+     * Provided to allow the following compile time assert (should NOT be used):
+     * EGroupIdTestingHighWaterMark <= ETestingRangeLast + 1
+     *
+     */
+    EGroupIdTestingHighWaterMark
+    };
+
+// Check high water marks for the testing Group ID range
+__ASSERT_COMPILE(EGroupIdTestingHighWaterMark <= ETestingRangeLast + 1);
+
+/**
+ * @deprecated Use enumerations from TGroupIdReserved instead
+ * @see TGroupId
+ * @see TGroupIdRange
+ * @see EOstReservedRangeFirst
+ */
+enum TClassificationAll
+    {
+    EPanic = TRACE_FATAL,
+    EError = TRACE_ERROR,
+    EWarning = TRACE_WARNING,
+    EBorder = TRACE_BORDER,
+    EState = TRACE_STATE,
+    EInternals = TRACE_INTERNALS,
+    EDump = TRACE_DUMP,
+    EFlow = TRACE_FLOW,
+    ESystemCharacteristicMetrics = TRACE_PERFORMANCE,
+    EAdhoc = TRACE_ADHOC,
+    EClassificationAllHighWaterMark
+    };
+
+// Check high water mark for the 'All' classification range
+__ASSERT_COMPILE(EClassificationAllHighWaterMark <= EOstReservedRangeLast + 1);
+
+/**
+ * @deprecated Use enumerations from TGroupIdReserved instead
+ * @see TGroupId
+ * @see TGroupIdRange
+ * @see EOstReservedRangeFirst
+ */
+enum TClassificationSymbianTwo
+	{
+	EClassificationExtension = TRACE_EXTENSION,
+	EClassificationSymbianTwoHighWaterMark
+	};
+
+// Check high water marks for the Symbian Two classification range
+__ASSERT_COMPILE(EClassificationSymbianTwoHighWaterMark <= EOstReservedRangeLast + 1);
+
+/**
+ * @deprecated Use enumerations from TGroupIdTesting instead
+ * @see TGroupId
+ * @see TGroupIdRange
+ * @see ETestingRangeFirst
+ * @test
+ */
+enum TClassificationTesting
+	{
+	ETesting1 = TRACE_TESTING1,
+	ETesting2 = TRACE_TESTING2,
+	EClassificationTestingHighWaterMark,
+	};
+
+// Check high water marks for classification ranges
+__ASSERT_COMPILE(EClassificationTestingHighWaterMark <= ETestingRangeLast + 1);
+
+
+#endif //OPENSYSTEMTRACE_TYPES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/tracecompiler/readme.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,75 @@
+------------TraceCompiler------------
+
+
+
+----What is TraceCompiler?----
+
+TraceCompiler will find OST (Open System Trace) traces from source files and generate needed headers and decode files for them
+during component compilation time.
+
+
+
+----What are OST traces?----
+
+Open System Trace traces. Macros can be found from the header OpenSystemTrace.h. OST is a binary tracing concept for good performance
+and run-time activation of traces.
+
+
+
+----How to set up TraceCompiler?----
+
+Remove comments before exports from group folder bld.inf
+When compiled from the group folder, will export itself to /epoc32/tools folder.
+
+Usually TraceCompiler is already integrated to Symbian build system, so there is no need to run TraceCompiler separately. Symbian build system calls 
+TraceCompiler automatically during component compilation. 
+
+If TraceCompiler is not integrated to build system but is needed to be run automatically when building a component
+abld.pl in /epoc32/tools/ needs to be changed to call tracecompiler.pl file. Note that the change might already be there.
+
+Change is done after a line like this:
+  "foreach $LoopBld (@Blds) {"
+			
+And the change is this: (First line is comment)
+
+	# Add the TraceCompiler once to the Calls array when TARGET is called
+	$Command eq "TARGET" and not scalar grep(/tracecompiler\.pl/,@Calls) and push @Calls, "perl /epoc32/tools/tracecompiler.pl $Plat $Program";
+
+
+		
+----How to use TraceCompiler?----
+
+Usually TraceCompiler is already integrated to Symbian build system, so there is no need to run TraceCompiler separately. Symbian build system calls 
+TraceCompiler automatically during component compilation. 
+
+If there is need to run TraceCompiler manually, it can be done following way:
+
+   perl /epoc32/tools/tracecompiler.pl <platform> [program]
+
+   For example: perl /epoc32/tools/tracecompiler.pl armv5
+		
+
+
+----How to actually get the traces?----
+Open System Trace macros use Symbian BTrace framework to forward the traces. To get these traces, you must implement a trace handler which will
+register itself to the Symbian BTrace using command BTrace::SetHandler( MyHandler ). Then it's up to you what to do with the traces.
+
+
+
+----What is happening in TraceCompiler?----
+
+1. tracecompiler.pl first runs a Java check to ensure that Java 1.5 or newer is found from the system. If this fails, tracecompiler.pl will exit.
+	 
+   If Java check is OK, tracecompiler.pl opens a "abld.bat" file which is generated by command "bldmake bldfiles". From that file, a path to
+   MAKEFILE generated by "bldmake bldfiles" is searched. This MAKEFILE is then opened and is parsed for a list of project MMP files. These MMP
+   files are then forwarded to the tracecompiler_parse_mmp.pl script.
+	 
+2. tracecompiler_parse_mmp.pl gets a MMP file as a parameter. It parses the MMP file for UID of the component and paths to all the source files.
+	 NOTE that MACROS are NOT supported! If UID cannot be found from the MMP file, tracecompiler_parse_mmp.pl will exit. If UID is found,
+	 TraceCompiler Java application is started and the component UID is given to it as a parameter. After it's started, component name, the path
+	 to the MMP file of the component and a list of source paths are send to STDOUT of TraceCompiler Java application. When all source paths are
+	 send, tracecompiler_parse_mmp.pl sends end tag "*ENDOFSOURCEFILES*" to TraceCompiler so it knows all the sources are then sent.
+	 
+3. TraceCompiler Java application listens to STDIN for component name, MMP file path and the paths to the source files. When it receives
+   "*ENDOFSOURCEFILES*" tag, it starts processing the source files. It finds all OST traces from the source files and generates needed headers
+   for the application to compile properly. It also generates autogen header and Symbian Dictionary file from the traces.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/tracecompiler/release_note.txt	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,112 @@
+NOTE: JRE1.5 is needed to run TraceCompiler.
+
+TraceCompiler 2.3.0
+
+New stuff in 2.3.0
+	- TraceCompiler refactored for Symbian Foundation.
+
+
+New stuff in 2.2.4
+	- Bug Fix - Trace compiler entry/exit errors with no paramter or return value
+	- Allow TAB in trace point text.
+	- Allow trace point text to span over multiple lines but TraceCompiler removes the line-feed character.
+	- improve the code to create the trace folder path to avoid any hickups in multiple mmp projects
+	- Improve the build.xml for raptor to build only the rel version of TraceCompiler and therfore avoid the clash between rel and deb when creating traceCompiler.zip file.
+
+New stuff in 2.2.3
+	- Bug Fix - 10. DEF144527: Critical - Adding OST to .h or .inl files can cause OstTraceGenX(...) redefined errors
+	
+New stuff in 2.2.2
+	- Bug fix - TCF-525 Critical: (TSW:EJRK-842AW2) IDO BAT - KernelHooks_Component is missing from pmd file
+
+New stuff in 2.2.1
+
+	- Change - TraceCompiler now support mulitple mmps in one bld.inf by provinding an new command 
+		line interface wher users can pass the traces folder in. This is a continuation of the 
+		previous release to enable the new feature for abld.
+
+New stuff in 2.2.0
+
+	- Change - TraceCompiler now support mulitple mmps in one bld.inf by provinding an new command 
+		line interface wher users can pass the traces folder in.
+New stuff in 2.1.1 - 2.1.2
+
+	- Bug fix - TraceCompiler did not parse function parameter correctly in all cases
+	- Bug fix - TraceCompiler did not work in Linux
+  
+New stuff in 2.0.0 - 2.0.1
+
+	- Change - TraceCompiler automatically converts deprecated group names to valid group names
+               (TRACE_API -> TRACE_BORDER, TRACE_DEBUG- > TRACE_DUMP, TRACE_DETAILED -> TRACE_INTERNALS)
+	- Bug fix - TraceCompiler did not work in Linux 
+	
+New stuff in 1.3.0 - 1.3.1
+
+	- Change - Trace compiler now reads in the group IDs from opensystemtrace_types.h
+	- Change - Code cleanup
+  
+New stuff in 1.2.0 - 1.2.7
+
+	- Change - TraceCompiler source code separated from TraceBuilder source code
+	- Change - Decode plugins can be added or removed
+	- Bug fix - 32-bit alignment was not done correctly in generated OstTraceGen1 inline functions 
+	- Bug fix - TraceCompiler did not handle empty strings correctly
+	- Bug fix - Wrong type definition generated for Performance traces
+	- Bug fix - Long traces were corrupted
+	- Bug fix - TRACE_PERFORMANCE group is now reserved only to performance event traces and 
+	            TRACE_STATE group is now reserved only to event traces
+	- Bug fix - Trace garbled if there were 16 and 8 bit descriptors in same trace
+
+New stuff in 1.1.0 - 1.1.6
+
+	- Change - Changed Performance Event Trace output format
+	- Change - Symbian Foundation related changes
+	- Bug fix - OstTraceData did not work
+	- Bug fix - Traces that contained both string and number parameter did not work correctly	
+	- Bug fix - Sometimes trace ID's changed during every compilation
+	- Bug fix - Trace with octal parameter didn't compile
+	- Bug fix - If EPOCROOT was like C:\S60, Dictionaries were exported to C:\S60epoc32\ost_dictionaries\
+
+New stuff in 1.0.4 - 1.0.42
+
+	NOTE! Format of the fixed_id.definitions file has changed from TraceBuilder version 1.0.20
+
+	- New feature - TraceCompiler now adds trace name to the Dictionaries
+	- New feature - TraceCompiler support non-source files that are listed in trace.properties file
+	- New feature - Support both "traces_<component name>" and "traces" as trace project directory name
+	- New feature - Support for -clean and -final
+	- New feature - Support to fixed group and trace ids
+	- New feature - Get export path from EPOCROOT environment variable
+	- New feature - Added support to type "p" in the OST macro	
+	- New feature - Possible to send over 80 byte traces (max. 512)
+	- Bug fix - Problems tracing string parameters whose length was 3 or fewer bytes.	
+	- Bug fix - TraceCompiler did not to parse constant pointers
+	- Bug fix - Descriptor's length in trace is not checked
+	- Bug fix - TraceCompiler did not support state transition macros
+	- Bug fix - TraceCompiler did not understand namespaces
+	- Bug fix - TraceCompiler did not generate OstTraceGenExt inline function for TTime parameter type
+	- Bug fix - In some cases TraceCompiler skiped trace ids
+	- Bug fix - Traces folder was generated even component doesn't have any OST traces
+	- Bug fix - Wrong trace ID is assigned to new Flow trace
+	- Bug fix - Autogen file got corrupted with special characters in parameter name
+	- Bug fix - Trace with only parameters doesn't work sometimes
+	- Bug fix - Supports %X format character
+	- Bug fix - Supports more format characters like %lx and %llx
+
+New stuff in 1.0.2 - 1.0.3
+
+	- Bug fix - Special characters crashed TraceCompiler
+	- Bug fix - In some cases TraceCompiler created "Traces" folder to wrong place
+
+New stuff in 0.25 - 0.25.49:
+
+	- New feature - Release note added
+	- Bug fix - TraceCompiler did not handle path correctly if sourcepath was "."
+	- Bug fix - TraceCompiler did not try to find group or traces folder deep enough
+	- Bug fix - In some cases TraceCompiler created "Traces" folder to wrong place
+	- Bug fix - TraceCompiler did not understand "/" path separators
+	- Bug fix - TraceCompiler did not convert "&" to "&amp;" in trace text. Fixed again in 0.25.45
+	- Bug fix - TraceCompiler assigned same ID for two groups
+	- Bug fix - TraceCompiler / TraceBuilder added extra backslash marks to dictionary
+	- Bug fix - Autogen headers are not always generated
+	- Bug fix - TraceCompiler did not understand concatenation of strings
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/tracecompiler/tracecompiler.pl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,296 @@
+#
+# Copyright (c) 2009-2010 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:
+#
+# Finds MMP paths from component makefiles and forwards them to MMP parser
+#
+#!perl -w
+use FindBin;
+my $trace_compiler_path;
+
+BEGIN
+{
+  # Get current directory as TraceCompiler path
+  $trace_compiler_path = $FindBin::Bin; # e.g. X:/epoc32/tools
+  $trace_compiler_path =~ s/\\/\//g; # Replace all "\" with "/"
+  $trace_compiler_path =~ s/\/$//; # Remove possible trailing slash
+}
+
+use lib $trace_compiler_path;
+
+use strict;
+use env;
+use Cwd;
+use tracecompiler;
+use tracecompiler_mmp_data;
+
+# EPOC root is two levels down from TraceCompiler level
+my $epocroot = tracecompiler::concatenatePath($trace_compiler_path, "../../");
+$epocroot =~ s/\/$//; # Remove possible trailing slash
+my $drive = substr($epocroot, 0, 2);
+my $build_target;
+my $project_name;
+my $action = "RUN";
+
+# Get Java command or EXIT if not found
+my $java_command = tracecompiler::getJavaCommand();
+
+if (not defined $java_command)
+{
+  print STDERR "Java 1.5 or newer required!\n";
+  exit;
+}
+
+#-------------------------------------------------------
+# Go through command line arguments
+#-------------------------------------------------------
+while ( @ARGV )
+{
+  my $arg = shift(@ARGV);
+  
+  # Print version information
+  if ($arg eq "-v")
+  {
+    my $version = tracecompiler::getTraceCompilerVersion();
+    print $version;
+    exit;
+  }
+  # Clean TraceCompiler generated files
+  elsif ($arg eq "-clean")
+  {
+    $action = "CLEAN";
+  }
+  # Finalize TraceCompiler running
+  elsif ($arg eq "-final")
+  {
+    $action = "FINAL";
+  }
+  # Build target (e.g. armv5)
+  elsif (not defined $build_target)
+  {
+    $build_target = $arg;
+  }
+  # Project name (e.g. MyComponent)
+  else
+  {
+    $project_name = $arg; 
+  }
+}
+
+#-------------------------------------------------------
+# Build target must now be defined or print usage info
+#-------------------------------------------------------
+if (not defined $build_target)
+{
+  my $version = tracecompiler::getTraceCompilerVersion();
+  print $version;
+  print "\nUsage: tracecompiler.pl build_target in the folder containing bld.inf. bldmake bldfiles must be run before this.\n";
+  print "Example: tracecompiler.pl armv5\n";
+  exit;
+}
+
+my $return_string = "";
+
+#-------------------------------------------------------
+# Find component makefile path from abld.bat
+#-------------------------------------------------------
+tracecompiler::debugTraceCompilerVersion();
+tracecompiler::debugMsg("Find component makefile path from abld.bat");
+open(ABLD, "<abld.bat") or die $!;
+my $makefile;
+while (<ABLD>)
+{
+  if (/ABLD.PL/)
+  {
+    my $makefilepath = $_;
+    $makefilepath =~ s/perl -S ABLD.PL "(.*)\\" .*$/$1/;
+    chop($makefilepath);
+    
+    # Change all "\" characters to "/"
+    $makefilepath =~ s/\\/\//g;
+    
+    $makefilepath = "$epocroot/epoc32/build".$makefilepath;
+    $makefile = $makefilepath.$build_target.".MAKE";
+  }
+}
+close ABLD or die $!;
+
+#-------------------------------------------------------
+# Find project makefile paths from component makefile
+#-------------------------------------------------------
+my @projectmakefiles;
+my $mmps;
+
+tracecompiler::debugMsg("Find project makefile paths from component makefile $makefile");
+
+open(MAKEFILE, "<$makefile") or (print STDERR "Cannot open makefile $makefile\n" and exit);
+while (<MAKEFILE>)
+{
+  my $line = $_;
+    
+  if ($line =~ /\"([^\"]+?)\"\s+\"PRJ_.*MMPFILES\s+MMP\"\s+\"([^\"]+?)\"/i)
+  {
+    my $bldinf = $1;
+    my $mmp = $2;
+    
+    tracecompiler::debugMsg("Found BLD file: $bldinf");
+    
+    # Remove bld.inf from the end of the path
+    $bldinf =~ s/(.*)[\\\/].*/$1\//;
+    
+    my $mmp_file = tracecompiler::concatenatePath($bldinf, $mmp);
+        
+    # Change all "//" to "/"
+    $mmp_file =~ s/\/\//\//g;
+    
+    # If .mmp is missing from the end, add it
+    if ($mmp_file !~ /\.mmp$/i)
+    {
+      $mmp_file .= ".mmp";
+    }
+        
+    tracecompiler::debugMsg("Found MMP file: $drive$mmp_file\n");
+    
+    # If project name is defined, only add that MMP to the list of mmp files
+    if (defined $project_name)
+    {
+        if ($mmp_file =~ /($project_name.mmp)$/i)
+        {
+          $mmps .= $drive . $mmp_file . " ";
+        }       
+    }
+    else
+    {
+      $mmps .= $drive . $mmp_file . " ";  
+    }
+  }
+
+}
+close MAKEFILE or die $!;
+
+#-------------------------------------------------------
+# Call the MMP parser for each MMP (or clean / final)
+#-------------------------------------------------------
+if (defined $mmps)
+{
+  foreach my $mmp (split(" ", $mmps))
+  {
+    # Pass MMP file path to Parse MMP
+    if ($action eq "RUN")
+    {
+      my $command = "perl $trace_compiler_path/tracecompiler_parse_mmp.pl $mmp";
+      tracecompiler::debugMsg("Call the MMP parser. Command: $command\n");
+      print qx($command);
+    }
+    
+    # Clean files using this MMP
+    elsif ($action eq "CLEAN")
+    {
+    	my $mmpObject = tracecompiler_mmp_data->new($mmp);
+      cleanTraceCompilerFiles($mmpObject);
+    }
+    
+    # Finalize files using this MMP
+    elsif ($action eq "FINAL")
+    {
+    	my $mmpObject = tracecompiler_mmp_data->new($mmp);
+      finalizeTraceCompilerRun($mmpObject);
+    }
+  }
+}
+else
+{
+  tracecompiler::debugMsg("Could not find any MMP files!");
+}
+
+
+
+
+
+#-------------------------------------------------------#
+#-------------------------------------------------------#
+#--------------------SUBROUTINES------------------------#
+#-------------------------------------------------------#
+#-------------------------------------------------------#
+
+#-------------------------------------------------------
+# Cleans TraceCompiler generated files
+#-------------------------------------------------------
+sub cleanTraceCompilerFiles
+{
+  tracecompiler::debugMsg("Clean TraceCompiler Files");
+  my $mmpObj = $_[0];
+  if($mmpObj->{tracespaths}) {
+  	foreach my $tracesFolder (@{$mmpObj->{tracespaths}})
+  	{
+    	if (-e $tracesFolder and opendir(DIR, $tracesFolder))
+    	{
+      	while (defined(my $file = readdir(DIR)))
+      	{
+        	# Delete files ending with *Traces.h
+        	if ($file =~ /Traces\.h$/i)
+        	{
+          	print "Cleaning: " . $tracesFolder . "/" . $file . "\n";
+          	unlink $tracesFolder . "/" . $file || print $!;
+        	}
+        	# Delete cache files
+        	elsif ($file =~ /\.cache$/i)
+        	{
+          	print "Cleaning: " . $tracesFolder . "/" . $file . "\n";
+          	unlink $tracesFolder . "/" . $file || print $!;
+        	}
+      	}
+      	closedir(DIR);
+    	}
+ 	 }
+ 	}
+  
+  tracecompiler::debugMsg("Cleaning TraceCompiler Files ready\n");
+  
+  # Finalize TraceCompiler run
+  finalizeTraceCompilerRun($mmpObj);
+}
+
+#-------------------------------------------------------
+# Finalizes TraceCompiler run
+#-------------------------------------------------------
+sub finalizeTraceCompilerRun
+{
+	tracecompiler::debugMsg("Finalize TraceCompiler Run");
+	my $mmpObj = $_[0];
+	if($mmpObj->{tracespaths}) {
+	foreach my $tracesFolder (@{$mmpObj->{tracespaths}})
+	{
+		my $defFile = $tracesFolder . "/" . "OstTraceDefinitions.h";
+		# Open OstTraceDefinitions.h and read stuff to array
+		if (-e $defFile and open(FILE,"<$defFile"))
+		{
+			my @lines = <FILE>;
+			close(FILE);
+
+			# Write stuff back to OstTraceDefinitions.h
+			open(FILE,">$defFile") || exit;
+			foreach my $line (@lines)
+			{
+				# Comment out the define
+				$line =~ s/(.*)#define OST_TRACE_COMPILER_IN_USE/\/\/ #define OST_TRACE_COMPILER_IN_USE/;
+				print FILE $line;
+			}
+			close(FILE);
+		}
+	}
+}
+
+tracecompiler::debugMsg("Finalizing TraceCompiler Run ready\n");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/tracecompiler/tracecompiler.pm	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,174 @@
+#
+# 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:
+#
+# Module for TraceCompiler
+#
+package tracecompiler;
+
+# If this is 1, debug prints are shown
+my $DEBUG = 0;
+
+use FindBin;
+
+# Get current directory as TraceCompiler path
+my $trace_compiler_path = $FindBin::Bin;  # e.g. X:/epoc32/tools
+$trace_compiler_path =~ s/\\/\//g; # Replace all "\" with "/"
+$trace_compiler_path =~ s/\/$//; # Remove possible trailing slash
+
+#-------------------------------------------------------
+# Concatenate path
+#-------------------------------------------------------
+sub concatenatePath
+{
+  my $concatenatePathBase = $_[0];
+  my $concatenatePathFile = $_[1];
+  
+  my $backCount = 0;
+  
+  # Change all "\" characters to "/"
+  $concatenatePathBase =~ s/\\/\//g;
+  $concatenatePathFile =~ s/\\/\//g;
+  
+  # Replace all "/./" with "/"
+  $concatenatePathBase =~ s/\/\.\//\//g;
+  $concatenatePathFile =~ s/\/\.\//\//g;
+    
+  # Find how many back references there are and remove them
+  while ($concatenatePathFile =~ /\.\.\//g) 
+  { 
+    $backCount++ 
+  }
+  $concatenatePathFile =~ s/\.\.\///g;
+  
+  # If there is / in the end of the base remove it
+  $concatenatePathBase =~ s/\/$//;
+  
+  # Remove directories from the end of the path
+  $concatenatePathBase = reverse($concatenatePathBase);
+  for (my $i=0; $i<$backCount; $i++)
+  {
+    $concatenatePathBase =~ s/.*?\///;
+  }
+  $concatenatePathBase = reverse($concatenatePathBase);
+  
+  my $concatenatePathFullFilePath = "$concatenatePathBase\/$concatenatePathFile";
+  
+  # Replace again all "/./" with "/"
+  $concatenatePathFullFilePath =~ s/\/\.\//\//g;
+  
+  debugMsg("Concatenate returns $concatenatePathFullFilePath");
+  return $concatenatePathFullFilePath;
+}
+
+#-------------------------------------------------------
+# Get java command
+#-------------------------------------------------------
+sub getJavaCommand
+{
+  my @java_commands = ("/tools/ncp_tools/helium/external/jdk1.5/jre/bin/java.exe", "java.exe", "c:/apps/seeinstaller/jre/bin/java.exe");
+
+  my $java_command;
+  
+  foreach my $command (@java_commands)
+  {
+    if (checkJava($command))
+    {
+      $java_command = $command;
+      last;
+    }
+  }
+  
+  return $java_command;
+}
+
+#-------------------------------------------------------
+# Check java
+#-------------------------------------------------------
+sub checkJava
+{
+  open (IN, "$_[0] -version 2>&1 |");
+  while(<IN>)
+  {
+    if (/(\d+\.\d+)/)
+    {
+      if ($1 >= 1.5)
+      {
+        return 1;
+      }
+    } 
+  }
+  
+  return 0;
+}
+
+#-------------------------------------------------------
+# Gets TraceCompiler version number
+#-------------------------------------------------------
+sub getTraceCompilerVersion
+{
+  # Get Java command or EXIT if not found
+  my $java_command = getJavaCommand();
+
+  if (not defined $java_command)
+  {
+    return "Java 1.5 or newer required!\n";
+    exit;
+  }
+  
+   # run from class files class files
+  my $version_query_command = "$java_command -classpath $trace_compiler_path/tracecompiler com.nokia.tracecompiler.TraceCompilerMain -v";
+  
+  # run from jar  file	command
+  #my $version_query_command = "$java_command -jar $trace_compiler_path/tracecompiler.jar -version"; 
+
+  my $version = qx($version_query_command);
+    
+  return $version;
+}
+
+
+#-------------------------------------------------------
+# Debug Message. Writes to log file and outputs to screen.
+#-------------------------------------------------------
+sub debugMsg
+{
+  if ($DEBUG)
+  {
+    open FILE, ">>/tracecompiler_debug.txt" or die $!;
+    print FILE $_[0] . "\n";
+    close FILE;
+    
+    return print "DEBUG: $_[0]\n";
+  }
+}
+
+#-------------------------------------------------------
+# Writes TraceCompiler version to log and screen if Debug is on.
+#-------------------------------------------------------
+sub debugTraceCompilerVersion
+{
+  if ($DEBUG)
+  {   
+    open FILE, ">>/tracecompiler_debug.txt" or die $!;
+    my $version = getTraceCompilerVersion();
+    print FILE $version;
+    close FILE;
+    
+    return print "DEBUG: $version\n";
+  }
+}
+
+1;
+
Binary file tracefw/tracecompiler/tracecompiler/tracecompiler.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/tracecompiler/tracecompiler_mmp_data.pm	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,225 @@
+#
+# Copyright (c) 2010 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:
+#
+# Module for TraceCompiler. parse the mmp file and prepare an object to be re-used by tracecompiler.pl and tracecompiler_perse_mmp.pl
+#
+package tracecompiler_mmp_data;
+
+use strict;
+use warnings;
+use File::Basename;
+use tracecompiler;
+sub readMmp($);
+
+
+my $component_name;
+
+
+sub new
+{
+	my $pkg = shift;
+	my $self = {};
+	bless $self,$pkg;
+	my $mmp = shift;
+	if (defined($mmp) and -e $mmp) {
+	  tracecompiler::debugMsg("Starting to parse MMP file: $mmp");
+	  my $file_path = $mmp;
+	  $component_name =  basename $mmp;
+
+	  # Take the module name from the MMP file path. e.g. "X:/temp/mycomponent.mmp" would create "mycomponent"
+	  $component_name =~ s/([^\.]*).*/$1/;
+
+		$self->{mmpName} = $mmp;
+		$self->readMmp($mmp);
+	} else 
+	{
+		tracecompiler::debugMsg("tracecompiler_mmp_data :: Valid MMP file must be provided ...\n");
+	}
+
+	return $self;
+}
+
+# parse mmp and get the infos we need. This method moved from tracecompiler_parse_mmp.pl to here with some add-on
+sub readMmp($)
+{
+	my $self = shift;
+	my $file = shift;
+	if (-e $file)
+	{
+		tracecompiler::debugMsg("Starting to parse file: $file");
+		my @sources;
+		my @tracesfolders;
+		my $in_comment_block = 0;
+
+		# Get file path (remove file + extension)
+		my $file_path = dirname $file;
+
+		# Change "//" to "/"
+		$file_path =~ s/\/\//\//g;
+
+		my $current_src_path = $file_path;
+
+		# Go through lines
+		open FILE, "<$file" or die $!;
+		foreach my $line (<FILE>)
+		{
+			# Check if contains includes
+			if ($line =~ /#include.+\"(.*)?\"/i)
+			{
+				my $includedFile = $1;
+
+				# Get absolute path if the first character is not "\" or b"/"
+				if ($includedFile =~ /^[^\\\/]/)
+				{
+					$includedFile = tracecompiler::concatenatePath($file_path, $includedFile);
+				}
+				else
+				{
+					$includedFile = substr($file_path, 0, 2) . $includedFile;
+				}
+
+				if (defined $includedFile)
+				{
+					tracecompiler::debugMsg("Found #include from $file. Start parsing it..\n");
+					$self->readMmp($includedFile);
+				}
+			}
+
+			# Check if in comment block
+			if ($in_comment_block > 0)
+			{
+				if ($line =~ /\*\/(.*)/)
+				{
+					$line = $1;
+					$in_comment_block--;
+				}
+				if ($in_comment_block == 0)
+				{
+					# Comment block ended, continue parsing the line
+				}
+				else
+				{
+					# We are still in comment block, jump to next line
+					next;
+				}
+			}
+
+			# Delete possible comments in one line
+			$line =~ s/\/\/.*//; # //
+			$line =~ s/\/\*.*\*\///; # /* */
+
+			if ($line =~ /(.*?)\/\*/)
+			{
+				$line = $1;
+				$in_comment_block++;
+			}
+
+			# Find uid
+			if ($line =~ /uid.+0x([a-fA-F0-9]+)?/i)
+			{
+				$self->{uid} = $1;
+
+				tracecompiler::debugMsg("Found Uid: $self->{uid}");
+			}
+
+			#Find target
+			if($line =~ /target\s+(\S+)\.(\S+)/i)
+			{
+				$self->{target} = $1;
+				$self->{ext} = $2;
+			}
+
+			#Find target type
+			if($line =~ /targettype\s+(\S+)/i)
+			{
+				$self->{type} = $1;
+			}
+
+			# Find source path
+		if ($line =~ /sourcepath\s+([^\s]+)/i)
+			{
+				my $src_path = $1;
+
+				# Get absolute path if the first character is not "\" or "/"
+				if ($src_path =~ /^[^\\\/]/)
+				{
+					$current_src_path = tracecompiler::concatenatePath($file_path, $src_path . "/");
+				}
+				else
+				{
+					$current_src_path = substr($file_path, 0, 2) . $src_path;
+				}
+
+				tracecompiler::debugMsg("Source path changed to: $current_src_path");
+			}
+
+			# Find sources
+			while ($line =~ /source\s+([^\s]+)/i)
+			{
+				my $src = $1;
+
+				my $src_path = tracecompiler::concatenatePath($current_src_path, $src);
+
+				if (-e $src_path)
+				{
+					push(@sources, $src_path);
+
+					tracecompiler::debugMsg("Found source: $src_path");
+				}
+				else
+				{
+					tracecompiler::debugMsg("Source doesn't exist!: $src_path");
+				}
+
+				$line =~ s/\Q$src//;
+			}
+
+			#Find unserincludes
+			if ($line =~ /userinclude\s+([^\s]+)/i)
+			{
+				tracecompiler::debugMsg("Found userinclude: $line");
+				my $userinclude = $1;
+				$userinclude =~ s/\\/\//g;
+				my $tmp1 = $self->{target} . "_" . $self->{ext};
+				my $tmp2 = $self->{target} . "_" . $self->{type};
+				if (   $userinclude =~ /.*\/traces\/$tmp1$/i
+				or $userinclude =~ /.*\/traces_$tmp2$/i
+				or $userinclude =~ /.*\/traces_$component_name$/i
+				or $userinclude =~ /.*\/traces$/i)
+				{
+					tracecompiler::debugMsg("Found traces userinclude: $userinclude");
+					push(@tracesfolders, $userinclude);
+				}
+			}
+		}
+		if (scalar @sources > 0)
+		{
+			$self->{sources} = [@sources];
+		}
+		if (scalar @tracesfolders > 0)
+		{
+			$self->{tracespaths} = [@tracesfolders];
+		}
+		close FILE;
+
+		tracecompiler::debugMsg("Ending the parsing of MMP file: $file\n");
+	} else
+	{
+		tracecompiler::debugMsg("Could not find file: $file\n");
+	}
+
+}
+
+1;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/tracecompiler/tracecompiler_parse_mmp.pl	Mon Aug 23 15:29:36 2010 +0300
@@ -0,0 +1,226 @@
+#
+# Copyright (c) 2009-2010 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:
+#
+# Parses UID and source files from given MMP files. Starts TraceCompiler Java application.
+#
+#!perl -w
+use FindBin;
+my $trace_compiler_path;
+
+
+BEGIN
+{
+  # Get current directory as TraceCompiler path
+  $trace_compiler_path = $FindBin::Bin; # e.g. X:/epoc32/tools
+  $trace_compiler_path =~ s/\\/\//g; # Replace all "\" with "/"
+  $trace_compiler_path =~ s/\/$//; # Remove possible trailing slash
+}
+
+use lib $trace_compiler_path;
+
+use strict;
+use warnings;
+use env;
+use FileHandle;
+use IPC::Open3;
+use tracecompiler;
+use tracecompiler_mmp_data;
+
+my $java_command = tracecompiler::getJavaCommand();
+
+if (not defined $java_command)
+{
+  print STDERR "Java 1.5 or newer required!\n";
+  exit;
+}
+
+# Global variables
+my $project_name;
+my $traces_folder = "";
+
+
+# run from class files
+
+my $command = "$java_command -classpath $trace_compiler_path/tracecompiler com.nokia.tracecompiler.TraceCompilerMain";
+
+# run from jar file
+#my $command = "$java_command  -jar $trace_compiler_path/tracecompiler/tracecompiler.jar";
+
+# Open MMP file
+foreach my $mmp_file (@ARGV)
+{
+  $traces_folder = "";
+  $project_name = $mmp_file;
+  
+  # Take the module name from the MMP file path. e.g. "X:/temp/mycomponent.mmp" would create "mycomponent"
+  $project_name =~ s/.*\/([^\.]*).*/$1/;
+  
+  tracecompiler::debugMsg("Module name: $project_name");
+  
+  # Parse sources in an own function
+  my $mmpObject = tracecompiler_mmp_data->new($mmp_file);
+    
+  # There must be UID
+  if (!$mmpObject->{uid})
+  {
+    tracecompiler::debugMsg("UID is not defined, don't call TraceCompiler!"); 
+    exit;
+  }
+  if (!$mmpObject->{target})
+  {
+  	tracecompiler::debugMsg("Target not defined, don't call TraceCompiler!"); 
+  	exit;
+  }
+  if (!$mmpObject->{type})
+  {
+  	tracecompiler::debugMsg("Target type not defined, don't call TraceCompiler!"); 
+  	exit;
+  }
+  if (!$mmpObject->{ext})
+  {
+  	tracecompiler::debugMsg("Target extension not defined, don't call TraceCompiler!"); 
+  	exit;
+  }
+  
+  # find out the right traces folder to use if ther is more than one and set the project name accordingly.
+  # the following order of the code is very important.
+  my $tmp;
+  if ($mmpObject->{tracespaths})
+  {
+  	#Check if there is one of the expected format
+  	
+  	#search for /trace/<target>_<ext>
+  	$tmp = $mmpObject->{target} ."_" . $mmpObject->{ext};
+  	my @list = grep(/.*\/traces\/$tmp\s*$/i, @{$mmpObject->{tracespaths}});
+  	
+  	if (scalar @list > 0) 
+  	{
+  		$traces_folder = pop(@list);
+  		$project_name = $mmpObject->{target} ."_" . $mmpObject->{ext};
+  		tracecompiler::debugMsg("Found traces folder 1: $traces_folder" ); 
+  	}
+  	 
+  	if ($traces_folder eq "" ) 
+  	{
+  		#search for /traces_<target>_<type>
+  		$tmp = $mmpObject->{target} ."_" . $mmpObject->{type};
+  		@list = grep(/.*\/traces_$tmp\s*$/i, @{$mmpObject->{tracespaths}});
+  		if (scalar @list > 0) 
+  		{
+  			$traces_folder = pop(@list);
+  			$project_name = $mmpObject->{target} . "_" . $mmpObject->{type};
+  			tracecompiler::debugMsg("Found traces folder 2: $traces_folder" ); 
+  		}
+  	}
+  	
+  	if ($traces_folder eq "" ) 
+  	{
+  		#search for /traces_<mmpname>
+  		@list = grep(/.*\/traces_$project_name\s*$/i, @{$mmpObject->{tracespaths}});
+  		if (scalar @list > 0) 
+  		{
+  			$traces_folder = pop(@list);
+  			tracecompiler::debugMsg("Found traces folder 3: $traces_folder" ); 
+  		}
+  	}
+  		
+  	if ($traces_folder eq "" ) 
+  	{
+  		#search for /traces
+  		@list = grep(/.*\/traces\s*$/i, @{$mmpObject->{tracespaths}});
+  		if (scalar @list > 0) 
+  		{
+  			$traces_folder = pop(@list);
+  			tracecompiler::debugMsg("Found traces folder 4: $traces_folder" ); 
+  		}
+  	}
+  }
+  else 
+  {
+  	tracecompiler::debugMsg("No Traces folder was found in userinclude, don't call TraceCompiler!"); 
+  	exit;
+  }
+  
+  if (!$mmpObject->{sources})
+  {
+  	tracecompiler::debugMsg("No sources found!"); 
+  	exit; 	
+  }
+ 
+ 
+  # IMPORTANT NOTE:
+  # please note that IPC::open3() is the only suitable api available in the perl version 5.6.1 used in ONB
+  # but it has a limit. If the size of the command is more than 264, perl will crash and it seems to be a windows limit
+  # rather perl.
+  # Therefore we have to parse the mmp and the traces folder from the stdin (*WRITER in this case) and 
+  # relax the new TraceCompiler API to allow this if they are not specified on the command line.
+  # It's not an issue in Raptor as it calls TraceCompiler directly.
+  #
+  $command .= " --uid=" . $mmpObject->{uid} . " --project=" . $project_name;
+           
+  tracecompiler::debugMsg("\nCall the Java TraceCompiler. Command: $command\n");
+    
+  # Create TraceCompiler process
+  local (*READER, *WRITER);
+  my $ pid = open3(\*WRITER, \*READER, \*READER, $command);
+    
+  # Remove duplicates from the sources list
+  my %seen = ();
+  my @uniqueSources = ();
+  foreach my $item (@{$mmpObject->{sources}}) 
+  {
+    push(@uniqueSources, $item) unless $seen{$item}++;
+  }
+ 
+  tracecompiler::debugMsg("Send mmp file: $mmp_file");
+  print WRITER "--mmp=$mmp_file\n";
+  
+  tracecompiler::debugMsg("Send traces folder path: $traces_folder");
+  print WRITER "--traces=$traces_folder\n";
+    
+    
+  # Send sources to the TraceCompiler     
+  foreach my $source (@uniqueSources)
+  {
+    tracecompiler::debugMsg("Send source: $source");
+    print WRITER "$source\n";
+   }
+    
+  # Send the end of the source files tag
+  print WRITER "*ENDOFSOURCEFILES*\n";
+  WRITER->autoflush(1);
+    
+  # Gather up the response from the TraceCompiler
+  my $compilerReturn = "";
+  foreach my $line (<READER>)
+  {
+    tracecompiler::debugMsg("Response line from TraceCompiler: $line");
+    $compilerReturn .= $line;
+  }       
+
+  # If Compiler doesn't return anything or we get no class found error from Java, don't print anything
+  if ($compilerReturn ne "" and $compilerReturn !~ /NoClassDefFoundError/)
+  {
+    tracecompiler::debugMsg("TraceCompiler succeeded! Returned: $compilerReturn");
+    print "\n******************* TRACECOMPILER STARTS *******************\n\n";
+    print "Building traces for component $project_name. Component UID: 0x$mmpObject->{uid}.\n";
+    print $compilerReturn . "\n";
+    print "\n******************* TRACECOMPILER ENDS *********************\n\n";
+  }
+  else 
+  {
+    tracecompiler::debugMsg("No traces were generated. Returned:\n$compilerReturn\n");
+  }
+ }