/*****************************************************************
 * fbm.h: FBM Release 1.0 25-Feb-90 Michael Mauldin
 *
 * Copyright (C) 1989,1990 by Michael Mauldin.  Permission is granted
 * to use this file in whole or in part for any purpose, educational,
 * recreational or commercial, provided that this copyright notice
 * is retained unchanged.  This software is available to all free of
 * charge by anonymous FTP and in the UUNET archives.
 *
 * fbm.h: Fuzzy Bitmap Definition
 *
 * USAGE
 *	# include <fbm.h>
 *
 * EDITLOG
 *	LastEditDate = Mon Jun 25 00:03:05 1990 - Michael Mauldin
 *	LastFileName = /usr2/mlm/src/misc/fbm/fbm.h
 *
 * HISTORY
 * 25-Jun-90  Michael Mauldin (mlm@cs.cmu.edu) Carnegie Mellon
 *	Package for Release 1.0
 *
 * 07-Mar-89  Michael Mauldin (mlm) at Carnegie Mellon University
 *	Beta release (version 0.9) mlm@cs.cmu.edu.
 *
 * 20-Aug-88  Michael Mauldin (mlm) at Carnegie-Mellon University
 *	Created.
 *****************************************************************/

# define FBM_MAX_TITLE		80		/* For title and credits */

# define BLACK			0		/* For 8bit files */
# define WHITE			255		/* For 8bit files */
# define BYTE			256		/* For 8bit files */

# define BIG			1		/* msb first byte order */
# define LITTLE			0		/* lsb first byte order */

# define BYTESPERLINE		32		/* For PostScript output */

# define BLANKS		"                                             "
# define SKIPARG	while (*++(*argv)); --(*argv)
# define CLRARG		strncpy (*argv, BLANKS, strlen (*argv)); \
			while (*++(*argv)); --(*argv)

# define FMT_ATK	1	/*   Andrew toolkit raster format */
# define FMT_FACE	2	/*   Bennet Yee's 1bit Face format */
# define FMT_FBM	3	/* + Fuzzy bitmap format */
# define FMT_GIF	4	/*   Compuserve Graphics Interchange */
# define FMT_IFF	5	/*   Amiga Interchange Format File */
# define FMT_LEAF	6	/*   InterLeaf image format */
# define FMT_MCP	7	/*   Macpaint format */
# define FMT_PBM	8	/*   Poskanzer 1bit format */
# define FMT_PCX	9	/*   PCX format */
# define FMT_SUN	10	/* + Sun rasterfile */
# define FMT_TIFF	11	/*   Tagged IFF, Next, Macintosh */
# define FMT_X11	12	/*   X11 format */
# define FMT_RLE	13	/*   Utah RLE format */

# define FMTCHAR ".ABFGILMPZSTXR"

# define DEF_8BIT	FMT_FBM
# define DEF_1BIT	FMT_SUN

/* An FBM bitmap header in memory */
typedef struct fbm_hdr_struct {
	int	cols;			/* Width in pixels */
	int	rows;			/* Height in pixels */
	int	planes;			/* Depth (1 for B+W, 3 for RGB) */
	int	bits;			/* Bits per pixel */
	int	physbits;		/* Bits to store each pixel */
	int	rowlen;			/* Length of a row in bytes */
	int	plnlen;			/* Length of a plane in bytes */
	int	clrlen;			/* Length of color map */
	double	aspect;			/* ratio of Y to X of one pixel */
	char	title[FBM_MAX_TITLE];	/* Null terminated title */
	char	credits[FBM_MAX_TITLE];	/* Null terminated credits */
} FBMHDR;

# define FBM_MAGIC	"%bitmap"
# define BM_MAGIC	('!' << 8 | '!')
# define PCX_MAGIC	0xa
# define GIF_MAGIC	"GIF87a"
# define IFF_MAGIC	"FORM"
# define SUN_MAGIC	0x59a66a95

/* FBM bitmap headers in files (null terminated 12 character ascii strings) */
typedef struct fbm_filehdr_struct {
	char	magic[8];		/* 2 bytes FBM_MAGIC number */
	char	cols[8];		/* Width in pixels */
	char	rows[8];		/* Height in pixels */
	char	planes[8];		/* Depth (1 for B+W, 3 for RGB) */
	char	bits[8];		/* Bits per pixel */
	char	physbits[8];		/* Bits to store each pixel */
	char	rowlen[12];		/* Length of a row in bytes */
	char	plnlen[12];		/* Length of a plane in bytes */
	char	clrlen[12];		/* Length of colormap in bytes */
	char	aspect[12];		/* ratio of Y to X of one pixel */
	char	title[FBM_MAX_TITLE];	/* Null terminated title */
	char	credits[FBM_MAX_TITLE];	/* Null terminated credits */
} FBMFILEHDR;

/* An FBM bitmap in memory */
typedef struct fbm_struct {
	FBMHDR hdr;			/* Bitmap header */
	unsigned char *cm;		/* Pointer to colormap */
	unsigned char *bm;		/* Pointer to raw bits */
} FBM;

/* Functions */
double atof ();
char *strcpy();
char *strncpy();

#ifndef _COMPAT_
char *malloc();
#endif

long time (), get_long ();
int get_short ();

/* Macro for getting next magic char */
# define NEXTMCH(F,S,L) (((L) > 0) ? ((L)--, *(S)++) : getc (F))
