tzpcside/tzcompiler/Source/TzCompiler.cpp
changeset 0 2e3d3ce01487
--- /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
+//============================================================================
+	
+