203 lines · 5.4 KB · C
RawDownload
/* * * BGI opcodes. * */ #define BRCHAR		033		/* rotated character mode */#define BCHAR		034		/* graphical character mode */#define BGRAPH		035		/* graphical master mode */ #define BSUB		042		/* subroutine definition */#define BRET		043		/* end of subroutine */#define BCALL		044		/* subroutine call */ #define BEND		045		/* end page */#define BERASE		046		/* erase - obsolete */#define BREP		047		/* repeat */#define BENDR		050		/* end repeat */ #define BSETX		051		/* set horizontal position */#define BSETY		052		/* set vertical position */#define BSETXY		053		/* set horizontal and vertical positions */#define BINTEN		054		/* intensify - mark current pixel */ #define BVISX		055		/* manhattan vector - change x first */#define BINVISX		056		/* same as BVISX but nothing drawn */#define BVISY		057		/* manhattan vector - change y first */#define BINVISY		060		/* same as BVISY but nothing drawn */ #define BVEC		061		/* arbitrary long vector */#define BSVEC		062		/* arbitrary short vector */#define BRECT		063		/* outline rectangle */#define BPOINT1		064		/* point plot - mode 1 */#define BPOINT		065		/* point plot - mode 2 */#define BLINE		066		/* line plot */ #define BCSZ		067		/* set character size */#define BLTY		070		/* select line type */#define BARC		071		/* draw circular arc */#define BFARC		072		/* filled circular arc */#define BFRECT		073		/* filled rectangle */#define BRASRECT	074		/* raster rectangle */#define BCOL		075		/* select color */#define BFTRAPH		076		/* filled trapezoid */#define BPAT		077		/* pattern are for filling - no info */ #define BNOISE		0		/* from bad file format */ /* * * Character size is controlled by the spacing of dots in a 5x7 dot matrix, which * by default is set to BGISIZE. * */ #define BGISIZE		2		/* default character grid spacing */ /* * * Definitions used to decode the bytes read from a BGI file. * */ #define CHMASK		0177		/* characters only use 7 bits */#define DMASK		077		/* data values use lower 6 bits */#define MSB		0100		/* used to check for data or opcode */#define SGNB		040		/* sign bit for integers */#define MSBMAG		037		/* mag of most sig byte in a BGI int */ /* * * Descriptions of BGI vectors and what's done when they're drawn. * */ #define X_COORD		0		/* change x next in manhattan vector */#define Y_COORD		1		/* same but y change comes next */#define LONGVECTOR	2		/* arbitrary long vector */#define SHORTVECTOR	3		/* components given in 6 bits */ #define VISIBLE		0		/* really draw the vector */#define INVISIBLE	1		/* just move the current position */ /* * * What's done with a closed path. * */ #define OUTLINE		0		/* outline the defined path */#define FILL		1		/* fill it in */ /* * * BGI line style definitions. They're used as an index into the STYLES array, * which really belongs in the prologue. * */ #define SOLID		0#define DOTTED		1#define SHORTDASH	2#define DASH		3#define LONGDASH	4#define DOTDASH		5#define THREEDOT	6 #define STYLES								\									\	{								\	    "[]",							\	    "[.5 2]",							\	    "[2 4]",							\	    "[4 4]",							\	    "[8 4]",							\	    "[.5 2 4 2]",						\	    "[.5 2 .5 2 .5 2 4 2]"					\	} /* * * Three constants used to choose which component (RED, GREEN, or BLUE) we're * interested in. BGI colors are specified as a single data byte and pulling a * particular  component out of the BGI color byte is handled by procedure * get_color(). * */ #define RED		0#define GREEN		1#define BLUE		2 /* * * An array of type Disp is used to save the horizontal and vertical displacements * that result after a subroutine has been called. Needed so we can properly adjust * our horizontal and vertical positions after a subroutine call. Entries are made * immediately after a subroutine is defined and used after the call. Subroutine * names are integers that range from 0 to 63 (assigned in the BG file) and the * name is used as an index into the Disp array when we save or retrieve the * displacement. * */ typedef struct {	int	dx;			/* horizontal and */	int	dy;			/* vertical displacements */} Disp; /* * * An array of type Fontmap helps convert font names requested by users into * legitimate PostScript names. The array is initialized using FONTMAP, which must * end with and entry that has NULL defined as its name field. * */ typedef struct {	char	*name;			/* user's font name */	char	*val;			/* corresponding PostScript name */} Fontmap; #define FONTMAP								\									\	{								\	    "R", "Courier",						\	    "I", "Courier-Oblique",					\	    "B", "Courier-Bold",					\	    "CO", "Courier",						\	    "CI", "Courier-Oblique",					\	    "CB", "Courier-Bold",					\	    "CW", "Courier",						\	    "PO", "Courier",						\	    "courier", "Courier",					\	    "cour", "Courier",						\	    "co", "Courier",						\	    NULL, NULL							\	} /* * * Two macros that are useful in processing BGI files: * *       MAG(A, B)    - Takes bytes A and B which have been read from a BGI file *                      and returns the magnitude of the integer represented by *                      the two bytes. * *       LINESPACE(A) - Takes BGI size A and returns the number of address units *                      that can be used for a reasonable interline spacing. * */ #define MAG(A, B)	(((A & MSBMAG) << 6) | (B & DMASK))#define LINESPACE(A)	(8 * A) /* * * Some of the non-integer valued functions in postdmd.c. * */ char	*get_font();