#!/usr/bin/env python3 """ p4_pack.py — Финальная сборка HBK-файла """ import json import os import struct BLOCK_HDR = 31 NO_NEXT = 0x7FFFFFFF STREAMS_DIR = "hbk_streams" def make_block_hdr(doc_size, page_size, next_page=NO_NEXT): return f"\r\n{doc_size:08x} {page_size:08x} {next_page:08x} \r\n".encode("ascii") def repack_hbk(original_file, output_file): # Читаем оригинальный заголовок with open(original_file, "rb") as f: orig = f.read(16) magic, page_sz, version, reserved = struct.unpack_from("12,} байт") # ─── Сборка ────────────────────────────────────────────────────── out = bytearray() # 1. Заголовок файла (16 байт) out += struct.pack(" 0: out += b"\x00" * pad # Данные d_pos = len(out) data_page_sz = ((len(content) + page_sz - 1) // page_sz) * page_sz out += make_block_hdr(len(content), data_page_sz) out += content pad = data_page_sz - len(content) if pad > 0: out += b"\x00" * pad positions.append((h_pos, d_pos)) # 4. Заполняем TOC toc_bytes = bytearray() for h_pos, d_pos in positions: toc_bytes += struct.pack("