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.

[outflag,howmany,subscripts,centercomma,parens]=inbracket(i,spot,funstr);
function [outflag,howmany,subscripts,centercomma,parens]=inbracket(i,spot,funstr);

outflag=0;
temp=findstr(funstr{i},'[');
temp1=findstr(funstr{i},']');
if length(temp(temp<spot))>length(temp1(temp1<spot))
 outflag=1;
end
howmany=0;subscripts=[];centercomma=[];parens=zeros(1,2);
if outflag
 if funstr{i}(spot)=='[', temp3=1; else temp3=0; end
 found=0;
 leftbracket=funstr{i}=='[';
 rightbracket=funstr{i}==']';
 both_b=leftbracket-rightbracket;   c_b=cumsum(both_b);
 poss=leftbracket&(c_b==(c_b(spot)-temp3));
 poss_loc=find(poss);
 poss_loc=poss_loc(poss_loc<spot);
 try
 parens(1)=poss_loc(end);
 catch
  poss_loc,kb
 end
 parens(2)=findrights(parens(1),funstr{i});
 tempstr=funstr{i};
 tempstr(1:parens(1))='0';
 tempstr(parens(2):end)='0';
 leftp=tempstr=='(';
 rightp=tempstr==')';
 both_p=leftp-rightp;                 c_p=cumsum(both_p);
 
 temp=length(findstr(':',funstr{i}(parens(1):parens(2))));
 if temp==0
  howmany=1;
  subscripts{1}=funstr{i}(parens(1)+1:parens(2)-1);
 elseif temp>0
  centercomma=findstr(':',funstr{i});
  centercomma=centercomma(((centercomma<parens(2))&(centercomma>parens(1))));
  found=1;  cc2=[];
  for k=1:length(centercomma)
   %Make sure we are not in any parenthesis group or any other bracket group
   if ((c_b(centercomma(k))==c_b(parens(1)))&(c_p(centercomma(k))==0))
    cc2(found)=centercomma(k);
    found=found+1;
   end
  end
  centercomma=cc2;
  howmany=length(centercomma)+1;
  if howmany==1
   subscripts{1}=funstr{i}(parens(1)+1:parens(2)-1);
  elseif howmany==2
   subscripts{1}=funstr{i}(parens(1)+1:centercomma(1)-1);
   subscripts{2}=funstr{i}(centercomma(1)+1:parens(2)-1);
  elseif howmany==3
   subscripts{1}=funstr{i}(parens(1)+1:centercomma(1)-1);
   subscripts{2}=funstr{i}(centercomma(1)+1:centercomma(2)-1);
   subscripts{3}=funstr{i}(centercomma(2)+1:parens(2)-1);
  end
 end
end

Contact us