[comp.windows.x] Pixmap file format

janssen@titan.sw.mcc.com (Bill Janssen) (02/24/89)

This is a nice idea, but hard to read from Lisp.  I would prefer something
closer to the BDF format, with fewer formatting characters that are
language dependent.

In our DELI system, we support a similar file format.
Any line beginning with a semi-colon (well...  you have to pick some
character!) is ignored.  The first non-ignored line contains a single
integer, which is the format of the rest of the file, so that we can
change formats later.  There are two formats defined currently, a standard
easy-to-convert-to format (1), and a run-length-encoded
easy-to-read-write-from-CommonLisp format (2).

Format 1 is quite similar to the PAX Format.
The second line contains the width, height, and number of colors in the
rectangle of pixels.  The next N lines each contain 3 values in the range
[0..1], which are RGB color specs (N is equal to the color count found on
the second line).  The remaining HEIGHT lines each contain a string of ascii
hex digits, with one digit per pixel for 1 to 16 colors, 2 digits per pixel
for 17 to 256 colors, and so forth.  Each pixel value is an index into the
color table.

Here's an example:

;  2x2 checkerboard
;------- version --------------------------------------------
1
;------- width height number-of-colors ----------------------
6 6 2
;------- color-table: RGB [0.0 to 1.0] values, one per line -
0 0 0
1 1 1
;------- data -----------------------------------------------
111000
111000
111000
000111
000111
000111

I do like the PAX trick of binding particular characters to colors so
that the density is increased and the contents made more accessible
to the human eye.

A format that is closer to BDF would presumably look like

STARTPIXMAP 1
COMMENT   2x2 checkerboard
WIDTH 6
HEIGHT 6
NCOLORS 2
STARTCOLORS 2
0
0
0
1
1
1
ENDCOLORS
STARTBITS
38
38
38
7
7
7
ENDBITS
ENDPIXMAP

	On the other hand, the PAX format has the advantage of being able to be
included directly into a C source file, and used.  Not that that helps us
much with Lisp, and in fact for C I'd prefer something of the form

#define pixmap_file_format 1
static pixmap_colors foo_pixmap_colors = {
{ ' ', "DarkSlateGrey" },
{ '.', "#A8A8A8" },
{ 'X', "White" },
{ 'o', "#540054005400" }};
static pixmap_pixels foo_pixmap_pixels = {
 "XX.   ",
 "ooX.  " };
static struct pixmap foo =
 { 6, 2, 4, foo_pixmap_colors, foo_pixmap_pixels };

And for Lisp something of the form

;; pixmap-file-format 1
(require 'pixmap)
(defpixmap foo 6 2 4
  '("DarkSlateGrey" "#A8A8A8" "#A8A8A8" "#540054005400")
  #2a((2 3) (2 3) (1 2) (0 1) (0 0) (0 0))
  )

would be nice.

Bill