/* xwd.h:
 *
 * portable-ized xwd file information.  they could have made this easier.
 *
 * jim frost 07.24.90
 *
 * Copyright 1989 Jim Frost.  See included file "copyright.h" for complete
 * copyright information.
 */

#define XWD_VERSION 7 /* XWD version we support */

typedef struct {
  byte header_size[4];      /* Size of the entire file header (bytes). */
  byte file_version[4];	    /* XWD_FILE_VERSION */
  byte pixmap_format[4];    /* Pixmap format */
  byte pixmap_depth[4];	    /* Pixmap depth */
  byte pixmap_width[4];     /* Pixmap width */
  byte pixmap_height[4];    /* Pixmap height */
  byte xoffset[4];          /* Bitmap x offset */
  byte byte_order[4];       /* MSBFirst, LSBFirst */
  byte bitmap_unit[4];      /* Bitmap unit */
  byte bitmap_bit_order[4]; /* MSBFirst, LSBFirst */
  byte bitmap_pad[4];       /* Bitmap scanline pad */
  byte bits_per_pixel[4];   /* Bits per pixel */
  byte bytes_per_line[4];   /* Bytes per scanline */
  byte visual_class[4];     /* Class of colormap */
  byte red_mask[4];         /* Z red mask */
  byte green_mask[4];       /* Z green mask */
  byte blue_mask[4];        /* Z blue mask */
  byte bits_per_rgb[4];     /* Log2 of distinct color values */
  byte colormap_entries[4]; /* Number of entries in colormap */
  byte ncolors[4];          /* Number of Color structures */
  byte window_width[4];     /* Window width */
  byte window_height[4];    /* Window height */
  byte window_x[4];         /* Window upper left X coordinate */
  byte window_y[4];         /* Window upper left Y coordinate */
  byte window_bdrwidth[4];  /* Window border width */
} GenericXWDHeader;

typedef struct {
  unsigned int header_size;      /* Size of the entire file header (bytes). */
  unsigned int file_version;     /* XWD_FILE_VERSION */
  unsigned int pixmap_format;    /* Pixmap format */
  unsigned int pixmap_depth;     /* Pixmap depth */
  unsigned int pixmap_width;     /* Pixmap width */
  unsigned int pixmap_height;    /* Pixmap height */
  unsigned int xoffset;          /* Bitmap x offset */
  unsigned int byte_order;       /* MSBFirst, LSBFirst */
  unsigned int bitmap_unit;      /* Bitmap unit */
  unsigned int bitmap_bit_order; /* MSBFirst, LSBFirst */
  unsigned int bitmap_pad;       /* Bitmap scanline pad */
  unsigned int bits_per_pixel;   /* Bits per pixel */
  unsigned int bytes_per_line;   /* Bytes per scanline */
  unsigned int visual_class;     /* Class of colormap */
/*unsigned int red_mask;*/       /* Z red mask */
/*unsigned int green_mask;*/     /* Z green mask */
/*unsigned int blue_mask;*/      /* Z blue mask */
/*unsigned int bits_per_rgb;*/   /* Log2 of distinct color values */
  unsigned int colormap_entries; /* Number of entries in colormap */
  unsigned int ncolors;          /* Number of Color structures */
/*unsigned int window_width;*/   /* Window width */
/*unsigned int window_height;*/  /* Window height */
/*unsigned int window_x;*/       /* Window upper left X coordinate */
/*unsigned int window_y;*/       /* Window upper left Y coordinate */
/*unsigned int window_bdrwidth;*//* Window border width */
} XWDHeader;

typedef struct {
  byte pixel[4]; /* pixel value for this color */
  byte red[2];   /* red intensity */
  byte green[2]; /* green intensity */
  byte blue[2];  /* blue intensity */
  byte flags;    /* XColor flags (ignored) */
  byte pad;
} XWDColor;

#define NOT_XWD 0 /* definitely not an XWD file */
#define XWD_MSB 1 /* looks like XWD file created on MSBFirst machine */
#define XWD_LSB 2 /* looks like XWD file created on LSBFirst machine */
