diff -r 000000000000 -r 2e3d3ce01487 tzpcside/tzcompiler/Source/TzCompiler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tzpcside/tzcompiler/Source/TzCompiler.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,136 @@ +// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// DST TZ Database Compiler +// +// + +#include "TzGlobals.h" +#include "TzCompiler.h" +#include "TzDocument.h" +#include "TzHelpers.h" +#include "TzScanner.h" +#include +#include +#include +#include + +using namespace std; + +//============================================================================ +// CTzCompiler::CTZCompiler +//============================================================================ +CTzCompiler::CTzCompiler(CTZDocument& aTzDocument) +: iTzDocument(aTzDocument) + { + } + +//============================================================================ +// CTzCompiler::Compile +// Directs the compilation process through the document +//============================================================================ +void CTzCompiler::CompileL() + { + string outputString; + //Use all files in the data directory + + int numFiles = 0; //Number of files scanned + int scanSuccess = 0; //Succesful scans + + struct _finddata_t file; + long fileHandle; + string fileName; + //Find all files in directory + string inputFilePath = TzGlobals::iInputFilePath + "\\*"; + fileHandle = _findfirst(inputFilePath.c_str(),&file); + std::vector::iterator iter; + while (_findnext(fileHandle,&file) == 0) + { + numFiles++; + fileName.erase(); + fileName = file.name; + if (!(strcmp(file.name, ".") == 0 || strcmp(file.name, "..") == 0)) + { + TzGlobals::iAvailableFiles.push_back(file.name); + + //Check that we don't want to exclude this file + iter = find(TzGlobals::iExcludedFiles.begin(),TzGlobals::iExcludedFiles.end(),file.name); + + if (iter != TzGlobals::iExcludedFiles.end()) + { + //Don't process this file + cout << "Ignoring " << file.name << endl; + } + else + { + outputString.erase(); + outputString = "Scanning "; + outputString.append(file.name); + CTzCpHelpers::PrintStep(outputString); + + string tmpString = TzGlobals::iInputFilePath; + tmpString.append(file.name); + int result = iTzDocument.Scan(tmpString.c_str()); + if (result == TzGlobals::ETzNone) + { + scanSuccess++; + } + + CTzCpHelpers::PrintStepResult(result); + } + } + + } + + //Check at least one file was scanned. If not we have a fatal error + if (scanSuccess < 1) + { + throw TzGlobals::ETzAbortNoInputFiles; + } + + if (iTzDocument.iErrors.size() > 0) + { + cerr << "Scan failed" << endl; + for (int x = 0; x < iTzDocument.iErrors.size();++x) + { + cerr << iTzDocument.iErrors[x] << endl; + } + throw TzGlobals::ETzAbortScannerSyntaxError; + } + + //Assemble the parsed data into Symbian native database entities + iTzDocument.AssembleL(); + CTzCpHelpers::PrintStepResult(TzGlobals::ETzNone); + //Link the assembled objects + iTzDocument.Link(); + CTzCpHelpers::PrintStepResult(TzGlobals::ETzNone); + //Assign each zone a unique id + iTzDocument.AssignZoneIds(); + //Remove unwanted entities from the database + iTzDocument.Exclude(); + //Persist the database model to a binary Symbian file for inclusion in ROM + iTzDocument.ExternaliseL(); + CTzCpHelpers::PrintStepResult(TzGlobals::ETzNone); + //Show warnings for missing zones + iTzDocument.VerifyZoneIds(); + //Move the database file to the required output directory + iTzDocument.CopyDatabaseFileToOutputDirectory(); + + cout << "Output files are:\t" << TzGlobals::iOutputFilePath.c_str() << endl; + } + +//============================================================================ +// End of file +//============================================================================ + +