X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkInterpreter.cxx;h=6771d7788013d12bed23d9d1b85aac56b953a004;hb=4e0c70c1aa10fed31d4a6bf30cb316eaa1194e13;hp=afa23734826a312b2370d74f6d98ff5fca0a5650;hpb=8822f9075c66dcf742b9edae47271bb46af6a9b7;p=bbtk.git diff --git a/kernel/src/bbtkInterpreter.cxx b/kernel/src/bbtkInterpreter.cxx index afa2373..6771d77 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/01/27 14:22:57 $ - Version: $Revision: 1.82 $ + Date: $Date: 2010/09/15 14:17:17 $ + Version: $Revision: 1.89 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -39,6 +39,7 @@ #include "bbtkMessageManager.h" #include "bbtkConfigurationFile.h" #include "bbtkUtilities.h" +#include "bbtkAtomicBlackBox.h" #include "bbtkWxBlackBox.h" #include #include @@ -55,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) { @@ -682,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); + } + + void Interpreter::commandBreak() + { + /* + std::cout << "BreakException(" + <HelpMessages(); + } + +//ups2 EED Borrame + void Interpreter::commandMessage(std::string kind, std::string levelstr) + { + int level=0; + sscanf(levelstr.c_str(),"%d",&level); + mVirtualExecuter->SetMessageLevel(kind,level); + + } + + + //======================================================================= 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"<SetMessageLevel(words[1],level); + commandMessage(words[1],words[2]); +//EED Borrame sscanf(words[2].c_str(),"%d",&level); +//EED Borrame mVirtualExecuter->SetMessageLevel(words[1],level); } return; } @@ -812,6 +992,7 @@ namespace bbtk bool in_script = false; std::string file(""); int line = 0; + if (mFileName.size()) { std::ifstream* fs = dynamic_cast(mFile.back()); @@ -827,178 +1008,203 @@ namespace bbtk <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[2]); +//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]); + commandNewGUI(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"); + commandIndex("tmp_index.html"); else if (words.size()==2) - Index(words[1]); + commandIndex(words[1]); else if (words.size()==3) - Index(words[1],words[2]); + commandIndex(words[1],words[2]); break; case cDescription : - mVirtualExecuter->Description(words[1]); + commandDescription(words[1]); +//EED Borrame mVirtualExecuter->Description(words[1]); break; case cHelp : - Help(words); + commandHelp(words); break; case cGraph : - Graph(words); + commandGraph(words); break; case cConfig : - Config(); + commandConfig(); break; case cReset : - Reset(); + commandReset(); 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; case cDebug : - if (words.size()==2) Debug(words[1]); - else Debug(""); + if (words.size()==2) commandDebug(words[1]); + else commandDebug(""); break; + /* obsolete case cWorkspace : if (words.size() == 2) @@ -1016,8 +1222,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; @@ -1041,7 +1249,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 @@ -1172,7 +1379,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); @@ -1180,7 +1387,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; @@ -1197,7 +1404,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; @@ -1261,7 +1468,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(); @@ -1277,7 +1484,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... @@ -1286,12 +1493,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); @@ -1484,23 +1700,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(); @@ -1511,10 +1727,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) +void Interpreter::commandHelp(const std::vector& words) { unsigned int nbarg = words.size()-1; @@ -1577,7 +1795,7 @@ void Interpreter::Help(const std::vector& words) { if (words[1]=="packages") { - GetExecuter()->GetFactory()->PrintPackages(true); + GetExecuter()->GetFactory()->PrintHelpListPackages(true); return; } try @@ -1588,7 +1806,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 = @@ -1605,7 +1823,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 = @@ -1622,7 +1841,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) { @@ -1664,7 +1883,7 @@ void Interpreter::Help(const std::vector& words) //=================================================================== /// Displays the Configuration - void Interpreter::Config() const + void Interpreter::commandConfig() const { ConfigurationFile::GetInstance().GetHelp(1); } @@ -1949,7 +2168,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); } //======================================================================= -void Interpreter::Graph(const std::vector& words) +void Interpreter::commandGraph(const std::vector& words) { std::string page; bool system_display = true; @@ -2054,7 +2273,7 @@ void Interpreter::Graph(const std::vector& words) //======================================================================= -void Interpreter::Index(const std::string& filename, +void Interpreter::commandIndex(const std::string& filename, const std::string& type) { Factory::IndexEntryType t; @@ -2069,7 +2288,7 @@ void Interpreter::Index(const std::string& filename, //======================================================================= -void Interpreter::NewGUI(const std::string& boxname, +void Interpreter::commandNewGUI(const std::string& boxname, const std::string& instanceName) { if (mRealExecuter.expired()) @@ -2107,7 +2326,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"); } @@ -2128,9 +2347,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 @@ -2241,7 +2465,7 @@ void Interpreter::NewGUI(const std::string& boxname, //========================================================================== - void Interpreter::Debug(const std::string& name) + void Interpreter::commandDebug(const std::string& name) { if ((name.length()==2)&&(name[0]=='-')) { @@ -2253,7 +2477,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); } }