module preferences plugged
[scilab.git] / scilab / modules / preferences / sci_gateway / cpp / sci_addModulePreferences.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
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  */
12
13 #include "ScilabPreferences.hxx"
14 #include "GiwsException.hxx"
15 #include "preferences_gw.hxx"
16
17 extern "C"
18 {
19 #include "Scierror.h"
20 #include "api_scilab.h"
21 #include "localization.h"
22 #include "getScilabJavaVM.h"
23 #include "expandPathVariable.h"
24 #include "sci_malloc.h"
25 }
26
27 using namespace org_scilab_modules_preferences;
28
29 /*--------------------------------------------------------------------------*/
30 int sci_addModulePreferences(char * fname, void *pvApiCtx)
31 {
32     SciErr err;
33     int * addr = 0;
34     char * tbxName = 0;
35     char * tbxPath = 0;
36     char * expTbxPath = 0;
37     char * tbxPrefFile = 0;
38     char * expTbxPrefFile = 0;
39     char ** array[] = {&tbxName, &tbxPath, &tbxPrefFile};
40     bool error = false;
41
42     CheckLhs(1, 1);
43     CheckRhs(3, 3);
44
45     for (int i = 0; i < Rhs; i++)
46     {
47         err = getVarAddressFromPosition(pvApiCtx, i + 1, &addr);
48         if (err.iErr)
49         {
50             printError(&err, 0);
51             return 0;
52         }
53
54         if (!isStringType(pvApiCtx, addr))
55         {
56             Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, i + 1);
57             for (int j = 0; j < i; j++)
58             {
59                 if (array[j])
60                 {
61                     freeAllocatedSingleString(*(array[j]));
62                 }
63             }
64             return 0;
65         }
66
67         getAllocatedSingleString(pvApiCtx, addr, array[i]);
68     }
69
70     expTbxPath = expandPathVariable(const_cast<char *>(tbxPath));
71     expTbxPrefFile = expandPathVariable(const_cast<char *>(tbxPrefFile));
72
73     try
74     {
75         ScilabPreferences::addToolboxInfos(getScilabJavaVM(), tbxName, expTbxPath, expTbxPrefFile);
76     }
77     catch (const GiwsException::JniException & e)
78     {
79         Scierror(999, "%s: %s", fname, e.getJavaDescription().c_str());
80         for (int i = 0; i < Rhs; i++)
81         {
82             if (array[i])
83             {
84                 freeAllocatedSingleString(*(array[i]));
85             }
86         }
87         FREE(expTbxPath);
88         FREE(expTbxPrefFile);
89
90         return 0;
91     }
92
93     for (int i = 0; i < Rhs; i++)
94     {
95         if (array[i])
96         {
97             freeAllocatedSingleString(*(array[i]));
98         }
99     }
100     FREE(expTbxPath);
101     FREE(expTbxPrefFile);
102
103     LhsVar(1) = 0;
104     PutLhsVar();
105
106     return 0;
107 }
108 /*--------------------------------------------------------------------------*/