]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkInterpreter.cxx
in 50 % of the scripts, LoadHola was called an 'image' in 50 % a 'reader'.
[bbtk.git] / kernel / src / bbtkInterpreter.cxx
index def347b983ed19e090ae3d26375108cc0e8dc6ee..ea9adc9ba8f1ef9bae578080dc75dcf682a015a9 100644 (file)
@@ -1,20 +1,33 @@
-/*=========================================================================
-                                                                                
+/*=========================================================================                                                                               
   Program:   bbtk
-  Module:    $RCSfile: bbtkInterpreter.cxx,v $ $
+  Module:    $RCSfile: bbtkInterpreter.cxx,v $
   Language:  C++
-  Date:      $Date: 2008/10/08 10:56:27 $
-  Version:   $Revision: 1.74 $
-                                                                                
-  Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
-  l'Image). All rights reserved. See Doc/License.txt or
-  http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
-
-     This software is distributed WITHOUT ANY WARRANTY; without even
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-     PURPOSE.  See the above copyright notices for more information.
-                                                                                
+  Date:      $Date: 2009/10/05 22:44:48 $
+  Version:   $Revision: 1.87 $
 =========================================================================*/
+
+/* ---------------------------------------------------------------------
+
+* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
+* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
+*
+*  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.
+* ------------------------------------------------------------------------ */                                                                         
+
 /**
  *  \file 
  *  \brief class Interpreter :
@@ -26,6 +39,7 @@
 #include "bbtkMessageManager.h"
 #include "bbtkConfigurationFile.h"
 #include "bbtkUtilities.h"
+#include "bbtkAtomicBlackBox.h"
 #include "bbtkWxBlackBox.h"
 #include <sys/stat.h>
 #include <algorithm>
@@ -42,7 +56,7 @@ namespace bbtk
  //=======================================================================
   Interpreter::Pointer Interpreter::New(const std::string& cpp_file) 
   {
-    bbtkDebugMessage("Kernel",9,"Interpreter::New('"<<cpp_file<<"')"<<std::endl);
+    bbtkDebugMessage("kernel",9,"Interpreter::New('"<<cpp_file<<"')"<<std::endl);
     return MakePointer(new Interpreter(cpp_file));
   }
  //=======================================================================
@@ -50,7 +64,7 @@ namespace bbtk
  //=======================================================================
   Interpreter::Pointer Interpreter::New(VirtualExec::Pointer e) 
   {
-    bbtkDebugMessage("Kernel",9,"Interpreter::New(VirtualExec)"<<std::endl);
+    bbtkDebugMessage("kernel",9,"Interpreter::New(VirtualExec)"<<std::endl);
     return MakePointer(new Interpreter(e));
   }
  //=======================================================================
@@ -58,14 +72,18 @@ namespace bbtk
  //=======================================================================
   Interpreter::Interpreter(const std::string& cpp_file) 
   {
+    bbtkDebugMessage("object",2,"==> Interpreter("<<cpp_file<<")"<<std::endl);
     Init(VirtualExec::Pointer(), cpp_file);
+    bbtkDebugMessage("object",2,"<== Interpreter("<<cpp_file<<")"<<std::endl);
   }
   //=======================================================================
 
  //=======================================================================
   Interpreter::Interpreter(VirtualExec::Pointer e) 
   {
+    bbtkDebugMessage("object",2,"==> Interpreter(VirtualExec)"<<std::endl);
     Init(e,"");
+    bbtkDebugMessage("object",2,"<== Interpreter(VirtualExec)"<<std::endl);
   }
   //=======================================================================
 
@@ -121,6 +139,22 @@ namespace bbtk
     info.help = "Deletes the black box of name <box>";
     mCommandDict[info.keyword] = info;
 
+    info.keyword = "clear";
+    info.argmin = 0;
+    info.argmax = 0;
+    info.code = cClear;
+    info.syntax = "clear";
+    info.help = "Clears the currently defined complex box (deletes all its boxes and connections)";
+    mCommandDict[info.keyword] = info;
+
+    info.keyword = "break";
+    info.argmin = 0;
+    info.argmax = 0;
+    info.code = cBreak;
+    info.syntax = "break";
+    info.help = "Breaks the current execution";
+    mCommandDict[info.keyword] = info;
+
     info.keyword = "newgui";
     info.argmin = 2;
     info.argmax = 2;
@@ -189,7 +223,7 @@ namespace bbtk
     info.argmin = 1;
     info.argmax = 1;
     info.code = cKind;
-    info.syntax = "kind <ADAPTOR|DEFAULT_ADAPTOR|WIDGET_ADAPTOR|DEFAULT_WIDGET_ADAPTOR>";
+    info.syntax = "kind <ADAPTOR|DEFAULT_ADAPTOR|GUI|DEFAULT_GUI>";
     info.help = "Sets the kind of the currently defined complex black box";
     mCommandDict[info.keyword] = info;
 
@@ -341,7 +375,7 @@ namespace bbtk
     mCommandDict[info.keyword] = info;
     */
 
-    bbtkDebugDecTab("Interpreter",9);
+
 
   } 
   //=======================================================================
@@ -354,25 +388,28 @@ namespace bbtk
    */
   Interpreter::~Interpreter()
   {
-    bbtkDebugMessageInc("Interpreter",9,"==> Interpreter::~Interpreter()" <<std::endl);
+    bbtkDebugMessage("object",2,"==> ~Interpreter()" <<std::endl);
     mVirtualExecuter = VirtualExec::Pointer();
-    bbtkDebugMessageInc("Interpreter",9,"<== Interpreter::~Interpreter()" <<std::endl);
+    bbtkDebugMessage("object",2,"<== ~Interpreter()" <<std::endl);
   }
   //=======================================================================
 
 
