1e5da5cd6d59a68590ea680e46c2c7572f87dad7
[scilab.git] / scilab / modules / atoms / macros / atomsSetConfig.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 // Copyright (C) 2012 - DIGITEO - Allan CORNET
4 //
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10
11 // End user function
12
13 // Add 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/config
16
17 function nbChanges = atomsSetConfig(field, value)
18
19     rhs        = argn(2);
20     nbChanges      = 0;
21     systemUpdateNeeded = %F;
22
23     // Check number of input arguments
24     // =========================================================================
25
26     if rhs <> 2 then
27         error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"), "atomsSetConfig", 2));
28     end
29
30     // Check input parameters type
31     // =========================================================================
32
33     if type(field) <> 10 then
34         error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"), "atomsSetConfig", 1));
35     end
36
37     if type(value) <> 10 then
38         error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"), "atomsSetConfig", 2));
39     end
40
41     // field and value must have the same size
42     // =========================================================================
43
44     if or( size(field) <> size(value) ) then
45         error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"), "atomsSetConfig", 1, 2));
46     end
47     i=1;
48     for element = field(:)
49         if strcmpi("verbose",element) == 0 then
50             field(i) = convstr(part(element,1),"u") + part(element,2:length(element));
51         else
52             field(i) = convstr(part(element,1),"l") + part(element,2:length(element));
53         end
54         element = field(i);
55
56         if element == "offLine" then
57             // Prior to version 5.4.0, offline was called Offline
58             field(i) = "offline";
59             element = "offline";
60         end
61
62         if element == "useProxy" ..
63             | element == "offline" ..
64             | element == "autoload" ..
65             | element == "autoloadAddAfterInstall" ..
66             | element == "Verbose" ..
67             then
68             select value(i)
69             case "True" then,
70             case "False" then,
71             case "true" then value(i)="True",
72             case "false" then value(i)="False",
73             else
74                 error(msprintf(gettext("%s: Wrong value for input configuration argument: True or False expected.\n"), value(i)));
75             end
76         elseif element == "proxyHost" ..
77             | element == "proxyPort" ..
78             | element == "proxyUser" ..
79             | element == "proxyPassword" ..
80             | element == "downloadTool" ..
81             | element == "downloadTimeout" ..
82             then continue;
83         else
84             error(msprintf(gettext("%s: Wrong key for input configuration argument.\n"), element));
85         end
86         i = i + 1;
87     end
88
89     // Load Atoms Internals lib if it's not already loaded
90     // =========================================================================
91     if ~ exists("atomsinternalslib") then
92         load("SCI/modules/atoms/macros/atoms_internals/lib");
93     end
94
95     // Define the path of the file that will record the change
96     // =========================================================================
97     atoms_directory =  atomsPath("system", "user");
98
99     // Does the atoms_directory exist, if not create it
100     // =========================================================================
101
102     if ~ isdir(atoms_directory) then
103         mkdir(atoms_directory);
104     end
105
106     // Get the current config struct
107     // =========================================================================
108
109     config_struct = atomsGetConfig();
110
111     // Loop on field
112     // =========================================================================
113
114     for i=1:size(field, "*")
115
116         if (~isfield(config_struct, field(i))) | (config_struct(field(i)) <> value(i)) then
117             nbChanges = nbChanges + 1;
118         else
119             continue;
120         end
121
122         if field(i) == "offline" then
123             systemUpdateNeeded = %T;
124         end
125
126         config_struct(field(i)) = value(i);
127     end
128
129     // Shortcut
130     // =========================================================================
131     if nbChanges == 0 then
132         return;
133     end
134
135     // Apply Changes
136     // =========================================================================
137
138     config_fields    = getfield(1, config_struct);
139     config_fields(1:2) = [];
140     config_fields    = gsort(config_fields);
141
142     config_str = [];
143
144     for i=1:size(config_fields, "*")
145         config_str = [ config_str ; config_fields(i) + " = " + config_struct(config_fields(i)) ];
146     end
147
148     mputl(config_str, atoms_directory + "config");
149
150     // SystemUpdate
151     // =========================================================================
152
153     if systemUpdateNeeded then
154         atomsSystemUpdate();
155     end
156
157 endfunction