* Bug #14375 fixed - Calling input function with a argument of 64 characters or more...
[scilab.git] / scilab / modules / io / macros / input.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) XXXX-2008 - INRIA
3 // Copyright (C) 2009-2010 - DIGITEO - Allan CORNET
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 function [x] = input(msg, flag)
16
17     [lhs,rhs] = argn(0);
18
19     if rhs <> 1 & rhs <> 2 then
20         error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"), "input", 1, 2));
21     end
22
23     if type(msg) <> 10 then
24         error(msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"),"input",1));
25     end
26
27     if size(msg, "*") <> 1 then
28         error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"input",1));
29     end
30
31     // a tricky way to get all ascii codes  sequences
32     fmt = "%[" + ascii(32) + "-" + ascii(254) + "]";
33
34     currentprompt = prompt();
35
36     if argn(2) == 2 then
37         if type(flag) <> 10 then
38             error(msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"),"input",2));
39         end
40
41         if size(flag, "*") <> 1 then
42             error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"input",2));
43         end
44
45         if (flag <> "s" & flag <> "string") then
46             error(msprintf(gettext("%s: Wrong value for input argument #%d: ''%s'' value expected.\n"),"input",2,"string"));
47         end
48
49         prompt("");
50         mprintf(msg);
51         x = mscanf(fmt);
52
53         currentpromptAfter = prompt();
54         // bug 5513
55         // we had change prompt during exec of input
56         // we recall input
57         if (currentpromptAfter <> currentprompt) then
58             x = input(msg, flag);
59         end
60
61     else
62         while %t
63             prompt("");
64             mprintf(msg);
65             x = mscanf(fmt);
66
67             currentpromptAfter = prompt();
68             // bug 5513
69             // we had change prompt during exec of input
70             // we recall input
71             if (currentpromptAfter <> currentprompt) then
72                 x = string(input(msg));
73             end
74
75             if (length(x) == 0) | (x == " ") then
76                 x = "[]";
77             end
78             ierr = execstr("x=" + x,"errcatch");
79             if ierr == 0 then
80                 break;
81             end
82             mprintf(strcat(lasterror(),"\n"));
83         end
84
85     end
86     prompt(currentprompt);
87 endfunction