- installed packages and dependencies are now saved into binary files
[scilab.git] / scilab / modules / atoms / macros / atomsIsLoaded.sci
index 85bd939..c1619c5 100644 (file)
@@ -1,5 +1,5 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - INRIA - Simon LIPP <simon.lipp@inria.fr>
+// Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
@@ -7,23 +7,98 @@
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 
-// If a toolbox is registered, return %t and its path ; %f else
+// End user function
 
-function [reg,path] = with_toolbox(name)
-  if argn(2) == 1 then
-  reg = %f
-  path = ""
-  
-  tboxes = getToolboxes()
-  for i=1:size(tboxes, 1)
-    if tboxes(i,1) == name then
-         reg = %t
-         path = tboxes(i,2)
-         return
-       end
-  end  
-  else
-    error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"with_toolbox",1))
-  end
+// Output arguments :
+
+//   res  :  .%T if the toolbox is loaded in this scilab session
+//           . Matrix of boolean ( n x 1 ) 
+//           . mandatory
+
+//   version_out : . If the toolbox is loaded, version_out is the version of the
+//                   loaded toolbox
+//                   otherwise, version_out = ""
+//                 . Matrix of string (n x 1)
+//                 . mandatory
 
+function [res,version_out] = atomsIsLoaded(name,version)
+       
+       rhs         = argn(2);
+       lhs         = argn(1);
+       res         = [];
+       version_out = [];
+       
+       // Check number of input arguments
+       // =========================================================================
+       
+       if rhs < 1 | rhs > 2 then
+               error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsIsLoaded",1,2));
+       end
+       
+       // Check input parameters type
+       // =========================================================================
+       
+       if type(name) <> 10 then
+               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsLoaded",1));
+       end
+       
+       if rhs>1 &  (~isempty(version)) & type(version)<>10  then
+               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsLoaded",2));
+       end
+       
+       // name and version must have the same size
+       // =========================================================================
+       
+       if rhs>1 & version<>[] & or(size(name)<>size(version)) then
+               error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"atomsIsLoaded",1,2));
+       end
+       
+       // Value of version if not precised
+       // =========================================================================
+       
+       if rhs < 2 then
+               version = [];
+       end
+       
+       // Get the list of installed packages
+       // =========================================================================
+       packages = atomsGetLoaded();
+       
+       // Loop on name
+       // =========================================================================
+       
+       for i=1:size(name,"*")
+               
+               if isempty(version) then
+                       // Just check the name
+                       res(i) = or(packages(:,1) == name(i));
+                       
+               else
+                       // Filter on names
+                       packages_version = packages( find(packages(:,1) == name(i)) , 2 );
+                       
+                       // Check if the wanted version is present$
+                       res(i) = or(packages_version == version(i) );
+               end
+               
+               if lhs>1 then
+                       if res(i) then
+                               version_out(i) = packages( find(packages(:,1) == name(i)) , 2 )
+                       else
+                               version_out(i) = "";
+                       end
+               end
+               
+       end
+       
+       // Reshape the matrix [res]
+       // =========================================================================
+       res = matrix(res,size(name) );
+       
+       // Reshape the matrix [version_out]
+       // =========================================================================
+       if lhs > 1
+               version_out = matrix(version_out,size(name) );
+       end
+       
 endfunction