Index: trunk/tmdmcreator/src/main.cpp
===================================================================
--- trunk/tmdmcreator/src/main.cpp	(revision 15)
+++ trunk/tmdmcreator/src/main.cpp	(revision 16)
@@ -27,4 +27,5 @@
 #include <wx/dir.h>
 #include <wx/filename.h>
+#include "tmdmcreator.h"
 
 
@@ -34,7 +35,10 @@
         wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
     { wxCMD_LINE_SWITCH, "v", "verbose", "Be more verbose" },
-    { wxCMD_LINE_PARAM, NULL, NULL, "[structure sql file]"},
-    { wxCMD_LINE_PARAM, NULL, NULL, "[content txt file]"},
-    { wxCMD_LINE_PARAM, NULL, NULL, "[result sql file]"},
+    { wxCMD_LINE_SWITCH, "t", "toolmap", "toolmap output" },
+    { wxCMD_LINE_SWITCH, "o", "overwrite", "overwrite output" },    
+    { wxCMD_LINE_PARAM, NULL, NULL, "[base structure sql file]"},
+    { wxCMD_LINE_PARAM, NULL, NULL, "[user structure sql file]"},
+    { wxCMD_LINE_PARAM, NULL, NULL, "[user content txt file]"},
+    { wxCMD_LINE_PARAM, NULL, NULL, "[result file]"},
     { wxCMD_LINE_NONE }
 };
