X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkInterpreter.cxx;h=961b42ed87f7efbc1c0567080a3bbda5f248858f;hb=c0fb50eb13239a18578948684c34af0fb212cd2e;hp=e71ff53d0e0a2f0f3f135f8dbed23a87afae0d78;hpb=edd3ac38162ff897429cc7af71557dc54e7d5efe;p=bbtk.git diff --git a/kernel/src/bbtkInterpreter.cxx b/kernel/src/bbtkInterpreter.cxx index e71ff53..961b42e 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: 2009/04/30 14:31:31 $ - Version: $Revision: 1.84 $ + Date: $Date: 2010/09/14 07:18:46 $ + Version: $Revision: 1.88 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -56,7 +56,7 @@ namespace bbtk //======================================================================= Interpreter::Pointer Interpreter::New(const std::string& cpp_file) { - bbtkDebugMessage("Kernel",9,"Interpreter::New('"< Interpreter("< Interpreter(VirtualExec)"< Interpreter::~Interpreter()" < ~Interpreter()" < Interpreter::InterpretFile(\""< Interpreter::InterpretBuffer()"< Interpreter::InterpretCurrentStreams()"<0) { @@ -683,20 +687,26 @@ namespace bbtk 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 - { - DoInterpretLine(str); - } - CATCH_MACRO; + try + { + DoInterpretLine(str); + } + CATCH_MACRO; + } + } CloseCurrentFile(); } + bbtkDebugMessage("interpreter",4, + "<== Interpreter::InterpretCurrentStreams()"< Interpreter::InterpretLine('"<Create(boxType,boxName); + } + + void Interpreter::commandDelete(std::string boxName) + { + mVirtualExecuter->Destroy(boxName); + } + void Interpreter::commandConnection(std::string nodeFrom, std::string outputLabel, std::string nodeTo, std::string inputLabel) + { + mVirtualExecuter->Connect(nodeFrom,outputLabel,nodeTo,inputLabel); + } + + void Interpreter::commandPackage(std::string packageName) + { + mVirtualExecuter->BeginPackage(packageName); + } + + void Interpreter::commandEndPackage() + { + mVirtualExecuter->EndPackage(); + } + + void Interpreter::commandDefine(std::string name, std::string pack, std::string scriptfilename) + { + mVirtualExecuter->Define(name,pack,scriptfilename); + } + + void Interpreter::commandEndDefine() + { + mVirtualExecuter->EndDefine(); + } + + void Interpreter::commandKind(std::string kind) + { + mVirtualExecuter->Kind(kind); + } + + void Interpreter::commandPrint(std::string value) + { + mVirtualExecuter->Print(value); + } + + + void Interpreter::commandExec(std::string word) + { + if (word=="freeze") + { + mVirtualExecuter->SetNoExecMode(true); + mThrow = false; + } + else if (word=="freeze_no_error") + { + mVirtualExecuter->SetNoExecMode(true); + mVirtualExecuter->SetNoErrorMode(true); + mThrow = false; + } + else if (word=="unfreeze") + { + mVirtualExecuter->SetNoExecMode(false); + mVirtualExecuter->SetNoErrorMode(false); + } + else + { + mVirtualExecuter->Execute(word); + } // if + } + + + void Interpreter::commandInput(std::string name, std::string box, std::string input,std::string help) + { + mVirtualExecuter->DefineInput(name,box,input,help); + } + + void Interpreter::commandOutput(std::string name, std::string box, std::string output,std::string help) + { + mVirtualExecuter->DefineOutput(name,box,output,help); + } + + void Interpreter::commandSet(std::string box, std::string input, std::string value) + { + mVirtualExecuter->Set(box,input,value); + } + + void Interpreter::commandAuthor(std::string author) + { + mVirtualExecuter->Author(author); + } + + void Interpreter::commandCategory(std::string categorytype) + { + mVirtualExecuter->Category(categorytype); + } + + + + void Interpreter::commandDescription(std::string description) + { + mVirtualExecuter->Description(description); + } + + + void Interpreter::commandClear() + { + mVirtualExecuter->Clear(); + } + + void Interpreter::commandInclude(std::string word, bool ok) + { + // 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(word, ok ); + } + else + { + SwitchToFile(word , ok ); + } + } + + + void Interpreter::commandLoad(std::string packageName) + { + GetExecuter()->LoadPackage(packageName); + } + + void Interpreter::commandUnload(std::string packageName) + { + GetExecuter()->UnLoadPackage(packageName); + } + + //ups2 EED Borrame + + //======================================================================= void Interpreter::DoInterpretLine( const std::string& line ) { - bbtkDebugMessageInc("Interpreter",9,"Interpreter::DoInterpretLine(\""< Interpreter::DoInterpretLine(\"" + < 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"<(mFile.back()); @@ -838,120 +984,140 @@ namespace bbtk } return; } - +//std::cout<<" mVirtualExecuter->Create(words[1],words[2]); "<Create(words[1],words[2]); + commandNew(words[1],words[2]); +//EED Borrame mVirtualExecuter->Create(words[1],words[2]); break; case cDelete : - mVirtualExecuter->Destroy(words[1]); + commandDelete(words[1]); +//EED Borrame mVirtualExecuter->Destroy(words[1]); break; case cConnect : Utilities::SplitAroundFirstDot(words[1],left,right); Utilities::SplitAroundFirstDot(words[2],left2,right2); - mVirtualExecuter->Connect(left,right,left2,right2); + commandConnection(left,right,left2,right2); +//EED Borrame mVirtualExecuter->Connect(left,right,left2,right2); break; case cPackage : - mVirtualExecuter->BeginPackage(words[1]); + commandPackage(words[1]); +//EED Borrame mVirtualExecuter->BeginPackage(words[1]); break; case cEndPackage : - mVirtualExecuter->EndPackage(); + commandEndPackage(); +//EED Borrame mVirtualExecuter->EndPackage(); break; case cDefine : if (mFileName.size()>0) { +//??? commandDefine(????); filename = mFileName.back(); //mIncludeFileName.back(); //Utilities::get_file_name(mFileName.back()); } if (words.size()==2) { - mVirtualExecuter->Define(words[1],"",filename); + commandDefine(words[1],"",filename); +//EED Borrame mVirtualExecuter->Define(words[1],"",filename); } else { - mVirtualExecuter->Define(words[1],words[2],filename); + commandDefine(words[1],words[2],filename); +//EED Borrame mVirtualExecuter->Define(words[1],words[2],filename); } break; case cEndDefine : - mVirtualExecuter->EndDefine(); + commandEndDefine(); +//EED Borrame mVirtualExecuter->EndDefine(); break; case cKind : - mVirtualExecuter->Kind(words[1]); + commandKind(words[1]); +//EED Borrame mVirtualExecuter->Kind(words[1]); break; case cPrint : - mVirtualExecuter->Print(words[1]); + commandPrint(words[1]); +//EED Borrame mVirtualExecuter->Print(words[1]); break; - + case cExec : - if (words[1]=="freeze") - { - mVirtualExecuter->SetNoExecMode(true); - mThrow = false; - } - else if (words[1]=="freeze_no_error") - { - mVirtualExecuter->SetNoExecMode(true); - mVirtualExecuter->SetNoErrorMode(true); - mThrow = false; - } - else if (words[1]=="unfreeze") - { - mVirtualExecuter->SetNoExecMode(false); - mVirtualExecuter->SetNoErrorMode(false); - } - else - { - mVirtualExecuter->Execute(words[1]); - } + commandExec(words[1]); +//EED Borrame if (words[1]=="freeze") +//EED Borrame { +//EED Borrame mVirtualExecuter->SetNoExecMode(true); +//EED Borrame mThrow = false; +//EED Borrame } +//EED Borrame else if (words[1]=="freeze_no_error") +//EED Borrame { +//EED Borrame mVirtualExecuter->SetNoExecMode(true); +//EED Borrame mVirtualExecuter->SetNoErrorMode(true); +//EED Borrame mThrow = false; +//EED Borrame } +//EED Borrame else if (words[1]=="unfreeze") +//EED Borrame { +//EED Borrame mVirtualExecuter->SetNoExecMode(false); +//EED Borrame mVirtualExecuter->SetNoErrorMode(false); +//EED Borrame } +//EED Borrame else +//EED Borrame { +//EED Borrame mVirtualExecuter->Execute(words[1]); +//EED Borrame } + break; case cInput : Utilities::SplitAroundFirstDot(words[2],left,right); - mVirtualExecuter->DefineInput(words[1],left,right,words[3]); + commandInput(words[1],left,right,words[3]); +//EED Borrame mVirtualExecuter->DefineInput(words[1],left,right,words[3]); break; case cOutput : Utilities::SplitAroundFirstDot(words[2],left,right); - mVirtualExecuter->DefineOutput(words[1],left,right,words[3]); + commandOutput(words[1],left,right,words[3]); +//EED Borrame mVirtualExecuter->DefineOutput(words[1],left,right,words[3]); break; case cSet : Utilities::SplitAroundFirstDot(words[1],left,right); - mVirtualExecuter->Set(left,right,words[2]); + commandSet(left,right,words[1]); +//EED Borrame mVirtualExecuter->Set(left,right,words[2]); break; case cAuthor : - mVirtualExecuter->Author(words[1]); + commandAuthor(words[1]); +//EED Borrame mVirtualExecuter->Author(words[1]); break; case cNewGUI : - NewGUI(words[1],words[2]); + NewGUI(words[1],words[2]); break; case cCategory : - mVirtualExecuter->Category(words[1]); + commandCategory(words[1]); +//EED Borrame mVirtualExecuter->Category(words[1]); break; case cIndex : if (words.size()==1) - Index("tmp_index.html"); + Index("tmp_index.html"); else if (words.size()==2) - Index(words[1]); + Index(words[1]); else if (words.size()==3) - Index(words[1],words[2]); + Index(words[1],words[2]); break; case cDescription : - mVirtualExecuter->Description(words[1]); + commandDescription(words[1]); +//EED Borrame mVirtualExecuter->Description(words[1]); break; case cHelp : @@ -972,34 +1138,38 @@ namespace bbtk break; case cClear : - mVirtualExecuter->Clear(); + commandClear(); +//EED Borrame mVirtualExecuter->Clear(); break; case cInclude : - // 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],(words.size()==3)); - } - else - { - SwitchToFile(words[1],(words.size()==3) ); - } + commandInclude( words[1] , (words.size()==3) ); +//EED Borrame // if 'source' was given (words.size()==3) then tell to set the +//EED Borrame // source file name of the current complex box with the full file name included +//EED Borrame if (mCommandLine) +//EED Borrame { +//EED Borrame InterpretFile(words[1],(words.size()==3)); +//EED Borrame } else{ +//EED Borrame SwitchToFile(words[1],(words.size()==3) ); +//EED Borrame } break; case cLoad: - GetExecuter()->LoadPackage(words[1]); + commandLoad( words[1] ); +//EED Borrame GetExecuter()->LoadPackage(words[1]); break; case cUnload: - GetExecuter()->UnLoadPackage(words[1]); + commandUnload( words[1] ); +//EED Borrame GetExecuter()->UnLoadPackage(words[1]); break; + //ups1 EED borrame case cDebug : - if (words.size()==2) Debug(words[1]); - else Debug(""); + if (words.size()==2) Debug(words[1]); + else Debug(""); break; + /* obsolete case cWorkspace : if (words.size() == 2) @@ -1017,8 +1187,10 @@ namespace bbtk bbtkInternalError("should not reach here !!!"); } - bbtkDecTab("Interpreter",9); -} + bbtkDebugMessage("interpreter",6,"<== Interpreter::DoInterpretLine(\"" + <& tokens) { - bbtkDebugMessageInc("Interpreter",9,"Interpreter::SplitLine(\""< Interpreter::SplitLine(\""< quote; @@ -1042,7 +1214,7 @@ namespace bbtk ++i; if (i!=quote.end()) { - // bbtkDebugMessage("Interpreter",0,"\""<<*i<<"\""<GetNoExecMode()) return; - bbtkDebugMessageInc("Interpreter",9,"Interpreter::Print(\""< Interpreter::SwitchToFile( \"" + < script_paths; std::string fullPathScriptName; // full path script name @@ -1173,7 +1344,7 @@ namespace bbtk // 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); @@ -1181,7 +1352,7 @@ namespace bbtk std::string upath; pkgname = Utilities::ExtractScriptName(name,upath); - bbtkMessage("Interpreter",3, + bbtkMessage("interpreter",3, "package name:[" << pkgname << "] path:[" << upath << "]" << std::endl); bool fullnameGiven = false; @@ -1198,7 +1369,7 @@ namespace bbtk // ==== no path provided : look in root bbs path if (upath.size()==0) { - // bbtkMessage("Interpreter",1, + // bbtkMessage("interpreter",1, // LG : add all bbs path // script_paths.push_back( ConfigurationFile::GetInstance().Get_root_bbs_path() ); std::vector::const_iterator i; @@ -1262,7 +1433,7 @@ namespace bbtk std::vector::iterator i; for (i=script_paths.begin();i!=script_paths.end();i++) { - bbtkMessage("Interpreter",1, + bbtkMessage("interpreter",1, "--> Looking in '" << *i << "'" << std::endl); Filenames.clear(); @@ -1278,7 +1449,7 @@ namespace bbtk if ( (*j).substr(lgr-4, 4) != ".bbp") continue; (*stream) << "include \"" << *j << "\"\n"; - bbtkMessage("Interpreter",2," --> Found '" << *j << "'" << std::endl); + bbtkMessage("interpreter",2," --> Found '" << *j << "'" << std::endl); nbBssFiles++; } // for (std::vector... @@ -1287,12 +1458,12 @@ namespace bbtk // === Result ... if (nbBssFiles==0) { - bbtkMessage("Interpreter",1, + bbtkMessage("interpreter",1, " --> No .bbp found"<< std::endl); } else { - bbtkMessage("Interpreter",1, + bbtkMessage("interpreter",1, " --> "<=4 + if(tfullPathScriptName.size()>=4){ + if (tfullPathScriptName.substr(tfullPathScriptName.size()-4, 3)==".bb") { - 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, - " [" < Interpreter::SwitchToStream()" + < Interpreter::LoadScript(" + <[" << fullPathScriptName + bbtkMessage("interpreter",1," -->[" << fullPathScriptName << "] found" << std::endl); mFile.push_back(s); @@ -1485,23 +1665,23 @@ void Interpreter::SwitchToStream( std::stringstream* stream ) mIncludeFileName.push_back(includeScriptName); mLine.push_back(0); - return; + return; } //======================================================================= //======================================================================= void Interpreter::CloseCurrentFile() { - bbtkDebugMessage("Interpreter",9,"Interpreter::CloseCurrentFile()" + bbtkDebugMessage("interpreter",9,"==> Interpreter::CloseCurrentFile()" < no file left open"< no file left open"<(mFile.back()); if (file!=0) file->close(); @@ -1512,10 +1692,10 @@ void Interpreter::SwitchToStream( std::stringstream* stream ) mIncludeFileName.pop_back(); mLine.pop_back(); - bbtkDebugMessage("Interpreter",9," Remains " + bbtkDebugMessage("interpreter",9," Remains " < Interpreter::CloseAllFiles()" <& words, CommandInfoType& info ) { - bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretCommand(...)"< Interpreter::InterpretCommand(...)"<& words,"<second; - bbtkDecTab("Interpreter",9); + + bbtkDebugMessage("interpreter",9,"<== Interpreter::InterpretCommand(...)"<& words) { if (words[1]=="packages") { - GetExecuter()->GetFactory()->PrintPackages(true); + GetExecuter()->GetFactory()->PrintHelpListPackages(true); return; } try @@ -1589,7 +1771,7 @@ void Interpreter::Help(const std::vector& words) { try { - GetExecuter()->GetFactory()->HelpPackage(words[1]); + GetExecuter()->GetFactory()->PrintHelpPackage(words[1]); if ( mUser != 0 ) { std::string url = @@ -1606,7 +1788,8 @@ void Interpreter::Help(const std::vector& words) try { std::string package; - GetExecuter()->GetFactory()->HelpBlackBox(words[1],package); + GetExecuter()->GetFactory()->PrintHelpDescriptor(words[1], + package); if ( mUser != 0 ) { std::string url = @@ -1623,7 +1806,7 @@ void Interpreter::Help(const std::vector& words) { try { - GetExecuter()->ShowRelations(words[1],"0","9999"); + GetExecuter()->PrintHelpBlackBox(words[1],"0","9999"); } catch (bbtk::Exception h){ bbtkError("\""<& 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) { @@ -1950,7 +2133,7 @@ void Interpreter::Help(const std::vector& words) //======================================================================= void Interpreter::CommandLineInterpreter() { - bbtkDebugMessageInc("Interpreter",9, + bbtkDebugMessageInc("interpreter",9, "Interpreter::CommandLineInterpreter()"<& words) /* catch (QuitException e) { - bbtkMessage("Interpreter",1,"Interpreter : Quit"<& words) std::cout << "Good bye !" << std::endl; - bbtkDebugDecTab("Interpreter",9); + bbtkDebugDecTab("interpreter",9); } //======================================================================= @@ -2108,7 +2291,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"); } @@ -2259,7 +2442,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); } }