Powerful Code Decreaser v6.2
Упаковщик в своё время использовался
для сжатия RGB картинок (.Y). Возможно, им
упакованы многие журналы. Возможно, именно
здесь появилось стандартное дерево из 16
вариантов,которое впоследствии попало в MS
Pack, Hrum, Hrust... Не берусь утверждать
ничего...
В комплекте с компрессором прилагаются
распаковщики в исходниках. Это решает мно-
гие проблемы,давая возможность выбрать,как
использовать распаковщик. Распаковщики не-
достаточно оптимизированы,но наличие исхо-
дников позволяет решить и этот вопрос.
Имеются битовый и байтовый потоки,бито-
вый поток выбирается по 2 байта. Для рабо-
ты используется стек (принцип DJNZ:POP HL:
LD B,C:ADD HL,HL ).
Упакованный блок начинается с 5 байт,
относящихся к концу файла, потом лежат 2
первых байта битового потока.
Далее согласно битовому потоку:
%1 - просто байт (из байтового потока);
%000,xxxx - puts=1. Сверхкороткая ссылка с
disp=xxxx+1=1..16;
%001 - puts=2. Короткая ссылка, dispL изв-
лекается из байтового потока. Если -1, то
выход из распаковщика,иначе dispL на еди-
ницу больше прочитанного;
%010 - puts=3. Здесь и далее следующим об-
разом определяется disp: из байтового по-
тока считывается dispL, а dispH из бито-
вого потока по дереву:
%0 - dispH=0,
%1000 - dispH=1,
%1010 - dispH=2,
%1100 - dispH=3,
%1110 - dispH=4,
%1011000 - dispH=5,
и т.д. Коды начинаются с единицы и имеют
структуру: 2 информационных бита, 1 бит
признака окончания (0=окончание) и т.д.До
8 бит dispH. Крупный недостаток - совер-
шенно не используются коды,начинающиеся с
%1001...
%01101 - puts=4;
%01110 - puts=5;
%0111100 - puts=6;
%0111101 - puts=7;
%0111110 - puts=8;
%011111100 - puts=9;
%011111101 - puts=10;
%011111110 - puts=11;
%01111111100 - puts=12;
%01111111101 - puts=13;
%01111111110 - puts=14;
%01111111111 - puts=15;
%01100 - взять некий byte из байтового по-
тока. Если 0, то считать 2 байта puts из
байтового потока, иначе puts=byte+15.
подготовил А. Кодер