GPL + CeCILL Header change
[scilab.git] / scilab / modules / string / macros / evstr.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // Copyright (C) DIGITEO - 2010 - 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 // === LICENSE_END ===
14
15
16 function [%val, %ierr] = evstr(%str)
17
18     [lhs, rhs] = argn(0);
19     %val = [];
20     select type(%str)
21
22     case 10 then
23         // matrix of character strings
24         if isempty(%str) then
25             %val = [];
26             %ierr =  0;
27             return;
28         end
29
30         // bug 7003
31         if ~isdef("Nan") then
32             Nan = %nan;
33         end
34         if ~isdef("NaN") then
35             NaN = %nan;
36         end
37
38         if ~isdef("Inf") then
39             Inf = %inf;
40         end
41
42         if ~isdef("INF") then
43             INF = %inf;
44         end
45
46         for %l = 1:size(%str, "r")
47             %t1(%l) = strcat(%str(%l, :), ",") + ";"
48         end
49         %t1(1) = "%val=[" + %t1(1);
50         %t1($) = part(%t1($), 1:length(%t1($)) - 1)+";";
51         %t1($+1)="]";
52         if lhs == 2 then
53             %ierr = execstr(%t1, "errcatch");
54         else
55             execstr(%t1)
56         end
57
58     case 15 then
59         // list
60         %sexp = %str(2),
61         %nstr = prod(size(%sexp));
62         % = list();
63         if lhs == 2 then
64             for %k_ = 1:%nstr,
65                 [%w, %ierr] = evstr(%sexp(%k_));
66                 %(%k_) = %w;
67                 if %ierr <>0  then
68                     %val = [];
69                     return;
70                 end
71             end
72             [%val, %ierr] = evstr(%str(1));
73         else
74             for %k_ = 1:%nstr,
75                 %(%k_) = evstr(%sexp(%k_));
76             end
77             %val = evstr(%str(1))
78         end
79
80     case 1 then
81         // real or complex constant matrix
82         %val = %str;
83         %ierr = 0;
84     else
85         error(msprintf(gettext("%s: Wrong type for input argument #%d: Real or Complex matrix, Matrix of character strings or list expected.\n"), "evstr", 1));
86     end
87     if exists("%val", "local") == 0 then
88         error(msprintf(gettext("%s: Given expression has no value.\n"), "evstr"));
89     end
90 endfunction