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