Program: bbtk
Module: $RCSfile: bbtkInterpreter.cxx,v $ $
Language: C++
- Date: $Date: 2008/01/29 13:34:59 $
- Version: $Revision: 1.9 $
+ Date: $Date: 2008/02/01 13:06:29 $
+ Version: $Revision: 1.17 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
info.syntax = "author <string>";
info.help = "Adds the string <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 <list of items, separated by ;>";
+ info.help = "Adds the string <string> to the keyword information of the black box being defined";
+ mCommandDict[info.keyword] = info;
info.keyword = "description";
info.argmin = 1;
case cAuthor :
mExecuter->Author(words[1]);
break;
-
+
+ case cKeyword :
+ mExecuter->Keyword(words[1]);
+ break;
+
case cDescription :
mExecuter->Description(words[1]);
break;
// - 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( \""
<<name<<"\")"<<std::endl);
-// to be remove in final version
+// to be removed in final version
// use : Config v
-verbose = true;
+//verbose = true;
std::vector<std::string> script_paths;
std::string fullPathScriptName; // full path script name
std::string pkgname; // e.g. <scriptname>.bbs
-
+ std::vector<std::string> Filenames;
+
if (use_configuration_file)
{
// The following is *NOT* a debug time message :
}
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<std::string>::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<std::string>::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;
}
foundFile = true;
- std::cout << "recherche tous les .bbs du directory" << std::endl;
- std::cout << "pour chacun, LoadScript" << std::endl;
- std::vector<std::string> Filenames;
int nbFiles = Utilities::Explore(fullDirectoryName, false, Filenames);
// std::cout << "=================nbFiles " << nbFiles << std::endl;
- int nbBssFiles = 0;
- for (std::vector<std::string>::iterator i = Filenames.begin(); i!=Filenames.end(); ++i)
+ nbBssFiles = 0;
+ for (std::vector<std::string>::iterator i = Filenames.begin(); i!= Filenames.end(); ++i)
{
if ((*i).substr((*i).size()-4, 4) != ".bbs")
continue; // ignore non .bbs files
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)
+
+ 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)
fullPathScriptName = fullPathScriptName + ".bbs";
}
- //if (fullPathScriptName != "") {
if ( Utilities::FileExists(fullPathScriptName))
{
foundFile = true;
}
- //}
} // endif l != 0
}
- else
+ else
+
// =============================================================== iterate on the paths
{
- std::cout << "iterate"<<std::endl;
std::string path;
std::vector<std::string>::iterator i;
for (i=script_paths.begin();i!=script_paths.end();++i)
{
path = *i;
- std::cout << "CUR=["<<path<<"]"<<std::endl;
// we *really* want '.' to be the current working directory
if (path == ".") {
- std::cout << "PATH IS CURRENT"<<std::endl;
char buf[2048]; // for getcwd
char * currentDir = getcwd(buf, 2048);
std::string cwd(currentDir);
// fullPathScriptName = Utilities::MakePkgnameFromPath(path, name, true); //pkgname);
- fullPathScriptName = Utilities::MakePkgnameFromPath(path, pkgname, true);
- std::cout << "FULL PATH = "<<fullPathScriptName<<std::endl;
-
+ fullPathScriptName = Utilities::MakePkgnameFromPath(path, name, true);
+//std::cout << "FULL PATH = "<<fullPathScriptName<<std::endl;
+
// Check if library exists
if ( ! Utilities::FileExists(fullPathScriptName) )
{
std::cout <<" [" <<fullPathScriptName <<"] : doesn't exist" <<std::endl;
continue; // try next path
}
+ if (verbose)
+ std::cout <<" [" <<fullPathScriptName <<"] : found" <<std::endl;
foundFile = true;
break; // a script was found; we stop iterating