X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkInterpreter.cxx;h=ef8be1b5f84ebb664c0fd51a7c10f2cfb0ba5a32;hb=ab0cfcfdd031ff179ed1550874c648a54d8e1023;hp=4b2e86615be05108e85c3ef3b810670b3252edb8;hpb=7dea96c3fd3343fc15372ae61573ad5354b19ffc;p=bbtk.git diff --git a/kernel/src/bbtkInterpreter.cxx b/kernel/src/bbtkInterpreter.cxx index 4b2e866..ef8be1b 100644 --- a/kernel/src/bbtkInterpreter.cxx +++ b/kernel/src/bbtkInterpreter.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkInterpreter.cxx,v $ Language: C++ - Date: $Date: 2008/11/26 12:36:42 $ - Version: $Revision: 1.78 $ + Date: $Date: 2009/04/08 07:56:11 $ + Version: $Revision: 1.83 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -39,6 +39,7 @@ #include "bbtkMessageManager.h" #include "bbtkConfigurationFile.h" #include "bbtkUtilities.h" +#include "bbtkAtomicBlackBox.h" #include "bbtkWxBlackBox.h" #include #include @@ -134,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; @@ -374,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 @@ -385,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 @@ -397,12 +417,27 @@ namespace bbtk { } //======================================================================= - void Interpreter::CatchInterpreterException( const InterpreterError& e ) + + + //======================================================================= + 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()++; @@ -627,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); @@ -702,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; @@ -792,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); @@ -853,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); @@ -876,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 @@ -898,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(""); @@ -932,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(); } @@ -1396,11 +1487,9 @@ void Interpreter::SwitchToStream( std::stringstream* stream ) return; } + //======================================================================= //======================================================================= - /** - * - */ void Interpreter::CloseCurrentFile() { bbtkDebugMessage("Interpreter",9,"Interpreter::CloseCurrentFile()" @@ -1432,9 +1521,6 @@ void Interpreter::SwitchToStream( std::stringstream* stream ) //======================================================================= //======================================================================= - /** - * - */ void Interpreter::CloseAllFiles() { bbtkDebugMessage("Interpreter",9,"Interpreter::CloseAllFiles()" @@ -1452,9 +1538,6 @@ void Interpreter::SwitchToStream( std::stringstream* stream ) //======================================================================= - /** - * - */ void Interpreter::InterpretCommand( const std::vector& words, CommandInfoType& info ) { @@ -1885,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 @@ -2178,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 {