m2sci_gui now uses Scilab uicontrols instead of a TK user interface
[scilab.git] / scilab / modules / m2sci / macros / translatepaths.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2002-2004 - INRIA - Vincent COUVERT 
3 // Copyright (C) ???? - INRIA - Serge STEER 
4 // 
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at    
9 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10
11 function   transorder=translatepaths(Paths,res_path)
12 // Perform translation of Matlab M-files to Scilab for all M-files found in Paths
13
14 // Output :
15 //  -transorder : a vector which contains the files names with a determinated order
16 // Input :
17 //  -Paths : a vector of strings (paths of Matlab M-files to translate)
18 //  -res_paths : a string (resolution path of translated files)
19
20 // M2SCI kernel functions called:
21 //  -lst_funcall
22 //  -translateorder
23 //  - mfile2sci
24
25 // Get default arguments
26
27 [lhs,rhs]=argn(0)
28 if rhs<2 then res_path="./",end
29 if rhs<1 then m2sci_gui();transorder=[];return;end
30
31 // Loads libraries related to m2sci
32 if exists("m2skernellib")==0 then load("SCI/modules/m2sci/macros/kernel/lib"),end
33 if exists("m2spercentlib")==0 then load("SCI/modules/m2sci/macros/percent/lib"),end
34 if exists("m2ssci_fileslib")==0 then load("SCI/modules/m2sci/macros/sci_files/lib"),end
35
36 // Convert paths so that they can be used according to the platform
37
38 sep = filesep();
39 if MSDOS then 
40   Paths=strsubst(Paths,'/',sep)
41   res_path=strsubst(res_path,'/',sep)
42 else
43   Paths=strsubst(Paths,'\',sep)
44   res_path=strsubst(res_path,'\',sep)
45 end
46
47 // Close resolution path with a / or a \
48 res_path=stripblanks(res_path)
49 if part(res_path,length(res_path))<>sep then
50   res_path=res_path+sep
51 end
52
53 // Create a logfile and a whatis file
54 Paths=stripblanks(Paths)
55 [tempfd,ierr]=file('open',pathconvert(TMPDIR)+gettext("unitfile.dat"),"old");
56
57 if ierr==0 then
58   load(pathconvert(TMPDIR)+gettext("unitfile.dat"))
59   file('close',whsfil_unit);
60   file('close',tempfd);
61   mdelete(pathconvert(TMPDIR)+gettext("unitfile.dat"))
62 end
63
64 whsfil_unit=file('open',res_path+'whatis','unknown')
65 save(pathconvert(TMPDIR)+gettext("unitfile.dat"),whsfil_unit)
66 // Close paths with a / or a \
67 for k=1:size(Paths,'*')
68   if part(Paths(k),length(Paths(k)))<>sep then 
69     Paths(k)=Paths(k)+sep,
70   end
71 end
72
73 // Find names of files to translate
74 // mfiles is a vector which contains the names (and the paths) of files to translate
75 mfiles=[]
76 for k=1:size(Paths,'*')
77   path=Paths(k)
78   if MSDOS then 
79     mfiles=[mfiles;path + unix_g('dir /b '+ """" + path + """" + '*.m')]
80   else
81     mfiles=[mfiles;unix_g('ls '+ """" + path + """" + '*.m')]
82   end
83 end
84
85 // fnamvect is a vector which contains all M-files names (just the names) found in Paths
86 // filefuncallname is a list of vectors. The first component of each vector is the name of a M-file (found in the Path(s)) to translate, followed by the called functions by this M-file) 
87 fnamvect=[]
88 filefuncallname=list()
89 for k1=1:size(mfiles,1)
90   kk=strindex(mfiles(k1),sep)
91   fnamvect=[fnamvect;part(mfiles(k1),kk($)+1:length(mfiles(k1))-2)]
92 end
93
94 for k1=1:size(mfiles,1)
95     mpath=mfiles(k1)
96 //    disp(gettext("********************lst_funcall**********************"))
97 //   disp(mpath)
98  filefuncallname($+1)=lst_funcall(mpath,fnamvect)
99 end
100
101 // Determination of a translation order for the M-files found in the Paths
102 // transorder is a vector containing the M-files names which are arranged to order to respect an priority order of translation
103 transorder=[]
104 for i=1:size(filefuncallname)
105   execstr(filefuncallname(i)(1)+"vect=filefuncallname(i)")
106 end
107
108 overfunname=[] 
109 for i=1:size(filefuncallname)
110   execstr("transorder=translateorder(transorder,"+filefuncallname(i)(1)+"vect,overfunname)")
111 end
112
113 // funpath is a vector which contains the M-files names (ands their paths) to translate
114 funpath=[]
115 for i=1:size(transorder,1)
116   ind=find(transorder(i)==fnamvect)
117   if ind<>[] then
118     funpath=[funpath;mfiles(ind)]
119   end
120 end   
121
122 // Translation is done only if M-file has changed
123 logtxt=[]
124 resumelogtxt=[]
125
126 for i=1:size(funpath,1)
127   kk=strindex(funpath(i),sep)
128   mpath=funpath(i) 
129   fnam=part(funpath(i),kk($)+1:length(funpath(i))-2)
130   scipath=res_path+fnam+".sci"  
131   scepath=res_path+fnam+".sce"
132
133   if newest(mpath,scipath,scepath)==1 then
134   [fd,ierr]=file('open',pathconvert(TMPDIR)+fnam+".m",'old');
135     if ierr==0 & strindex(mpath,TMPDIR)==[] then
136       mfile2sci(pathconvert(TMPDIR)+fnam+".m",res_path)
137       file('close',fd)
138       mdelete(pathconvert(TMPDIR)+fnam+".m")  
139       rmdir(pathconvert(TMPDIR)+pathconvert(fnam),'s')
140     else
141      mfile2sci(funpath(i),res_path)
142     end
143     
144     tmp_sci_file=pathconvert(TMPDIR)+"tmp_"+fnam+".sci"
145     ierr=execstr("getf(tmp_sci_file)","errcatch");errclear();
146     if ierr==0 & strindex(mpath,TMPDIR)==[] then
147       txt=[]
148       txt=mgetl(scipath)
149       txt=[txt;" ";mgetl(tmp_sci_file)]
150       mputl(txt,scipath) 
151       mdelete(tmp_sci_file)
152     end
153     
154     // LOG
155     tmp_m2sci_file=pathconvert(TMPDIR)+"tmp_m2sci_"+fnam+".log"
156     m2scipath=res_path+"m2sci_"+fnam+".log" 
157     logtxt=[logtxt;" ";" ";mgetl(m2scipath)]
158     mdelete(m2scipath)
159     
160     [fd,ierr]=file('open',tmp_m2sci_file,'old');
161     if ierr==0 & strindex(mpath,TMPDIR)==[] then
162       logtxt=[logtxt;" ";mgetl(tmp_m2sci_file)]
163       file('close',fd)
164       mdelete(tmp_m2sci_file)
165     end
166     
167     // RESUMELOG
168     tmp_resume_m2sci_file=pathconvert(TMPDIR)+"tmp_resume_m2sci_"+fnam+".log"
169     resumem2scipath=res_path+"resume_m2sci_"+fnam+".log" 
170     if fileinfo(resumem2scipath)<>[] then
171       resumelogtxt=[resumelogtxt;" ";" ";mgetl(resumem2scipath)]
172       mdelete(resumem2scipath)
173     end
174     
175     [fd,ierr]=file('open',tmp_resume_m2sci_file,'old');
176     if ierr==0 & strindex(mpath,TMPDIR)==[] then
177       resumelogtxt=[resumelogtxt;" ";mgetl(tmp_resume_m2sci_file)]
178       file('close',fd)
179       mdelete(tmp_resume_m2sci_file)
180     end
181   end
182   mputl(logtxt,res_path+'log')
183   mputl(resumelogtxt,res_path+'resumelog')
184 end
185
186 // File closing
187 file('close',whsfil_unit);
188 mdelete(pathconvert(TMPDIR)+gettext("unitfile.dat"))
189
190 // create builder.sce and loader.sce files
191 // get the directory name where the Scilab functions are written 
192 if res_path=="./" then
193   current_path=pathconvert(unix_g('pwd'))
194   index_slash=strindex(current_path,'/')
195   if size(index_slash,'*')==1 then index_slash=[0 index_slash],end
196   namelib=part(current_path,index_slash($-1)+1:index_slash($)-1)
197 else
198   index_slash=strindex(res_path,'/')
199   if size(index_slash,'*')==1 then index_slash=[0 index_slash],end
200   namelib=part(res_path,index_slash($-1)+1:index_slash($)-1)
201 end
202
203 //builder.sce
204 buildertxt=[]
205 buildertxt($+1)="path=get_absolute_file_path(""builder.sce"")"
206 buildertxt($+1)="genlib("""+namelib+"lib"",path)"
207 builderfile=res_path+"builder.sce"
208 mputl(buildertxt,builderfile)
209 //loader.sce
210 loadertxt=[]
211 loadertxt($+1)="path=get_absolute_file_path(""loader.sce"")"
212 loadertxt($+1)="load(path+"+"""lib"")"
213 loaderfile=res_path+"loader.sce"
214 mputl(loadertxt,loaderfile)
215
216 endfunction