1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function H = readIBWbinheader(FFN);
% readIBWbinheader - read BinHeader segment of Igor IBW file
%  H = readIBWbinheader('foo') reads BinHeader of file Foo.ibw
%   IBW version 2,5 only
MAXDIMS = 4;

fid = fopen(FFN,'r');
H.version = fread(fid,1,'int16');
switch H.version,
    case 2,   %    typedef struct BinHeader2 {
        H.wfmSize = fread(fid,1,'uint32'); %  long wfmSize;      // The size of the WaveHeader2 data structure plus the wave data plus 16 bytes of padding.
        H.noteSize = fread(fid,1,'uint32'); %  long noteSize;      // The size of the note text.
        H.pictSize = fread(fid,1,'uint32'); %  long pictSize;      // Reserved. Write zero. Ignore on read.
        H.checksum = fread(fid,1,'int16'); %  short checksum;      // Checksum over this header and the wave header.
    case 5,
        H.checksum = fread(fid,1,'short');
        H.wfmSize =  fread(fid,1,'long'); % The size of the WaveHeader5 data structure plus the wave data.
        H.formulaSize =  fread(fid,1,'long');   % The size of the dependency formula, if any.
        H.noteSize =  fread(fid,1,'long');   % The size of the note text.
        H.dataEUnitsSize =  fread(fid,1,'long');  % The size of optional extended data units.
        H.dimEUnitsSize =  fread(fid,MAXDIMS,'long');  % The size of optional extended dimension units.
        H.dimLabelsSize =  fread(fid,MAXDIMS,'long'); % The size of optional dimension labels.
        H.sIndicesSize =  fread(fid,1,'long'); ;     % The size of string indicies if this is a text wave.
        H.optionsSize1 =  fread(fid,1,'long'); ;     % Reserved. Write zero. Ignore on read.
        H.optionsSize2 =  fread(fid,1,'long'); ;     % Reserved. Write zero. Ignore on read.
    otherwise,
end % switch H.Version
fclose(fid);

if ~ismember(H.version,[2 5]),
    error(['Cannot read version ' num2str(H.version) ' IBW files - only versions 2,5 are okay.']);
end
%==FROM IgorBin.h =====================
%  #define MAXDIMS 4
%
% typedef struct BinHeader5 {
%  short version;      // Version number for backwards compatibility.
%  short checksum;      // Checksum over this header and the wave header.
%  long wfmSize;      // The size of the WaveHeader5 data structure plus the wave data.
%  long formulaSize;     // The size of the dependency formula, if any.
%  long noteSize;      // The size of the note text.
%  long dataEUnitsSize;    // The size of optional extended data units.
%  long dimEUnitsSize[MAXDIMS];  // The size of optional extended dimension units.
%  long dimLabelsSize[MAXDIMS];  // The size of optional dimension labels.
%  long sIndicesSize;     // The size of string indicies if this is a text wave.
%  long optionsSize1;     // Reserved. Write zero. Ignore on read.
%  long optionsSize2;     // Reserved. Write zero. Ignore on read.
% } BinHeader5;