-  InterpreterError::InterpreterError( const std::string& message,
+  //=======================================================================
+  InterpreterException::InterpreterException( const std::string& message,
                                      bool in_script_file,
                                      const std::string& script_file,
                                      int script_line 
                                      )
-    : Exception("Interpreter",0,message),
+    : Exception("interpreter",0,message),
       mInScriptFile(in_script_file),
       mScriptFile(script_file),
       mScriptLine(script_line)
   {
   }
-  InterpreterError::InterpreterError( const Exception& excep,
+  //=======================================================================
+  //=======================================================================
+  InterpreterException::InterpreterException( const Exception& excep,
                      bool in_script_file,
                      const std::string& script_file,
                      int script_line 
@@ -384,8 +421,60 @@ namespace bbtk
   {
   }
   //=======================================================================
+
+
+  //=======================================================================
+  void Interpreter::CatchInterpreterException( const InterpreterException& e )
+  {
+    if (GetExecuter()->GetNoErrorMode()) 
+      {
+       bbtkWarning("ERROR :"<<e.GetErrorMessage()
+                   <<" ("<<e.GetScriptFile()<<":"<<e.GetScriptLine()
+                   <<" skipped");
+
+       return;
+      }
+    if (mThrow) 
+      {
+       if (e.GetErrorMessage()!="break")
+         {
+           mStatus = Interpreter_ERROR;               
+           CloseAllFiles();
+         }
+       throw InterpreterException(e);
+      }
+    else
+      {
+       std::stringstream mess;
+       mess << "* ERROR : "<<e.GetErrorMessage()<<std::endl;
+       if (e.IsInScriptFile())
+         {
+           mess << "* FILE  : \""<<e.GetScriptFile()<<"\""<<std::endl;
+           mess << "* LINE  : "<<e.GetScriptLine()<<std::endl;
+         }
+       CloseAllFiles();
+       std::cerr << mess.str();
+      }
+  }
+  //=======================================================================
+
+  //=======================================================================
   void Interpreter::CatchBbtkException( const bbtk::Exception& e )
   {
+    if (GetExecuter()->GetNoErrorMode()) 
+      {
+       std::string file("?");
+       int line = 0;
+       if (mFileName.size()) {
+         file = mFileName.back();
+         line = mLine.back();
+       }    
+       bbtkWarning("ERROR '"<<e.GetErrorMessage()
+                   <<"' ("<<file<<":"<<line<<") skipped");
+       
+       return;
+      }
+    mStatus = Interpreter_ERROR;              
     if (mThrow) 
       {
        bool in_script = false;
@@ -397,8 +486,9 @@ namespace bbtk
          file = mFileName.back();
          line = mLine.back();
        }   
-       CloseAllFiles();
-       throw InterpreterError(e,in_script,file,line);
+       if (e.GetErrorMessage()!="break")
+         CloseAllFiles();
+       throw InterpreterException(e,in_script,file,line);
       }
     else
       {
@@ -408,6 +498,7 @@ namespace bbtk
          mess << "* FILE  : \""<<mFileName.back()<<"\""<<std::endl;
          mess << "* LINE  : "<<mLine.back()<<std::endl;
        }    
+       CloseAllFiles();
        std::cerr << mess.str();
       }
   }
@@ -416,6 +507,20 @@ namespace bbtk
   //=======================================================================
   void Interpreter::CatchStdException( const std::exception& e )
   {  
+   if (GetExecuter()->GetNoErrorMode()) 
+      {
+       std::string file("?");
+       int line = 0;
+       if (mFileName.size()) {
+         file = mFileName.back();
+         line = mLine.back();
+       }    
+       bbtkWarning("ERROR '"<<e.what()
+                   <<"' ("<<file<<":"<<line<<") skipped");
+
+       return;
+      }
+    mStatus = Interpreter_ERROR;              
     if (mThrow) 
       {
        bool in_script = false;
@@ -428,7 +533,7 @@ namespace bbtk
          line = mLine.back();
        }    
        CloseAllFiles();
-       throw InterpreterError(e.what(),in_script,file,line);
+       throw InterpreterException(e.what(),in_script,file,line);
       }
     else
       {
@@ -438,6 +543,7 @@ namespace bbtk
          mess << "* FILE  : \""<<mFileName.back()<<"\""<<std::endl;
          mess << "* LINE  : "<<mLine.back()<<std::endl;
        }    
+       CloseAllFiles();
        std::cerr << mess.str();
       }
   }
@@ -446,6 +552,19 @@ namespace bbtk
   //=======================================================================
   void Interpreter::CatchUnknownException()
   {
+   if (GetExecuter()->GetNoErrorMode()) 
+      {
+       std::string file("?");
+       int line = 0;
+       if (mFileName.size()) {
+         file = mFileName.back();
+         line = mLine.back();
+       }  
+       bbtkWarning("UNDEFINED ERROR "
+                   <<"("<<file<<":"<<line<<") skipped");
+       return;
+      }
+    mStatus = Interpreter_ERROR;              
     if (mThrow) 
       {
        bool in_script = false;
@@ -458,7 +577,7 @@ namespace bbtk
          line = mLine.back();
        }    
        CloseAllFiles();
-       throw InterpreterError("Unknown exception caught",
+       throw InterpreterException("Unknown exception caught",
                                   in_script,file,line);
       }
     else
@@ -470,138 +589,125 @@ namespace bbtk
          mess << "* FILE  : \""<<mFileName.back()<<"\""<<std::endl;
          mess << "* LINE  : "<<mLine.back()<<std::endl;
        }    
+       CloseAllFiles();
        std::cerr << mess.str();
       }
   }
   //=======================================================================
 
   //=======================================================================
