Merge commit 'origin/master' into atoms
[scilab.git] / scilab / modules / atoms / macros / atomsIsLoaded.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10 // End user function
11
12 // Output arguments :
13
14 //   res  :  .%T if the toolbox is loaded in this scilab session
15 //           . Matrix of boolean ( n x 1 ) 
16 //           . mandatory
17
18 //   version_out : . If the toolbox is loaded, version_out is the version of the
19 //                   loaded toolbox
20 //                   otherwise, version_out = "-1"
21 //                 . Matrix of string (n x 1)
22 //                 . mandatory
23
24 function [res,version_out] = atomsIsLoaded(name,version)
25         
26         rhs         = argn(2);
27         lhs         = argn(1);
28         res         = [];
29         version_out = [];
30         
31         // Check number of input arguments
32         // =========================================================================
33         
34         if rhs < 1 | rhs > 2 then
35                 error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsIsLoaded",1,2));
36         end
37         
38         // Check input parameters type
39         // =========================================================================
40         
41         if type(name) <> 10 then
42                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsLoaded",1));
43         end
44         
45         if rhs>1 &  (~isempty(version)) & type(version)<>10  then
46                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsLoaded",2));
47         end
48         
49         // name and version must have the same size
50         // =========================================================================
51         
52         if rhs>1 & version<>[] & or(size(name)<>size(version)) then
53                 error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"atomsIsLoaded",1,2));
54         end
55         
56         // Value of version if not precised
57         // =========================================================================
58         
59         if rhs < 2 then
60                 version = [];
61         end
62         
63         // Get the list of installed packages
64         // =========================================================================
65         packages = atomsGetLoaded();
66         
67         // Loop on name
68         // =========================================================================
69         
70         for i=1:size(name,"*")
71                 
72                 if isempty(version) then
73                         // Just check the name
74                         res(i) = or(packages(:,1) == name(i));
75                         
76                 else
77                         // Filter on names
78                         packages_version = packages( find(packages(:,1) == name(i)) , 2 );
79                         
80                         // Check if the wanted version is present$
81                         res(i) = or(packages_version == version(i) );
82                 end
83                 
84                 if lhs>1 then
85                         if res(i) then
86                                 version_out(i) = packages( find(packages(:,1) == name(i)) , 2 )
87                         else
88                                 version_out(i) = "";
89                         end
90                 end
91                 
92         end
93         
94         // Reshape the matrix [res]
95         // =========================================================================
96         res = matrix(res,size(name) );
97         
98         // Reshape the matrix [version_out]
99         // =========================================================================
100         if lhs > 1
101                 version_out = matrix(version_out,size(name) );
102         end
103         
104 endfunction