Введение

Контейнерный файловый формат, представленный компаниями Electronic Arts и Commodore.

Interchange File Format (IFF) – это универсальный цифровой контейнерный файловый формат, впервые представленный компаниями Electronic Arts (в сотрудничестве с Commodore) в 1985 году для упрощения передачи данных между программным обеспечением, разработанным разными компаниями. Файлы IFF не имеют стандартного расширения имени. Во многих системах, генерирующих файлы IFF, расширения файлов не имеют значения, поскольку операционная система хранит метаданные формата файла отдельно от имени файла. Расширение имени файла .iff обычно используется для формата файлов изображений ILBM, который использует контейнерный формат IFF. Resource Interchange File Format – это формат, разработанный компаниями Microsoft и IBM в 1991 году, основанный на IFF, за исключением изменения порядка байтов на little endian для соответствия архитектуре микропроцессора x86. Audio Interchange File Format (AIFF) от Apple – это аудиоформат с порядком байтов big endian, разработанный на основе IFF. Формат файла изображений TIFF не имеет отношения к IFF.

Структура

Файл IFF состоит из блоков. Каждый блок начинается с того, что спецификация называет "Type ID" (в Macintosh это называлось OSType, а разработчики Windows могли бы назвать FourCC). За этим следует 32-битное целое число со знаком (все целые числа в структуре файла IFF представлены в порядке старшего значащего байта), указывающее размер следующих данных (содержимое блока) в байтах. Поскольку спецификация включает в себя явную длину для каждого блока, анализатор может пропускать блоки, которые он не может или не хочет обрабатывать. Эта структура тесно связана с представлением "тип-длина-значение" (TLV). Существуют предопределенные групповые блоки с идентификаторами типа FORM, LIST и CAT. Блок FORM похож на структуру записи, содержащую идентификатор типа (указывающий тип записи), за которым следуют вложенные блоки, определяющие поля записи. LIST – это структура, содержащая серию блоков PROP (свойства) и вложенные групповые блоки, к которым применяются эти свойства. CAT – это просто набор вложенных блоков без специальной семантики. Групповые блоки могут содержать другие групповые блоки в зависимости от потребностей приложения. Групповые блоки, как и их более простые аналоги, содержат элемент длины. Таким образом, пропуск группы можно выполнить с помощью простой операции относительного смещения. Блоки должны начинаться с четных смещений в файле, что обусловлено происхождением IFF на процессоре Motorola 68000, который не мог адресовать значения, превышающие один байт, по нечетным адресам. Следовательно, блоки с нечетной длиной будут "дополнены" до границы четного байта путем добавления так называемого "байта-заполнителя" после их обычного конца. Структура верхнего уровня файла IFF состоит ровно из одного группового блока: FORM, LIST или CAT, при этом FORM является наиболее распространенным. Каждый тип блока обычно имеет различную внутреннюю структуру, которая может содержать числовые данные, текст или необработанные данные. Также возможно включать другие файлы IFF, как если бы они были блоками (обратите внимание, что они имеют ту же структуру: четыре буквы, за которыми следует длина). Некоторые форматы используют это. Существуют стандартные блоки, которые могут присутствовать в любом файле IFF, такие как AUTH (содержит текст с информацией об авторе файла), ANNO (содержит текст с аннотацией, обычно название программы, создавшей файл), NAME (содержит текст с названием работы в файле), VERS (содержит версию файла), (c) (содержит текст с информацией об авторских правах). Существуют также блоки, которые являются общими для ряда форматов, такие как CMAP, который хранит цветовую палитру в файлах ILBM, ANIM и DR2D (изображения, анимации и векторные изображения). Есть блоки, которые имеют общее название, но хранят разные данные, например, BODY, который может хранить изображение в файле ILBM и звук в файле 8SVX. И, наконец, есть блоки, уникальные для их типа файла. Некоторые программы, создающие IFF-файлы, добавляют к ним блоки со своими внутренними данными; эти же файлы могут быть позже прочитаны другими программами без каких-либо сбоев (поскольку их анализаторы могут пропускать неинтересные блоки), что является большим преимуществом IFF и подобных форматов.