-
-#define CATCH_MACRO                            \
-  catch (QuitException e)                      \
-    {                                          \
-      status = Interpreter_QUIT;               \
-      if (mThrow) throw QuitException();       \
-    }                                          \
-  catch (bbtk::Exception e)                    \
-    {                                          \
-      status = Interpreter_ERROR;              \
-      CatchBbtkException(e);                   \
-    }                                          \
-  catch (std::exception& e)                    \
-    {                                          \
-      status = Interpreter_ERROR;              \
-      CatchStdException(e);                    \
-    }                                          \
-  catch (...)                                  \
-    {                                          \
-      status = Interpreter_ERROR;              \
-      CatchUnknownException();                 \
+  
+#define CATCH_MACRO                                    \
+  catch (InterpreterException e)                       \
+    {                                                  \
+      CatchInterpreterException(e);                    \
+    }                                                  \
+  catch (bbtk::Exception e)                            \
+    {                                                  \
+      CatchBbtkException(e);                           \
+    }                                                  \
+  catch (std::exception& e)                            \
+    {                                                  \
+      CatchStdException(e);                            \
+    }                                                  \
+  catch (...)                                          \
+    {                                                  \
+      CatchUnknownException();                         \
     }                                          
   //=======================================================================
    
 
   //=======================================================================
-  /**
-   *  
-   */
-  Interpreter::ExitStatus Interpreter::InterpretFile( const std::string& filename )
+  Interpreter::ExitStatus Interpreter::InterpretFile( const std::string& filename, bool source )
   {
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretFile(\""<<filename<<"\")"<<std::endl);
+    bbtkDebugMessage("interpreter",4,"==> Interpreter::InterpretFile(\""<<filename<<"\")"<<std::endl);
 
     bool exm = mCommandLine;
     mCommandLine = false;
 
-    ExitStatus status = Interpreter_OK;
-
     try 
     {
-      SwitchToFile(filename);
-
-      bool insideComment = false; // for multiline comment
-      while (mFile.size()>0) 
-      {
-       while (!mFile.back()->eof()) {
-         mLine.back()++;
-         char buf[500];
-         mFile.back()->getline(buf,500);
-         std::string str(buf);
-         int size=str.length();
-         if ( str[ size-1 ]==13  )
-            {
-             str.erase(size-1,1);
-            }
-         try
-           {
-             InterpretLine(str, insideComment);
-           }
-         CATCH_MACRO;
-         
-       }//while !eof
-       CloseCurrentFile();
-      }//while >0
-    } // try
+      mStatus = Interpreter_OK;
+      SwitchToFile(filename,source);
+      mInsideComment = false;
+      InterpretCurrentStreams();
+    } 
     CATCH_MACRO;
     
-    CloseAllFiles();
-    bbtkDebugMessage("Interpreter",9,"EO Interpreter::InterpretFile(\""<<filename<<"\")"<<std::endl);
-    bbtkDecTab("Interpreter",9);
+    bbtkDebugMessage("interpreter",4,
+                    "<== Interpreter::InterpretFile(\""
+                    <<filename<<"\")"<<std::endl);
+
 
     mCommandLine = exm;
     
-    return status;
+    return mStatus;
   }
   //=======================================================================
 
 
   //=======================================================================
-  /**
-   *  
-   */
   Interpreter::ExitStatus 
   Interpreter::InterpretBuffer( std::stringstream* buffer )
   {
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretBuffer()"<<std::endl);
+    bbtkDebugMessage("interpreter",4,"==> Interpreter::InterpretBuffer()"<<std::endl);
 
     bool exm = mCommandLine;
     mCommandLine = false;
 
-    ExitStatus status = Interpreter_OK;
-
     try 
     {
+      mStatus = Interpreter_OK;
       SwitchToStream(buffer);
-      bool insideComment = false; // for multiline comment
-      while (mFile.size()>0) 
+      mInsideComment = false;
+      InterpretCurrentStreams();
+    }
+    CATCH_MACRO;
+    
+    //    CloseAllFiles();
+    bbtkDebugMessage("interpreter",4,"<== Interpreter::InterpretBuffer()"<<std::endl);
+
+    
+    mCommandLine = exm;
+    return mStatus;
+  }
+  //=======================================================================
+
+  //=======================================================================
+  /// Interprets the currently open streams
+  Interpreter::ExitStatus Interpreter::InterpretCurrentStreams()
+  {
+    bbtkDebugMessage("interpreter",4,
+                    "==> Interpreter::InterpretCurrentStreams()"<<std::endl);
+
+    while (mFile.size()>0) 
       {
        while (!mFile.back()->eof()) {
          mLine.back()++;
          char buf[500];
          mFile.back()->getline(buf,500);
          std::string str(buf);
-         
+         //size 0 JCP 21-09-2009
          int size=str.length();
-         if ( str[ size-1 ]==13  )
+         if(size != 0){
+                 if ( str[ size-1 ]==13  )
             {
              str.erase(size-1,1);
             }
-         try
-           {
-             InterpretLine(str, insideComment);
-           }
-         CATCH_MACRO;
-       }//while
+                 try
+                       {
+                         DoInterpretLine(str);
+                       }
+                 CATCH_MACRO;
+         }
+         
+       } 
        CloseCurrentFile();
       }
-    }
-    CATCH_MACRO;
-    
-    CloseAllFiles();
-    bbtkDebugMessage("Interpreter",9,"EO Interpreter::InterpretBuffer()"<<std::endl);
-    bbtkDecTab("Interpreter",9);
-    
-    mCommandLine = exm;
-    return status;
+    bbtkDebugMessage("interpreter",4,
+                    "<== Interpreter::InterpretCurrentStreams()"<<std::endl);
+
+    return mStatus;
   }
   //=======================================================================
 
@@ -609,50 +715,45 @@ namespace bbtk
   /// Runs the interpretation of a command
   Interpreter::ExitStatus Interpreter::InterpretLine( const std::string& line )
   {
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretLine('"<<line<<"')"<<std::endl);
-
-    ExitStatus status = Interpreter_OK;
+    bbtkDebugMessage("interpreter",5,"==> Interpreter::InterpretLine('"<<line<<"')"<<std::endl);
 
     try 
     {
-      bool insideComment = false;
-      InterpretLine(line, insideComment);
+      mStatus = Interpreter_OK;
+      mInsideComment = false;
+//std::cout<<"JCP bbtkInterpreter.cxx Interpreter::InterpretLine("<<std::endl;
+      DoInterpretLine(line );
     }
     CATCH_MACRO;
-  
-
-    bbtkDebugMessage("Interpreter",9,"EO Interpreter::InterpretLine()"
-                    <<std::endl);
-    bbtkDecTab("Interpreter",9);
     
-    return status;
+    
+   bbtkDebugMessage("interpreter",5,"<== Interpreter::InterpretLine('"<<line<<"')"<<std::endl);
+    
+    return mStatus;
   }
+  //=======================================================================  
   
 
   //=======================================================================  
