6dd645fd4026c7f36c82e770a464c8b91a26dbef
[scilab.git] / scilab / modules / atoms / macros / atomsIsInstalled.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 // Returns TRUE if a package is installed, FALSE otherwise
13
14 // Input parameters :
15 //   name     : matrix of strings
16 //   version  : matrix of strings
17 //   allusers : boolean
18
19 // Output parameters :
20 //   res      : matrix of boolean
21
22 function res = atomsIsInstalled(name,version,section)
23         
24         // Load Atoms Internals lib if it's not already loaded
25         // =========================================================================
26         if ~ exists("atomsinternalslib") then
27                 load("SCI/modules/atoms/macros/atoms_internals/lib");
28         end
29         
30         rhs           = argn(2);
31         res           = [];
32         installed     = []; // Column vector that contain user repositories
33         
34         // Check number of input arguments
35         // =========================================================================
36         
37         if rhs < 1 | rhs > 3 then
38                 error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsIsInstalled",1,3));
39         end
40         
41         // Check input parameters type
42         // =========================================================================
43         
44         if type(name) <> 10 then
45                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsInstalled",1));
46         end
47         
48         if rhs>1 &  (~isempty(version)) & type(version)<>10  then
49                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsInstalled",2));
50         end
51         
52         // name and version must have the same size
53         // =========================================================================
54         
55         if rhs>1 & version<>[] & or(size(name)<>size(version)) then
56                 error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"atomsIsInstalled",1,2));
57         end
58         
59         // Value of version if not precised
60         // =========================================================================
61         
62         if rhs < 2 then
63                 version = [];
64         end
65         
66         // "all", "user" section or "allusers" section packages ?
67         // =========================================================================
68         
69         if rhs < 3 then
70                 section = "all"
71         else
72                 // Just check if it's a boolean
73                 if type(section) <> 10 then
74                         error(msprintf(gettext("%s: Wrong type for input argument #%d: A single-string expected.\n"),"atomsIsInstalled",1));
75                 end
76         end
77         
78         if (rhs>=3) & (and(section<>["user","allusers","all"])) then
79                 error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'',''allusers'' or ''all'' expected.\n"),"atomsIsInstalled",1));
80         end
81         
82         // Get the list of installed packages
83         // =========================================================================
84         packages = atomsGetInstalled(section);
85         
86         // Loop on name
87         // =========================================================================
88         
89         for i=1:size(name,"*")
90                 
91                 if isempty(version) then
92                         // Just check the name
93                         res(i) = or(packages(:,1) == name(i));
94                 
95                 else
96                         // Filter on names
97                         packages_version = packages( find(packages(:,1) == name(i)) , 2 );
98                         
99                         // Check if the wnated version is present$
100                         res(i) = or(packages_version == version(i) );
101                 end
102                 
103         end
104         
105         // Reshape the matrix
106         // =========================================================================
107         res = matrix(res,size(name) );
108         
109 endfunction