xref: /petsc/share/petsc/matlab/PetscReadBinaryMatlab.m (revision ecceeb7d86a3b9d2c0da2aced471d46acf67b452)
1function Set = PetscReadBinaryMatlab(filename)
2% PETSCREADBINARYMATLAB - Reads and interprets MATLAB specific lines
3%   from the .info files produced by PetscViewerBinaryMatlab
4%
5%   Input filename can be the name of the binary file with or without
6%   the .info suffix
7%
8%   This function returns a single struct containing all objects submitted
9%   to the PetscViewerBinaryMatlab viewer.
10
11  matlabHeader = ['%$$ '; '#$$ ']; % string that marks a MATLAB line for evaluation (could be passed)
12  matlabHeaderLen = size(matlabHeader,2);
13
14  if (isempty(strfind(filename,'.info')))
15     filename = [filename,'.info'];
16  end
17  fid=fopen(filename,'r');
18  if (fid == -1)
19     error(sprintf('PetscReadBinaryMatlab: cannot load file %s',filename))
20  end
21  str=fgets(fid);
22  while (ischar(str))
23
24     % check for output lines that start matlabHeader
25     if strncmp(str,matlabHeader(1,:),matlabHeaderLen) || strncmp(str,matlabHeader(2,:),matlabHeaderLen)
26	 str = str(1+matlabHeaderLen:end);
27
28     	 % check for old-style file open/close commands
29	 if strfind(str,'fopen(Set.filename')
30	    str = 'fd = PetscOpenFile(Set.filename);';
31	 elseif strfind(str,'if (fd < 0) error'); % ignore this line
32	    str = '%';
33	 elseif strfind(str,'fclose(fd)');
34	    str = 'close(fd);';
35	 end
36
37	 eval(str);
38     end
39     str=fgets(fid);
40  end
41  fclose(fid);
42  return
43