07d5b5d94d3334c1847bfb01c463824f101d9c25
[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 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10
11 function [%val,%ierr]=evstr(%str)
12
13   [lhs,rhs]=argn(0)
14   %val=[]
15   select type(%str)
16    case 10 then // matrix of character strings
17     for %l=1:size(%str,'r')
18       %t1(%l)=strcat(%str(%l,:),',')+';'
19     end
20     %t1(1)='%val=['+%t1(1);
21     %t1($)=part(%t1($),1:length(%t1($))-1)+']'
22     if lhs==2 then
23       %ierr=execstr(%t1,'errcatch')
24     else
25       execstr(%t1)
26     end
27    case 15 then // list
28     %sexp=%str(2),
29     %nstr=prod(size(%sexp)); %=list();
30     if lhs==2 then
31       for %k=1:%nstr,
32         [%w,%ierr]=evstr(%sexp(%k)),
33         %(%k)=%w
34         if %ierr<>0 then %val=[];return;end
35       end,
36       [%val,%ierr]=evstr(%str(1))
37     else
38       for %k=1:%nstr, %(%k)=evstr(%sexp(%k)),end,
39       %val=evstr(%str(1))
40     end
41    case 1 then // real or complex constant matrix
42     %val=%str
43     %ierr=0
44   else
45     error(msprintf(gettext("%s: Wrong type for input argument #%d: Real or Complex matrix, Matrix of character strings or list expected.\n"),"evstr",1));
46   end
47   if exists('%val','local')==0 then
48     error(msprintf(gettext("%s: Given expression has no value.\n"),"evstr"));
49   end
50 endfunction