]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkInterpreter.cxx
examples
[bbtk.git] / kernel / src / bbtkInterpreter.cxx
index 694f97a74a64e2e0c59baf2a96aad56013b20ced..ced11fa92b8f849e14231a4f293fb75c624e1ff8 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkInterpreter.cxx,v $ $
   Language:  C++
-  Date:      $Date: 2008/02/05 13:23:46 $
-  Version:   $Revision: 1.25 $
+  Date:      $Date: 2008/02/18 10:41:02 $
+  Version:   $Revision: 1.33 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
 =========================================================================*/
 /**
  *  \file 
- *  \brief class Interpreter : 
+ *  \brief class Interpreter :
  */
 
-#include "bbtkInterpreter.h" 
+#include "bbtkInterpreter.h"
 #include "bbtkMessageManager.h"
 #include "bbtkConfigurationFile.h"
 #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
@@ -40,7 +41,7 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
 
  //=======================================================================
  /**
-   *  
+   *
    */
   Interpreter::Interpreter() 
     :
@@ -52,9 +53,12 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
  
     mGlobalInterpreter = this;
 
-    //    mFactory = new bbtk::Factory();
     mExecuter = new bbtk::Executer();
-    //mExecuter->SetFactory(mFactory);
+    
+    // For the time being, comment out previous line, and
+    // uncomment next line to check Transcriptor
+
+    //mExecuter = new bbtk::Transcriptor("GeneratedProgram.txt");
 
     // Builds the commands dict
     CommandInfoType info;
@@ -222,10 +226,10 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
 
     info.category = "include";
     info.argmin = 1;
-    info.argmax = 1;
+    info.argmax = 2;
     info.code = cInclude;
-    info.syntax = "include <filename>";
-    info.help = "Includes the file <filename>";
+    info.syntax = "include <filename> [source]";
+    info.help = "Includes the file <filename>.\n  'source' : If the keyword 'source' is provided then informs bbi that the included file is the source of the current box definition (Advanced; used to get the right 'Include' field in html doc of packages 'appli' scripts).";
     mCommandDict[info.category] = info;
 
     info.category = "quit";
