# Interchange File Format

Interchange File Format (IFF), es un formato de archivo originalmente introducido por la compañía Electronic Arts en 1985 (en cooperación con Commodore Amiga) con el objetivo de facilitar la transferencia de datos entre programas de software producidos por empresas diferentes.
Los ficheros IFF no tienen una extensión definida. La mayoría de archivos con extensión .iff son archivos ILBM, nombrados de manera incorrecta ya que este tipo de archivos son los archivos IFF más comunes y la mayoría asumen que es el único tipo de archivos referidos a este estándar (en la muchos sistemas que trabajan con archivos IFF, las extensiones de archivos no son importantes).

## Estructura

Un archivo IFF está compuesto de chunks o bloques de datos. Cada chunk comienza con lo que la especificación llama como "Type ID" (en español, Identificación de Tipo). Esto viene a ser lo que en entornos de Macintosh es llamado OSType y lo que los desarrolladores de Windows llamarían FourCC). A continuación de este identificador hay un número entero de 32 bits sin signo (todos los enteros en los archivos IFF son de tipo big-endian) especificando el tamaño de los datos subsiguientes (el contenido del chunk) en bytes. Mediante esta técnica, que hace que el estándar incluya longitudes definidas para cada chunk, es posible saltar determinados bloques de datos que no importan o que no son necesarios procesar mientras se está analizando el archivo.
Existen una serie de chunks de grupo predefinidos con los identificadores ‘FORM’, ‘LIST’ y ‘CAT ’. El chunk FORM es como una estructura de registros, conteniendo un identificador de tipo (indicando el tipo de registro) seguido de bloques de datos anidados que especifican los campos del registro. El de tipo LIST es una estructura que contiene una serie de chunks de propiedades ‘PROP’ así como una serie de bloques anidados a aquellos para que estas propiedades son de aplicación. El tipo CAT es simplemente una colección de chunks anidados sin una semántica definida. Los chunks de grupo pueden contender asimismo otros chunks de grupo, dependiendo de las necesidades de la aplicación. Los chunks de grupo, al igual que sus equivalentes más simples, contienen un elemento que especifica la longitud. Por lo tanto, saltar un grupo de datos puede efectuarse de una manera muy simple mediante una operación seek de tipo Unix.
Los chunks deben comenzar en offsets de archivo pares, ya que se beneficia de los orígenes del IFF en el procesador Motorola 68000, que no puede direccionar valores mayores que un byte en una dirección impar. Por lo tanto, un chunk seguido de otro chunk de dirección impar será precedido por un byte de relleno para convertirlo en una cantidad de datos par.
El nivel más alto de la estructura de un archivo IFF consiste de exactamente uno de los chunks de grupo: FORM, LIST o CAT .
Cada tipo de chunk tiene una estructura interna diferente, ya sean datos numéricos, texto, o datos en crudo. También es posible incluir otros ficheros IFF como si de otros chunks se trataran (puesto que tienen la misma estructura: cuatro letras seguidas de la longitud) y algunos formatos utilizan esta característica. Existen chunks estándar que pueden estar presentes en cualquier archivo IFF, por ejemplo ‘AUTH’ (conteniendo texto indicando el autor del archivo), ‘ANNO’ (que contiene una anotación, normalmente el nombre del programa que creó el archivo), ‘NAME’ (conteniendo el nombre del trabajo existente en el archivo), ‘VERS’ (conteniendo la versión del archivo), ‘(c) ’ (conteniendo texto con información sobre el copyright). Además existen chunks que son comunes entre una gran cantidad de formatos, como por ejemplo ‘CMAP’ que almacena los datos de la paleta de los ficheros ILBM, ANIM y DR2D (imágenes de mapa de bits, animaciones e imágenes vectoriales). También hay chunks que tienen un nombre común pero que almacenan diferentes datos tales como ‘BODY’ que puede almacenar una imagen en formato ILBM y un sonido en formato 8SVX. Finalmente, existen chunks únicos para el tipo de datos que almacenan. Algunos programas que crean archivos IFF les añaden chunks con sus datos internos; estos mismos archivos pueden ser leídos más tarde por otros programas sin ningún problema (ya que los analizadores pueden saltarse los chunks que les resulten irrelevantes), lo cual es una gran ventaja del IFF sobre otros formatos de archivo.
Al ser un formato de archivo anidable y descriptivo, existen muchas similitudes en cuanto a arquitectura con el XML. No obstante, XML es fundamentalmente un formato en modo texto, mientras que todo IFF contiene al menos algún campo en formato binario (por ejemplo los campos de longitud). Es posible convertir de manera automática un archivo IFF a su equivalente en XML; sin embargo, al tener el XML una serie de características adicionales como los datos descriptivos y los metadatos (atributos, entidades, DTD y esquemas) y características navigacionales (xpath), éste no puede ser convertido tan fácilmente a IFF.

