Program: bbtk
Module: $RCSfile: bbtkInterpreter.cxx,v $ $
Language: C++
- Date: $Date: 2008/10/08 13:39:33 $
- Version: $Revision: 1.75 $
+ Date: $Date: 2008/10/08 14:59:25 $
+ Version: $Revision: 1.76 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
pkgname = Utilities::ExtractScriptName(name,upath);
bbtkMessage("Interpreter",3,
- "extract : pkgname [" << pkgname
- << "] upath [" << upath << "]" << std::endl);
+ "package name:[" << pkgname
+ << "] path:[" << upath << "]" << std::endl);
bool fullnameGiven = false;
bool foundFile = false;
// ==== "*" provided : load all scripts in given path
// relative (e.g. std/boxes/*) or absolute
if (pkgname == "*")
- {
- int nbBssFiles;
+ {
+
+ std::stringstream* stream = new std::stringstream;
+ //if (upath.size()!=0) // avoid troubles for "*"
- std::stringstream* stream = new std::stringstream;
- //if (upath.size()!=0) // avoid troubles for "*"
+ // ==== no path provided : look in root bbs path
+ if (upath.size()==0)
+ {
+ // bbtkMessage("Interpreter",1,
+ // LG : add all bbs path
+ // script_paths.push_back( ConfigurationFile::GetInstance().Get_root_bbs_path() );
+ std::vector<std::string>::const_iterator i;
+ for (i=ConfigurationFile::GetInstance().Get_bbs_paths().begin();
+ i!=ConfigurationFile::GetInstance().Get_bbs_paths().end();
+ i++)
+ {
+ script_paths.push_back(*i);
+ }
+ }
+ // ==== absolute path provided
+ else if (upath[0]=='/' || upath[1] == ':' )
+ {
+ if ( Utilities::IsDirectory( upath ) )
+ {
+ script_paths.push_back(upath);
+ }
+ else
+ {
+ bbtkError("'"<<upath<<"' : directory does not exist");
+ }
+ }
+ // ==== relative path provided : search all bbs path appended with
+ // the relative path provided
+ else
+ {
+ std::vector<std::string>::const_iterator i;
+ for (i=ConfigurationFile::GetInstance().Get_bbs_paths().begin();
+ i!=ConfigurationFile::GetInstance().Get_bbs_paths().end();
+ i++)
+ {
+ std::string full_path(*i);
+ // we *really* want '.' to be the current working directory
+ if (full_path == ".")
+ {
+ char buf[2048]; // for getcwd
+ char * currentDir = getcwd(buf, 2048);
+ std::string cwd(currentDir);
+ full_path = currentDir;
+ } // if full_path
+
+ full_path += ConfigurationFile::GetInstance().Get_file_separator();
+ full_path += upath;
+
+ if ( Utilities::IsDirectory( full_path ) )
+ {
+ script_paths.push_back(full_path);
+ }
+ }
+ if (script_paths.empty())
+ {
+ bbtkError("no '"<<upath<<"' subdir found in search paths"
+ << std::endl);
+ }
+ }
- // ==== no path provided : look in root bbs path
- if (upath.size()==0)
- {
- // bbtkMessage("Interpreter",1,
- // LG : add all bbs path
- // script_paths.push_back( ConfigurationFile::GetInstance().Get_root_bbs_path() );
- std::vector<std::string>::const_iterator i;
- for (i=ConfigurationFile::GetInstance().Get_bbs_paths().begin();
- i!=ConfigurationFile::GetInstance().Get_bbs_paths().end();
- i++)
- {
- script_paths.push_back(*i);
- }
- }
- // ==== absolute path provided
- else if (upath[0]=='/' || upath[1] == ':' )
- {
- if ( Utilities::IsDirectory( upath ) )
- {
- script_paths.push_back(upath);
- }
- else
- {
- bbtkError("'"<<upath<<"' : directory does not exist");
- }
- }
- // ==== relative path provided : search all bbs path appended with
- // the relative path provided
- else
- {
- std::vector<std::string>::const_iterator i;
- for (i=ConfigurationFile::GetInstance().Get_bbs_paths().begin();
- i!=ConfigurationFile::GetInstance().Get_bbs_paths().end();
- i++)
- {
- std::string full_path(*i);
- // we *really* want '.' to be the current working directory
- if (full_path == ".")
- {
- char buf[2048]; // for getcwd
- char * currentDir = getcwd(buf, 2048);
- std::string cwd(currentDir);
- full_path = currentDir;
- } // if full_path
-
- full_path += ConfigurationFile::GetInstance().Get_file_separator();
- full_path += upath;
-
- if ( Utilities::IsDirectory( full_path ) )
- {
- script_paths.push_back(full_path);
- }
- }
- if (script_paths.empty())
- {
- bbtkError("no '"<<upath<<"' subdir found in search paths"
- << std::endl);
- }
- }
-
-
- // === search paths list complete : now explore it
-
- // ==== relative name, iterate + load all .bbs/.bbp files
- std::vector<std::string>::iterator i;
- for (i=script_paths.begin();i!=script_paths.end();i++)
- {
- bbtkMessage("Interpreter",1,
+
+ // === search paths list complete : now explore it
+ int nbBssFiles = 0;
+ // ==== relative name, iterate + load all .bbs/.bbp files
+ std::vector<std::string>::iterator i;
+ for (i=script_paths.begin();i!=script_paths.end();i++)
+ {
+ bbtkMessage("Interpreter",1,
"--> Looking in '" << *i << "'" << std::endl);
-
- Filenames.clear();
- //int nbFiles =
- Utilities::Explore(*i, false, Filenames);
- nbBssFiles = 0;
- for (std::vector<std::string>::iterator j = Filenames.begin();
- j!= Filenames.end(); ++j)
- {
- int lgr = (*j).size();
- if (lgr < 5) continue;
- // ignore non .bbp file
- if ( (*j).substr(lgr-4, 4) != ".bbp") continue;
-
- (*stream) << "include \"" << *j << "\"\n";
- bbtkMessage("Interpreter",2," --> Found '" << *j << "'" << std::endl);
+ Filenames.clear();
+ //int nbFiles =
+ Utilities::Explore(*i, false, Filenames);
+
+ for (std::vector<std::string>::iterator j = Filenames.begin();
+ j!= Filenames.end(); ++j)
+ {
+ int lgr = (*j).size();
+ if (lgr < 5) continue;
+ // ignore non .bbp file
+ if ( (*j).substr(lgr-4, 4) != ".bbp") continue;
- nbBssFiles++;
- } // for (std::vector...
- } // for (i=script_...
- if (nbBssFiles==0)
- {
- bbtkMessage("Interpreter",1,
- " --> No .bbp found"<< std::endl);
- }
- else
- {
- bbtkMessage("Interpreter",1,
- " --> "<<nbBssFiles<<" .bbp found"<< std::endl);
- SwitchToStream(stream);
- }
- return;
- }
- //=============== end pkgname=="*" ===========
-
+ (*stream) << "include \"" << *j << "\"\n";
+ bbtkMessage("Interpreter",2," --> Found '" << *j << "'" << std::endl);
+
+ nbBssFiles++;
+ } // for (std::vector...
+ } // for (i=script_...
+ // === Result ...
+ if (nbBssFiles==0)
+ {
+ bbtkMessage("Interpreter",1,
+ " --> No .bbp found"<< std::endl);
+ }
+ else
+ {
+ bbtkMessage("Interpreter",1,
+ " --> "<<nbBssFiles<<" .bbp found"<< std::endl);
+ SwitchToStream(stream);
+ }
+ return;
+ }
+ //=============== end pkgname=="*" ===========
+
+
// 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