a50dd0cba35b065b7b463c192824da0d71fcf764
[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(msg);
50         x = mscanf(fmt);
51
52         currentpromptAfter = prompt();
53         // bug 5513
54         // we had change prompt during exec of input
55         // we recall input
56         if (currentpromptAfter <> currentprompt) then
57             x = input(msg, flag);
58         end
59
60     else
61         while %t
62             prompt(msg);
63             x = mscanf(fmt);
64
65             currentpromptAfter = prompt();
66             // bug 5513
67             // we had change prompt during exec of input
68             // we recall input
69             if (currentpromptAfter <> currentprompt) then
70                 x = string(input(msg));
71             end
72
73             if (length(x) == 0) | (x == " ") then
74                 x = "[]";
75             end
76             ierr = execstr("x=" + x,"errcatch");
77             if ierr == 0 then
78                 break;
79             end
80             mprintf(strcat(lasterror(),"\n"));
81         end
82
83     end
84     prompt(currentprompt);
85 endfunction