@@ -297,15 +301,18 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
    *  
    */
   void Interpreter::InterpretFile( const std::string& filename,  
-                                  bool use_configuration_file)
+                                   bool use_configuration_file)
   {
     bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretFile(\""<<filename<<"\")"<<std::endl);
 
     bool exm = mCommandLine;
     mCommandLine = false;
 
+
     try 
     {
+printf("EED: Interpreter::InterpretFile 01\n");
+InterpretLine("message ALL 9", exm);
       SwitchToFile(filename, use_configuration_file);
       bool insideComment = false; // for multiline comment
       while (mFile.size()>0) 
@@ -363,6 +370,7 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL;
     bbtkDecTab("Interpreter",9);
 
     mCommandLine = exm;
+ printf("EED: Interpreter::InterpretFile 02\n");
   }
   //=======================================================================
 
@@ -440,18 +448,18 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
       case cNew :
         mExecuter->Create(words[1],words[2]);
         break;
-        
+
       case cDelete :
         // TO DO !!
         // mExecuter->Remove(words[1]);
         break;
-        
+
       case cConnect :
         Utilities::SplitAroundFirstDot(words[1],left,right);
         Utilities::SplitAroundFirstDot(words[2],left2,right2);      
         mExecuter->Connect(left,right,left2,right2);
         break;
-        
+
       case cPackage :
         mExecuter->BeginPackage(words[1]);
         break;
@@ -459,26 +467,26 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
       case cEndPackage :
         mExecuter->EndPackage();
         break;
-        
+
       case cDefine :
         if (mFileName.size()>0) 
         {
-           filename = Utilities::get_file_name(mFileName.back());
+         filename = mIncludeFileName.back(); //Utilities::get_file_name(mFileName.back());
         }
         if (words.size()==2) 
         {
            mExecuter->Define(words[1],"",filename);
         }
-        else 
+        else
         {
            mExecuter->Define(words[1],words[2],filename);
         }
         break;
-        
+
       case cEndDefine :
         mExecuter->EndDefine();
         break;
-        
+
       case cPrint :
         Print(words[1]); /// \todo use mExecuter 
         break;
@@ -488,103 +496,110 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
           mExecuter->SetNoExecMode(true);
         else if (words[1]=="unfreeze") 
           mExecuter->SetNoExecMode(false);
-        else 
+        else
           mExecuter->Update(words[1]);
         break;
-        
+
       case cInput :
         Utilities::SplitAroundFirstDot(words[2],left,right);
         mExecuter->DefineInput(words[1],left,right,words[3]);
         break;
-        
+
       case cOutput :
         Utilities::SplitAroundFirstDot(words[2],left,right);
         mExecuter->DefineOutput(words[1],left,right,words[3]);
         break;
-        
+
       case cSet :
         Utilities::SplitAroundFirstDot(words[1],left,right);
         mExecuter->Set(left,right,words[2]);
         break;
-        
+
       case cAuthor :
         mExecuter->Author(words[1]);
         break;
 
-    case cCategory :
-      mExecuter->Category(words[1]);
-      break;
-      
-    case cIndex :
-      if (words.size()==1) 
-       Index("tmp_index.html");
-      else if (words.size()==2) 
-       Index(words[1]);
-      else if (words.size()==3) 
-       Index(words[1],words[2]);
-      break;
-    case cDescription :
-      mExecuter->Description(words[1]);
+      case cCategory :
+        mExecuter->Category(words[1]);
         break;
-        
+
+      case cIndex :
+        if (words.size()==1)
+            Index("tmp_index.html");
+        else if (words.size()==2)
+            Index(words[1]);
+        else if (words.size()==3)
+            Index(words[1],words[2]);
+        break;
+
+      case cDescription :
+        mExecuter->Description(words[1]);
+        break;
+
       case cHelp :
         Help(words);
         break;
-        
+
       case cMessage : 
-        if (words.size()<3) 
+        if (words.size()<3)
         {
-            bbtk::MessageManager::PrintInfo();
+           bbtk::MessageManager::PrintInfo();
         }
-        else 
+        else
         {
            sscanf(words[2].c_str(),"%d",&level);
            bbtk::MessageManager::SetMessageLevel(words[1],level);
         }
         break;
-        
-      case cGraph : 
+
+      case cGraph :
         Graph(words);
         break;
-        
+
       case cConfig :
-        Config();            
+        Config();
         break;
-        
+
       case cReset :  // EED
         this->mExecuter->Reset();
         break;
-        
+
       case cInclude :
-        if (mCommandLine) 
+        if (mCommandLine)
         {
            InterpretFile(words[1], true ); // true : better pass use_config_file
         }
-        else 
+        else
         {
             SwitchToFile(words[1], true ); // true : better pass use_config_file
         }
+       // if 'source' was given
+       if (words.size()==3) 
+         {
+           this->mExecuter->SetCurrentFileName(words[1]);
+         }
         break;
-        
+
       case cLoad:
         LoadPackage(words[1], true ); // true : better pass use_config_file
         break;
-        
+
       case cUnload:
         UnLoadPackage(words[1]);
         break;
-        
+
       case cQuit :
+        delete mExecuter;
         throw QuitException();
         break;
-        
-         case cWorkspace :
+
+      case cWorkspace :
         if (words.size() == 2) 
         {
            if (words[1]=="freeze")        mExecuter->SetNoExecMode(true);
            else if (words[1]=="unfreeze") mExecuter->SetNoExecMode(false);
         }
-        else 
+        else
         {
            mExecuter->SetWorkspaceName(words[2]);
         }
@@ -593,7 +608,7 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
       default:
         bbtkInternalError("should not reach here !!!");
    }
-    
+
    bbtkDecTab("Interpreter",9);
 }
   //=======================================================================  
@@ -604,12 +619,12 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
 
   //=======================================================================
   /**
-   *  
+   *
    */
 void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>& tokens)
 {
     bbtkDebugMessageInc("Interpreter",9,"Interpreter::SplitLine(\""<<str<<"\")"<<std::endl);
+
     std::string delimiters = "\"";
     std::vector<std::string> quote;
     Utilities::SplitString(str,delimiters,quote);
@@ -634,7 +649,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
     }
     bbtkDebugMessageCont("Interpreter",9,std::endl);
 
-    bbtkDebugDecTab("Interpreter",9);    
+    bbtkDebugDecTab("Interpreter",9);
  }
   //=======================================================================
 
