IFF file format experiments
The "IFF file format experiments" is a personal hobby project in which I implement several well-defined, portable and high-quality
packages, which make it possible to parse, write, view and check files using the Electronic Arts' Interchange File Format (IFF)
and several application formats, such as the Interleaved BitMap (ILBM) for storing pictures and 8SVX to store
8-bit audio samples, on modern platforms. The IFF container format was ubiquitous on AmigaOS, but poorly supported
in most common viewers on modern platforms used nowadays.
The goal of this project is to enable third party applications to easily support IFF applications formats, similar
to libraries, such as libpng for supporting PNG images
and libvorbis supporting Vorbis audio files.
The reason why I have developed these packages are the following:
- Support for most IFF application formats is not present in many common viewers and players.
- Most applications have their own implementation of a specific IFF application format. Some implementations are good, others lack certain features. For example, I have seen several viewers not supporting the special Amiga screen modes, such as Extra HalfBrite (EHB) and Hold-and-Modify (HAM) or the color range cycle chunks.
- Applications can open simple IFF files that consist of a single FORM, but do not know how to deal with IFF scrap files, i.e. CATs/LISTs containing multiple FORMs of various types, possibly with shared options.
- Most applications can view IFF application formats, but cannot write them or check for their validity, which may result in crashes if invalid IFF files are opened.
- A number of open file formats have generic parser libraries, e.g. PNG (libpng), JPEG (libjpeg), GIF (giflib), Ogg (libogg), Vorbis (libvorbis) etc. that applications use to open, parse and save files. There is no equivalent for ILBM and other IFF application formats.
- For me it is fun to do it :-)
So far, the experiments have resulted in the development of the following packages:
General IFF format
libiff implements the IFF specification and provides a generic interface capable
of parsing data chunks and group chunks, writing IFF files and conformance checking.
Furthermore, it contains command-line utilities to inspect the contents of IFF files
as well as a command-line utilities which can join several IFF files into a IFF scrap file.
libilbm extends libiff enabling support for Interleaved BitMap (ILBM)
application chunks used to store images and provides an interface that can conveniently retrieve relevant ILBM
properties. It also implements the byte run compression method and
provides command-line utilities to inspect ILBM files and to compress or decompress
lib8svx extends libiff enabling support for 8-bit audio sample (8SVX)
application chunks and provides an interface that can conveniently retrieve relevant 8SVX properties.
It also implements the fibonacci-delta compression method and
provides command-line utilities to inspect 8SVX files and to compress or decompress
libamivideo can be used to convert AmigaOS bitplanes to chunky or RGB format
and vice versa. It can also emulate special Amiga screen modes, such as Extra-Halfbrite (EHB)
and Hold-and-Modify (HAM).
nix-amigaosenv is an utility function for the Nix package manager
to build software for AmigaOS using a preconfigured disk image with Geek Gadgets
and UAE, the Amiga emulator.
Viewers and players
SDL_ILBM a library and command-line utility displaying ILBM images using SDL, a
cross-platform library used by many games and multimedia applications. The viewer is capable of supporting various
advanced features, such as animating Deluxe Paint's and Graphicraft's color cycle ranges and handling IFF scrap files.
amiilbm is a native command-line utility for AmigaOS using my own IFF libraries to display ILBM images
instead of the native AmigaOS one. It also knows how to handle IFF scrap files and it is also capable of opening
images created by the PC version of Deluxe Paint.
SDL_8SVX is a library and command-line utility capable of playing samples defined in 8SVX instruments
Below I have included a number of screenshots of the SDL-based image viewer as well as the native AmigaOS viewer:
SDL ILBM viewer
AmigaOS ILBM viewer
Obtaining the source code
There are no releases, as I have not defined a roadmap yet. Although the packages are usable and relatively simple
to install: do not consider these libraries stable yet. The source code can be obtained from various GitHub pages,
which also contains instructions how to install and use them:
All packages are available as free and open-source software under various non-copylefted licenses,
such as the MIT license
and the zlib license.