apicompatanamdw/compatanalysercmd/headeranalyser/src/CommandFile.cpp
changeset 0 638b9c697799
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apicompatanamdw/compatanalysercmd/headeranalyser/src/CommandFile.cpp	Tue Jan 12 14:52:39 2010 +0530
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 2006-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:  
+*
+*/
+
+
+#include "CmdGlobals.h"
+#ifdef __WIN__
+#pragma warning(disable:4786)
+#endif
+
+#include <iostream>
+#include <fstream>
+#include <vector>
+
+#include "CommandFile.h"
+#include "HAException.h"
+#include "Utils.h"
+
+using namespace std;
+
+
+// ----------------------------------------------------------------------------
+// CommandFile::CommandFile
+// File name is gien as parameter
+// 
+// ----------------------------------------------------------------------------
+//
+CommandFile::CommandFile(string aFilename) : iCmdBufLen(0), iCmdBuf(NULL)
+{
+    iFilename = aFilename;
+}
+
+
+// ----------------------------------------------------------------------------
+// CommandFile::CommandFile
+// ----------------------------------------------------------------------------
+//
+CommandFile::~CommandFile()
+{
+    if (iCmdBuf != NULL)
+    {
+        for (unsigned int i = 0; i < iCmdBufLen; i++)
+        {
+            delete [] iCmdBuf[i];
+        }
+        delete [] iCmdBuf;
+        iCmdBuf = NULL;
+    }
+}
+
+
+// ----------------------------------------------------------------------------
+// CommandFile::getCommandBuffer
+// ----------------------------------------------------------------------------
+//
+char** CommandFile::getCommandBuffer()
+{
+    readCommandFile(iFilename);
+    return iCmdBuf;
+}
+
+
+// ----------------------------------------------------------------------------
+// CommandFile::commandBufferLength
+// 
+// ----------------------------------------------------------------------------
+//
+size_t CommandFile::commandBufferLength()
+{
+    return iCmdBufLen;
+}
+
+
+// ----------------------------------------------------------------------------
+// CommandFile::readCommandFile
+// Reads parameters from the command file. 
+// ----------------------------------------------------------------------------
+//
+void CommandFile::readCommandFile(string filename)
+{
+#if ( defined(_DEBUG) || defined(DEBUG) ) && !defined(NO_DBG)
+    cout << "Reading command file\n";
+#endif
+    ifstream input(filename.c_str(), ios::in);
+    if (!input.is_open())
+    {
+        throw HAException("Cannot open command file");
+    }
+    char c;
+    string str;
+    unsigned long linecount = 1;
+    bool careForSpace = true;
+    bool strSpace = false;
+    bool whitespace = true;
+    vector<string> parmlist;
+    parmlist.push_back("padding");
+    while (input.get(c))
+    {
+        if (c == ' ' && careForSpace == true)
+        {
+            if (whitespace == false)
+            {
+                parmlist.push_back(str);
+            }
+            str = "";
+            whitespace = false;
+            careForSpace = false;
+        }else if (c == ' ' && strSpace == false)
+        {
+        }else if (c == '\\' || c == '/')
+        {
+            str += DIR_SEPARATOR;
+        }else if (c == '"')
+        {
+            if (strSpace == false)
+            {
+                careForSpace = false;
+                strSpace = true;
+            } else
+            {
+                careForSpace = true;
+                strSpace = false;
+            }
+            whitespace = false;
+        }else if (c != '\n')
+        {
+            if (careForSpace == false && strSpace == false)
+            {
+                careForSpace = true;
+            }
+            str += c;
+            whitespace = false;
+        } else 
+        {
+            if (strSpace == true)
+            {
+                string line;
+                ltoa(linecount, line, 10);
+                throw HAException("Syntax error: New line has come before ending quotation mark(\"). Line: " + line);
+            }
+            if (str.length() != 0)
+            {
+                parmlist.push_back(str);
+            }
+            linecount++;
+            str = "";
+            whitespace = true;
+        }
+    }
+    if (str.length() != 0)
+    {
+        parmlist.push_back(str);
+    }
+
+    // Store parameter information
+    size_t elementcount = parmlist.size();
+    iCmdBufLen = elementcount;
+    if (iCmdBuf)
+    {
+        delete iCmdBuf;
+        iCmdBuf = NULL;
+    }
+    iCmdBuf = new char*[elementcount];
+
+    // Copy the parameter list from vector to char** 
+    // (in order to be compatible with CommandLine::parse())
+    for (unsigned int i = 0; i < parmlist.size(); i++)
+    {
+		size_t charcount = parmlist.at(i).length();
+  
+        iCmdBuf[i] = new char[charcount+1];
+        const char* cbuf = parmlist.at(i).c_str();
+    unsigned int j = 0;
+        for(j = 0; j < charcount; j++)
+        {
+            iCmdBuf[i][j] = cbuf[j];
+        }
+        iCmdBuf[i][j] = '\0';
+    }
+}