Xcos tests: fix computational_functions, cumsum, error_reporting_nw, model2blk, bug_1...
[scilab.git] / scilab / modules / scicos / macros / scicos_scicos / script2var.sci
1 //  Scicos
2 //
3 //  Copyright (C) INRIA - METALAU Project <scicos@inria.fr>
4 //  Copyright (C) 2011 - INRIA - Serge Steer
5
6 //
7 // This program is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 2 of the License, or
10 // (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 //
21 // See the file ../license.txt
22 //
23
24 function [%ll,%ierr] = script2var(%txt, %ll)
25     //** [%scicos_context, ierr] = script2var(context, %scicos_context)
26     //** context is the scs_m.props.context (string array) associated with the current level
27     //** %scicos_context  is a struct containing the values defined by the
28     //    calling contexts
29     //**
30     //** 10 Jan 2006
31     //local variable names are prefixed with a %  to limit conflicts with
32     //variables  defined in %txt instructions
33     %ierr = 0 ; //** init
34
35     //next lines checks if variable defined in %ll struct can be evaluated
36     //why ???
37     %mm = fieldnames(%ll)';
38     for %mi=%mm
39         if execstr(%mi+"=%ll(%mi)","errcatch")<>0 then
40             mprintf("%s\n",lasterror())
41             %ierr=1
42             return
43         end
44     end
45     [%ll,%ierr] = getvardef(%txt,%ll)
46     if %ierr<>0 then return, end
47 endfunction
48
49 //**--------------------------------------------------------------------------
50 function [%ll,%ierr]=getvardef(%txt,%ll)
51     //extend and modify the %scicos_context variable (%ll) with the variable
52     //defined in the current level scs_m.props.context (%txt) instructions
53
54     //local variable names are prefixed with a %  to limit conflicts with
55     //variables  defined in %txt instructions
56
57     %ierr = 0;  // to make sure %ierr does not enter the difference
58     if isempty(%txt) then return,end
59
60     %ierr = execstr(%txt,"errcatch");
61     if %ierr<>0 then mprintf("%s\n",lasterror()), return,end
62
63     // Use macrovar to extract the variable names present in %txt:
64     // listvar(3) contains the names already present in the context (case Superblock's context overlapping main diagram's one)
65     // listvar(5) contains the new variables (main diagram's context)
66     deff("foo()", %txt);
67     listvar = macrovar(foo);
68     %mm = [listvar(3); listvar(5)];
69
70     for %mi=%mm'
71         if %mi=="scs_m" then
72             mprintf(_("The variable name %s cannot be used as block parameter: ignored"),"scs_m");
73             continue
74         elseif %mi=="ans" then
75             continue
76         end
77
78         clear %v
79         %v=evstr(%mi);
80
81         if typeof(%v)=="scs_m" then
82             mprintf(_("The variable name %s cannot be used as block parameter: ignored"),"scs_m")
83             continue
84         elseif or(type(%v)==[11 13 14]) then
85             continue
86         end
87
88         %ll(%mi)=%v;
89         clear %v
90     end
91 endfunction
92