Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Контейнерный файловый формат, представленный компаниями Electronic Arts и Commodore.
Container file format introduced by Electronic Arts and 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.
Interchange File Format (IFF) is a generic digital container file format originally introduced by Electronic Arts (in cooperation with Commodore) in 1985 to facilitate transfer of data between software produced by different companies. IFF files do not have any standard filename extension. On many systems that generate IFF files, file extensions are not important because the operating system stores file format metadata separately from the file name. The iff filename extension is commonly used for the ILBM image file format, which uses the IFF container format. Resource Interchange File Format is a format developed by Microsoft and IBM in 1991 that is based on IFF, except the byte order has been changed to little endian to match the x86 microprocessor architecture. Apple's Audio Interchange File Format (AIFF) is a big endian audio file format developed from IFF. The TIFF image file format is not related to 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 и подобных форматов.
An IFF file is built up from chunks. Each chunk begins with what the specification calls a "Type ID" (what the Macintosh called an OSType, and Windows developers might call a FourCC). This is followed by a 32 bit signed integer (all integers in IFF file structure are big endian) specifying the size of the following data (the chunk content) in bytes. Because the specification includes explicit lengths for each chunk, it is possible for a parser to skip over chunks that it either can't or doesn't care to process. This structure is closely related to the type–length–value (TLV) representation. There are predefined group chunks, with type IDs FORM, LIST and CAT A FORM chunk is like a record structure, containing a type ID (indicating the record type) followed by nested chunks specifying the record fields. A LIST is a factoring structure containing a series of PROP (property) chunks plus nested group chunks to which those properties apply. A CAT is just a collection of nested chunks with no special semantics. Group chunks can contain other group chunks, depending on the needs of the application. Group chunks, like their simpler counterparts, contain a length element. Skipping over a group can thus be done with a simple relative seek operation. Chunks must begin on even file offsets, as befits the origins of IFF on the Motorola 68000 processor, which couldn't address quantities larger than a byte on odd addresses. Thus chunks with odd lengths will be "padded" to an even byte boundary by adding a so called "pad byte" after their regular end. The top level structure of an IFF file consists of exactly one of the group chunks: FORM, LIST or CAT , where FORM is by far the most common one. Each type of chunk typically has a different internal structure, which could be numerical data, text, or raw data. It is also possible to include other IFF files as if they are chunks (note that they have the same structure: four letters followed with length), and some formats use this. There are standard chunks that could be present in any IFF file, such as AUTH (containing text with information about author of the file), ANNO (containing text with annotation, usually name of the program that created the file), NAME (containing text with name of the work in the file), VERS (containing file version), (c) (containing text with copyright information). There are also chunks that are common among a number of formats, such as CMAP, which holds color palette in ILBM, ANIM and DR2D files (pictures, animations and vector pictures). There are chunks that have a common name but hold different data such as BODY, which could store an image in an ILBM file and sound in an 8SVX file. And finally, there are chunks unique to their file type. Some programs that create IFF files add chunks to them with their internal data; these same files can later be read by other programs without any disruption (because their parsers could skip uninteresting chunks), which is a great advantage of IFF and similar formats.