GPL + CeCILL Header change
[scilab.git] / scilab / modules / console / sci_gateway / cpp / sci_prompt.cpp
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2011 - DIGITEO - 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  * === LICENSE_END ===
14 *
15 */
16 /*--------------------------------------------------------------------------*/
17
18 #include "console_gw.hxx"
19 #include "function.hxx"
20 #include "double.hxx"
21 #include "string.hxx"
22 #include "configvariable.hxx"
23
24 extern "C"
25 {
26 #include "localization.h"
27 #include "Scierror.h"
28 #include "prompt.h"
29 }
30 /*--------------------------------------------------------------------------*/
31
32 types::Function::ReturnValue sci_prompt(types::typed_list &in, int _iRetCount, types::typed_list &out)
33 {
34     char currentPrompt[PROMPT_SIZE_MAX];
35
36     if (in.size() > 1)
37     {
38         Scierror(999, _("%s: Wrong number of input argument(s): %d to %d expected.\n"), "prompt", 0, 1);
39         return types::Function::Error;
40     }
41
42     if (in.size() == 0) /* Get current Scilab prompt */
43     {
44         if (_iRetCount > 2)
45         {
46             Scierror(999, _("%s: Wrong number of output argument(s): %d to %d expected.\n"), "prompt", 1, 2);
47             return types::Function::Error;
48         }
49
50         GetCurrentPrompt(currentPrompt);
51         out.push_back(new types::String(currentPrompt));
52         if (_iRetCount == 2)
53         {
54             types::Double* pDbl = new types::Double(1, 1);
55             pDbl->set(0, ConfigVariable::getPauseLevel());
56             out.push_back(pDbl);
57         }
58     }
59     else //if(in.size() == 1)
60     {
61         if (_iRetCount > 1)
62         {
63             Scierror(999, _("%s: Wrong number of output argument(s): %d expected.\n"), "prompt", 1);
64             return types::Function::Error;
65         }
66
67         if ((in[0]->isString() == false) || !in[0]->getAs<types::String>()->isScalar())
68         {
69             Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), "prompt", 1);
70             return types::Function::Error;
71         }
72         SetTemporaryPrompt(wide_string_to_UTF8(in[0]->getAs<types::String>()->get(0)));
73     }
74
75     return types::Function::OK;
76 }
77 /*--------------------------------------------------------------------------*/