Исходники LZCE32
~~~~~~~~~~~~~~~~
Я очень удивился, когда, скачав на TopDevicе LZCE32, решил посмотреть
как она написана. Ну, человек, блин, автор, так его, сырцы зажал, а
вместо них в LZ?1.INC hex-дампы положил. И тогда я сказал: "Господи, дай
мне исходные тексты этого движка", и, вуаля ...
Короче, думаю автор не обидится на меня за публикацию исходников, а
ежели обидится... разберемся в суде ;-)
Просто, после того, как посмотрел на дамп вместо текста, первое
желание было отослать весь каталог на нуль (aka nul), потому как не люблю
пользовать чужие куски кода "без понимания сути происходящего" [(c)
кажется by Lozinsky]. Но потом чувство спортивного интереса взяло верх, и
я решил поковырять код (347+365 bytes).
Ковырял IDA'ой. Результаты ковыряния в первозданном виде можно найти в
DISASMED\IDBS\*.idb, немного причесанные и откомментированные - в
DISASMED\lz?1.inc
С точки зрения оригинальности, ммм... по моему глубоко субъективному
IMHO это есть обычная, правда достаточно компактная и аккуратная
реализация простейшего LZxxx или же LZW (отличий точно не помню, но
алгоритм прям по описалову)
Далее
~~~~~
Далее было замечено, что поскольку движок не под DOS, а вовсе даже под
маздай, его можно несколько улучшить, увеличив размер словаря (и время
сжатия соответственно). Для этого пришлось СЛЕГКА изменить код (см.
IMPROVED\*.*)
Тестировалось файло на 54k:
Разрядность, биты у 10 у 11 у 12 у 13 у 14 у 15
Сжатый файл, Kb у 34 у 30 у 28 у 24 у 22 у 21,9
Более того, на 15 битах декомпрессор вылетел с ошибкой, но это вроде
по хер, т.к. от 14 мало отличается.
---------------------------------------------------------------
Green Monster, 24.05.00
[email protected]