]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkInterpreter.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkInterpreter.cxx
index 7a7e08b47b0c25fd9827e64d4a6c0b2995808f85..d563f1989422be408919d81226e9280d42c23d6c 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkInterpreter.cxx,v $ $
   Language:  C++
-  Date:      $Date: 2008/02/14 20:26:54 $
-  Version:   $Revision: 1.32 $
+  Date:      $Date: 2008/03/03 11:43:52 $
+  Version:   $Revision: 1.38 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -26,6 +26,7 @@
 #include "bbtkWxConsole.h"
 #include "bbtkUtilities.h"
 #include <sys/stat.h>
+#include <algorithm>
 #ifdef CMAKE_HAVE_TERMIOS_H
 #include <termios.h>
 #define BBTK_USE_TERMIOS_BASED_PROMPT
@@ -286,6 +287,8 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
    */
   Interpreter::~Interpreter()
   {
+
+std::cout << "=========================================~Interpreter()" << std::endl;
     bbtkDebugMessageInc("Interpreter",9,"Interpreter::~Interpreter()" <<std::endl);
     delete mExecuter;
     //delete mFactory;
@@ -299,8 +302,7 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
   /**
    *  
    */
-  void Interpreter::InterpretFile( const std::string& filename,  
-                                   bool use_configuration_file)
+  void Interpreter::InterpretFile( const std::string& filename )
   {
     bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretFile(\""<<filename<<"\")"<<std::endl);
 
@@ -309,7 +311,7 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
 
     try 
     {
-      SwitchToFile(filename, use_configuration_file);
+      SwitchToFile(filename);
       bool insideComment = false; // for multiline comment
       while (mFile.size()>0) 
       {
@@ -483,7 +485,7 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
         break;
 
       case cPrint :
-        Print(words[1]); /// \todo use mExecuter 
+        Print(words[1]); /// \todo use generate command 
         break;
         
       case cExec :
@@ -562,11 +564,11 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
       case cInclude :
         if (mCommandLine)
         {
-           InterpretFile(words[1], true ); // true : better pass use_config_file
+           InterpretFile(words[1]); 
         }
         else
         {
-            SwitchToFile(words[1], true ); // true : better pass use_config_file
+            SwitchToFile(words[1]);
         }
        // if 'source' was given
        if (words.size()==3) 
@@ -576,7 +578,7 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
         break;
 
       case cLoad:
-        LoadPackage(words[1], true ); // true : better pass use_config_file
+        LoadPackage(words[1]);
         break;
 
       case cUnload:
@@ -674,7 +676,15 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
   {
     if (mExecuter->GetNoExecMode()) return;
 
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::SplitLine(\""<<str<<"\")"<<std::endl);
+    bbtkDebugMessageInc("Interpreter",9,"Interpreter::Print(\""<<str<<"\")"<<std::endl);
+
+ // TO DO :
+ // InterpretLine ("load std")
+ // InterpretLine("new ConcatStrings _C_ ") -> trouver un nom unique : # commande 
+ // InterpretLine("new Print _P_") 
+ // InterpretLine("connect _C_.Out _P_.In")
+ // int num = 1
 
     std::vector<std::string> chains;
     std::string delimiters("$");
@@ -693,14 +703,21 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
        {
           // Found a text token, add it to the vector.
           chains.push_back(str.substr(lastPos, pos - lastPos));
+ // std::string token = str.substr(lastPos, pos - lastPos)
+ // InterpretLine("set _C_.In%num% %token%")
        }
        else 
        {
+
        // is an output (between $$) : decode 
          std::string tok,box,output;
          tok = str.substr(lastPos, pos - lastPos);
          Utilities::SplitAroundFirstDot(tok,box,output);
          chains.push_back( mExecuter->Get(box,output) );
+
+// InterpretLine("connect %tok% _C_.In%num%") 
+
        }
         // Skip delimiters.  Note the "not_of"
        lastPos = str.find_first_not_of(delimiters, pos);
@@ -708,7 +725,11 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
        pos = str.find_first_of(delimiters, lastPos);
     //
        is_text = !is_text;
+// num ++;
      }
+// InterpretLine("exec _P_")
+// if (IS_IN_WORKSPACE) InterpretLine("delete _C_; delete _P_");
+
      std::vector<std::string>::iterator i;
      for (i= chains.begin(); i!=chains.end(); ++i) 
      {
@@ -727,8 +748,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
 
 // ===================================================================================
 
-  void Interpreter::SwitchToFile( const std::string& name,
-                                  bool use_configuration_file )
+  void Interpreter::SwitchToFile( const std::string& name )
   {
   // Note : in the following :
   // name : the user supplied name 
@@ -748,16 +768,14 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
     std::string pkgname;             // e.g. <scriptname>.bbs
     std::vector<std::string> Filenames;
 
-    if (use_configuration_file)
-    {
-        // The following is *NOT* a debug time message :
-        // It's a user intended message.
-        // Please don't remove it.
-      bbtkMessage("Interpreter",1,
-                 "look for : [" << name
-                 << "] (use_configuration_file == TRUE)" << std::endl);
-      script_paths = ConfigurationFile::GetInstance().Get_bbs_paths();
-    }
+    // The following is *NOT* a debug time message :
+    // It's a user intended message.
+    // Please don't remove it.
+    bbtkMessage("Interpreter",1,
+               "look for : [" << name
+                 << "]" << std::endl);
+    script_paths = ConfigurationFile::GetInstance().Get_bbs_paths();
+
     std::string upath;
     pkgname = Utilities::ExtractScriptName(name,upath);
 
@@ -789,7 +807,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
       std::string path;
       std::vector<std::string>::iterator i;
       std::string fullDirectoryName;
-      for (i=script_paths.begin();i!=script_paths.end();++i)// ==== relative name, iterate + load all .bbs files
+      for (i=script_paths.begin();i!=script_paths.end();i++)// ==== relative name, iterate + load all .bbs files
       {
         path = *i;
 
@@ -803,8 +821,12 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
 
         fullDirectoryName = Utilities::MakePkgnameFromPath(path, upath, false);
 
+        //EED 18 Fev 2008
+        // without last slash "\"
+        std::string fullDirectoryNameClean = fullDirectoryName.substr(0,fullDirectoryName.size()-1);
+
       // Check if library exists
-        if ( ! Utilities::IsDirectory(fullDirectoryName) )
+        if ( ! Utilities::IsDirectory( fullDirectoryNameClean ) )
         {
         // The following is *NOT* a debug time message :
         // It's a user intended message.
@@ -821,7 +843,6 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
         nbBssFiles = 0;
         for (std::vector<std::string>::iterator i = Filenames.begin(); i!= Filenames.end(); ++i)
         {
-
            if ((*i).substr((*i).size()-4, 4) != ".bbs")
               continue;      // ignore non .bbs files
            LoadScript(*i,name);