* Bugs 16567 16586 fixed: mfile2sci() supports block %{..%}. Appended comments improved"
[scilab.git] / scilab / modules / m2sci / macros / kernel / changevarname.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2004-2006 - INRIA - Farid BELAHCENE
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 function changevarname(fun,oldname,newname)
14     // This function replaces the variable (named oldname) of a file by a new name (which is newname). It uses the old2newinstr function
15     // INPUTS:
16     // -fun: a string, the name (with the whole path) of the modifed file
17     // -oldname: a string, the old name of the variable
18     // -newname: a string, the new name of the variable after modification
19
20     sep=filesep();
21
22     sep_ind=strindex(fun,sep);
23     dot_ind=strindex(fun,".");
24
25     // funname is the function name (without the path and the extension)
26     funname=part(fun,sep_ind($)+1:dot_ind($)-1);
27
28     if sep_ind<>[]
29         funsave=part(fun,1:sep_ind($))+"save_"+part(fun,sep_ind($)+1:dot_ind($)-1)+".sci";
30     else
31         funsave="save_"+part(fun,sep_ind($)+1:dot_ind($)-1)+".sci";
32     end
33
34     // Compilation
35     exec(fun);
36     var=who("get");
37     indvar=find(var==funname);
38     funvect=var(indvar(1):-1:1);
39     txt=mgetl(fun);
40     mputl(txt,funsave);
41
42     txt=[]
43     for j=1:size(funvect,1)
44         //Get the tree of the function
45         execstr("tree=macr2tree("+funvect(j)+")");
46         // Change oldname into newname in the tree
47         if tree.name==oldname then
48             tree.name=newname;
49         end
50         for i=1:size(tree.inputs)
51             tree.inputs(i)=old2newinstr(tree.inputs(i),oldname,newname);
52         end
53         for i=1:size(tree.outputs)
54             tree.outputs(i)=old2newinstr(tree.outputs(i),oldname,newname);
55         end
56         for i=1:size(tree.statements)
57             tree.statements(i)=old2newinstr(tree.statements(i),oldname,newname);
58         end
59
60         // Get the matching code of the tree after modification
61         txt=[txt; tree2code(tree,%T)];
62     end
63
64     // Replace the old code by the new code (which is txt) in the file fun
65     mputl(txt,fun);
66 endfunction