License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / atoms / macros / atoms_internals / atomsGetVersions.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 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 // Internal function
14
15 // Return the sorted version list of the package entered as input argument
16
17 function versions = atomsGetVersions(name,min_version,max_version,min_version_included,max_version_included)
18
19     // Initialize
20     // =========================================================================
21     versions = [];
22
23     // Check input parameters
24     // =========================================================================
25
26     rhs  = argn(2);
27
28     if rhs < 1 | rhs > 5 then
29         error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsGetVersions",1,5));
30     end
31
32     if type(name) <> 10 then
33         error(msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"),"atomsGetVersions",1));
34     end
35
36     if (rhs>1) & (type(min_version)<>10) then
37         error(msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"),"atomsGetVersions",2));
38     end
39
40     if (rhs>2) & (type(max_version)<>10) then
41         error(msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"),"atomsGetVersions",3));
42     end
43
44     if (rhs>3) & (type(min_version_included)<>4) then
45         error(msprintf(gettext("%s: Wrong type for input argument #%d: Boolean expected.\n"),"atomsGetVersions",4));
46     end
47
48     if (rhs>4) & (type(max_version_included)<>4) then
49         error(msprintf(gettext("%s: Wrong type for input argument #%d: Boolean expected.\n"),"atomsGetVersions",5));
50     end
51
52     // Default values
53     // =========================================================================
54
55     if (rhs<2) | ( (rhs>=2) & (min_version=="") ) then
56         min_version = "0";
57     end
58
59     if (rhs<3) | ( (rhs>=3) & (max_version=="") ) then
60         max_version = "9999999";
61     end
62
63     if rhs<4 then
64         min_version_included = %T;
65     end
66
67     if rhs<5 then
68         max_version_included = %T;
69     end
70
71     // Get all package description
72     // =========================================================================
73     allpackages = atomsDESCRIPTIONget();
74
75     // Check if it's a Atoms package
76     // =========================================================================
77     if ~isfield(allpackages, name) then
78         error(msprintf(gettext("%s: Wrong value for input argument #%d: ""%s"" must be an available atoms package name.\n"), "atomsGetVersions",1, name));
79     end
80
81     // Get versions
82     // =========================================================================
83     package_versions          = allpackages(name);
84     package_versions_tab      = getfield(1,package_versions);
85     package_versions_tab(1:2) = [];
86     package_versions_tab      = package_versions_tab';
87
88     without_packaging_ver     = [];
89
90     for i=1:size(package_versions_tab,"*")
91         if ~ isempty(strindex(package_versions_tab(i),"-")) then
92             without_packaging_ver = [ without_packaging_ver ; part(package_versions_tab(i),1:strindex(package_versions_tab(i),"-")-1) ];
93         else
94             without_packaging_ver = [ without_packaging_ver ; package_versions_tab(i) ];
95         end
96     end
97
98     // Delete out of bounds versions
99     // =========================================================================
100
101     if isempty(strindex(max_version,"-")) then
102         // max_version doesn't contain a packaging version
103         if max_version_included then
104             indexToDel = find(atomsVersionCompare(without_packaging_ver,max_version) >  0);
105         else
106             indexToDel = find(atomsVersionCompare(without_packaging_ver,max_version) >= 0);
107         end
108     else
109         // max_version contains a packaging version
110         if max_version_included then
111             indexToDel = find(atomsVersionCompare(package_versions_tab,max_version) >  0);
112         else
113             indexToDel = find(atomsVersionCompare(package_versions_tab,max_version) >= 0);
114         end
115     end
116
117     package_versions_tab(indexToDel,:) = [];
118     without_packaging_ver(indexToDel)  = [];
119
120     if isempty(strindex(min_version,"-")) then
121         // min_version doesn't contain a packaging version
122         if min_version_included then
123             indexToDel = find(atomsVersionCompare(without_packaging_ver,min_version) <  0)
124         else
125             indexToDel = find(atomsVersionCompare(without_packaging_ver,min_version) <= 0)
126         end
127     else
128         // min_version contains a packaging version
129         if min_version_included then
130             indexToDel = find(atomsVersionCompare(package_versions_tab,min_version) <  0)
131         else
132             indexToDel = find(atomsVersionCompare(package_versions_tab,min_version) <= 0)
133         end
134     end
135
136     package_versions_tab(indexToDel,:) = [];
137     without_packaging_ver(indexToDel)  = [];
138
139     // Sort the version matrix
140     // =========================================================================
141     versions = atomsVersionSort(package_versions_tab,"DESC");
142
143 endfunction