From f1575da9353486cb8dcc2cf260201334fbba3599 Mon Sep 17 00:00:00 2001 From: jean-pierre roux Date: Wed, 30 Jan 2008 15:29:07 +0000 Subject: [PATCH] Absolute expression for path name + '*' didn't work --- kernel/src/bbtkInterpreter.cxx | 40 +++++++++++++++++++++++++--------- kernel/src/bbtkUtilities.h | 6 ++--- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/kernel/src/bbtkInterpreter.cxx b/kernel/src/bbtkInterpreter.cxx index dac3e04..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/30 09:28:15 $ - Version: $Revision: 1.15 $ + 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 @@ -743,10 +743,8 @@ 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( \"" <& std::vector 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 : @@ -769,16 +768,37 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& } 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; @@ -804,10 +824,10 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& } foundFile = true; - std::vector Filenames; + int nbFiles = Utilities::Explore(fullDirectoryName, false, Filenames); // std::cout << "=================nbFiles " << nbFiles << std::endl; - int nbBssFiles = 0; + nbBssFiles = 0; for (std::vector::iterator i = Filenames.begin(); i!= Filenames.end(); ++i) { if ((*i).substr((*i).size()-4, 4) != ".bbs") @@ -824,7 +844,7 @@ void Interpreter::SplitLine ( const std::string& str, std::vector& return; } - std::string::size_type slash_position = name.find_last_of("/\\"); + //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) diff --git a/kernel/src/bbtkUtilities.h b/kernel/src/bbtkUtilities.h index 7895935..b399867 100644 --- a/kernel/src/bbtkUtilities.h +++ b/kernel/src/bbtkUtilities.h @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkUtilities.h,v $ Language: C++ - Date: $Date: 2008/01/29 14:01:31 $ - Version: $Revision: 1.8 $ + Date: $Date: 2008/01/30 15:29:07 $ + Version: $Revision: 1.9 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See doc/license.txt or @@ -103,7 +103,7 @@ namespace bbtk { pkgname = name; } - + // remove {.so | dll} if any std::string::size_type dot_position = pkgname.find_last_of('.'); if (dot_position != std::string::npos){ -- 2.45.1