function [f,fvz,u]=load_kralik2(fname,flength,offset,fmt)
% nacitani dat z *.bin nebo *.i16 z mereni kralicich srdci
%
% [f,fvz,u]=load_kralik2(fname); - nacteni celeho souboru
% [f,fvz,u]=load_kralik2(fname,flength); - nacteni daneho poctu vzorku od zacatku souboru
% [f,fvz,u]=load_kralik2(fname,flength,offset); - nacteni daneho poctu vzorku od stanoveneho vzorku
% [f,fvz,u]=load_kralik2(fname,flength,offset,fmt); - moznost prepnout na stary bin
%
% VYSTUPY:
% f ....... nacteny signal
% fvz ..... vzorkovaci frekvence
% u ....... rozsah napeti [Umin, Umax]
%
% VSTUPY:
% fname ... nazev souboru (vcetne cesty a pripony) cesta/*.bin (*.i16)
% flength .. delka vystupniho vektoru (pocet vzorku)
%           / (Inf - read to the end of the file)
% offset .. cislo vzorku od ktereho se signal nacte
% fmt ... 'd' - novy format bin (double) (automaticky)
%         's' - stary format bin (single)
%
% PRIKLAD POUZITI:
%     [f,fvz,u]=load_kralik2('x:/mypath/myfile.bin',inf,0,'d');
%     [f,fvz,u]=load_kralik2('x:/mypath/myfile.i16');
%
% Jan Hrubes, DBME, FEEC, VUT Brno, CZ
% Version 0.3, 29.5.2009

%test input arguments
if ~exist('fname','var')
    error('Zadejte spravny nazev souboru (vcetne cesty a pripony).')
end
if fname(end-3)~='.'
    error('Zadejte spravny nazev souboru (vcetne cesty a pripony).')
end
if ~exist('flength','var')
    flength = inf; % nacte se cely signal
end
if ~exist('offset','var')
    offset = 0; % bude se nacitat od zacatku
end
if ~exist('fmt','var')
    fmt = 'd'; % bin se predpoklada v novem formatu
end
if (flength<1)||(round(flength)~=flength)
    error('Argument flength must be positive integer.');
end
if (offset<0)||(round(offset)~=offset)
    error('Argument flength must be non-negative integer.');
end

% rozpoznani formatu
type = fname(end-2:end); % nacteni koncovky souboru
if strcmp(type,'i16') % i16
    type1='int16'; % precision
    type2='b';%'ieee–be'; % machine dependent precision
    type3=2; %*8bitu=16bitu % pocet bytu na vzorek
elseif strcmp(type,'bin') && strcmp(fmt,'s') % stary bin
    type1='single';
    type2='b';%'ieee–be'
    type3=4;%*8bitu=32bitu
elseif strcmp(type,'bin') && strcmp(fmt,'d') % novy bin
    type1='double';
    type2='s'; %'ieee-be.l64';
    type3=8;%*8bitu=64bitu
else error('Bad data type.');
end
    
ff=fopen(fname,'r',type2); % otevreni souboru
fseek(ff, 0, 'eof'); % nastaveni pozice na konec
filesize = ftell(ff)/type3; % pocet vzorku v souboru
if (offset+4)>=filesize 
    error('Argument offset exceeds file size.');
else
    fseek(ff,0,'bof'); % nastaveni pozice na zacatek
    head=fread(ff,4,type1); % nacteni hlavicky
      fvz = head(1); % fvz
      u = head(2:3); % u
    fseek(ff,(offset+4)*type3,'bof'); % posun na misto, kde se zacne nacitat
    f=fread(ff,flength,type1); % nacteni signalu
      f=f';
    fclose(ff); % uzavreni souboru
    if ((flength+offset+4)>filesize)&&(flength~=Inf) % v souboru nebyl dostatecny pocet vzorku 
        warning('HUGO:changeflength','Arguments (flength+offset) exceeds file size, flength changed.');
    end
end



