Code covered by the BSD License  

Highlights from
matlab2fmex

image thumbnail

matlab2fmex

by

 

03 Feb 2004 (Updated )

matlab2fmex.m is a small translator which aims to convert numerical M-files to Fortran90 mex.

Editor's Notes:

This author's upload was somehow corrupted. We fixed this on March 29, 2006. At that time, we also converted it from a GZ file a ZIP file for better cross platform portability.

out=matlab2fmex_save(callstr)
function out=matlab2fmex_save(callstr)
%function out=matlab2fmex_savews(callstr)
%This will create a temporary file which will save the 
%  workspace of the requested function at the line 
%  %matlab2femx_save
% Before saving the workspace, the script [funname,'_save.m'] where funname is the name of the function to be converted will be run. See the README for more details.

[funstr,funstrwords,funstrwords_b,funstrwords_e,funstrnumbers,funstrnumbers_b,funstrnumbers_e,s]=updatefunstr_full({callstr});
temp1=findstr(callstr,'=');
if isempty(temp1), temp1=funstrwords_b{1}(1)-1; end
start=find(funstrwords_b{1}>temp1);
start=start(1);

r=char(10);
funname=funstrwords{1}{start};
filename=[funname,'.m'];
if exist(filename)==2
 fid=fopen(filename); filestr=fscanf(fid,'%c'); fclose(fid);
 filestr=[filestr,r];
 rets=findstr(filestr,r);
 temp1='matlab2fmex_save';
 temp2=findstr(filestr,temp1);
 if isempty(temp2)
  insloc=length(filestr);
 else
  temp3=rets(rets>temp2);
  insloc=temp3(1);
 end
 extra=[];
 if exist([funname,'_save.m'])==2
  fid=fopen([funname,'_save.m']); extra=fscanf(fid,'%c'); fclose(fid);
 end
 out=[filestr(1:insloc),extra,r,'save ',funname,r,'return',r,filestr(insloc:end)];
 fid=fopen([funname,'_m2ftemp.m'],'w'); fprintf(fid,'%c',out); fclose(fid);
 rehash
 evalin('caller',[funstr{1}(1:funstrwords_b{1}(start)-1),funname,'_m2ftemp',funstr{1}(funstrwords_b{1}(start)+length(funname):end)]);
 if isunix
  unix(['rm -f ',funname,'_m2ftemp.m']);
 else
  dos(['del ',funname,'_m2ftemp.m']);
 end
else
 error(['I can''t find the file ',filename,'...']);
end

Contact us