-  /**
-   *
-   */
-void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
-{
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretLine(\""<<line<<"\")"<<std::endl);
-    bbtkMessage("echo",2,line<<std::endl);
-
+  void Interpreter::DoInterpretLine( const std::string& line )
+  {
+    bbtkDebugMessage("interpreter",6,"==> Interpreter::DoInterpretLine(\""
+                    <<line<<"\")"<<std::endl);
     std::vector<std::string> words;
     SplitLine(line,words);
 
     // Empty line
     if (words.size()<1) 
     {
-       bbtkDebugDecTab("Interpreter",9);
+       bbtkDebugDecTab("interpreter",9);
        return;
     }
 
     // Single line comment : # or //
     if ( words[0][0]=='#' || (words[0][0]=='/' && words[0][1]=='/') ) 
     {  
-       bbtkDebugDecTab("Interpreter",9);
-       bbtkMessage("Interpreter",9,"Comment"<<std::endl);
+       bbtkDebugDecTab("interpreter",9);
+       bbtkMessage("interpreter",9,"Comment"<<std::endl);
        return;
     }
 
@@ -660,43 +761,97 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
     
     if (words[0][0]=='/' && words[0][1]=='*') 
     {  
-       bbtkDebugDecTab("Interpreter",9);
-       bbtkMessage("Interpreter",9,"In multiline comment"<<std::endl);
-       insideComment = true;
+       bbtkDebugDecTab("interpreter",9);
+       bbtkMessage("interpreter",9,"In multiline comment"<<std::endl);
+       mInsideComment = true;
        return;
     }
 
     if (words[0][0]=='*' && words[0][1]=='/') 
     {  
-       bbtkDebugDecTab("Interpreter",9);
-       bbtkMessage("Interpreter",9,"Out multiline comment"<<std::endl);
-       if ( !insideComment ) {
-          bbtkDebugDecTab("Interpreter",9);
-          bbtkMessage("Interpreter",9,"Comment mismatch : '*/' with no matching '/*'"<<std::endl);       
+       bbtkDebugDecTab("interpreter",9);
+       bbtkMessage("interpreter",9,"Out multiline comment"<<std::endl);
+       if ( !mInsideComment ) {
+          bbtkDebugDecTab("interpreter",9);
+          bbtkMessage("interpreter",9,"Comment mismatch : '*/' with no matching '/*'"<<std::endl);       
        }
-       insideComment = false;
+       mInsideComment = false;
        return;
     }
 
-    if (insideComment) 
+    if (mInsideComment) 
     {  
-       bbtkDebugDecTab("Interpreter",9);
-       bbtkMessage("Interpreter",9,"Multiline Comment"<<std::endl);
+       bbtkDebugDecTab("interpreter",9);
+       bbtkMessage("interpreter",9,"Multiline Comment"<<std::endl);
        return;
     }
 
     // Command 
     CommandInfoType command;
     InterpretCommand(words,command);
-
-    bbtkDebugMessage("Interpreter",9,
+//std::cout<<"JCP bbtkInterpreter command.keyword ="<<command.keyword<<std::endl;
+    bbtkDebugMessage("interpreter",9,
                      "Command='"<<command.keyword
                       <<"' code="<<command.code<<std::endl); 
     int level=0;
     std::string left,right,left2,right2;
     std::string filename;
+
+    // message command
+    if (command.code==cMessage)
+      {
+       if (words.size()<3)
+         {
+           mVirtualExecuter->HelpMessages();
+         }
+        else
+         {
+           sscanf(words[2].c_str(),"%d",&level);
+           mVirtualExecuter->SetMessageLevel(words[1],level);
+         }
+       return;
+      }
+    else 
+      {
+       bbtkMessage("echo",2,line<<std::endl);
+      }
+
+    // break and quit commands
+    if ((command.code==cBreak) || (command.code==cQuit))
+      {
+       bool in_script = false;
+       std::string file("");
+       int line = 0;
+
+       if (mFileName.size()) 
+         {
+           std::ifstream* fs = dynamic_cast<std::ifstream*>(mFile.back());
+           if (fs!=0) in_script = true;          
+           file = mFileName.back();
+           line = mLine.back();
+         } 
+       if (command.code==cBreak)
+         {
+           /*
+           std::cout << "BreakException(" 
+                     <<in_script<<","
+                     <<file<<","
+                     <<line<<")"<<std::endl;
+           */
+           bbtkError("break");//,in_script,file,line);
+           //      throw BreakException(in_script,file,line);
+         }       
+       else 
+         {
+           bbtkError("quit");//,in_script,file,line);
+             //throw QuitException(in_script,file,line);
+         }
+       return;
+      }   
+//std::cout<<" mVirtualExecuter->Create(words[1],words[2]); "<<line<<std::endl;
+    // other cammands
     switch (command.code) 
-    {
+      {
       case cNew :
         mVirtualExecuter->Create(words[1],words[2]);
         break;
@@ -722,7 +877,7 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
       case cDefine :
         if (mFileName.size()>0) 
         {
-         filename = mIncludeFileName.back(); //Utilities::get_file_name(mFileName.back());
+                  filename = mFileName.back(); //mIncludeFileName.back(); //Utilities::get_file_name(mFileName.back());
         }
         if (words.size()==2) 
         {
@@ -752,7 +907,7 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
            mVirtualExecuter->SetNoExecMode(true);
            mThrow = false;
          }
-       else if (words[1]=="freeze_no_error ") 
+       else if (words[1]=="freeze_no_error") 
          {
            mVirtualExecuter->SetNoExecMode(true);
            mVirtualExecuter->SetNoErrorMode(true);
@@ -813,17 +968,6 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
         Help(words);
         break;
 
-      case cMessage : 
-        if (words.size()<3)
-        {
-         mVirtualExecuter->HelpMessages();
-        }
-        else
-        {
-         sscanf(words[2].c_str(),"%d",&level);
-          mVirtualExecuter->SetMessageLevel(words[1],level);
-        }
-        break;
 
       case cGraph :
         Graph(words);
@@ -836,22 +980,23 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
       case cReset :  
        Reset();
         break;
+       
+      case cClear :  
+       mVirtualExecuter->Clear();
+        break;
 
       case cInclude :
-        if (mCommandLine)
+               // if 'source' was given (words.size()==3) then tell to set the 
+               // source file name of the current complex box with the full file name included
+               if (mCommandLine)
         {
-           InterpretFile(words[1]); 
+           InterpretFile(words[1],(words.size()==3)); 
         }
         else
         {
-            SwitchToFile(words[1]);
+            SwitchToFile(words[1],(words.size()==3) );
         }
-       // if 'source' was given
-       if (words.size()==3) 
-         {
-           GetExecuter()->SetCurrentFileName(words[1]);
-         }
-        break;
+               break;
 
       case cLoad:
         GetExecuter()->LoadPackage(words[1]);
@@ -861,10 +1006,6 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
         GetExecuter()->UnLoadPackage(words[1]);
         break;
 
-      case cQuit :
-        throw QuitException();
-        break;
-
       case cDebug :
        if (words.size()==2) Debug(words[1]);
        else Debug("");
@@ -886,8 +1027,10 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
         bbtkInternalError("should not reach here !!!");
    }
 
-   bbtkDecTab("Interpreter",9);
-}
+    bbtkDebugMessage("interpreter",6,"<== Interpreter::DoInterpretLine(\""
+                    <<line<<"\")"<<std::endl);
+    
+  }
   //=======================================================================  
 
 
@@ -895,12 +1038,9 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
 
 
   //=======================================================================
-  /**
-   *
-   */
-void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>& tokens)
+  void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>& tokens)
 {
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::SplitLine(\""<<str<<"\")"<<std::endl);
+    bbtkDebugMessage("interpreter",9,"==> Interpreter::SplitLine(\""<<str<<"\")"<<std::endl);
 
     std::string delimiters = "\"";
     std::vector<std::string> quote;
@@ -914,7 +1054,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
        ++i;
        if (i!=quote.end()) 
        {
-        //    bbtkDebugMessage("Interpreter",0,"\""<<*i<<"\""<<std::endl);
+        //    bbtkDebugMessage("interpreter",0,"\""<<*i<<"\""<<std::endl);
           tokens.push_back(*i);
           ++i;
        }
@@ -922,11 +1062,10 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
 
     for (i=tokens.begin(); i!=tokens.end(); ++i) 
     {
-       bbtkDebugMessage("Interpreter",9,"["<<*i<<"] ");
+      bbtkDebugMessage("interpreter",9,"--["<<*i<<"]"<<std::endl);
     }
-    bbtkDebugMessageCont("Interpreter",9,std::endl);
+    bbtkDebugMessage("interpreter",9,"<== Interpreter::SplitLine(\""<<str<<"\")"<<std::endl);
 
-    bbtkDebugDecTab("Interpreter",9);
  }
   //=======================================================================
 
@@ -935,7 +1074,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
   void Interpreter::Reset()
   {
     // Cannot close all files if the reset command is read from a file !
-    //    CloseAllFiles();
+    CloseAllFiles();
     mFileNameHistory.clear();
     this->mVirtualExecuter->Reset();
   }
@@ -950,7 +1089,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
   {
     if (mVirtualExecuter->GetNoExecMode()) return;
 
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::Print(\""<<str<<"\")"<<std::endl);
+    bbtkDebugMessageInc("interpreter",9,"Interpreter::Print(\""<<str<<"\")"<<std::endl);
 
  // TO DO :
  // InterpretLine ("load std")
@@ -1012,7 +1151,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
        std::cout << *i;
      }
      std::cout << std::endl;
-     bbtkDebugDecTab("Interpreter",9);
+     bbtkDebugDecTab("interpreter",9);
  }
 */
 
@@ -1022,7 +1161,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
    */
 
   // =========================================================================
-  void Interpreter::SwitchToFile( const std::string& name )
+  void Interpreter::SwitchToFile( const std::string& name , bool source )
   {
   // Note : in the following :
   // name : the user supplied name 
@@ -1034,8 +1173,8 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
   // use ./directory/subdir/scrname.bbs
   //
 
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::SwitchToFile( \""
-                         <<name<<"\")"<<std::endl);
+    bbtkDebugMessage("interpreter",4,"==> Interpreter::SwitchToFile( \""
+                    <<name<<"\")"<<std::endl);
 
     std::vector<std::string> script_paths;
     std::string fullPathScriptName;  // full path script name
@@ -1045,7 +1184,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
     // The following is *NOT* a debug time message :
     // It's a user intended message.
     // Please don't remove it.
-    bbtkMessage("Interpreter",1,
+    bbtkMessage("interpreter",1,
         "look for : [" << name
         << "]" << std::endl);
 
@@ -1053,126 +1192,126 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
     std::string upath;
     pkgname = Utilities::ExtractScriptName(name,upath);
 
-    bbtkMessage("Interpreter",3,
-               "extract : pkgname [" << pkgname
-                << "] upath [" << upath << "]" << std::endl);
+    bbtkMessage("interpreter",3,
+               "package name:[" << pkgname
+                << "] path:[" << upath << "]" << std::endl);
     bool fullnameGiven = false; 
     bool foundFile     = false;
 
     // ==== "*" provided : load all scripts in given path 
     // relative (e.g. std/boxes/*) or absolute 
     if (pkgname == "*") 
-       {
-               int nbBssFiles;
+      {
+
+       std::stringstream* stream = new std::stringstream;
+       //if (upath.size()!=0) // avoid troubles for "*"
        
-               std::stringstream* stream = new std::stringstream;
-               //if (upath.size()!=0) // avoid troubles for "*"
+       // ==== no path provided : look in root bbs path
+       if (upath.size()==0)
+         {
+           //      bbtkMessage("interpreter",1,
+           // LG : add all bbs path
+           //  script_paths.push_back(  ConfigurationFile::GetInstance().Get_root_bbs_path() );
+           std::vector<std::string>::const_iterator i;
+           for (i=ConfigurationFile::GetInstance().Get_bbs_paths().begin();
+                i!=ConfigurationFile::GetInstance().Get_bbs_paths().end();
+                i++)
+             {
+               script_paths.push_back(*i);
+             }
+         }
+       // ==== absolute path provided 
+       else if (upath[0]=='/' || upath[1] == ':' ) 
+         {
+           if ( Utilities::IsDirectory( upath ) )
+             {
+               script_paths.push_back(upath);
+             }
+           else 
+             {
+               bbtkError("'"<<upath<<"' : directory does not exist"); 
+             }
+         }
+       // ==== relative path provided : search all bbs path appended with 
+       // the relative path provided
+       else
+         {    
+           std::vector<std::string>::const_iterator i;
+           for (i=ConfigurationFile::GetInstance().Get_bbs_paths().begin();
+                i!=ConfigurationFile::GetInstance().Get_bbs_paths().end();
+                i++)
+             {
+               std::string full_path(*i);
+               // we *really* want '.' to be the current working directory
+               if (full_path == ".") 
+                 {
+                   char buf[2048]; // for getcwd
+                   char * currentDir = getcwd(buf, 2048);
+                   std::string cwd(currentDir);
+                   full_path = currentDir;
+                 } // if full_path
+               
+               full_path += ConfigurationFile::GetInstance().Get_file_separator();
+               full_path += upath;
+               
+               if ( Utilities::IsDirectory( full_path ) )
+                 {
+                   script_paths.push_back(full_path);
+                 }
+             } 
+           if (script_paths.empty())
+             {
+               bbtkError("no '"<<upath<<"' subdir found in search paths" 
+                         << std::endl);
+             }
+         }
        
-               // ==== no path provided : look in root bbs path
-               if (upath.size()==0)
-               {
-                       //          bbtkMessage("Interpreter",1,
-                       // LG : add all bbs path
-                       //  script_paths.push_back(  ConfigurationFile::GetInstance().Get_root_bbs_path() );
-                       std::vector<std::string>::const_iterator i;
-                       for (i=ConfigurationFile::GetInstance().Get_bbs_paths().begin();
-                               i!=ConfigurationFile::GetInstance().Get_bbs_paths().end();
-                               i++)
-                       {
-                          script_paths.push_back(*i);
-                       }
-               }
-               // ==== absolute path provided 
-               else if (upath[0]=='/' || upath[1] == ':' ) 
-               {
-                       if ( Utilities::IsDirectory( upath ) )
-                       {
-                               script_paths.push_back(upath);
-                       }
-                       else 
-                       {
-                               bbtkError("'"<<upath<<"' : directory does not exist"); 
-                       }
-               }
-               // ==== relative path provided : search all bbs path appended with 
-               // the relative path provided
-               else
-               {    
-                       std::vector<std::string>::const_iterator i;
-                       for (i=ConfigurationFile::GetInstance().Get_bbs_paths().begin();
-                               i!=ConfigurationFile::GetInstance().Get_bbs_paths().end();
-                               i++)
-                       {
-                               std::string full_path(*i);
-                               // we *really* want '.' to be the current working directory
-                               if (full_path == ".") 
-                               {
-                                       char buf[2048]; // for getcwd
-                                       char * currentDir = getcwd(buf, 2048);
-                                       std::string cwd(currentDir);
-                                       full_path = currentDir;
-                               } // if full_path
-        
-                               full_path += ConfigurationFile::GetInstance().Get_file_separator();
-                               full_path += upath;
-
-                               if ( Utilities::IsDirectory( full_path ) )
-                               {
-                                       script_paths.push_back(full_path);
-                               }
-                       } 
-                       if (script_paths.empty())
-                       {
-                               bbtkError("no '"<<upath<<"' subdir found in search paths" 
-                                                       << std::endl);
-                       }
-               }
-
-
-               // === search paths list complete : now explore it
-
-               // ==== relative name, iterate + load all .bbs/.bbp files
-               std::vector<std::string>::iterator i;
-               for (i=script_paths.begin();i!=script_paths.end();i++)
-               {
-                       bbtkMessage("Interpreter",1,
+       
+       // === search paths list complete : now explore it
+       int nbBssFiles = 0;     
+       // ==== relative name, iterate + load all .bbs/.bbp files
+       std::vector<std::string>::iterator i;
+       for (i=script_paths.begin();i!=script_paths.end();i++)
+         {
+           bbtkMessage("interpreter",1,
                        "--> Looking in '" << *i << "'" << std::endl);
-            
-                       Filenames.clear();
-                       //int nbFiles = 
-                       Utilities::Explore(*i, false, Filenames);
            
-                       nbBssFiles = 0;
-                       for (std::vector<std::string>::iterator j = Filenames.begin(); 
-                               j!= Filenames.end(); ++j)
-                       {
-                               int lgr = (*j).size();
-                               if (lgr < 5) continue;  
-                               // ignore non .bbp file
-                               if ( (*j).substr(lgr-4, 4) != ".bbp") continue; 
-
-                               (*stream) << "include \"" << *j << "\"\n";
-                               bbtkMessage("Interpreter",2,"  --> Found '" << *j << "'" << std::endl);
+           Filenames.clear();
+           //int nbFiles = 
+           Utilities::Explore(*i, false, Filenames);
+           
+           for (std::vector<std::string>::iterator j = Filenames.begin(); 
+                j!= Filenames.end(); ++j)
+             {
+               int lgr = (*j).size();
+               if (lgr < 5) continue;  
+               // ignore non .bbp file
+               if ( (*j).substr(lgr-4, 4) != ".bbp") continue; 
                
-                               nbBssFiles++;
-                       } // for (std::vector...
-               } // for (i=script_...
-               if (nbBssFiles==0)
-               {
-                       bbtkMessage("Interpreter",1,
-                   "  --> No .bbp found"<< std::endl);
-               } 
-               else 
-               {
-                       bbtkMessage("Interpreter",1,
-                   "  --> "<<nbBssFiles<<" .bbp found"<< std::endl);
-                       SwitchToStream(stream);
-               }
-           return;
-    }  
-    //=============== end pkgname=="*" ===========
-
+               (*stream) << "include \"" << *j << "\"\n";
+               bbtkMessage("interpreter",2,"  --> Found '" << *j << "'" << std::endl);
+               
+               nbBssFiles++;
+             } // for (std::vector...
+         } // for (i=script_...
 
+       // === Result ...
+       if (nbBssFiles==0)
+         {
+           bbtkMessage("interpreter",1,
+                       "  --> No .bbp found"<< std::endl);
+         } 
+       else 
+         {
+           bbtkMessage("interpreter",1,
+                       "  --> "<<nbBssFiles<<" .bbp found"<< std::endl);
+           SwitchToStream(stream);
+         }
+       return;
+      }  
+    //=============== end pkgname=="*" ===========
+    
+    
     // if name starts with a / or a . or contains : user is assumed to have passed a relative/absolute name
     // (not only a plain script name)
     // we trust him, and try to expland the directory name
@@ -1238,49 +1377,52 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
                }
          
                std::string tfullPathScriptName = Utilities::MakePkgnameFromPath(path, name, false);
-               if (tfullPathScriptName.substr(tfullPathScriptName.size()-4, 3)==".bb")
-               {
-                 fullPathScriptName = tfullPathScriptName;
-                       if ( ! Utilities::FileExists(fullPathScriptName) )
+//Addition JCP tfullPathScriptName.size()>=4 
+               if(tfullPathScriptName.size()>=4){
+                       if (tfullPathScriptName.substr(tfullPathScriptName.size()-4, 3)==".bb")
                        {
-                               // The following is *NOT* a debug time message :
-                               // It's a user intended message.
-                               // Please don't remove it.
-                               bbtkMessage("Interpreter",2,
-                         "   [" <<fullPathScriptName <<"] : does not exist" 
-                         <<std::endl);
-                               continue;  // try next path
-                       }
-                       bbtkMessage("Interpreter",2,
-                             "   [" <<fullPathScriptName 
-                                 <<"] : found" <<std::endl);
-                       foundFile = true;
-                       break; // a script was found; we stop iterating
-               }
-               else 
-               {
-                       fullPathScriptName = tfullPathScriptName + ".bbs";
-                       // Check if library exists
-                       if ( ! Utilities::FileExists(fullPathScriptName) )
-                       {
-                               fullPathScriptName = tfullPathScriptName + ".bbp";
+                         fullPathScriptName = tfullPathScriptName;
                                if ( ! Utilities::FileExists(fullPathScriptName) )
                                {
                                        // The following is *NOT* a debug time message :
                                        // It's a user intended message.
                                        // Please don't remove it.
-                                       bbtkMessage("Interpreter",2,
-                                       "   [" <<tfullPathScriptName <<".bbs/.bbp] : do not exist" 
-                                       <<std::endl);
+                                       bbtkMessage("interpreter",2,
+                                 "   [" <<fullPathScriptName <<"] : does not exist" 
+                                 <<std::endl);
                                        continue;  // try next path
                                }
+                               bbtkMessage("interpreter",2,
+                                         "   [" <<fullPathScriptName 
+                                         <<"] : found" <<std::endl);
+                               foundFile = true;
+                               break; // a script was found; we stop iterating
                        }
-                       bbtkMessage("Interpreter",2,
-                     "   [" <<fullPathScriptName 
-                     <<"] : found" <<std::endl);
-                       foundFile = true;
-                       break; // a script was found; we stop iterating
-               }
+                       else 
+                       {
+                               fullPathScriptName = tfullPathScriptName + ".bbs";
+                               // Check if library exists
+                               if ( ! Utilities::FileExists(fullPathScriptName) )
+                               {
+                                       fullPathScriptName = tfullPathScriptName + ".bbp";
+                                       if ( ! Utilities::FileExists(fullPathScriptName) )
+                                       {
+                                               // The following is *NOT* a debug time message :
+                                               // It's a user intended message.
+                                               // Please don't remove it.
+                                               bbtkMessage("interpreter",2,
+                                               "   [" <<tfullPathScriptName <<".bbs/.bbp] : do not exist" 
+                                               <<std::endl);
+                                               continue;  // try next path
+                                       }
+                               }
+                               bbtkMessage("interpreter",2,
+                                 "   [" <<fullPathScriptName 
+                                 <<"] : found" <<std::endl);
+                               foundFile = true;
+                               break; // a script was found; we stop iterating
+                       }
+               }               
        } //------------------ // end for ( package_paths.begin();i!=package_paths.end() )
   }
 
@@ -1296,7 +1438,10 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
        return;
       }
     else
