close all;
clear all;
clc;
%*************************************************************************
%*  Peter Miščík
%*  Program Genbit - dekompresia sekvencie
%*  vstup - *.genbit
%*  výstup - DNA sekvencia
%*************************************************************************
uloz = input('Zadajte názov súboru k dekompresii s príponou genbit: ','s');
uloz = strcat(uloz,'.genbit');

fid=fopen(uloz,'r'); % otvorenie skomprimovanej DNA sekvencie
ninedec=fread(fid,'uint8');
fclose(fid);

str=sprintf('\nPrebieha dekompresia...');
disp(str)

alpha = 'ACGT'; % ABECEDA sekvencie
code = ({'00','01','10','11'}); % Kódy daným bázam

ninebin=(dec2bin(ninedec(1:end-1)))';
N=length(ninebin)*8;
Z=ninedec(end);         % zvyšok z kompresie
if Z>0
    ninebin=reshape(ninebin,1,N);
    ninebin=strcat(ninebin(1:end-8),ninebin(end-Z+1:end));
end
N=length(ninebin);
L=mod(N,9);

binseq = '';

for i = 1:9:N-mod(N,9)      % for cyklus prechadzanie reťazcom po 9 bitoch
    nine={ninebin(i:i+8)};  % pri 1 vloží 8 bitov dvakrát
    if (nine{1}(1)=='1')
        binseq = strcat(binseq,nine{1}(2:9));
        binseq = strcat(binseq,nine{1}(2:9));
    else
        binseq = strcat(binseq,nine{1}(2:9)); % inak iba raz
    end
end

binseq=strcat(binseq,ninebin(end-L+1:end));

seq_out='';

for i=1:2:(length(binseq)-1)     % spätné dekódovanie dvojice bitov na bázu
    idx = find(strcmp({binseq(i:i+1)},code));
    seq_out = strcat(seq_out,alpha(idx));
end

str=sprintf('\nDekompresia je ukončena.');
disp(str)

seqtool(seq_out);