WeaponKnight, yeah, I think this two languager pretty similar.
It's pure C++, maybe you'll need to add some header files. It's full function, so you'll just need to call it from main code. It's returning size of decompressed file.
CODE#include
int LZ77UnComp(LPSTR input, LPSTR output, int comOffset);
int LZ77UnComp(LPSTR input, LPSTR output, int comOffset)
{
int firstByte = 0, sysByte = 0, gbaByte = 0, decByte = 0, gbaBit = 0, size = 0, readsizoff = 0, readsize = 0, offset = 0;
FILE *lzCom, *lzDec;
fopen_s (&lzCom, input, "rb");
fopen_s (&lzDec, output, "wb");
fseek (lzCom, comOffset, SEEK_SET);
fread(&firstByte, 1, 1, lzCom);
if (firstByte != 0x10)
{
fclose (lzCom);
fclose (lzDec);
return -1;
}
fread(&size, 1, 3, lzCom);
while (1)
{
if (ftell(lzDec) >= size)
{
break;
}
fread(&sysByte, 1, 1, lzCom);
for (int i = 0; i < 8; i++)
{
if (ftell(lzDec) >= size)
{
break;
}
gbaBit = (sysByte & 0x80) >> 7;
sysByte = sysByte 12) + 3;
offset = readsizoff & 0xFFF;
offset = offset + 1;
fseek (lzDec, ftell(lzDec) - offset, SEEK_SET);
for (int j = 0; j < readsize; j++)
{
fread(&decByte, 1, 1, lzDec);
offset = ftell(lzDec);
fseek (lzDec, 0, SEEK_END);
fwrite(&decByte, 1, 1, lzDec);
fseek (lzDec, offset, SEEK_SET);
}
fseek (lzDec, 0, SEEK_END);
readsizoff = 0, readsize = 0, offset = 0;
}
}
sysByte = 0, gbaByte = 0, decByte = 0, gbaBit = 0, readsize = 0, offset = 0, readsizoff = 0;
}
fclose (lzCom);
fclose (lzDec);
return size;
}