+       {
       LoadScript(fullPathScriptName,name);
+         if (source) GetExecuter()->SetCurrentFileName(fullPathScriptName);
+       }
     
     return;
   }
@@ -1306,7 +1451,9 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
   //=======================================================================
 void Interpreter::SwitchToStream( std::stringstream* stream )
 {
-    mFile.push_back(stream);
+  bbtkDebugMessage("interpreter",4,"==> Interpreter::SwitchToStream()"
+                  <<std::endl);
+   mFile.push_back(stream);
     std::ostringstream buffer_name;
     bufferNb++;
     buffer_name << "buffer_" ;
@@ -1326,7 +1473,11 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
   void Interpreter::LoadScript( std::string fullPathScriptName,
                                std::string includeScriptName)
   {
-     Utilities::replace( fullPathScriptName , 
+    bbtkDebugMessage("interpreter",4,"==> Interpreter::LoadScript("
+                    <<fullPathScriptName<<")"
+                    <<std::endl);
+
+    Utilities::replace( fullPathScriptName , 
                         INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
    
      if (find(mFileNameHistory.begin(),
@@ -1345,7 +1496,7 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
         return;
     }
 
-    bbtkMessage("Interpreter",1,"   -->[" << fullPathScriptName 
+    bbtkMessage("interpreter",1,"   -->[" << fullPathScriptName 
                << "] found" << std::endl);
 
     mFile.push_back(s);
@@ -1356,23 +1507,21 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
 
     return;
   }
+  //=======================================================================
 
   //=======================================================================
-  /**
-   *  
-   */
   void Interpreter::CloseCurrentFile()
   {
-    bbtkDebugMessage("Interpreter",9,"Interpreter::CloseCurrentFile()"
+    bbtkDebugMessage("interpreter",9,"==> Interpreter::CloseCurrentFile()"
                       <<std::endl);
 
     if (mFile.size()==0)
     {
-      bbtkDebugMessage("Interpreter",9," -> no file left open"<<std::endl);
+      bbtkDebugMessage("interpreter",9," -> no file left open"<<std::endl);
       return;
     }
 
-    bbtkDebugMessage("Interpreter",9," Closing file '"<<mFileName.back()<<"'"<<std::endl);
+    bbtkDebugMessage("interpreter",9," Closing file '"<<mFileName.back()<<"'"<<std::endl);
 
     std::ifstream* file = dynamic_cast<std::ifstream*>(mFile.back());
     if (file!=0) file->close();
@@ -1383,28 +1532,25 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
     mIncludeFileName.pop_back();
     mLine.pop_back();
 
-    bbtkDebugMessage("Interpreter",9," Remains "
+    bbtkDebugMessage("interpreter",9," Remains "
                      <<mFile.size()
                      <<" open"<<std::endl);
-    bbtkDebugMessage("Interpreter",9,"EO Interpreter::CloseCurrentFile()"
+    bbtkDebugMessage("interpreter",9,"<== Interpreter::CloseCurrentFile()"
                      <<std::endl);
   }
   //=======================================================================
 
  //=======================================================================
-  /**
-   *  
-   */
   void Interpreter::CloseAllFiles()
   {
-    bbtkDebugMessage("Interpreter",9,"Interpreter::CloseAllFiles()"
+    bbtkDebugMessage("interpreter",9,"==> Interpreter::CloseAllFiles()"
                       <<std::endl);
 
     while (mFile.size() != 0) 
     {
        CloseCurrentFile();
     }
-    bbtkDebugMessage("Interpreter",9,"EO Interpreter::CloseAllFiles()"
+    bbtkDebugMessage("interpreter",9,"<== Interpreter::CloseAllFiles()"
                       <<std::endl);
   }
   //=======================================================================
@@ -1412,13 +1558,10 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
 
 
   //=======================================================================
-  /**
-   *  
-   */
   void Interpreter::InterpretCommand( const std::vector<std::string>& words,
                                       CommandInfoType& info )
   {
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretCommand(...)"<<std::endl);
+    bbtkDebugMessage("interpreter",9,"==> Interpreter::InterpretCommand(...)"<<std::endl);
 
     // searches the command keyword
     CommandDictType::iterator c;
@@ -1434,9 +1577,11 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
        HelpCommand(words[0]);
        bbtkError(words[0]<<" : wrong number of arguments");
     }
-
+//std::cout<<"Interpreter::InterpretCommand( const std::vector<std::string>& words,"<<std::endl;
     info = c->second;
-    bbtkDecTab("Interpreter",9);
+
+    bbtkDebugMessage("interpreter",9,"<== Interpreter::InterpretCommand(...)"<<std::endl);
+
   }
   //=======================================================================
 
@@ -1455,7 +1600,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
     {
       if (words[1]=="packages") 
       {
-         GetExecuter()->GetFactory()->PrintPackages(true);
+         GetExecuter()->GetFactory()->PrintHelpListPackages(true);
          return;
       }
       try 
@@ -1466,7 +1611,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
       {
          try 
          {
-            GetExecuter()->GetFactory()->HelpPackage(words[1]);
+            GetExecuter()->GetFactory()->PrintHelpPackage(words[1]);
            if ( mUser != 0 )
              {
                std::string url = 
@@ -1483,7 +1628,8 @@ void Interpreter::Help(const std::vector<std::string>& words)
           try 
             {
               std::string package;
-              GetExecuter()->GetFactory()->HelpBlackBox(words[1],package);
+              GetExecuter()->GetFactory()->PrintHelpDescriptor(words[1],
+                                                               package);
               if ( mUser != 0 )
                 {
                   std::string url = 
@@ -1500,7 +1646,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
             {
               try
                 {
-                  GetExecuter()->ShowRelations(words[1],"0","9999");
+                  GetExecuter()->PrintHelpBlackBox(words[1],"0","9999");
                 }
               catch (bbtk::Exception h){
                 bbtkError("\""<<words[1].c_str()
@@ -1516,12 +1662,12 @@ void Interpreter::Help(const std::vector<std::string>& words)
       {
          if ( words[1]=="packages" )
          {
-            GetExecuter()->GetFactory()->PrintPackages(true,true);
+            GetExecuter()->GetFactory()->PrintHelpListPackages(true,true);
             return;
           }
          try 
          {
-            GetExecuter()->GetFactory()->HelpPackage(words[1],true);
+            GetExecuter()->GetFactory()->PrintHelpPackage(words[1],true);
          }
          catch (bbtk::Exception f) 
          {
@@ -1827,7 +1973,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
   //=======================================================================
   void Interpreter::CommandLineInterpreter()
   {
-    bbtkDebugMessageInc("Interpreter",9,
+    bbtkDebugMessageInc("interpreter",9,
                         "Interpreter::CommandLineInterpreter()"<<std::endl);
 
 #ifdef BBTK_USE_TERMIOS_BASED_PROMPT  
@@ -1845,20 +1991,23 @@ void Interpreter::Help(const std::vector<std::string>& words)
     
     mCommandLine = true;
     bool again = true;
-    bool insideComment = false; // for multiline comment  
+    // bool insideComment = false; // for multiline comment  
+    mInsideComment = false;
     do 
     {
       try
       {
         std::string line;
         GetLineFromPrompt(line);
-        InterpretLine(line, insideComment);
+        DoInterpretLine(line); //, insideComment);
       }
+      /*
       catch (QuitException e)
       {
-       bbtkMessage("Interpreter",1,"Interpreter : Quit"<<std::endl);
+       bbtkMessage("interpreter",1,"Interpreter : Quit"<<std::endl);
         again = false;
       }
+      */
       catch (bbtk::Exception e) 
       {
         e.Print();
@@ -1880,7 +2029,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
 
     std::cout << "Good bye !" << std::endl;
 
-    bbtkDebugDecTab("Interpreter",9);
+    bbtkDebugDecTab("interpreter",9);
   }
 
 //=======================================================================
@@ -1982,7 +2131,7 @@ void  Interpreter::NewGUI(const std::string& boxname,
   if (workspace==0)
     {
       delete s;
-      bbtkError("Interpreter::CreateGUI : could not access the executer currently defined complex box");
+      bbtkError("interpreter::CreateGUI : could not access the executer currently defined complex box");
     }
  
 
@@ -2003,9 +2152,14 @@ void  Interpreter::NewGUI(const std::string& boxname,
       // Get the input descriptor 
       const BlackBoxInputDescriptor* d = box->bbGetDescriptor()->GetInputDescriptor(i->first);
       // If it is a "system" input : skip it
+#ifdef USE_WXWIDGETS
       if ( ( d->GetCreatorTypeInfo() == typeid(AtomicBlackBoxDescriptor)) ||
           ( d->GetCreatorTypeInfo() == typeid(WxBlackBoxDescriptor)) )
        continue;
+#else
+      if ( ( d->GetCreatorTypeInfo() == typeid(AtomicBlackBoxDescriptor)) )
+       continue;
+#endif
       bool widok = true;
       std::string widget,adaptor;
       // try to find a widget adaptor
@@ -2128,7 +2282,7 @@ void  Interpreter::NewGUI(const std::string& boxname,
          {
            //      int o = MessageManager::GetMessageLevel("debug");
            //      if (o<2) MessageManager::SetMessageLevel("debug",2);
-           mVirtualExecuter->GetFactory()->CheckPackages();
+           mVirtualExecuter->GetFactory()->Check();
            //      MessageManager::SetMessageLevel("debug",o);
          }
       }
@@ -2138,6 +2292,17 @@ void  Interpreter::NewGUI(const std::string& boxname,
       }
   }
  //==========================================================================
+
+  /*
+  //==========================================================================
+  // Adds a callback when 'break' command issued
+  void Interpreter::AddBreakObserver( BreakCallbackType c )
+  {
+    mBreakSignal.connect(c);
+  }
+ //==========================================================================
+ */
+
  //==========================================================================
   std::string Interpreter::GetObjectName() const
   {