uigraphics/AknIcon/MifToCdlIndex/MifToCdlIndex.cpp
changeset 0 05e9090e2422
child 93 b705c392b9a4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uigraphics/AknIcon/MifToCdlIndex/MifToCdlIndex.cpp	Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies 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 MifToCdlIndex tool.
+*
+*/
+
+
+
+// disable "identifier was truncated to '255' characters in the browser information" warning
+#pragma warning (disable:4786)
+
+// disable "decorated name length exceeded, name was truncated" warning	
+#pragma warning (disable:4503)
+
+
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <iostream>
+#include <CdlCompilerToolkit/CdlTkUtil.h>
+#include "MifHandler.h"
+#include "DllCreator.h"
+
+using namespace std;
+using namespace CdlCompilerToolkit;
+
+
+// In debug builds, we want the debugger to catch exceptions. In release mode we want
+// to report exceptions to the command line user.
+// The EXCEPTION_HANDLING macro flag controls this behavior in main()
+#ifndef _DEBUG
+#define EXCEPTION_HANDLING
+#endif
+
+class MainArgsErr : public CdlCompilerToolkitErr
+	{
+	void Show(ostream& aStream) const;
+	};
+
+void MainArgsErr::Show(ostream& stream) const
+	{
+	stream << endl;
+	stream << "MifToCdlIndex [<options>] <MifFile> <DllName> <DllUid>" << endl;
+	stream << "  <options> are:" << endl;
+	stream << "    -p<output path>" << endl;
+	stream << "    -s  write instance source code only, no DLL source" << endl;
+	}
+
+int DoMain(int argc, char* argv[])
+	{
+	CdlTkUtil::SetCommandLine(argc, argv);
+
+	vector<string> args;
+	copy(argv, argv+argc, back_inserter(args));
+
+	if (args.size() < 2)
+		{
+		throw MainArgsErr();
+		}
+
+	args.erase(args.begin());
+
+	bool writeDll = true;
+	while (args[0].size() >= 2 && args[0][0] == '-')
+		{
+		switch (args[0][1])
+			{
+			case 'p':
+				CdlTkUtil::SetOutputPath(args[0].substr(2));
+				break;
+
+			case 's':
+				writeDll = false;
+				break;
+
+			default:
+				throw MainArgsErr();
+				break;
+			}
+
+		args.erase(args.begin());
+		}
+
+	if (args.size() != 3)
+		{
+		throw MainArgsErr();
+		}
+
+	string& mifName = args[0];
+	string& dllName = args[1];
+	string& dllUid = args[2];
+
+	MifHandler mif;
+	mif.Read(mifName);
+	const MifIndex& index = mif.Index();
+	mif.Modify(dllUid);
+	mif.Write(mifName);
+
+	DllCreator dll;
+	dll.SetNameAndUid(dllName, dllUid);
+	dll.SetIndex(index);
+	dll.WriteSource();
+	if (writeDll)
+		dll.WriteDll();
+
+	return 0;
+	}
+
+
+int main(int argc, char* argv[])
+	{
+#ifdef EXCEPTION_HANDLING
+	try
+		{
+#endif
+		return DoMain(argc, argv);
+#ifdef EXCEPTION_HANDLING
+		}
+	catch (const CdlCompilerToolkitErr& aErr)
+		{
+		aErr.Show(cerr);
+		}
+
+	return 0;
+#endif
+	}