X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkInterpreter.cxx;h=951c40db00b1831324f4edfaaedc523db8a6afde;hb=63005ec659612d567c00bfbb9ecbd62566a3217d;hp=f0617c087e76bd851916bbfabb8d9032e4264f32;hpb=01f46ce7ba8fe9067dff0688706986475aaec73e;p=bbtk.git diff --git a/kernel/src/bbtkInterpreter.cxx b/kernel/src/bbtkInterpreter.cxx index f0617c0..951c40d 100644 --- a/kernel/src/bbtkInterpreter.cxx +++ b/kernel/src/bbtkInterpreter.cxx @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkInterpreter.cxx,v $ $ Language: C++ - Date: $Date: 2008/02/12 12:55:16 $ - Version: $Revision: 1.29 $ + Date: $Date: 2008/02/21 07:30:20 $ + Version: $Revision: 1.36 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -17,15 +17,16 @@ =========================================================================*/ /** * \file - * \brief class Interpreter : + * \brief class Interpreter : */ -#include "bbtkInterpreter.h" +#include "bbtkInterpreter.h" #include "bbtkMessageManager.h" #include "bbtkConfigurationFile.h" #include "bbtkWxConsole.h" #include "bbtkUtilities.h" #include +#include #ifdef CMAKE_HAVE_TERMIOS_H #include #define BBTK_USE_TERMIOS_BASED_PROMPT @@ -40,7 +41,7 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL; //======================================================================= /** - * + * */ Interpreter::Interpreter() : @@ -52,10 +53,12 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL; mGlobalInterpreter = this; - // mFactory = new bbtk::Factory(); mExecuter = new bbtk::Executer(); - //mExecuter = new bbtk::Transcriptor("GeneratedProgram.txt"); - //mExecuter->SetFactory(mFactory); + + // For the time being, comment out previous line, and + // uncomment next line to check Transcriptor + + // mExecuter = new bbtk::Transcriptor("GeneratedProgram.txt"); // Builds the commands dict CommandInfoType info; @@ -441,18 +444,18 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) case cNew : mExecuter->Create(words[1],words[2]); break; - + case cDelete : // TO DO !! // mExecuter->Remove(words[1]); break; - + case cConnect : Utilities::SplitAroundFirstDot(words[1],left,right); Utilities::SplitAroundFirstDot(words[2],left2,right2); mExecuter->Connect(left,right,left2,right2); break; - + case cPackage : mExecuter->BeginPackage(words[1]); break; @@ -460,7 +463,7 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) case cEndPackage : mExecuter->EndPackage(); break; - + case cDefine : if (mFileName.size()>0) { @@ -470,16 +473,16 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) { mExecuter->Define(words[1],"",filename); } - else + else { mExecuter->Define(words[1],words[2],filename); } break; - + case cEndDefine : mExecuter->EndDefine(); break; - + case cPrint : Print(words[1]); /// \todo use mExecuter break; @@ -489,79 +492,80 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) mExecuter->SetNoExecMode(true); else if (words[1]=="unfreeze") mExecuter->SetNoExecMode(false); - else + else mExecuter->Update(words[1]); break; - + case cInput : Utilities::SplitAroundFirstDot(words[2],left,right); mExecuter->DefineInput(words[1],left,right,words[3]); break; - + case cOutput : Utilities::SplitAroundFirstDot(words[2],left,right); mExecuter->DefineOutput(words[1],left,right,words[3]); break; - + case cSet : Utilities::SplitAroundFirstDot(words[1],left,right); mExecuter->Set(left,right,words[2]); break; - + case cAuthor : mExecuter->Author(words[1]); break; - case cCategory : - mExecuter->Category(words[1]); - break; - - case cIndex : - if (words.size()==1) - Index("tmp_index.html"); - else if (words.size()==2) - Index(words[1]); - else if (words.size()==3) - Index(words[1],words[2]); - break; - case cDescription : - mExecuter->Description(words[1]); + case cCategory : + mExecuter->Category(words[1]); break; - + + case cIndex : + if (words.size()==1) + Index("tmp_index.html"); + else if (words.size()==2) + Index(words[1]); + else if (words.size()==3) + Index(words[1],words[2]); + break; + + case cDescription : + mExecuter->Description(words[1]); + break; + case cHelp : Help(words); break; - + case cMessage : - if (words.size()<3) + if (words.size()<3) { - bbtk::MessageManager::PrintInfo(); + bbtk::MessageManager::PrintInfo(); } - else + else { sscanf(words[2].c_str(),"%d",&level); bbtk::MessageManager::SetMessageLevel(words[1],level); } break; - - case cGraph : + + case cGraph : Graph(words); break; - + case cConfig : - Config(); + Config(); break; - + case cReset : // EED this->mExecuter->Reset(); break; - + case cInclude : - if (mCommandLine) + if (mCommandLine) { InterpretFile(words[1], true ); // true : better pass use_config_file } - else + else { SwitchToFile(words[1], true ); // true : better pass use_config_file } @@ -571,26 +575,27 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) this->mExecuter->SetCurrentFileName(words[1]); } break; - + case cLoad: LoadPackage(words[1], true ); // true : better pass use_config_file break; - + case cUnload: UnLoadPackage(words[1]); break; - + case cQuit : + delete mExecuter; throw QuitException(); break; - - case cWorkspace : + + case cWorkspace : if (words.size() == 2) { if (words[1]=="freeze") mExecuter->SetNoExecMode(true); else if (words[1]=="unfreeze") mExecuter->SetNoExecMode(false); } - else + else { mExecuter->SetWorkspaceName(words[2]); } @@ -599,7 +604,7 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) default: bbtkInternalError("should not reach here !!!"); } - + bbtkDecTab("Interpreter",9); } //======================================================================= @@ -610,12 +615,12 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) //======================================================================= /** - * + * */ void Interpreter::SplitLine ( const std::string& str, std::vector& tokens) { bbtkDebugMessageInc("Interpreter",9,"Interpreter::SplitLine(\""< quote; Utilities::SplitString(str,delimiters,quote); @@ -640,7 +645,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& } bbtkDebugMessageCont("Interpreter",9,std::endl); - bbtkDebugDecTab("Interpreter",9); + bbtkDebugDecTab("Interpreter",9); } //======================================================================= @@ -657,14 +662,14 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& { s.replace(pos,2,cr,1); pos = s.find(ss, pos-1); - } + } } //======================================================================= //======================================================================= /** - * + * */ void Interpreter::Print( const std::string& str) { @@ -679,10 +684,10 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& std::string::size_type lastPos = str.find_first_not_of(delimiters, 0); bool is_text = true; if (lastPos>0) is_text = false; - + // Find first delimiter. std::string::size_type pos = str.find_first_of(delimiters, lastPos); - + while (std::string::npos != pos || std::string::npos != lastPos) { if (is_text) @@ -713,12 +718,12 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& std::cout << *i; } std::cout << std::endl; - bbtkDebugDecTab("Interpreter",9); + bbtkDebugDecTab("Interpreter",9); } //======================================================================= /** - * + * */ // =================================================================================== @@ -735,7 +740,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& // // use ./directory/subdir/scrname.bbs // - + bbtkDebugMessageInc("Interpreter",9,"Interpreter::SwitchToFile( \"" <& std::string fullPathScriptName; // full path script name std::string pkgname; // e.g. .bbs std::vector Filenames; - + if (use_configuration_file) { // The following is *NOT* a debug time message : @@ -779,15 +784,13 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& bbtkMessage("Interpreter",2, "WARNING : No '.bbs' file found in [" << upath << "]" << std::endl); - return; } - std::string path; std::vector::iterator i; std::string fullDirectoryName; - for (i=script_paths.begin();i!=script_paths.end();++i)// ==== relative name, iterate + load all .bbs files + for (i=script_paths.begin();i!=script_paths.end();i++)// ==== relative name, iterate + load all .bbs files { path = *i; @@ -801,8 +804,12 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& fullDirectoryName = Utilities::MakePkgnameFromPath(path, upath, false); - // Check if library exists - if ( ! Utilities::IsDirectory(fullDirectoryName) ) + //EED 18 Fev 2008 + // without last slash "\" + std::string fullDirectoryNameClean = fullDirectoryName.substr(0,fullDirectoryName.size()-1); + + // Check if library exists + if ( ! Utilities::IsDirectory( fullDirectoryNameClean ) ) { // The following is *NOT* a debug time message : // It's a user intended message. @@ -819,7 +826,6 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& nbBssFiles = 0; for (std::vector::iterator i = Filenames.begin(); i!= Filenames.end(); ++i) { - if ((*i).substr((*i).size()-4, 4) != ".bbs") continue; // ignore non .bbs files LoadScript(*i,name); @@ -829,7 +835,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& bbtkMessage("Interpreter",1, "WARNING : No '.bbs' file found in [" << fullDirectoryName << "]" << std::endl); - + //break; // a directory was found; we stop iterating // LG : No! We want all files included ! } @@ -849,7 +855,6 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& // ===========================================================check user supplied location fullnameGiven = true; - fullPathScriptName = Utilities::ExpandLibName(name, false); // allow user to always forget ".bbs" @@ -911,7 +916,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& } bbtkMessage("Interpreter",2, " [" <& bbtkError("Script ["<& return; } - std::ifstream* s; + std::ifstream* s; s = new std::ifstream; s->open(fullPathScriptName.c_str()); if (!s->good()) { bbtkError("Could not open file ["<[" << fullPathScriptName << "] found" << std::endl); @@ -965,7 +970,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& mFileName.push_back(fullPathScriptName); mIncludeFileName.push_back(includeScriptName); mLine.push_back(0); - return; + return; } //======================================================================= @@ -976,8 +981,8 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& { bbtkDebugMessage("Interpreter",9,"Interpreter::CloseCurrentFile()" < no file left open"<& mFile.pop_back(); bbtkDebugMessage("Interpreter",9, " Closing file '"<& { bbtkDebugMessage("Interpreter",9,"Interpreter::CloseAllFiles()" <close(); @@ -1035,7 +1040,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& CommandInfoType& info ) { bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretCommand(...)"<& void Interpreter::Help(const std::vector& words) { unsigned int nbarg = words.size()-1; - + if (nbarg==0) { HelpCommands(); @@ -1086,7 +1091,8 @@ void Interpreter::Help(const std::vector& words) #ifdef _USE_WXWIDGETS_ if ( WxConsole::GetInstance() != 0 ) { - std::string url = ConfigurationFile::GetInstance().Get_url(); + std::string url = + ConfigurationFile::GetInstance().Get_doc_path(); url += "/bbdoc/" + words[1] + "/index.html"; if (Utilities::FileExists(url)) { @@ -1104,15 +1110,16 @@ void Interpreter::Help(const std::vector& words) #ifdef _USE_WXWIDGETS_ if ( WxConsole::GetInstance() != 0 ) { - std::string url = ConfigurationFile::GetInstance().Get_url(); + std::string url = + ConfigurationFile::GetInstance().Get_doc_path(); url += "/bbdoc/" + package + "/index.html"; - if (Utilities::FileExists(url)) + if (Utilities::FileExists(url)) { url += "#" + words[1]; WxConsole::GetInstance()->ShowHtmlPage(url); } } -#endif +#endif } catch (bbtk::Exception g) { @@ -1162,44 +1169,9 @@ void Interpreter::Help(const std::vector& words) /// Displays the Configuration void Interpreter::Config() const { - bbtkDebugMessageInc("Kernel",9,"Factory::Config"<bbs_paths = cf.Get_bbs_paths(); - const std::vectorpackage_paths = cf.Get_package_paths(); - - bbtkMessage("Help",1, "=============" << std::endl); - bbtkMessage("Help",1, "Configuration" << std::endl); - bbtkMessage("Help",1, "=============" << std::endl); - bbtkMessage("Help",1, "bbtk_config.xml : [" << config_xml_full_path << "]" << std::endl); - bbtkMessage("Help",1, "Documentation Url : [" << url << "]" << std::endl); - bbtkMessage("Help",1, "Data Path : [" << data_path << "]" << std::endl); - bbtkMessage("Help",1, "Default Temp-Dir : [" << default_temp_dir << "]" << std::endl); - bbtkMessage("Help",1, "File Separator : [" << file_separator << "]" << std::endl); - - std::vector::const_iterator i; - - bbtkMessage("Help",1, "BBS Paths " << std::endl); - for (i = bbs_paths.begin(); i!=bbs_paths.end(); ++i ) - { - bbtkMessage("Help",1,"--- ["<<*i<<"]"<& words) std::cout << " " << i->first << std::endl; // std::cout << " usage : " << i->second.syntax << std::endl; // std::cout << " " << i->second.help << std::endl; - + } } //======================================================================= @@ -1235,7 +1207,7 @@ void Interpreter::Help(const std::vector& words) // ++i) { std::cout << " usage : " << c->second.syntax << std::endl; std::cout << " " << c->second.help << std::endl; - + } //======================================================================= @@ -1259,7 +1231,7 @@ void Interpreter::Help(const std::vector& words) //======================================================================= - + //======================================================================= #ifdef BBTK_USE_TERMIOS_BASED_PROMPT @@ -1282,19 +1254,18 @@ void Interpreter::Help(const std::vector& words) { int c; int ind=0; - + int MAX_LINE_SIZE = 160; int MAX_HISTORY_SIZE = 100; - + char* newline = new char[MAX_LINE_SIZE]; memset(newline,0,MAX_LINE_SIZE); char* histline = new char[MAX_LINE_SIZE]; memset(histline,0,MAX_LINE_SIZE); - + char* line = newline; int hist = mHistory.size(); - - + write(1,"> ",2); while(1) { @@ -1483,7 +1454,7 @@ void Interpreter::Help(const std::vector& words) { bbtkDebugMessageInc("Interpreter",9, "Interpreter::CommandLineInterpreter()"<& words) } } while (again); - + #ifdef BBTK_USE_TERMIOS_BASED_PROMPT tcsetattr(0,TCSANOW,&oter); #endif - + std::cout << "Good bye !" << std::endl; - + bbtkDebugDecTab("Interpreter",9); }