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