X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkInterpreter.cxx;h=224861d5773bf17bf0fac7e34305c9a8c8f0a780;hb=f1575da9353486cb8dcc2cf260201334fbba3599;hp=ca1bd896e3d918bbc82a4f77c881c10f889fadb5;hpb=40b39757a6f9d5056bc08a59081ed19d0406837f;p=bbtk.git diff --git a/kernel/src/bbtkInterpreter.cxx b/kernel/src/bbtkInterpreter.cxx index ca1bd89..224861d 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/01/28 15:08:53 $ - Version: $Revision: 1.6 $ + Date: $Date: 2008/01/30 15:29:07 $ + Version: $Revision: 1.16 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -178,6 +178,14 @@ Interpreter* Interpreter::mGlobalInterpreter = NULL; info.syntax = "author "; info.help = "Adds the string to the author information of the black box being defined"; mCommandDict[info.keyword] = info; + + info.keyword = "keyword"; //JP + info.argmin = 1; + info.argmax = 1; + info.code = cKeyword; + info.syntax = "keyword "; + info.help = "Adds the string to the keyword information of the black box being defined"; + mCommandDict[info.keyword] = info; info.keyword = "description"; info.argmin = 1; @@ -494,7 +502,11 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment ) case cAuthor : mExecuter->Author(words[1]); break; - + + case cKeyword : + mExecuter->Keyword(words[1]); + break; + case cDescription : mExecuter->Description(words[1]); break; @@ -731,59 +743,155 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& // - absolute full name e.g. /home/usrname/proj/dir/scr.bbs // same for Windows, with c:, d: ... // + // use ./directory/subdir/scrname.bbs + // + bbtkDebugMessageInc("Interpreter",9,"Interpreter::SwitchToFile( \"" < script_paths; - std::string libname; // full path library name - std::string pkgname; // e.g. .bbs - - pkgname = Utilities::ExtractScriptName(name); + 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 : + // It's a user intended message. + // Please don't remove it. if (verbose) std::cout << "look for : [" << name << "] (use_configuration_file == TRUE)" << std::endl; script_paths = ConfigurationFile::GetInstance().Get_bbs_paths(); } - + std::string upath; + pkgname = Utilities::ExtractScriptName(name,upath); +//std::cout <<"name [" << name << "] pkgname [" << pkgname << "] upath [" << upath << "]" << std::endl; bool fullnameGiven = false; bool foundFile = false; - std::string::size_type slash_position = name.find_last_of("/\\"); - - if (false) //slash_position != std::string::npos) - { // ------------------------------------- check user supplied location + + if(pkgname == "*") // =========================================== load all boxes (e.g. std/boxes/*) + { + int nbBssFiles; + + if (upath[0]=='/' || upath[1] == ':' ) // ==== absolute name, load all .bbs files + { + int nbFiles = Utilities::Explore(upath, false, Filenames); + 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); + nbBssFiles++; + } + if (nbBssFiles==0) + if (verbose) + std::cout << "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 + { + path = *i; + + // we *really* want '.' to be the current working directory + if (path == ".") { + char buf[2048]; // for getcwd + char * currentDir = getcwd(buf, 2048); + std::string cwd(currentDir); + path = currentDir; + } + + fullDirectoryName = Utilities::MakePkgnameFromPath(path, upath, false); +//std::cout <<"fullpath [" << fullDirectoryName << "]" <::iterator i = Filenames.begin(); i!= Filenames.end(); ++i) + { + if ((*i).substr((*i).size()-4, 4) != ".bbs") + continue; // ignore non .bbs files + LoadScript(*i); + nbBssFiles++; + } + if (nbBssFiles==0) + if (verbose) + std::cout << "WARNING : No '.bbs' file found in [" << fullDirectoryName << "]" << std::endl; + + break; // a directory was found; we stop iterating + } + return; + } + + //std::string::size_type slash_position = name.find_last_of("/\\"); + + // if name starts with a / or a . or contains : user is assumed to have passed a relative/absolute name + // (not only a plain script name) + // we trust him, and try to expland the directory name + // WARNING : starting from current local directory : ./whatYouWant (./ mandatory!) + + if (name[0]=='/' || name[1] == ':' || name[0]=='.') // absolute path (linux/windows) or relative path + { + + // ===========================================================check user supplied location fullnameGiven = true; - libname = Utilities::ExpandLibName(name, verbose); + + fullPathScriptName = Utilities::ExpandLibName(name, verbose); // allow user to always forget ".bbs" - int l = libname.size(); - if (l>4) - { - if (libname.substr(l-4, 4) != ".bbs") + int l = fullPathScriptName.size(); + + if (l!=0) { + + if (l>4) + { + if (fullPathScriptName.substr(l-4, 4) != ".bbs") { - libname = libname + ".bbs"; + fullPathScriptName = fullPathScriptName + ".bbs"; } } else { - libname = libname + ".bbs"; + fullPathScriptName = fullPathScriptName + ".bbs"; } - if (libname != "") { - if ( Utilities::FileExists(libname)) + if ( Utilities::FileExists(fullPathScriptName)) { foundFile = true; } - } + } // endif l != 0 } - else // ------------------------------------- iterate on the paths - { + else + + // =============================================================== iterate on the paths + { std::string path; std::vector::iterator i; for (i=script_paths.begin();i!=script_paths.end();++i) { - path = *i; + path = *i; // we *really* want '.' to be the current working directory if (path == ".") { char buf[2048]; // for getcwd @@ -792,58 +900,70 @@ verbose = true; path = currentDir; } - libname = Utilities::MakePkgnameFromPath(path, name); //pkgname); - // Check if library exists - if ( ! Utilities::FileExists(libname) ) + // fullPathScriptName = Utilities::MakePkgnameFromPath(path, name, true); //pkgname); + + fullPathScriptName = Utilities::MakePkgnameFromPath(path, name, true); +//std::cout << "FULL PATH = "<open(libname.c_str()); + s->open(fullPathScriptName.c_str()); if (!s->good()) { - bbtkError("Could not open file ["<[" << libname << "] found" << std::endl; + std::cout << " -->[" << fullPathScriptName << "] found" << std::endl; mFile.push_back(s); - mFileName.push_back(libname); + mFileName.push_back(fullPathScriptName); mLine.push_back(0); - } - - - //======================================================================= - + return; + } //======================================================================= /** @@ -1174,19 +1294,18 @@ void Interpreter::Help(const std::vector& words) // empty lines are not stored in from history if (strlen(line)) { - // if history too long : delete oldest command - if (mHistory.size()>MAX_HISTORY_SIZE) - { - delete mHistory.front(); - mHistory.pop_front(); - } - mHistory.push_back(line); + // if history too long : delete oldest command + if (mHistory.size()>MAX_HISTORY_SIZE) + { + delete mHistory.front(); + mHistory.pop_front(); + } + mHistory.push_back(line); } - break; } - // Backspace - else if ( (ind>0) && + // Backspace + else if ( (ind>0) && ((c == BBTK_BACKSPACE_KBCODE) || (c == BBTK_DEL_KBCODE)) ) { @@ -1279,13 +1398,13 @@ void Interpreter::Help(const std::vector& words) PrintChar(line[ind]); ind++; } - + // Arrow left else if (ind>0 && c==BBTK_LEFT_ARROW_KBCODE) { PrintChar('\b'); ind--; - + } }