## Lista de formatos de archivo IFF comunes

* (Formato de Audio)
* ACBM (Amiga Contiguous BitMap - Formato de Imagen para una rápida carga/grabación)
* AIFF (Formato de Audio)
* ANBM ((obsoleto) formato de animación, internamente es un conjunto de ILBM que se muestran uno tras otro)
* ANIM (Formato de Animación)
* BIFF8 (antiguamente utilizado por Microsoft Excel)
* Alias/Wavefront Maya formato de archivo (para descripción de la imagen y la escena)
* Word document (formato anterior a Word 97)
* DjVu (Formato de imagen para documentos de alta resolución)
* DR2D
* EMOD (Formato de módulos musicales del programa QuadraComposer)
* FNTR (Tipo de letra Raster)
* FNTV (Tipo de letra vectorial)
* FPBM (LightWave Imagen Flexible Precision Buffer Map)
* FTXT (Formato de texto)
* GSCR (apócrifo) (General music Score)
* IFRS (conocido como Blorb)
* IFZS (conocido como Quetzal)
* ILBM (Formato de imagen de mapa de bits)
* LWOB (Objeto tridimensional de LightWave versión 1)
* LWO2 (Objeto tridimensional de LightWave versión 3)
* LWSC (Formato de escena 3D de LightWave)
* PDEF (Definición de página de Deluxe Print)
* PICS (Dibujo Macintosh QuickDraw encapsulado en IFF)
* PLBM ((obsoleto) formato de imagen)
* SHRI
* SMUS (formato Simple Music, similar al formato MIDI)
* TDDD (formato de un objeto tridimensional de Imagine)
* USCR (partitura de Uhuru Sound)
* UVOX (voz de Uhuru Sound)
* VDEO (Vídeo de Deluxe Video Construction Set)
* YAFA (Formato de animación)

## Clónicos y variantes del formato IFF

* RIFF es una variante del IFF creada por Microsoft e IBM; Los archivos RIFF difieren de los IFF en que tienen las letras RIFF al comienzo y utilizan enteros little-endian. Los ficheros WAV, por ejemplo, son de tipo RIFF. Existe una versión big-endian definida llamada RIFX, aunque no se ha popularizado mucho su uso.
* Los ficheros AVI están basados en RIFF.
* El formato TIFF fue diseñado por Aldus para incluir mapas de bits de alta densidad con PostScript. Tienen una estructura similar al IFF, aunque el formato de imagen no tiene ninguna relación propiamente dicha con el formato ILBM.
* El formato estándar de los ficheros MIDI toma algunos conceptos clave del IFF pero sin utilizar el estándar.
* El formato PNG también utiliza el concepto de los chunks del IFF, pero no copia exactamente la estructura.
* Los archivos QuickTime (.mov) (y por tanto los derivados de éste MPEG-4) utilizan el mismo concepto de chunks del IFF, pero les llaman 'átomos' y utilizan una disposición diferente. Tienen también extensiones para chunks mayores de 4 Gb.
* El formato de escenas de 3dstudio (.3ds) utiliza un número de longitud de chunk de 2 bytes en lugar de uno de 4 bytes como el estándar.