]> Creatis software - bbtk.git/commitdiff
Absolute expression for path name + '*' didn't work
authorjean-pierre roux <jean-pierre.roux@creatis.insa-lyon.fr>
Wed, 30 Jan 2008 15:29:07 +0000 (15:29 +0000)
committerjean-pierre roux <jean-pierre.roux@creatis.insa-lyon.fr>
Wed, 30 Jan 2008 15:29:07 +0000 (15:29 +0000)
kernel/src/bbtkInterpreter.cxx
kernel/src/bbtkUtilities.h

index dac3e047189dcffc96a91b60d1fb2c2f54f2523a..224861d5773bf17bf0fac7e34305c9a8c8f0a780 100644 (file)
@@ -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<std::string>&
   //      - 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);
@@ -757,7 +755,8 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
     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 :
@@ -769,16 +768,37 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
     }
     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;
 
@@ -804,10 +824,10 @@ void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>&
         }
         foundFile = true;
 
-        std::vector<std::string> Filenames;
+
         int nbFiles = Utilities::Explore(fullDirectoryName, false, Filenames);
 // std::cout << "=================nbFiles " << nbFiles << std::endl;
-        int nbBssFiles = 0;
+        nbBssFiles = 0;
         for (std::vector<std::string>::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<std::string>&
        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)
index 7895935aaaa530fc382ddf0724d7f91ea2fcfecd..b399867438ad95a1ffccd3f01f910f429dc307cf 100644 (file)
@@ -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){