Jagged Alliance/DAT
DAT-файл является контейнером для различных файлов, например, для PCX. Важно отметить, что не все файлы с расширением .DAT являются DAT-файлом, и любой файл может оказаться DAT-файлом.
Структура контейнера
Файл делится на две части — заголовок и данные. В заголовке описываются названия, смещения и длины ресурсов.
Структура заголовка
Смещение | Длина, байт | Описание |
---|---|---|
0x0000 | 0x10 | Заголовок контейнера (название) |
0x0010 | 0x04 | Максимально возможное количество ресурсов, включая заголовок файла |
0x0014 | 0x04 | Настоящее количество ресурсов, включая заголовок файла |
0x0018 | 0x08 | Неизвестно, забито нулями |
0x0020 | 0x20 | Описание ресурса 1 |
0x0040 | 0x40 | Описание ресурса 2 |
… | ||
0x20 * (максимально возможное количество ресурсов) | остаток файла | Ресурсы |
Поля «Максимально возможное количество ресурсов» и «Настоящее количество ресурсов» требуют некоторого пояснения. В этих полях учитывается и само поле заголовка. Допустим, если максимальное количество равно 32, то самих файлов в контейнере может быть не больше 32 — 1 = 31. Аналогично с настоящим числом ресурсов: при указанных 7 файлах в контейнере будет содержатся только 6. Место под неиспользованные ресурсы забивается нулями (32 байта на каждый пустой ресурс).
Структура описания ресурса
Каждое описание представляет собой блок объемом в 32 (0x20) байта.
Смещение | Длина, байт | Описание |
---|---|---|
0x00 | 0x10 | Название ресурса |
0x10 | 0x04 | Смещение |
0x14 | 0x04 | Длина ресурса |
0x18 | 0x08 | Неизвестно, забито нулями |
Ограничения контейнера
Название ресурса не может превышать 16 символов, в которые запросто укладывается DOS-формат именования файлов 8.3. Теоретически, объем ресурса не может превышать 4 294 967 295 байт (так, на всякий случай, вдруг вам вздумается запихать 4-гигабайтный файл в ресурс). Однако ограничения на смещение делают эту цифру еще меньше, но не настолько, чтобы задумываться об этих ограничениях всерьез.