LINUX.ORG.RU

Помогите определить тип компрессии.


0

0

Помогите определить тип компрессии. Есть только древние исходники декомпрессора, а нужно написать компрессор. Подскажите на что этот тип похож.

#define CprDim (0x200) char CprMask[]={0x80,0x40,0x20,0x10,8,4,2,1}; char CprTab[CprDim];

void CtrInit() { CtrMode=0; }

int CtrGet() { int Ctr;

if(CtrMode==0) { Ctr=VolGetc(); if(Ctr==0) { CtrCount=VolGetc(); CtrMode=1; } } if(CtrMode==1) { Ctr=0; CtrCount--; if(CtrCount==0) { CtrMode=0; } } return(Ctr); }

decompresse(unsigned long sz) { int FlgCtr,Ctr,e,i,prec,_new; unsigned long n;

prec=0; for(e=0;e<CprDim;e++) { CprTab[e]=0; } CtrInit(); FlgCtr=0; n=0; while(n<sz) { if(FlgCtr==0) { Ctr=CtrGet(VolFp); i=0; FlgCtr=1; } if((CprMask[i]&Ctr)==0) { _new=CprTab[prec&(CprDim-1)]; } else { _new=VolGetc(); // read byte from input CprTab[prec&(CprDim-1)]=_new; } DstPutc(_new); // Write byte to output prec=prec*256+_new; i++; if(i==8) { FlgCtr=0; } n++; } }

anonymous

char CprMask[]={0x80,0x40,0x20,0x10,8,4,2,1};
#define CprDim (0x200)
char CprTab[CprDim];

void CtrInit()
{
CtrMode=0;
}

int CtrGet()
{
int Ctr;

if(CtrMode==0)
{
Ctr=VolGetc();
if(Ctr==0)
{
CtrCount=VolGetc();
CtrMode=1;
}
}
if(CtrMode==1)
{
Ctr=0;
CtrCount--;
if(CtrCount==0)
{
CtrMode=0;
}
}
return(Ctr);
}

decompresse(unsigned long sz)
{
int FlgCtr,Ctr,e,i,prec,_new;
unsigned long n;

prec=0;
for(e=0;e<CprDim;e++)
{
CprTab[e]=0;
}
CtrInit();
FlgCtr=0;
n=0;
while(n<sz)
{
if(FlgCtr==0)
{
Ctr=CtrGet(VolFp);
i=0;
FlgCtr=1;
}
if((CprMask[i]&Ctr)==0)
{
_new=CprTab[prec&(CprDim-1)];
}
else
{
_new=VolGetc(); // read byte from input
CprTab[prec&(CprDim-1)]=_new;
}
DstPutc(_new); // Write byte to output
prec=prec*256+_new;
i++;
if(i==8)
{
FlgCtr=0;
}
n++;
}
}

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.