/*
*
* 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();
|