cosmetic, rename functions
[scilab.git] / scilab / modules / functions / sci_gateway / cpp / sci_whereis.cpp
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2009 - DIGITEO - Allan CORNET
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-en.txt
10 *
11 */
12 /*--------------------------------------------------------------------------*/
13
14 #include "functions_gw.hxx"
15 #include "context.hxx"
16 #include "string.hxx"
17
18 extern "C" {
19 #include "Scierror.h"
20 #include "localization.h"
21 }
22
23 /*--------------------------------------------------------------------------*/
24
25 using namespace types;
26
27 Function::ReturnValue sci_whereis(types::typed_list &in, int _iRetCount, types::typed_list &out)
28 {
29     InternalType *pIT = NULL;
30     wstring stModule;
31
32     /* Check the number of input argument */
33     if (in.size() != 1)
34     {
35         Scierror(999, _("%s: Wrong number of input argument(s): %d expected.\n"), "whereis", 1);
36         return Function::Error;
37     }
38
39     /* Check the number of output argument */
40     if (_iRetCount != 1)
41     {
42         Scierror(999, _("%s: Wrong number of output argument(s): %d expected.\n"), "whereis", 1);
43         return Function::Error;
44     }
45
46     if (in[0]->isString())
47     {
48         types::String* pS = in[0]->getAs<types::String>();
49
50         if (pS->getSize() != 1)
51         {
52             Scierror(999, _("%s: Wrong type for input argument #%d: A String expected.\n"), "whereis", 1);
53             return Function::Error;
54         }
55
56         ;
57         pIT = symbol::Context::getInstance()->getFunction(symbol::Symbol(pS->get(0)));
58         if (pIT == NULL)
59         {
60             out.push_back(types::Double::Empty());
61             return Function::OK;
62         }
63     }
64     else
65     {
66         pIT = in[0];
67     }
68
69     switch (pIT->getType())
70     {
71         case InternalType::RealFunction :
72         case InternalType::RealMacro :
73         case InternalType::RealMacroFile :
74             stModule = pIT->getAs<Callable>()->getModule();
75             break;
76         default :
77             out.push_back(types::Double::Empty());
78             return Function::OK;
79     }
80
81     out.push_back(new types::String(stModule.c_str()));
82     return Function::OK;
83 }
84 /*--------------------------------------------------------------------------*/