]> Creatis software - bbtk.git/blobdiff - kernel/appli/bbpConfigurator/bbpConfigurator.cpp
Feature #2042 bbpConfigurator
[bbtk.git] / kernel / appli / bbpConfigurator / bbpConfigurator.cpp
diff --git a/kernel/appli/bbpConfigurator/bbpConfigurator.cpp b/kernel/appli/bbpConfigurator/bbpConfigurator.cpp
new file mode 100644 (file)
index 0000000..7a1df79
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ # ---------------------------------------------------------------------
+ #
+ # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+ #                        pour la SantÈ)
+ # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+ # Previous Authors : Laurent Guigues, Jean-Pierre Roux
+ # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+ #
+ #  This software is governed by the CeCILL-B license under French law and
+ #  abiding by the rules of distribution of free software. You can  use,
+ #  modify and/ or redistribute the software under the terms of the CeCILL-B
+ #  license as circulated by CEA, CNRS and INRIA at the following URL
+ #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ #  or in the file LICENSE.txt.
+ #
+ #  As a counterpart to the access to the source code and  rights to copy,
+ #  modify and redistribute granted by the license, users are provided only
+ #  with a limited warranty  and the software's author,  the holder of the
+ #  economic rights,  and the successive licensors  have only  limited
+ #  liability.
+ #
+ #  The fact that you are presently reading this means that you have had
+ #  knowledge of the CeCILL-B license and that you accept its terms.
+ # ------------------------------------------------------------------------ */
+
+#include <cstdlib>
+#include <fstream>
+#include <iostream>
+#include <vector>
+#include "boost/filesystem.hpp"
+//#include "boost/filesystem/operations.hpp"
+//#include "boost/filesystem/path.hpp"
+
+namespace bf = boost::filesystem;
+
+//using namespace bbtk;
+
+int main(int argc, char **argv)
+{
+  if (argc != 4)
+  {
+    std::cout << "usage : bbConfigurator <path_to_bbs> <package_name> <output_path>" << std::endl;
+    return 1;
+  }
+
+  std::string path_bbs(argv[1]);
+  std::string package_name(argv[2]);
+  std::string path_out(argv[3]);
+  
+  std::vector<bf::path> files;
+
+  bf::path pth(path_bbs.c_str());
+  if(bf::exists(pth) && bf::is_directory(pth))
+  {
+    bf::directory_iterator end_itr;
+    for(bf::directory_iterator itr(pth); itr != end_itr; ++itr)
+    {
+      if(!is_directory(itr->status()))
+      {
+        std::string nm(itr->path().filename().string());
+        if(nm.substr(nm.size()-4) == ".bbs")
+        {
+          std::cout << itr->path().filename().string() << std::endl;
+          files.push_back(itr->path());
+        }
+      }
+    }
+  }
+  else
+  {
+    std::cout<< "the path to the bbs's should be a folder and not a file.";
+    return 1;
+  }
+
+  for (int i = 0; i < (int)files.size()-1; ++i) {
+    for (int j = i+1; j < (int)files.size(); ++j) {
+      if(files[j].filename().string() < files[i].filename().string())
+      {
+        bf::path tmp = files[i];
+        files[i] = files[j];
+        files[j] = tmp;
+      }
+    }
+  }
+
+#ifdef WIN32
+  std::string fname = path_out + "\\" + package_name + ".bbp";
+#else
+  std::string fname = path_out + "/" + package_name + ".bbp";
+#endif
+  
+  std::ofstream out(fname.c_str());
+  out << "#-----------------------------------------" << std::endl;
+  out << "# Include script for bbtk package '" << package_name << "'" << std::endl;
+  out << "# Automatically generated by bbpConfigurator" << std::endl;
+  out << "#-----------------------------------------" << std::endl;
+  out << "load "<< package_name << std::endl;
+  out << "#-----------------------------------------" << std::endl;
+  out << "package "<< package_name << std::endl;
+  out << "#-----------------------------------------" << std::endl;
+
+  //each bbs file ordered.
+  //include [package_name]/boxes/[file_bbs]
+  //#-----------------------------------------
+  for (int i = 0; i < (int)files.size(); ++i) {
+    out << "include " << package_name << "/boxes/" << files[i].filename().string() << std::endl;
+    out << "#-----------------------------------------" << std::endl;
+  }
+
+  out << "endpackage" << std::endl;
+  out << "#-- EOF ----------------------------------" << std::endl;
+
+  out.close();
+
+  return 0;
+}
+//==========================================================================
+
+