NAME¶
icon2gif - A program to convert a series of editable text GIF icon
specifications and named GIF files into a multi-image GIF, usable as a graphic
resource file. It can also dump existing GIFs in this format.
USAGE¶
icon2gif [-q] [-a] [-d] [t TranslationTable] [-h] gif-file...
If no gif-file is given, icon2gif will try to read a text input from stdin.
Specification Syntax¶
Here is a syntax summary in informal BNF. The token `NL' represents a required
newline.
<gif-spec> ::= <header-block> <image-block>...
<header-block> ::= <header-declaration>...
<header-declaration ::= | screen width <digits> NL | screen height
<digits> NL | screen colors <digits> NL | screen background
<digits> NL | screen map <color-table> NL
<color-table> ::= <color-declaration>... end NL
<color-declaration> ::= rgb <digits> <digits> <digits>
is <key> NL
<image-block> ::= include <file-name> NL | image NL
<image-declaration>... <raster-picture> [ <extension> ]
<image-declarations> ::= image top <digits> NL | image left
<digits> NL | image interlaced NL | image map <color-table> NL |
image bits <digits> by <digits> NL <raster-block>
<extension> := <comment> NL <extension-block> NL end NL |
<plaintext> NL <extension-block> NL end NL | extension
<hex-digits> NL <extension-block> NL end NL
If the semantics of the `screen height', `screen width', `screen background',
`image top', `image left' declarations aren't obvious to you, what are you
doing with this software?
A color table declares color indices (in ascending order from 0) and assiciates
them with key characters. These characters can later be used in raster blocks.
As these must be printable and non-whitespace, you can only specify 94 colors
per icon. Life is like that sometimes.
A raster block is just a block of key characters. It should be sized correctly
for the `image bits' declaration that leads it.
The `comment' or `plaintext' keywords lead defined GIF89 extension record data
(the other two GIF89 types, graphics control and application block, are not
yet supported). You can also say `extension' followed by a hexadecimal record
type. All of these extension declarations must be followed by an extension
block, which is terminated by the keyword `end' on its own line.
An extension block is a series of text lines, each interpreted as a string of
bytes to fill an argument block (the terminating newline is stripped). Text
may include standard C-style octal and hex escapes preceded by a backslash.
All <digits> tokens are interpreted as decimal numerals;
<hex-digits> tokens are interpreted as two hex digits (a byte). All
coordinates are zero-origin with the top left corner (0,0). Range checking is
weak and signedness checking nonexistent; caveat hacker!
In general, the amount of whitespace and order of declarations within a header
or image block is not significant, except that a raster picture must
immediately follow its `image bits' bits declaration.
The `include' declaration includes a named GIF as the next image. The global
color maps of included GIFs are merged with the base table defined by any
`screen color' declaration. All images of an included multi-image GIF will be
included in order.
Comments may be preceded with `#' and will be ignored.
MEMORY REQUIRED¶
For the compilation mode, proportional to the size of the input file. For
dumping, proportional to the line size of the widest GIF.
OPTIONS¶
- [-q]
-
Quiet mode. Defaults off on MSDOS, on under UNIX. Controls printout of
running scan lines. Use -q- to invert.
- [-d]
-
Dump the input GIF file(s) into the text form described above.
- [-t]
-
Specify name characters to use when dumping raster blocks. Only valid with
-d option.
- [-h]
-
Print one line of command line help, similar to Usage above.
BUGS¶
Because there are only 94 characters unambiguously usable for raster blocks, an
attempt to dump a GIF with a larger color map will fail.
Error checking is rudimentary.
Example:¶
A sample icon file called `sample.ico' is included in the pic directory.
AUTHOR¶
Eric S. Raymond <esr@snark.thyrsus.com>
Man page created by T.Gridel <tgridel@free.fr>, originally written by Eric
S. Raymond <esr@thyrsus.com>