96d72b9359a3b42c8831c9e396d7a7cd513b32b6
[scilab.git] / scilab / modules / external_objects / src / cpp / getNamedVariable.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::getNamedVariable(char * fname, const int envId, void * pvApiCtx)
19 {
20     SciErr err;
21     int * addr = 0;
22     char * varName = 0;
23     int idObj;
24
25     CheckInputArgument(pvApiCtx, 1, 1);
26     CheckOutputArgument(pvApiCtx, 1, 1);
27
28     ScilabAbstractEnvironment & env = ScilabEnvironments::getEnvironment(envId);
29     ScilabGatewayOptions & options = env.getGatewayOptions();
30     OptionsHelper::setCopyOccured(false);
31     ScilabObjects::initialization(env, pvApiCtx);
32     options.setIsNew(false);
33
34     varName = ScilabObjects::getSingleString(1, pvApiCtx);
35
36     try
37     {
38         idObj = env.getNamedVariable(varName);
39     }
40     catch (std::exception & e)
41     {
42         freeAllocatedSingleString(varName);
43         throw;
44     }
45     freeAllocatedSingleString(varName);
46
47     try
48     {
49         ScilabObjects::createEnvironmentObjectAtPos(EXTERNAL_OBJECT, Rhs + 1, idObj, envId, pvApiCtx);
50     }
51     catch (ScilabAbstractEnvironmentException & e)
52     {
53         env.removeobject(idObj);
54         throw;
55     }
56
57     LhsVar(1) = Rhs + 1;
58     PutLhsVar();
59
60     return 0;
61 }
62 }