* Bug #12527 fixed - Scilab user functions were not listed in browsevar.
[scilab.git] / scilab / modules / string / sci_gateway / c / sci_isnum.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - 2012 - INRIA - Allan CORNET
4  * Copyright (C) 2011 - INRIA - Michael Baudin
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-en.txt
11  *
12  * This code is also published under the GPL v3 license.
13  *
14  */
15
16 #include "api_scilab.h"
17 #include "localization.h"
18 #include "Scierror.h"
19 #include "isnum.h"
20 #include "MALLOC.h"
21
22 // =============================================================================
23 int sci_isnum(char *fname, unsigned long fname_len)
24 {
25     SciErr sciErr;
26     int *piAddressVarOne = NULL;
27     int mOne = 0, nOne = 0;
28     char **pStrs = NULL;
29     BOOL *bRESULT = NULL;
30
31     CheckRhs(1, 1);
32     CheckLhs(0, 1);
33
34     if (strcmp(fname, "csvIsnum") == 0)
35     {
36         if (getWarningMode())
37         {
38             sciprint(_("%s: Feature %s is obsolete.\n"), _("Warning"), fname);
39             sciprint(_("%s: Please use %s instead.\n"), _("Warning"), "isnum");
40             sciprint(_("%s: This feature will be permanently removed in Scilab %s\n\n"), _("Warning"), "6.0.0");
41         }
42     }
43
44     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
45     if (sciErr.iErr)
46     {
47         printError(&sciErr, 0);
48         return 0;
49     }
50
51     if (!isStringType(pvApiCtx, piAddressVarOne))
52     {
53         Scierror(999, _("%s: Wrong type for input argument #%d: A matrix of string expected.\n"), fname, 1);
54         return 0;
55     }
56
57     if (getAllocatedMatrixOfString(pvApiCtx, piAddressVarOne, &mOne, &nOne, &pStrs) != 0)
58     {
59         Scierror(999, _("%s: No more memory.\n"), fname);
60         return 0;
61     }
62
63     bRESULT = isNumMatrix((const char**)pStrs, mOne, nOne);
64
65     freeAllocatedMatrixOfString(mOne, nOne, pStrs);
66     pStrs = NULL;
67
68     if (bRESULT == NULL)
69     {
70         Scierror(999, _("%s: No more memory.\n"), fname);
71         return 0;
72     }
73
74     sciErr = createMatrixOfBoolean(pvApiCtx, Rhs + 1, mOne, nOne, (const int*)bRESULT);
75     FREE(bRESULT);
76     bRESULT = NULL;
77
78     if (sciErr.iErr)
79     {
80         printError(&sciErr, 0);
81         return 0;
82     }
83
84     LhsVar(1) = Rhs + 1;
85     PutLhsVar();
86     return 0;
87 }
88 // =============================================================================