@@ -651,14 +666,14 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
    {
       s.replace(pos,2,cr,1);
       pos = s.find(ss, pos-1);
-   } 
+   }
   }
   //=======================================================================
 
 
   //=======================================================================
   /**
-   *  
+   *
    */
   void Interpreter::Print( const std::string& str)
   {
@@ -673,10 +688,10 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
     std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
     bool is_text = true;
     if (lastPos>0) is_text = false;
-  
+
     // Find first delimiter.
     std::string::size_type pos     = str.find_first_of(delimiters, lastPos);
-    
+
     while (std::string::npos != pos || std::string::npos != lastPos)
     {
        if (is_text) 
@@ -707,12 +722,12 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
        std::cout << *i;
      }
      std::cout << std::endl;
-     bbtkDebugDecTab("Interpreter",9);    
+     bbtkDebugDecTab("Interpreter",9);
  }
 
   //=======================================================================
   /**
-   *  
+   *
    */
 
 // ===================================================================================
@@ -729,7 +744,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
   //
   // use ./directory/subdir/scrname.bbs
   //
-  
+
     bbtkDebugMessageInc("Interpreter",9,"Interpreter::SwitchToFile( \""
                          <<name<<"\")"<<std::endl);
 
@@ -737,14 +752,14 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
     std::string fullPathScriptName;  // full path script name
     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 
+                 "look for : [" << name
                  << "] (use_configuration_file == TRUE)" << std::endl);
       script_paths = ConfigurationFile::GetInstance().Get_bbs_paths();
     }
@@ -766,22 +781,20 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
         {
            if ((*i).substr((*i).size()-4, 4) != ".bbs")
               continue;      // ignore non .bbs files
-           LoadScript(*i);
+           LoadScript(*i,name);
            nbBssFiles++;
         }
         if (nbBssFiles==0)
            bbtkMessage("Interpreter",2,
                       "WARNING : No '.bbs' file found in [" 
                       << upath << "]" << std::endl);
-
         return;
       }
-      
 
       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;
 
@@ -795,8 +808,12 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
 
         fullDirectoryName = Utilities::MakePkgnameFromPath(path, upath, false);
 
-      // Check if library exists           
-        if ( ! Utilities::IsDirectory(fullDirectoryName) )
+               //EED 18 Fev 2008
+               // without last slash "\"
+               std::string fullDirectoryNameClean = fullDirectoryName.substr(0,fullDirectoryName.size()-1);
+
+      // Check if library exists
+        if ( ! Utilities::IsDirectory( fullDirectoryNameClean ) )
         {
         // The following is *NOT* a debug time message :
         // It's a user intended message.
@@ -813,17 +830,16 @@ 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);
+           LoadScript(*i,name);
            nbBssFiles++;
         }
         if (nbBssFiles==0)
          bbtkMessage("Interpreter",1,
                      "WARNING : No '.bbs' file found in [" 
                      << fullDirectoryName << "]" << std::endl);
-           
+
         //break; // a directory was found; we stop iterating
        // LG : No! We want all files included !
        }
@@ -843,7 +859,6 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
       // ===========================================================check user supplied location
       fullnameGiven = true;
 
-      
       fullPathScriptName =  Utilities::ExpandLibName(name, false);
 
       // allow user to always forget ".bbs"
@@ -905,7 +920,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
         }
        bbtkMessage("Interpreter",2,
                    "   [" <<fullPathScriptName 
-                   <<"] : found" <<std::endl);        
+                   <<"] : found" <<std::endl);
         foundFile = true;
         break; // a script was found; we stop iterating
 
@@ -921,18 +936,19 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
             bbtkError("Script ["<<fullPathScriptName<<"] not found");
        else
           bbtkError("No ["<<pkgname<<".bbs] script found");
-       return;    
+       return;
     }
     else
-       LoadScript(fullPathScriptName);
+      LoadScript(fullPathScriptName,name);
 
     return;
-  }   
-   
+  }
+
 
   //=======================================================================
 
-  void Interpreter::LoadScript( std::string fullPathScriptName)
+  void Interpreter::LoadScript( std::string fullPathScriptName,
+                               std::string includeScriptName)
   {
     if (find(mFileName.begin(),mFileName.end(),fullPathScriptName)
        !=mFileName.end()) 
@@ -942,22 +958,23 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
        return;
       }
 
-    std::ifstream* s;      
+    std::ifstream* s;
     s = new std::ifstream;
     s->open(fullPathScriptName.c_str());
     if (!s->good()) 
     {
         bbtkError("Could not open file ["<<fullPathScriptName<<"]");
-        return;     
+        return;
     }
