fix Windows compilation after scicos commits
[scilab.git] / scilab / modules / scicos / sci_gateway / cpp / sci_set_blockerror.cpp
1 /*  Scicos
2 *
3 *  Copyright (C) 2015 - Scilab Enterprises - Paul Bignier
4 *  Copyright (C) INRIA - Allan CORNET
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 *
20 * See the file ./license.txt
21 */
22
23 #include <string>
24 #include <cmath>
25
26 #include "gw_scicos.hxx"
27
28 #include "types.hxx"
29 #include "double.hxx"
30 #include "function.hxx"
31
32 extern "C"
33 {
34 #include "machine.h" /* C2F */
35 #include "scicos.h" /* set_block_error() */
36 #include "scicos-def.h"
37
38 #include "localization.h"
39 #include "Scierror.h"
40     /*--------------------------------------------------------------------------*/
41     // Variable defined in sci_scicosim.cpp
42     extern COSIM_struct C2F(cosim);
43     /*--------------------------------------------------------------------------*/
44 }
45
46 static const std::string funname = "set_blockerror";
47
48 types::Function::ReturnValue sci_set_blockerror(types::typed_list &in, int _iRetCount, types::typed_list &out)
49 {
50     if (in.size() != 1)
51     {
52         Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), funname.c_str(), 1);
53         return types::Function::Error;
54     }
55
56     if (_iRetCount != 1)
57     {
58         Scierror(78, _("%s: Wrong number of output arguments: %d expected.\n"), funname.c_str(), 1);
59         return types::Function::Error;
60     }
61
62     int isrun = C2F(cosim).isrun;
63     if (!isrun)
64     {
65         Scierror(999, _("%s: scicosim is not running.\n"), funname.c_str());
66         return types::Function::Error;
67     }
68
69     if (!in[0]->isDouble())
70     {
71         Scierror(999, _("%s: Wrong type for input argument #%d : A real matrix expected.\n"), funname.data(), 1);
72         return types::Function::Error;
73     }
74     types::Double* pIn = in[0]->getAs<types::Double>();
75
76     if (!pIn->isScalar())
77     {
78         Scierror(999, _("%s: Wrong size for input argument #%d : A real scalar expected.\n"), funname.data(), 1);
79         return types::Function::Error;
80     }
81     if (pIn->get(0) != floor(pIn->get(0)))
82     {
83         Scierror(999, _("%s: Wrong value for input argument #%d : An integer value expected.\n"), funname.data(), 1);
84         return types::Function::Error;
85     }
86
87     set_block_error(static_cast<int>(pIn->get(0)));
88
89     return types::Function::OK;
90 }