-/* rast.h - header file for Sun raster files
-**
-** The format of a Sun raster file is as follows. First, a struct
-** rasterfile. Note the 32-bit magic number at the beginning; this
-** identifies the file type and lets you figure out whether you need
-** to do little-endian / big-endian byte-swapping or not. (The PBMPLUS
-** implementation does not do byte-swapping; instead, it reads all
-** multi-byte values a byte at a time.)
-**
-** After the struct is an optional colormap. If ras_maptype is RMT_NONE,
-** no map is present; if it's RMT_EQUAL_RGB then the map consists of
-** three unsigned-char arrays ras_maplength long, one each for r g and b.
-** I don't know what RMT_RAW means. Black and white bitmaps are stored
-** as ras_maptype == RMT_NONE and ras_depth == 1, with the bits stored
-** eight to a byte MSB first.
-**
-** Finally comes the image data. If ras_type is RT_OLD or RT_STANDARD,
-** the data is just plain old uncompressed bytes, padded out to a multiple
-** of 16 bits in each row. If ras_type is RT_BYTE_ENCODED, a run-length
-** compression scheme is used: an escape-byte of 128 indicates a run;
-** the next byte is a count, and the one after that is the byte to be
-** replicated. The one exception to this is if the count is 1; then
-** there is no third byte in the packet, it means to put a single 128
-** in the data stream.
-*/
-
-#ifndef _RAST_H_
-#define _RAST_H_
-
-#define PIX_ERR -1
-
-struct rasterfile {
- long ras_magic;
-#define RAS_MAGIC 0x59a66a95
- long ras_width;
- long ras_height;
- long ras_depth;
- long ras_length;
- long ras_type;
-#define RT_OLD 0 /* Raw pixrect image in 68000 byte order */
-#define RT_STANDARD 1 /* Raw pixrect image in 68000 byte order */
-#define RT_BYTE_ENCODED 2 /* Run-length compression of bytes */
-#define RT_FORMAT_RGB 3 /* XRGB or RGB instead of XBGR or BGR */
-#define RT_FORMAT_TIFF 4 /* tiff <-> standard rasterfile */
-#define RT_FORMAT_IFF 5 /* iff (TAAC format) <-> standard rasterfile */
-#define RT_EXPERIMENTAL 0xffff /* Reserved for testing */
- long ras_maptype;
-#define RMT_NONE 0
-#define RMT_EQUAL_RGB 1
-#define RMT_RAW 2
- long ras_maplength;
-};
-
-struct pixrectops {
- int (*pro_rop) ();
- int (*pro_stencil) ();
- int (*pro_batchrop) ();
- int (*pro_nop) ();
- int (*pro_destroy) ();
- int (*pro_get) ();
- int (*pro_put) ();
- int (*pro_vector) ();
- struct pixrect *(*pro_region) ();
- int (*pro_putcolormap) ();
- int (*pro_getcolormap) ();
- int (*pro_putattributes) ();
- int (*pro_getattributes) ();
-};
-
-struct pr_size {
- int x, y;
-};
-struct pr_pos {
- int x, y;
-};
-
-struct pixrect {
- struct pixrectops *pr_ops;
- struct pr_size pr_size;
- int pr_depth;
- struct mpr_data *pr_data; /* work-alike only handles memory pixrects */
-};
-
-struct mpr_data {
- int md_linebytes;
- unsigned char *md_image; /* note, byte not short -- avoid pr_flip() */
- struct pr_pos md_offset;
- short md_primary;
- short md_flags;
-};
-
-typedef struct {
- int type;
- int length;
- unsigned char *map[3];
-} colormap_t;
-
-/* And the routine definitions. */
-
-struct pixrect *mem_create ARGS((int w, int h, int depth));
-void mem_free ARGS((struct pixrect * p));
-
-int pr_dump
-ARGS((struct pixrect * p, FILE * out, colormap_t * colormap, int type, int copy_flag));
-
-int pr_load_header ARGS((FILE * in, struct rasterfile * hP));
-
-int pr_load_colormap ARGS((FILE * in, struct rasterfile * hP, colormap_t * colormap));
-
-struct pixrect *pr_load_image ARGS((FILE * in, struct rasterfile * hP, colormap_t * colormap));
-
-#endif /*_RAST_H_*/