ZXNet эхоконференция «code.zx»


тема: Hеточность в описании заголовка архива HRIP



от: Ivan Roshin
кому: All
дата: 25 Apr 2003
Hello, All!

В файле HRIP_DOC.WRD из комплекта поставки HRIP 1.05
содержится следующее:

=== cut ===
Архив начиается следующим заголовком:

IDARCH DB "HRi" ; индентификатор
IDALL DB 0 ; количество файлов в архиве (используется в
; Hrip'е при дополнении архива, что-бы не
; было больше 255 файлов
SMESH DB 0 ; см. далее (BYTE)
LAST DW 0 ; см. далее (SECS)
CAT DB 0 ; 1 - каталог присутствует в архиве
; 0 - каталога отсутствует

Следующая формула показывает, как можно определить конец
архива (в байтах от начала архива):

END_ARCH=[LAST]*256-(256-[SMESH]) bytes

Расположение каталога, если таков присутствует, можно
определитсь по этой формуле:

START_CAT=[LAST]*256 bytes

То есть каталог находится на последнем секторе после архива.
Как можно понять из двух перечисленных формул - между концом
архива и началом каталога есть свободное место <256 байт. Вот
здесь и проявляется "заточка" под Tr-Dos. Такая простая
реализация сделана для того, чтобы каждый желающий мог открыть
архив с каталогом (тем более, что каталог почти похож на
Tr-Dos'овский).
=== cut ===

В действительности формула для вычисления END_ARCH (т.е.
длины архива в байтах, без учёта каталога) должна выглядеть
так:

END_ARCH=[LAST]*256-(256-[SMESH]) bytes, если SMESH>0;
END_ARCH=[LAST]*256 bytes, если SMESH=0.

Или так:

END_ARCH=[LAST-1]*256+[SMESH]) bytes, если SMESH>0;
END_ARCH=[LAST]*256 bytes, если SMESH=0.

Без ветвления формула может быть записана так:

END_ARCH=[LAST]*256-((256-[SMESH]) mod 256) bytes.

Вычисление END_ARCH на ассемблере (получаем результат
в HL:A):

LD HL,(LAST)
LD A,(SMESH)
AND A
JR Z,$+3
DEC HL

Вычисление END_ARCH-1 может быть короче и быстрее:

LD HL,(LAST)
LD A,(SMESH)
DEC HL
DEC A

С уважением, Иван Рощин.

от: Maxim Shelepov
кому: Ivan Roshin
дата: 22 Jul 2003
Привет, Ivan !

25 Апреля 2003 года ты писал к All:

───────═════ Hачало файла F.txt
─ Личные письма ко мне (2:5002/81.8) ───────────────────── MY_MAIL (81.LOCAL) ─
Сооб : 50 из 90 Rcv
От : Kirill Trofimov 2:5002/81.14 Пн 23 Июн 03 22:39
Кому : Maxim Shelepov Пн 23 Июн 03 22:55
Тема : hrip
───────────────────────────────────────────────────────────────────────────────

Copied from area 81.LOCAL by ParToss 1.06.15/W32 alpha

Пpиветствую, Maxim!

21 Июня 2003 22:56, Maxim Shelepov писал Kirill Trofimov:

MS> END_ARCH=[LAST]*256-(256-[SMESH]) bytes, если SMESH>0;
MS> END_ARCH=[LAST]*256 bytes, если SMESH=0.

MS> END_ARCH=[LAST-1]*256+[SMESH]) bytes, если SMESH>0;
MS> END_ARCH=[LAST]*256 bytes, если SMESH=0.

256 в байте = 0 :)

sinn'delirium tremens'freedom
-+- Violet Cancer

───────═════ Конец файла F.txt
..:: freedom://delirium_tremens/~tiden ::..




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Софт - Тест интеллекта по Айзенку - теперь и на Спектруме!
Анекдоты - Продолжение.
Программистам - Вывод трехсимвольных расширений файлов.
Реклама - Реклама и объявления...
Фантазия - компьютерная новелла по игре "Lords of Chaos".

В этот день...   26 апреля