-    
+
     bbtkMessage("Interpreter",1,"   -->[" << fullPathScriptName 
                << "] found" << std::endl);
 
     mFile.push_back(s);
     mFileName.push_back(fullPathScriptName);
+    mIncludeFileName.push_back(includeScriptName);
     mLine.push_back(0);
-    return;  
+    return;
   }
 
   //=======================================================================
@@ -968,8 +985,8 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
   {
     bbtkDebugMessage("Interpreter",9,"Interpreter::CloseCurrentFile()"
                       <<std::endl);
-    
-    if (mFile.size()==0) 
+
+    if (mFile.size()==0)
     {
       bbtkDebugMessage("Interpreter",9," -> no file left open"<<std::endl);
       return;
@@ -980,8 +997,9 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
     mFile.pop_back();
     bbtkDebugMessage("Interpreter",9,
                      " Closing file '"<<mFileName.back()<<"'"<<std::endl);
-    
+
     mFileName.pop_back();
+    mIncludeFileName.pop_back();
     mLine.pop_back();
     bbtkDebugMessage("Interpreter",9," Remains "
                      <<mFile.size()
@@ -999,7 +1017,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
   {
     bbtkDebugMessage("Interpreter",9,"Interpreter::CloseAllFiles()"
                       <<std::endl);
-    
+
     while (mFile.size() != 0) 
     {
       mFile.back()->close();
@@ -1008,6 +1026,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
       bbtkDebugMessage("Interpreter",9,
                       " Closing file '"<<mFileName.back()<<"'"<<std::endl);
       mFileName.pop_back();
+      mIncludeFileName.pop_back();
       mLine.pop_back();
     }
     bbtkDebugMessage("Interpreter",9,"EO Interpreter::CloseAllFiles()"
@@ -1025,7 +1044,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
                                       CommandInfoType& info )
   {
     bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretCommand(...)"<<std::endl);
-    
+
     // searches the command category
     CommandDictType::iterator c;
     c = mCommandDict.find(words[0]);
@@ -1052,7 +1071,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
 void Interpreter::Help(const std::vector<std::string>& words)
 {
     unsigned int nbarg = words.size()-1;
-    
+
     if (nbarg==0) 
     {
        HelpCommands();
@@ -1073,26 +1092,52 @@ void Interpreter::Help(const std::vector<std::string>& words)
          try 
          {
             HelpPackage(words[1]);
+#ifdef _USE_WXWIDGETS_
+           if ( WxConsole::GetInstance() != 0 )
+             {
+               std::string url = 
+                 ConfigurationFile::GetInstance().Get_doc_path();
+               url += "/bbdoc/" + words[1] + "/index.html";
+               if (Utilities::FileExists(url)) 
+                 {
+                   WxConsole::GetInstance()->ShowHtmlPage(url);
+                 }
+             }
+#endif     
          }
          catch (bbtk::Exception f) 
          {
             try 
             {
-               HelpBlackBox(words[1]);
-            }
-           catch (bbtk::Exception g) 
-           {
-              try
-              {
-                 this->mExecuter->ShowRelations(words[1],"0","9999");
-              }
-              catch (bbtk::Exception h){
-                bbtkError("\""<<words[1].c_str()
-                          <<"\" is not a known command, package, black box type or black box name");
-              }
-           }
+             std::string package;
+             HelpBlackBox(words[1],package);
+#ifdef _USE_WXWIDGETS_
+              if ( WxConsole::GetInstance() != 0 )
+                {
+                  std::string url = 
+                    ConfigurationFile::GetInstance().Get_doc_path();
+                  url += "/bbdoc/" + package + "/index.html";
+                  if (Utilities::FileExists(url))
+                    {
+                      url += "#" + words[1];
+                      WxConsole::GetInstance()->ShowHtmlPage(url);
+                    }
+                }
+#endif
+           }
+           catch (bbtk::Exception g) 
+             {
+               try
+                 {
+                   this->mExecuter->ShowRelations(words[1],"0","9999");
+                 }
+               catch (bbtk::Exception h){
+                 bbtkError("\""<<words[1].c_str()
+                           <<"\" is not a known command, package, black box type or black box name");
+               }
+             }
          }
-       }
+      }
     }
     else if (nbarg==2) 
     {
@@ -1128,44 +1173,9 @@ void Interpreter::Help(const std::vector<std::string>& words)
   /// Displays the Configuration
   void Interpreter::Config() const
   {
-    bbtkDebugMessageInc("Kernel",9,"Factory::Config"<<std::endl);
-    
-    ConfigurationFile cf = ConfigurationFile::GetInstance();
-    
-    const std::string config_xml_full_path      = cf.Get_config_xml_full_path();    
-    const std::string description               = cf.Get_description();
-    const std::string url                       = cf.Get_url();
-    const std::string data_path                 = cf.Get_data_path();
-    const std::string default_doc_tmp           = cf.Get_default_doc_tmp();    
-    const std::string file_separator            = cf.Get_file_separator();    
-    const std::vector<std::string>bbs_paths     = cf.Get_bbs_paths();
-    const std::vector<std::string>package_paths = cf.Get_package_paths();
-    
-    bbtkMessage("Help",1, "============="   << std::endl);           
-    bbtkMessage("Help",1, "Configuration"   << std::endl);
-    bbtkMessage("Help",1, "============="   << std::endl);
-    bbtkMessage("Help",1, "bbtk_config.xml   : [" << config_xml_full_path  << "]" << std::endl); 
-    bbtkMessage("Help",1, "Documentation Url : [" << url             << "]" << std::endl);
-    bbtkMessage("Help",1, "Data Path         : [" << data_path       << "]" << std::endl);
-    bbtkMessage("Help",1, "Default Doc_tmp   : [" << default_doc_tmp << "]" << std::endl);
-    bbtkMessage("Help",1, "File Separator    : [" << file_separator  << "]" << std::endl);
-
-    std::vector<std::string>::const_iterator i;
-           
-    bbtkMessage("Help",1, "BBS Paths   " << std::endl);     
-    for (i = bbs_paths.begin(); i!=bbs_paths.end(); ++i )
-    {
-      bbtkMessage("Help",1,"--- ["<<*i<<"]"<<std::endl);
-    }    
-    
-    bbtkMessage("Help",1, "PACKAGE Paths : " << std::endl);     
-    for (i = package_paths.begin(); i!=package_paths.end(); ++i )
-    {
-      bbtkMessage("Help",1,"--- ["<<*i<<"]"<<std::endl);
-    }
-
-    bbtkDebugDecTab("Kernel",9);
+    ConfigurationFile::GetInstance().GetHelp(1);
   }  
+   //===================================================================    
 
   //=======================================================================
   /// Displays help on all the commands
@@ -1179,7 +1189,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
               std::cout << " " << i->first << std::endl;
       //      std::cout << "   usage : " << i->second.syntax << std::endl;
       //     std::cout << "    " << i->second.help << std::endl;
+
     }
   }
   //=======================================================================
@@ -1201,7 +1211,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
     //      ++i) {
     std::cout << " usage : " << c->second.syntax << std::endl;
     std::cout << "  " << c->second.help << std::endl;
-    
+
   }
   //=======================================================================
 
@@ -1225,7 +1235,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
   //=======================================================================
 
 
-  
+
   //=======================================================================
 #ifdef BBTK_USE_TERMIOS_BASED_PROMPT
   
@@ -1248,19 +1258,18 @@ void Interpreter::Help(const std::vector<std::string>& words)
   {
     int c;
     int ind=0;
-    
+
     int MAX_LINE_SIZE = 160;
     int MAX_HISTORY_SIZE = 100;
-    
+
     char* newline = new char[MAX_LINE_SIZE];
     memset(newline,0,MAX_LINE_SIZE);
     char* histline = new char[MAX_LINE_SIZE];
     memset(histline,0,MAX_LINE_SIZE);
-    
+
     char* line = newline;
     int hist = mHistory.size();
-    
-    
+
     write(1,"> ",2);
     while(1)
     {
@@ -1449,7 +1458,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
   {
     bbtkDebugMessageInc("Interpreter",9,
                         "Interpreter::CommandLineInterpreter()"<<std::endl);
-    
+
 #ifdef BBTK_USE_TERMIOS_BASED_PROMPT  
     // Initialise the tty in non canonical mode with no echo
     // oter remembers the previous settings to restore them after 
@@ -1492,13 +1501,13 @@ void Interpreter::Help(const std::vector<std::string>& words)
       }
     }
     while (again);
-  
+
 #ifdef BBTK_USE_TERMIOS_BASED_PROMPT
     tcsetattr(0,TCSANOW,&oter);
 #endif
-  
+
     std::cout << "Good bye !" << std::endl;
-    
+
     bbtkDebugDecTab("Interpreter",9);
   }