License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / atoms / macros / atomsAutoloadDel.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 // Remove toolboxes to the list of packages that are automatically loaded at Scilab start
14 // This function has an impact on the following files :
15 //  -> ATOMSDIR/autoloaded
16
17 // End-User function
18
19 function nbDel = atomsAutoloadDel(packages,section)
20
21     // Load Atoms Internals lib if it's not already loaded
22     // =========================================================================
23     if ~ exists("atomsinternalslib") then
24         load("SCI/modules/atoms/macros/atoms_internals/lib");
25     end
26
27     // Check write access on allusers zone
28     // =========================================================================
29     ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
30
31     rhs   = argn(2);
32     nbDel = 0;
33
34     // Check number of input arguments
35     // =========================================================================
36
37     if rhs < 1 | rhs > 2 then
38         error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsAutoloadDel",1,2));
39     end
40
41     // Check input parameters type
42     // =========================================================================
43
44     if type(packages) <> 10 then
45         error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsAutoloadDel",1));
46     end
47
48     if (size(packages(1,:),"*") < 1) | (size(packages(1,:),"*") > 3) then
49         error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1, mx2 or mx3 string matrix expected.\n"),"atomsAutoloadDel",1));
50     end
51
52     // Allusers/user management
53     //   - If Allusers is equal to "all", module(s) will removed from both "user"
54     //     and "allusers" list
55     //       → SCI/.atoms/autoloaded
56     //       → SCIHOME/atoms/autoloaded
57     //   - If Allusers is equal to "allusers", module(s) will removed from the
58     //     "allusers" list
59     //       → SCI/.atoms/autoloaded
60     //   - If Allusers is equal to "user", module(s) will removed from the
61     //     "user" list
62     //       → SCIHOME/atoms/autoloaded
63     // =========================================================================
64
65     if rhs < 2 then
66
67         if ATOMSALLUSERSWRITEACCESS then
68             section = "all";
69         else
70             section = "user";
71         end
72
73     else
74         // Process the 2nd input argument : allusers
75         // Allusers can equal to "user","allusers" or "all"
76
77         if (type(section) <> 4) & (type(section) <> 10) then
78             error(msprintf(gettext("%s: Wrong type for input argument #%d: Boolean or single string expected.\n"),"atomsAutoloadDel",2));
79         end
80
81         if (type(section) == 10) & and(section<>["user","allusers","all"]) then
82             error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'',''allusers'' or ''all'' expected.\n"),"atomsAutoloadDel",2));
83         end
84
85         // Check if we have the write access
86         if or(section==["all","allusers"]) & ~ ATOMSALLUSERSWRITEACCESS then
87             error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsAutoloadDel",pathconvert(SCI+"/.atoms")));
88         end
89     end
90
91     if section == "all" then
92         sections = ["user","allusers"];
93     else
94         sections = section;
95     end
96
97     // Complete packages matrix with empty columns
98     // =========================================================================
99
100     if size(packages(1,:),"*") == 1 then
101         packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
102
103     elseif size(packages(1,:),"*") == 2 then
104         packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
105
106     end
107
108     // First filter : No need to process packages that are not present
109     // =========================================================================
110     packages(find(atomsAutoloadCheck(packages,section)==%F),:) = [];
111
112     // Loop on each sections
113     // =========================================================================
114
115     for i=1:size(sections,"*")
116
117         autoloaded = atomsAutoloadLoad(sections(i));
118
119         for j=1:size(packages(:,1),"*")
120
121             if ~isempty(packages(j,2)) & ~isempty(packages(j,3)) then
122
123                 // Version : specified
124                 // Section : specified
125
126                 del_index = [];
127
128                 for k=1:size(autoloaded(:,1),"*")
129                     if and( packages(j,:) == autoloaded(k,:) ) then
130                         nbDel     = nbDel + 1;
131                         del_index = [ del_index k ];
132                     end
133                 end
134
135                 autoloaded(del_index,:) = [];
136
137             elseif ~isempty(packages(j,2)) & isempty(packages(j,3)) then
138
139                 // Version : specified
140                 // Section : It doesn't matter
141
142                 del_index = [];
143
144                 for k=1:size(autoloaded(:,1),"*")
145                     if and([packages(j,1) packages(j,2)] == [autoloaded(k,1) autoloaded(k,2)]) then
146                         nbDel     = nbDel + 1;
147                         del_index = [ del_index k ];
148                     end
149                 end
150
151                 autoloaded(del_index,:) = [];
152
153             elseif isempty(packages(j,2)) & ~isempty(packages(j,3)) then
154
155                 // Version : It doesn't matter
156                 // Section : specified
157
158                 del_index = [];
159
160                 for k=1:size(autoloaded(:,1),"*")
161                     if and([packages(j,1) packages(j,3)] == [autoloaded(k,1) autoloaded(k,3)]) then
162                         nbDel     = nbDel + 1;
163                         del_index = [ del_index k ];
164                     end
165                 end
166
167                 autoloaded(del_index,:) = [];
168
169             elseif isempty(packages(j,2)) & isempty(packages(j,3)) then
170
171                 // Version : It doesn't matter
172                 // Section : It doesn't matter
173
174                 del_index = [];
175
176                 for k=1:size(autoloaded(:,1),"*")
177                     if packages(j,1) == autoloaded(k,1) then
178                         nbDel     = nbDel + 1;
179                         del_index = [ del_index k ];
180                     end
181                 end
182
183                 autoloaded(del_index,:) = [];
184
185             end
186
187         end
188
189         atomsAutoloadSave(autoloaded,sections(i));
190
191     end
192
193 endfunction