* Bug 16365 fixed: median(m,'r'|'c') was wrong after 5dc990
[scilab.git] / scilab / modules / string / sci_gateway / cpp / sci_isletter.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) Digiteo 2011 - Cedric DELAMARRE
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16
17 #include "function.hxx"
18 #include "string.hxx"
19 #include "list.hxx"
20 #include "bool.hxx"
21 #include "double.hxx"
22 #include "function.hxx"
23 #include "string_gw.hxx"
24
25 extern "C"
26 {
27 #include "core_math.h"
28 #include "localization.h"
29 #include "Scierror.h"
30 #include "isletter.h"
31 #include "BOOL.h"
32 }
33
34
35 types::Function::ReturnValue sci_isletter(types::typed_list &in, int _iRetCount, types::typed_list &out)
36 {
37     types::Bool* pOutBool   = NULL;
38     types::String* pString  = NULL;
39     int dimsArray[2]        = {1, 0};
40     int dims                = 2;
41     BOOL *values            = NULL;
42
43     if (in.size() != 1)
44     {
45         Scierror(77, _("%s: Wrong number of input argument(s): %d expected.\n"), "isletter", 1);
46         return types::Function::Error;
47     }
48     if (_iRetCount > 1)
49     {
50         Scierror(78, _("%s: Wrong number of output argument(s): %d expected.\n"), "isletter", 1);
51         return types::Function::Error;
52     }
53     if (in[0]->isString() == false)
54     {
55         Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), "isletter", 1);
56         return types::Function::Error;
57     }
58
59     pString = in[0]->getAs<types::String>();
60     if (pString->isScalar() == false)
61     {
62         Scierror(999, _("%s: Wrong size for input argument #%d.\n"), "isletter", 1);
63         return types::Function::Error;
64     }
65     if (pString->getSize() == 0)
66     {
67         out.push_back(types::Double::Empty());
68         return types::Function::OK;
69     }
70
71     values = isletterW(pString->get(0), &dimsArray[1]);
72
73     if (dimsArray[1] > 0)
74     {
75         pOutBool  = new types::Bool(dims, dimsArray);
76         pOutBool->set((int *) values);
77         out.push_back(pOutBool);
78     }
79     else
80     {
81         out.push_back(types::Double::Empty());
82     }
83
84     if (values)
85     {
86         FREE(values);
87     }
88     return types::Function::OK;
89 }
90