9150b7dc557a915c7dac66ded8d5386bd5ae1aa9
[scilab.git] / scilab / modules / external_objects / src / cpp / getsetOptions.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2012 - Scilab Enterprises - 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-en.txt
10  *
11  */
12
13 #include "ScilabGateway.hxx"
14
15 namespace org_modules_external_objects
16 {
17
18 int ScilabGateway::getsetOptions(char * fname, const int envId, ScilabAbstractOptionsSetter & setter, void * pvApiCtx)
19 {
20     SciErr sciErr;
21     int * addr = 0;
22     int val = 0;
23
24     CheckInputArgument(pvApiCtx, 0, 1);
25     CheckOutputArgument(pvApiCtx, 1, 1);
26
27     ScilabAbstractEnvironment & env = ScilabEnvironments::getEnvironment(envId);
28     OptionsHelper & helper = env.getOptionsHelper();
29     ScilabGatewayOptions & options = env.getGatewayOptions();
30     OptionsHelper::setCopyOccured(false);
31     ScilabObjects::initialization(env, pvApiCtx);
32     options.setIsNew(false);
33
34     if (Rhs == 0)
35     {
36         createScalarBoolean(pvApiCtx, 1, (int)setter.get());
37
38         LhsVar(1) = 1;
39         PutLhsVar();
40
41         return 0;
42     }
43
44     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &addr);
45     if (sciErr.iErr)
46     {
47         throw ScilabAbstractEnvironmentException(__LINE__, __FILE__, gettext("Invalid variable: cannot retrieve the data"));
48     }
49
50     if (!isBooleanType(pvApiCtx, addr))
51     {
52         throw ScilabAbstractEnvironmentException(__LINE__, __FILE__, gettext("Wrong type for input argument #%d: A boolean expected."), 1);
53     }
54
55     if (!isScalar(pvApiCtx, addr))
56     {
57         throw ScilabAbstractEnvironmentException(__LINE__, __FILE__, gettext("Wrong type for input argument #%d: A single boolean expected."), 1);
58     }
59
60     getScalarBoolean(pvApiCtx, addr, &val);
61     setter.set(val == 1);
62
63     LhsVar(1) = 0;
64     PutLhsVar();
65
66     return 0;
67 }
68 }