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