X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkInterpreter.cxx;h=224861d5773bf17bf0fac7e34305c9a8c8f0a780;hb=f1575da9353486cb8dcc2cf260201334fbba3599;hp=a6101a5a2881f678cc33247ad30dfa9165f0fab9;hpb=cadbc7f9439327013dfbefa9415ad7c8680fb351;p=bbtk.git diff --git a/kernel/src/bbtkInterpreter.cxx b/kernel/src/bbtkInterpreter.cxx index a6101a5..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/29 10:12:45 $ - Version: $Revision: 1.8 $ + 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,21 +743,20 @@ 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: ... // - // expression like directory/subdir/scrname.bbs is FORBIDDEN (*) // use ./directory/subdir/scrname.bbs // - // (*) except when using packagename/boxes/* bbtkDebugMessageInc("Interpreter",9,"Interpreter::SwitchToFile( \"" < script_paths; 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 : @@ -757,16 +768,37 @@ verbose = true; } std::string upath; pkgname = Utilities::ExtractScriptName(name,upath); - +//std::cout <<"name [" << name << "] pkgname [" << pkgname << "] upath [" << upath << "]" << std::endl; bool fullnameGiven = false; bool foundFile = false; 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) + for (i=script_paths.begin();i!=script_paths.end();++i)// ==== relative name, iterate + load all .bbs files { path = *i; @@ -792,14 +824,11 @@ verbose = true; } foundFile = true; - std::cout << "recherche tous les .bbs du directory" << std::endl; - std::cout << "pour chacun, LoadScript" << std::endl; - std::vector Filenames; int nbFiles = Utilities::Explore(fullDirectoryName, false, Filenames); // std::cout << "=================nbFiles " << nbFiles << std::endl; - int nbBssFiles = 0; - for (std::vector::iterator i = Filenames.begin(); i!=Filenames.end(); ++i) + 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 @@ -815,21 +844,24 @@ verbose = true; return; } - std::string::size_type slash_position = name.find_last_of("/\\"); + //std::string::size_type slash_position = name.find_last_of("/\\"); - // if name contains a slash (anywhere), user is assumed to have passed a relative/absolute name + // 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 explade the directory name + // we trust him, and try to expland the directory name // WARNING : starting from current local directory : ./whatYouWant (./ mandatory!) - - if (slash_position != std::string::npos) - { // ===========================================================check user supplied location + + if (name[0]=='/' || name[1] == ':' || name[0]=='.') // absolute path (linux/windows) or relative path + { + + // ===========================================================check user supplied location fullnameGiven = true; - + fullPathScriptName = Utilities::ExpandLibName(name, verbose); - + // allow user to always forget ".bbs" int l = fullPathScriptName.size(); + if (l!=0) { if (l>4) @@ -844,22 +876,22 @@ verbose = true; fullPathScriptName = fullPathScriptName + ".bbs"; } - //if (fullPathScriptName != "") { 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 @@ -869,7 +901,10 @@ verbose = true; } // fullPathScriptName = Utilities::MakePkgnameFromPath(path, name, true); //pkgname); - fullPathScriptName = Utilities::MakePkgnameFromPath(path, pkgname, true); + + fullPathScriptName = Utilities::MakePkgnameFromPath(path, name, true); +//std::cout << "FULL PATH = "<