fix Windows compilation after scicos commits
[scilab.git] / scilab / modules / scicos / sci_gateway / cpp / sci_getblocklabel.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2015 - Scilab Enterprises - Paul Bignier
4  *  Copyright (C) INRIA - METALAU Project <scicos@inria.fr>
5  *
6  *  This file must be used under the terms of the CeCILL.
7  *  This source file is licensed as described in the file COPYING, which
8  *  you should have received as part of this distribution.  The terms
9  *  are also available at
10  *  http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
11  *
12  */
13
14 #include <string>
15
16 #include "gw_scicos.hxx"
17
18 #include "types.hxx"
19 #include "internal.hxx"
20 #include "double.hxx"
21 #include "string.hxx"
22 #include "function.hxx"
23
24 extern "C"
25 {
26 #include "machine.h" /* C2F */
27 #include "import.h" /* getscilabel() */
28 #include "scicos-def.h"
29
30 #include "localization.h"
31 #include "Scierror.h"
32
33     /*--------------------------------------------------------------------------*/
34     // Variable defined in scicos.c
35     extern CURBLK_struct C2F(curblk);
36     /*--------------------------------------------------------------------------*/
37 }
38
39 static const std::string funname = "getblocklabel";
40
41 types::Function::ReturnValue sci_getblocklabel(types::typed_list &in, int _iRetCount, types::typed_list &out)
42 {
43     if (in.size() > 1)
44     {
45         Scierror(77, _("%s: Wrong number of input argument(s): %d to %d expected.\n"), funname.data(), 0, 1);
46         return types::Function::Error;
47     }
48
49     if (_iRetCount > 1)
50     {
51         Scierror(78, _("%s: Wrong number of output argument(s): %d expected.\n"), funname.data(), 1);
52         return types::Function::Error;
53     }
54
55     // Pick the current simulation block if the user didn't pass a block number
56     int blockNumber;
57     if (in.size() == 0)
58     {
59         blockNumber = C2F(curblk).kfun;
60     }
61     else
62     {
63         if (!in[0]->isDouble())
64         {
65             Scierror(999, _("%s: Wrong type for input argument #%d : A real matrix expected.\n"), funname.data(), 1);
66             return types::Function::Error;
67         }
68         types::Double* BlockNumber = in[0]->getAs<types::Double>();
69         if (BlockNumber->isComplex())
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
75         if (!BlockNumber->isScalar())
76         {
77             Scierror(999, _("%s: Wrong size for input argument #%d : A scalar expected.\n"), funname.data(), 1);
78             return types::Function::Error;
79         }
80         blockNumber = static_cast<int>(BlockNumber->get(0));
81     }
82
83     int labelSize;
84     char label[100];
85     int ierr = getscilabel(&blockNumber, label, &labelSize);
86     if (ierr != 0)
87     {
88         Scierror(999, _("%s: scicosim is not running.\n"), funname.data());
89         delete[] label;
90         return types::Function::Error;
91     }
92     label[labelSize] = '\0';
93
94     types::String* Label = new types::String(label);
95
96     out.push_back(Label);
97     return types::Function::OK;
98 }