8c1d4eb6be50d080fec52417c4655d9512f82545
[scilab.git] / scilab / modules / action_binding / sci_gateway / cpp / sci_notify.cpp
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2009 - DIGITEO - Vincent COUVERT
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 "Signal.hxx"
14 #include "GiwsException.hxx"
15
16 extern "C"
17 {
18 #include "gw_action_binding.h"
19 #include "api_scilab.h"
20 #include "localization.h"
21 #include "Scierror.h"
22 #include "MALLOC.h"
23 #include "freeArrayOfString.h"
24 #include "getScilabJavaVM.h"
25 }
26 /*--------------------------------------------------------------------------*/
27 using namespace org_scilab_modules_action_binding_utils;
28
29 /*--------------------------------------------------------------------------*/
30 int sci_notify(char *fname, unsigned long fname_len)
31 {
32     CheckRhs(1, 1);
33     CheckLhs(0, 1);
34
35     int m1 = 0, n1 = 0;
36     int *piAddressVarOne = NULL;
37     char **pStVarOne = NULL;
38     int *lenStVarOne = NULL;
39     int iType = 0;
40     SciErr sciErr;
41
42     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
43     if (sciErr.iErr)
44     {
45         printError(&sciErr, 0);
46         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
47         return 0;
48     }
49
50     sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
51     if (sciErr.iErr)
52     {
53         printError(&sciErr, 0);
54         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
55         return 0;
56     }
57
58     if (iType != sci_strings)
59     {
60         Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
61         return 0;
62     }
63
64     /* get dimensions */
65     sciErr = getMatrixOfString(pvApiCtx, piAddressVarOne, &m1, &n1, lenStVarOne, pStVarOne);
66     if (sciErr.iErr)
67     {
68         printError(&sciErr, 0);
69         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
70         return 0;
71     }
72
73     if (m1 * n1 != 1)
74     {
75         Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
76         return 0;
77     }
78
79     lenStVarOne = (int *)MALLOC(sizeof(int));
80     if (lenStVarOne == NULL)
81     {
82         Scierror(999, _("%s: No more memory.\n"), fname);
83         return 0;
84     }
85
86     /* get lengths */
87     sciErr = getMatrixOfString(pvApiCtx, piAddressVarOne, &m1, &n1, lenStVarOne, pStVarOne);
88     if (sciErr.iErr)
89     {
90         printError(&sciErr, 0);
91         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
92         return 0;
93     }
94
95     pStVarOne = (char **)MALLOC(sizeof(char *));
96     if (pStVarOne == NULL)
97     {
98         Scierror(999, _("%s: No more memory.\n"), fname);
99         return 0;
100     }
101
102     pStVarOne[0] = (char *)MALLOC(sizeof(char *) * (lenStVarOne[0] + 1));
103
104     /* get strings */
105     sciErr = getMatrixOfString(pvApiCtx, piAddressVarOne, &m1, &n1, lenStVarOne, pStVarOne);
106     if (sciErr.iErr)
107     {
108         printError(&sciErr, 0);
109         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
110         return 0;
111     }
112
113     try
114     {
115         Signal::notify(getScilabJavaVM(), pStVarOne[0]);
116     }
117     catch (const GiwsException::JniException & e)
118     {
119         Scierror(999, _("%s: A Java exception arisen:\n%s"), fname, e.whatStr().c_str());
120         return 0;
121     }
122
123     freeArrayOfString(pStVarOne, 1);
124
125     LhsVar(1) = 0;
126     PutLhsVar();
127     return 0;
128 }
129
130 /*--------------------------------------------------------------------------*/