X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkInterpreter.cxx;h=ef8be1b5f84ebb664c0fd51a7c10f2cfb0ba5a32;hb=ab0cfcfdd031ff179ed1550874c648a54d8e1023;hp=344d35c5b51843ab553ae04659177597efb42a7d;hpb=ac82487b8c2f870843f4b5daaab8d841279def87;p=bbtk.git diff --git a/kernel/src/bbtkInterpreter.cxx b/kernel/src/bbtkInterpreter.cxx index 344d35c..ef8be1b 100644 --- a/kernel/src/bbtkInterpreter.cxx +++ b/kernel/src/bbtkInterpreter.cxx @@ -1,20 +1,33 @@ -/*========================================================================= - +/*========================================================================= Program: bbtk - Module: $RCSfile: bbtkInterpreter.cxx,v $ $ + Module: $RCSfile: bbtkInterpreter.cxx,v $ Language: C++ - Date: $Date: 2008/10/08 14:59:25 $ - Version: $Revision: 1.76 $ - - 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/04/08 07:56:11 $ + Version: $Revision: 1.83 $ =========================================================================*/ + +/* --------------------------------------------------------------------- + +* 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 #include @@ -121,6 +135,22 @@ namespace bbtk info.help = "Deletes the black box of name "; 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; @@ -361,7 +391,8 @@ namespace bbtk //======================================================================= - InterpreterError::InterpreterError( const std::string& message, + //======================================================================= + InterpreterException::InterpreterException( const std::string& message, bool in_script_file, const std::string& script_file, int script_line @@ -372,7 +403,9 @@ namespace bbtk 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 +417,60 @@ namespace bbtk { } //======================================================================= + + + //======================================================================= + void Interpreter::CatchInterpreterException( const InterpreterException& e ) + { + if (GetExecuter()->GetNoErrorMode()) + { + bbtkWarning("ERROR :"<GetNoErrorMode()) + { + std::string file("?"); + int line = 0; + if (mFileName.size()) { + file = mFileName.back(); + line = mLine.back(); + } + bbtkWarning("ERROR '"<GetNoErrorMode()) + { + std::string file("?"); + int line = 0; + if (mFileName.size()) { + file = mFileName.back(); + line = mLine.back(); + } + bbtkWarning("ERROR '"<GetNoErrorMode()) + { + std::string file("?"); + int line = 0; + if (mFileName.size()) { + file = mFileName.back(); + line = mLine.back(); + } + bbtkWarning("UNDEFINED ERROR " + <<"("<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 + mInsideComment = false; + InterpretCurrentStreams(); + } CATCH_MACRO; - CloseAllFiles(); - bbtkDebugMessage("Interpreter",9,"EO Interpreter::InterpretFile(\""<0) + mInsideComment = false; + InterpretCurrentStreams(); + } + CATCH_MACRO; + + // CloseAllFiles(); + bbtkDebugMessage("Interpreter",9,"EO Interpreter::InterpretBuffer()"<0) { while (!mFile.back()->eof()) { mLine.back()++; @@ -587,21 +691,13 @@ namespace bbtk } try { - InterpretLine(str, insideComment); + DoInterpretLine(str); } CATCH_MACRO; - }//while + } CloseCurrentFile(); } - } - CATCH_MACRO; - - CloseAllFiles(); - bbtkDebugMessage("Interpreter",9,"EO Interpreter::InterpretBuffer()"< words; SplitLine(line,words); @@ -662,7 +754,7 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) { bbtkDebugDecTab("Interpreter",9); bbtkMessage("Interpreter",9,"In multiline comment"<HelpMessages(); + } + else + { + sscanf(words[2].c_str(),"%d",&level); + mVirtualExecuter->SetMessageLevel(words[1],level); + } + return; + } + else + { + bbtkMessage("echo",2,line<(mFile.back()); + if (fs!=0) in_script = true; + file = mFileName.back(); + line = mLine.back(); + } + if (command.code==cBreak) + { + /* + std::cout << "BreakException(" + <Create(words[1],words[2]); break; @@ -752,7 +897,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 +958,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,6 +970,10 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) case cReset : Reset(); break; + + case cClear : + mVirtualExecuter->Clear(); + break; case cInclude : // if 'source' was given (words.size()==3) then tell to set the @@ -858,10 +996,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(""); @@ -892,10 +1026,7 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) //======================================================================= - /** - * - */ -void Interpreter::SplitLine ( const std::string& str, std::vector& tokens) + void Interpreter::SplitLine ( const std::string& str, std::vector& tokens) { bbtkDebugMessageInc("Interpreter",9,"Interpreter::SplitLine(\""<& void Interpreter::Reset() { // Cannot close all files if the reset command is read from a file ! - // CloseAllFiles(); + CloseAllFiles(); mFileNameHistory.clear(); this->mVirtualExecuter->Reset(); } @@ -1356,11 +1487,9 @@ void Interpreter::SwitchToStream( std::stringstream* stream ) return; } + //======================================================================= //======================================================================= - /** - * - */ void Interpreter::CloseCurrentFile() { bbtkDebugMessage("Interpreter",9,"Interpreter::CloseCurrentFile()" @@ -1392,9 +1521,6 @@ void Interpreter::SwitchToStream( std::stringstream* stream ) //======================================================================= //======================================================================= - /** - * - */ void Interpreter::CloseAllFiles() { bbtkDebugMessage("Interpreter",9,"Interpreter::CloseAllFiles()" @@ -1412,9 +1538,6 @@ void Interpreter::SwitchToStream( std::stringstream* stream ) //======================================================================= - /** - * - */ void Interpreter::InterpretCommand( const std::vector& words, CommandInfoType& info ) { @@ -1845,20 +1968,23 @@ void Interpreter::Help(const std::vector& 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"<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 @@ -2138,6 +2269,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 {