@@ -42,6 +46,8 @@
 
 
-void PrintArray(const wxArrayString & array, const wxString & msg){
-    wxPrintf(msg + _T("\n"));
+void PrintArray(const wxArrayString & array, const wxString & msg = wxEmptyString){
+    if (msg != wxEmptyString) {
+        wxPrintf(msg + _T("\n"));
+    }
     for (unsigned int i = 0; i< array.GetCount(); i++) {
         wxPrintf(array[i] + _T("\n"));
@@ -74,4 +80,41 @@
     // cmd line is correct !!
     wxPrintf(myLogoTxt);
+    
+    bool bVerbose = parser.Found("verbose");
+    bool bToolMap = parser.Found("toolmap");
+    if (parser.Found("overwrite")) {
+        wxRemoveFile(parser.GetParam(3));
+    }
+    
+    if (bToolMap == true) {
+        wxPrintf(_("Exporting to ToolMap project not supported for now!\n"));
+        return 0;
+    }
+    
+    wxASSERT(parser.GetParamCount() == 4);
+    TmDmCreator myCreator;
+    myCreator.SetBaseSQL(wxFileName(parser.GetParam(0)));
+    myCreator.SetUserSQL(wxFileName(parser.GetParam(1)));
+    myCreator.SetUserContent(wxFileName(parser.GetParam(2)));
+    myCreator.SetOutSQL(wxFileName(parser.GetParam(3)));
+    
+    wxArrayString myErrors;
+    if (myCreator.CheckFiles(myErrors) == false) {
+        if (bVerbose == true) {
+            PrintArray(myErrors);
+        }
+        wxPrintf(_("Error while checking files, aborting!\n"));
+        return 0;
+    }
+    
+    if (myCreator.ProcessFiles(myErrors) == false) {
+        if (bVerbose == true) {
+            PrintArray(myErrors);
+        }
+        wxPrintf(_("Error processing files, aborting\n"));
+        return 0;
+    }
+    
+    wxPrintf(_("Processing succeed!\n"));
     return 0;
 }
Index: trunk/tmdmcreator/src/tmdmcopier.cpp
===================================================================
--- trunk/tmdmcreator/src/tmdmcopier.cpp	(revision 15)
+++ trunk/tmdmcreator/src/tmdmcopier.cpp	(revision 16)
@@ -2,5 +2,5 @@
  tmdmcopier.cpp
  -------------------
- copyright            : (C) 2013 CREALP Lucien Schreiber 
+ copyright            : (C) 2013 CREALP Lucien Schreiber
  email                : lucien.schreiber at crealp dot vs dot ch
  ***************************************************************************/
@@ -18,20 +18,46 @@
 
 TmDmCopier::TmDmCopier(const wxFileName & destfile) {
+    m_File = new wxFFile();
+    bool bOpen = m_File->Open(destfile.GetFullPath(), "a");
+    wxASSERT(bOpen == true);
 }
 
+
+
 TmDmCopier::~TmDmCopier() {
+    wxDELETE(m_File);
 }
 
-void TmDmCopier::SetCopyMode(TMDMCOPIER_MODE value) {
-  m_CopyMode = value;
+
+
+bool TmDmCopier::CopyFrom(const wxFileName & filename) {
+    wxFFile mySrcFile;
+    if (mySrcFile.Open(filename.GetFullPath()) == false) {
+        m_Errors.Add(wxString::Format(_("Unable to open: %s"), filename.GetFullPath()));
+        return false;
+    }
+    
+    wxString mySrcTxt;
+    if(mySrcFile.ReadAll(&mySrcTxt)==false){
+        m_Errors.Add(wxString::Format(_("Reading from: %s failed!"), filename.GetFullPath()));
+        return false;
+    }
+    return CopyFrom(mySrcTxt);
 }
 
-bool TmDmCopier::CopyFrom(const wxFileName & filename) {
+
+
+bool TmDmCopier::CopyFrom(const wxString & text) {
+    if (m_File->Write(text) == false) {
+        m_Errors.Add(wxString::Format(_("Writing to: %s failed!"), m_File->GetName()));
+        return false;
+    }
+    
+    return true;
 }
 
-bool TmDmCopier::CopyFrom(const wxString & text) {
+
+
+wxArrayString TmDmCopier::GetErrors(){
+    return m_Errors;
 }
-
-bool TmDmCopier::IsCopyAllowed() {
-}
-
Index: trunk/tmdmcreator/src/tmdmcopier.h
===================================================================
--- trunk/tmdmcreator/src/tmdmcopier.h	(revision 15)
+++ trunk/tmdmcreator/src/tmdmcopier.h	(revision 16)
@@ -23,14 +23,12 @@
 
 #include <wx/filename.h>
+#include <wx/ffile.h>
 
-enum TMDMCOPIER_MODE {
-    TMDMCOPIER_MODE_ERASE = 0,
-    TMDMCOPIER_MODE_APPEND
-};
 
 
 class TmDmCopier {
 private:
-    TMDMCOPIER_MODE m_CopyMode;
+    wxFFile * m_File;
+    wxArrayString m_Errors;
     
 public:
@@ -38,8 +36,8 @@
     virtual ~TmDmCopier();
     
-    void SetCopyMode(TMDMCOPIER_MODE value);
     bool CopyFrom(const wxFileName & filename);
     bool CopyFrom(const wxString & text);
-    bool IsCopyAllowed();
+    
+    wxArrayString GetErrors();
 };
 #endif
Index: trunk/tmdmcreator/src/tmdmcreator.cpp
===================================================================
--- trunk/tmdmcreator/src/tmdmcreator.cpp	(revision 15)
+++ trunk/tmdmcreator/src/tmdmcreator.cpp	(revision 16)
@@ -16,16 +16,17 @@
 
 #include "tmdmcreator.h"
+#include "tmdmcopier.h"
 
-tmdmcreator::tmdmcreator() {
+TmDmCreator::TmDmCreator() {
 }
 
 
 
-tmdmcreator::~tmdmcreator() {
+TmDmCreator::~TmDmCreator() {
 }
 
 
 
-void tmdmcreator::SetBaseSQL(wxFileName value) {
+void TmDmCreator::SetBaseSQL(wxFileName value) {
   m_FileNameBaseSQL = value;
 }
@@ -33,5 +34,5 @@
 
 
-void tmdmcreator::SetUserSQL(wxFileName value) {
+void TmDmCreator::SetUserSQL(wxFileName value) {
   m_FileNameUserSQL = value;
 }
@@ -39,5 +40,5 @@
 
 
-void tmdmcreator::SetUserContent(wxFileName value) {
+void TmDmCreator::SetUserContent(wxFileName value) {
   m_FileNameUserContent = value;
 }
@@ -45,18 +46,65 @@
 
 
-void tmdmcreator::SetOutSQL(wxFileName value) {
+void TmDmCreator::SetOutSQL(wxFileName value) {
   m_FileNameOutSQL = value;
 }
 
 
-
-bool tmdmcreator::CheckFiles(wxArrayString & errormsg) {
-    return false;
+bool TmDmCreator::_CheckExistsAndExt(const wxFileName & filename, const wxString & extension, wxArrayString * errormsg){
+    wxASSERT(errormsg);
+    if (filename.Exists() == false) {
+        errormsg->Add(wxString::Format(_("File: %s didn't exists!"), filename.GetFullPath()));
+        return false;
+    }
+    if (filename.GetExt().Lower() != extension) {
+        errormsg->Add(wxString::Format(_("Wrong extension for: %s  (expected: %s)"), filename.GetFullPath(), extension));
+        return false;
+    }
+    return true;
 }
 
 
 
-bool tmdmcreator::ProcessFiles(wxArrayString & errorsmsg) {
-    return false;
+bool TmDmCreator::CheckFiles(wxArrayString & errormsg) {
+    errormsg.Clear();
+    if (_CheckExistsAndExt(m_FileNameBaseSQL, _T("sql"), &errormsg) == false) {
+        return false;
+    }
+    if (_CheckExistsAndExt(m_FileNameUserSQL, _T("sql"), &errormsg) == false) {
+        return false;
+    }
+    if (_CheckExistsAndExt(m_FileNameUserContent, _T("txt"), &errormsg) == false) {
+        return false;
+    }
+    if (m_FileNameOutSQL.Exists()) {
+        errormsg.Add(wxString::Format(_("output file: %s allready exists!"), m_FileNameOutSQL.GetFullPath()));
+        return false;
+    }
+    if (m_FileNameOutSQL.IsDirWritable() == false){
+        errormsg.Add(wxString::Format(_T("Writing not permitted into %s"), m_FileNameOutSQL.GetPath()));
+        return false;
+    }
+    return true;
 }
 
+
+
+bool TmDmCreator::ProcessFiles(wxArrayString & errorsmsg) {
+    errorsmsg.Clear();
+    // Copy structure to out
+    TmDmCopier myCopier(m_FileNameOutSQL);
+    if (myCopier.CopyFrom(m_FileNameBaseSQL) == false) {
+        errorsmsg.Add(wxString::Format(_("Copying: %s failed!"), m_FileNameBaseSQL.GetFullPath()));
+        return false;
+    }
+    
+    if (myCopier.CopyFrom(m_FileNameUserSQL) == false) {
+        errorsmsg.Add(wxString::Format(_("Copying: %s failed!"), m_FileNameUserSQL.GetFullPath()));
+        return false;
+    }
+    
+    
+    
+    return true;
+}
+
Index: trunk/tmdmcreator/src/tmdmcreator.h
===================================================================
--- trunk/tmdmcreator/src/tmdmcreator.h	(revision 15)
+++ trunk/tmdmcreator/src/tmdmcreator.h	(revision 16)
@@ -21,8 +21,7 @@
 #include <wx/wx.h>
 #endif
-
 #include <wx/filename.h>
 
-class tmdmcreator {
+class TmDmCreator {
 private:
     wxFileName m_FileNameBaseSQL;
@@ -31,8 +30,10 @@
     wxFileName m_FileNameOutSQL;
     
+    bool _CheckExistsAndExt(const wxFileName & filename, const wxString & extension, wxArrayString * errormsg);
+    
 public:
-    tmdmcreator();
-    virtual ~tmdmcreator();
-
+    TmDmCreator();
+    virtual ~TmDmCreator();
+    
     void SetBaseSQL(wxFileName value);
     void SetUserSQL(wxFileName value);
@@ -41,5 +42,5 @@
     
     bool CheckFiles(wxArrayString & errormsg);
-    bool ProcessFiles(wxArrayString & errorsmsg);
+    bool ProcessFiles(wxArrayString & errorsmsg);    
 };
 #endif
Index: trunk/tmdmcreator/src/tmdmprocessor.cpp
===================================================================
--- trunk/tmdmcreator/src/tmdmprocessor.cpp	(revision 15)
+++ trunk/tmdmcreator/src/tmdmprocessor.cpp	(revision 16)
@@ -2,5 +2,5 @@
  tmdmprocessor.cpp
  -------------------
- copyright            : (C) 2013 CREALP Lucien Schreiber 
+ copyright            : (C) 2013 CREALP Lucien Schreiber
  email                : lucien.schreiber at crealp dot vs dot ch
  ***************************************************************************/
@@ -21,18 +21,43 @@
 }
 
+
+
 TmDmProcessor::~TmDmProcessor() {
 }
 
+
+
 int TmDmProcessor::FindBlock(const wxString & blockname) {
+    return wxNOT_FOUND;
 }
+
+
+
+
+
+
+
 
 TmDmProcessorSimple::TmDmProcessorSimple() {
 }
 
+
+
 TmDmProcessorSimple::~TmDmProcessorSimple() {
 }
 
+
+
 bool TmDmProcessorSimple::ProcessBlock(int blockstart, TmDmCopier * copier) {
+    return false;
 }
+
+
+
+
+
+
+
+
 
 TmDmProcessorAttributs::TmDmProcessorAttributs() {
@@ -43,4 +68,5 @@
 
 bool TmDmProcessorAttributs::ProcessBlock(int blockstart, TmDmCopier * copier) {
+    return false;
 }
 
Index: trunk/tmdmcreator/src/tmdmprocessor.h
===================================================================
--- trunk/tmdmcreator/src/tmdmprocessor.h	(revision 15)
+++ trunk/tmdmcreator/src/tmdmprocessor.h	(revision 16)
@@ -2,5 +2,5 @@
  tmdmprocessor.h
  -------------------
- copyright            : (C) 2013 CREALP Lucien Schreiber 
+ copyright            : (C) 2013 CREALP Lucien Schreiber
  email                : lucien.schreiber at crealp dot vs dot ch
  ***************************************************************************/
@@ -25,39 +25,43 @@
 #endif
 
-
 class TmDmCopier;
-
 class TmDmProcessor {
-  protected:
+protected:
     TmDmCopier * m_Copier;
+    
+public:
+    TmDmProcessor();
+    virtual ~TmDmProcessor();
+    
+    int FindBlock(const wxString & blockname);
+    virtual bool ProcessBlock(int blockstart, TmDmCopier * copier) = 0;
+};
 
 
-  public:
-    TmDmProcessor();
 
-    virtual ~TmDmProcessor();
 
-    int FindBlock(const wxString & blockname);
 
-    virtual bool ProcessBlock(int blockstart, TmDmCopier * copier) = 0;
 
+
+class TmDmProcessorSimple : public TmDmProcessor {
+public:
+    TmDmProcessorSimple();
+    virtual ~TmDmProcessorSimple();
+    
+    virtual bool ProcessBlock(int blockstart, TmDmCopier * copier);
 };
-class TmDmProcessorSimple : public TmDmProcessor {
-  public:
-    TmDmProcessorSimple();
 
-    virtual ~TmDmProcessorSimple();
 
+
+
+
+
+
+class TmDmProcessorAttributs : public TmDmProcessor {
+public:
+    TmDmProcessorAttributs();
+    virtual ~TmDmProcessorAttributs();
+    
     virtual bool ProcessBlock(int blockstart, TmDmCopier * copier);
-
-};
-class TmDmProcessorAttributs : public TmDmProcessor {
-  public:
-    TmDmProcessorAttributs();
-
-    virtual ~TmDmProcessorAttributs();
-
-    virtual bool ProcessBlock(int blockstart, TmDmCopier * copier);
-
 };
 #endif
