Формат пакованного файла MegaLZ
Lord Vader
Первый байт копируется в выход.Второй -
идёт в биты.
Биты в байте битов - со старшего.
Если нужен бит,а его уже нет (все 8 ко─
нчились) - то новый байт выбирается из по─
тока. Оттуда же выбираются и байты,обозна─
ченные <byte> - но только после выборки
всех битов ссылки.
В формате ссылок: <byte> - байт, кото─
рый выбирается из потока.
1<byte> - копировать <byte> в выход.
000abc - копировать 1 старый байт по
смещению FFF8+[abc] от текущей
позиции в выходе
(abc==000 - смещение FFF8,
abc==111 - FFFF)
001<byte> - копировать 2 байта по смещению
FF00+<byte> (-1..-256)
0100<byte> - копировать 3 байта по
смещению FF00+<byte>
0101abcd<byte> - копировать 3 байта по
смещению (F[abcd]-1)*256+<byte>
(-257..-4352)
Более длинные ссылки удобно представить
в виде 3 частей:
Префикс:
011
Длина ссылки:
1a -> 4+[a]
01ab -> 6+[ab]
001abc -> 10+[abc]
0001abcd -> 18+[abcd]
00001abcde -> 34+[abcde]
000001abcdef -> 66+[abcdef]
0000001abcdefg -> 130+[abcdefg] (тут длина
не более 255!)
Смещение:
0<byte> - FF00+<byte> назад (-1..-256)
1abcd<byte> - (F[abcd]-1)*256+<byte>
(-257..-4352)
Метка конца потока:
011000000001
Примеры:
000111 - повторить последний байт
001<byte=FF> - повторить последний байт
дважды (смещение=-1, длина 2)
011 001101 10000<byte=0> - ссылка длиной
%101+10 = 15 байт со смещением -4352