─ SPECTRUM RULEZ! (2:5020/993.213) ─────────────────────────────── ZX.SPECTRUM ─ Msg : 133 of 185 From : Alexei Bugai 2:461/173.3 Fri 31 Oct 97 23:24 To : Ilya Zverev Mon 03 Nov 97 17:43 Subj : Фоpмат файлов хобеты ──────────────────────────────────────────────────────────────────────────────── Peace unto you, _Ilya_! 29 Oct 97 Ilya Zverev write to All about "оpмат файлов хобеты": IZ> Очень нужен сабж, pls. == Cut == Структура 17-байтного заголовка, добавляемого к TR-DOSным файлам программой HoBeta.exe: 00-07 - имя файла 08 - тип файла 09-0A - Start 0B-0C - Length 0D-0E - Length в 256-байтных записях (байт 0E - pазмеp в сектоpах) 0F-10 - Контрольная сумма Таким образом, первые 14 байт копируются из TR-DOSовского каталога. Вычиление контрольной суммы: S=S+257*Di+i, где S начальное=0 Di - значение байта i - порядковый номер байта (если не ошибаюсь, начиная с 0, а не с 1) C src: union { struct { unsigned char tr_filename[8]; unsigned char tr_filetype; unsigned int tr_address; unsigned int tr_length; unsigned int tr_tr; unsigned int tr_crc; } tr_head; unsigned char head[17]; } header; unsigned int CheckSum; int i; CheckSum=0; for (i=0; i<=14; CheckSum = CheckSum + (header.head[i] * 257) + i, i++); header.tr_head.tr_crc = CheckSum; Вот в одной из своих программок нашел такой забавный способ подсчета контрольной суммы заголовка: checksum=0; for (i=0; i<=14; checksum+=(unsigned char)*(bufptr+i), i++); checksum*=257; checksum+=105; bufptr, очевидно, поинтер на начало заголовка. === Cut === With best wishes, [ZX_Power Team] Dr.Squizer. [Power_ZX Team] ... Don't try to understand me... You never will! --- Powered by Spectrum Mail System. * Origin: X-Project BBS (2:461/173.3)