--- /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 <iostream>
+#include <io.h>
+#include <direct.h>
+#include <algorithm>
+
+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<std::string>::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
+//============================================================================
+
+