X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=kernel%2Fsrc%2FbbtkInterpreter.cxx;h=0bb789483e372f35b596a5e87f28c034a660770c;hb=d7e710c3fe8bd9c8c5fb79073bd5667b24c048f8;hp=fc5f3f18638104b9d3046cc162c02de60a6c5259;hpb=cc134f89048428aca99fa855a7e1e87c815a3413;p=bbtk.git diff --git a/kernel/src/bbtkInterpreter.cxx b/kernel/src/bbtkInterpreter.cxx index fc5f3f1..0bb7894 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/12/12 12:11:21 $ - Version: $Revision: 1.79 $ + Date: $Date: 2008/12/15 09:04:47 $ + Version: $Revision: 1.81 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -142,6 +142,14 @@ namespace bbtk 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; @@ -382,7 +390,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 @@ -393,7 +402,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 @@ -405,12 +416,19 @@ namespace bbtk { } //======================================================================= - void Interpreter::CatchInterpreterException( const InterpreterError& e ) + + + //======================================================================= + void Interpreter::CatchInterpreterException( const InterpreterException& e ) { if (mThrow) { - CloseAllFiles(); - throw InterpreterError(e); + if (e.GetErrorMessage()!="break") + { + mStatus = Interpreter_ERROR; + CloseAllFiles(); + } + throw InterpreterException(e); } else { @@ -421,6 +439,7 @@ namespace bbtk mess << "* FILE : \""<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()++; @@ -635,21 +644,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); @@ -710,7 +707,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; @@ -861,17 +911,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); @@ -884,8 +923,8 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) case cReset : Reset(); break; - - case cClear : + + case cClear : mVirtualExecuter->Clear(); break; @@ -910,10 +949,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(""); @@ -944,10 +979,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(); } @@ -1408,11 +1440,9 @@ void Interpreter::SwitchToStream( std::stringstream* stream ) return; } + //======================================================================= //======================================================================= - /** - * - */ void Interpreter::CloseCurrentFile() { bbtkDebugMessage("Interpreter",9,"Interpreter::CloseCurrentFile()" @@ -1444,9 +1474,6 @@ void Interpreter::SwitchToStream( std::stringstream* stream ) //======================================================================= //======================================================================= - /** - * - */ void Interpreter::CloseAllFiles() { bbtkDebugMessage("Interpreter",9,"Interpreter::CloseAllFiles()" @@ -1464,9 +1491,6 @@ void Interpreter::SwitchToStream( std::stringstream* stream ) //======================================================================= - /** - * - */ void Interpreter::InterpretCommand( const std::vector& words, CommandInfoType& info ) { @@ -1897,20 +1921,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"<