1*7dd7cddfSDavid du Colombier /* 2*7dd7cddfSDavid du Colombier * 3*7dd7cddfSDavid du Colombier * BGI opcodes. 4*7dd7cddfSDavid du Colombier * 5*7dd7cddfSDavid du Colombier */ 6*7dd7cddfSDavid du Colombier 7*7dd7cddfSDavid du Colombier #define BRCHAR 033 /* rotated character mode */ 8*7dd7cddfSDavid du Colombier #define BCHAR 034 /* graphical character mode */ 9*7dd7cddfSDavid du Colombier #define BGRAPH 035 /* graphical master mode */ 10*7dd7cddfSDavid du Colombier 11*7dd7cddfSDavid du Colombier #define BSUB 042 /* subroutine definition */ 12*7dd7cddfSDavid du Colombier #define BRET 043 /* end of subroutine */ 13*7dd7cddfSDavid du Colombier #define BCALL 044 /* subroutine call */ 14*7dd7cddfSDavid du Colombier 15*7dd7cddfSDavid du Colombier #define BEND 045 /* end page */ 16*7dd7cddfSDavid du Colombier #define BERASE 046 /* erase - obsolete */ 17*7dd7cddfSDavid du Colombier #define BREP 047 /* repeat */ 18*7dd7cddfSDavid du Colombier #define BENDR 050 /* end repeat */ 19*7dd7cddfSDavid du Colombier 20*7dd7cddfSDavid du Colombier #define BSETX 051 /* set horizontal position */ 21*7dd7cddfSDavid du Colombier #define BSETY 052 /* set vertical position */ 22*7dd7cddfSDavid du Colombier #define BSETXY 053 /* set horizontal and vertical positions */ 23*7dd7cddfSDavid du Colombier #define BINTEN 054 /* intensify - mark current pixel */ 24*7dd7cddfSDavid du Colombier 25*7dd7cddfSDavid du Colombier #define BVISX 055 /* manhattan vector - change x first */ 26*7dd7cddfSDavid du Colombier #define BINVISX 056 /* same as BVISX but nothing drawn */ 27*7dd7cddfSDavid du Colombier #define BVISY 057 /* manhattan vector - change y first */ 28*7dd7cddfSDavid du Colombier #define BINVISY 060 /* same as BVISY but nothing drawn */ 29*7dd7cddfSDavid du Colombier 30*7dd7cddfSDavid du Colombier #define BVEC 061 /* arbitrary long vector */ 31*7dd7cddfSDavid du Colombier #define BSVEC 062 /* arbitrary short vector */ 32*7dd7cddfSDavid du Colombier #define BRECT 063 /* outline rectangle */ 33*7dd7cddfSDavid du Colombier #define BPOINT1 064 /* point plot - mode 1 */ 34*7dd7cddfSDavid du Colombier #define BPOINT 065 /* point plot - mode 2 */ 35*7dd7cddfSDavid du Colombier #define BLINE 066 /* line plot */ 36*7dd7cddfSDavid du Colombier 37*7dd7cddfSDavid du Colombier #define BCSZ 067 /* set character size */ 38*7dd7cddfSDavid du Colombier #define BLTY 070 /* select line type */ 39*7dd7cddfSDavid du Colombier #define BARC 071 /* draw circular arc */ 40*7dd7cddfSDavid du Colombier #define BFARC 072 /* filled circular arc */ 41*7dd7cddfSDavid du Colombier #define BFRECT 073 /* filled rectangle */ 42*7dd7cddfSDavid du Colombier #define BRASRECT 074 /* raster rectangle */ 43*7dd7cddfSDavid du Colombier #define BCOL 075 /* select color */ 44*7dd7cddfSDavid du Colombier #define BFTRAPH 076 /* filled trapezoid */ 45*7dd7cddfSDavid du Colombier #define BPAT 077 /* pattern are for filling - no info */ 46*7dd7cddfSDavid du Colombier 47*7dd7cddfSDavid du Colombier #define BNOISE 0 /* from bad file format */ 48*7dd7cddfSDavid du Colombier 49*7dd7cddfSDavid du Colombier /* 50*7dd7cddfSDavid du Colombier * 51*7dd7cddfSDavid du Colombier * Character size is controlled by the spacing of dots in a 5x7 dot matrix, which 52*7dd7cddfSDavid du Colombier * by default is set to BGISIZE. 53*7dd7cddfSDavid du Colombier * 54*7dd7cddfSDavid du Colombier */ 55*7dd7cddfSDavid du Colombier 56*7dd7cddfSDavid du Colombier #define BGISIZE 2 /* default character grid spacing */ 57*7dd7cddfSDavid du Colombier 58*7dd7cddfSDavid du Colombier /* 59*7dd7cddfSDavid du Colombier * 60*7dd7cddfSDavid du Colombier * Definitions used to decode the bytes read from a BGI file. 61*7dd7cddfSDavid du Colombier * 62*7dd7cddfSDavid du Colombier */ 63*7dd7cddfSDavid du Colombier 64*7dd7cddfSDavid du Colombier #define CHMASK 0177 /* characters only use 7 bits */ 65*7dd7cddfSDavid du Colombier #define DMASK 077 /* data values use lower 6 bits */ 66*7dd7cddfSDavid du Colombier #define MSB 0100 /* used to check for data or opcode */ 67*7dd7cddfSDavid du Colombier #define SGNB 040 /* sign bit for integers */ 68*7dd7cddfSDavid du Colombier #define MSBMAG 037 /* mag of most sig byte in a BGI int */ 69*7dd7cddfSDavid du Colombier 70*7dd7cddfSDavid du Colombier /* 71*7dd7cddfSDavid du Colombier * 72*7dd7cddfSDavid du Colombier * Descriptions of BGI vectors and what's done when they're drawn. 73*7dd7cddfSDavid du Colombier * 74*7dd7cddfSDavid du Colombier */ 75*7dd7cddfSDavid du Colombier 76*7dd7cddfSDavid du Colombier #define X_COORD 0 /* change x next in manhattan vector */ 77*7dd7cddfSDavid du Colombier #define Y_COORD 1 /* same but y change comes next */ 78*7dd7cddfSDavid du Colombier #define LONGVECTOR 2 /* arbitrary long vector */ 79*7dd7cddfSDavid du Colombier #define SHORTVECTOR 3 /* components given in 6 bits */ 80*7dd7cddfSDavid du Colombier 81*7dd7cddfSDavid du Colombier #define VISIBLE 0 /* really draw the vector */ 82*7dd7cddfSDavid du Colombier #define INVISIBLE 1 /* just move the current position */ 83*7dd7cddfSDavid du Colombier 84*7dd7cddfSDavid du Colombier /* 85*7dd7cddfSDavid du Colombier * 86*7dd7cddfSDavid du Colombier * What's done with a closed path. 87*7dd7cddfSDavid du Colombier * 88*7dd7cddfSDavid du Colombier */ 89*7dd7cddfSDavid du Colombier 90*7dd7cddfSDavid du Colombier #define OUTLINE 0 /* outline the defined path */ 91*7dd7cddfSDavid du Colombier #define FILL 1 /* fill it in */ 92*7dd7cddfSDavid du Colombier 93*7dd7cddfSDavid du Colombier /* 94*7dd7cddfSDavid du Colombier * 95*7dd7cddfSDavid du Colombier * BGI line style definitions. They're used as an index into the STYLES array, 96*7dd7cddfSDavid du Colombier * which really belongs in the prologue. 97*7dd7cddfSDavid du Colombier * 98*7dd7cddfSDavid du Colombier */ 99*7dd7cddfSDavid du Colombier 100*7dd7cddfSDavid du Colombier #define SOLID 0 101*7dd7cddfSDavid du Colombier #define DOTTED 1 102*7dd7cddfSDavid du Colombier #define SHORTDASH 2 103*7dd7cddfSDavid du Colombier #define DASH 3 104*7dd7cddfSDavid du Colombier #define LONGDASH 4 105*7dd7cddfSDavid du Colombier #define DOTDASH 5 106*7dd7cddfSDavid du Colombier #define THREEDOT 6 107*7dd7cddfSDavid du Colombier 108*7dd7cddfSDavid du Colombier #define STYLES \ 109*7dd7cddfSDavid du Colombier \ 110*7dd7cddfSDavid du Colombier { \ 111*7dd7cddfSDavid du Colombier "[]", \ 112*7dd7cddfSDavid du Colombier "[.5 2]", \ 113*7dd7cddfSDavid du Colombier "[2 4]", \ 114*7dd7cddfSDavid du Colombier "[4 4]", \ 115*7dd7cddfSDavid du Colombier "[8 4]", \ 116*7dd7cddfSDavid du Colombier "[.5 2 4 2]", \ 117*7dd7cddfSDavid du Colombier "[.5 2 .5 2 .5 2 4 2]" \ 118*7dd7cddfSDavid du Colombier } 119*7dd7cddfSDavid du Colombier 120*7dd7cddfSDavid du Colombier /* 121*7dd7cddfSDavid du Colombier * 122*7dd7cddfSDavid du Colombier * Three constants used to choose which component (RED, GREEN, or BLUE) we're 123*7dd7cddfSDavid du Colombier * interested in. BGI colors are specified as a single data byte and pulling a 124*7dd7cddfSDavid du Colombier * particular component out of the BGI color byte is handled by procedure 125*7dd7cddfSDavid du Colombier * get_color(). 126*7dd7cddfSDavid du Colombier * 127*7dd7cddfSDavid du Colombier */ 128*7dd7cddfSDavid du Colombier 129*7dd7cddfSDavid du Colombier #define RED 0 130*7dd7cddfSDavid du Colombier #define GREEN 1 131*7dd7cddfSDavid du Colombier #define BLUE 2 132*7dd7cddfSDavid du Colombier 133*7dd7cddfSDavid du Colombier /* 134*7dd7cddfSDavid du Colombier * 135*7dd7cddfSDavid du Colombier * An array of type Disp is used to save the horizontal and vertical displacements 136*7dd7cddfSDavid du Colombier * that result after a subroutine has been called. Needed so we can properly adjust 137*7dd7cddfSDavid du Colombier * our horizontal and vertical positions after a subroutine call. Entries are made 138*7dd7cddfSDavid du Colombier * immediately after a subroutine is defined and used after the call. Subroutine 139*7dd7cddfSDavid du Colombier * names are integers that range from 0 to 63 (assigned in the BG file) and the 140*7dd7cddfSDavid du Colombier * name is used as an index into the Disp array when we save or retrieve the 141*7dd7cddfSDavid du Colombier * displacement. 142*7dd7cddfSDavid du Colombier * 143*7dd7cddfSDavid du Colombier */ 144*7dd7cddfSDavid du Colombier 145*7dd7cddfSDavid du Colombier typedef struct { 146*7dd7cddfSDavid du Colombier int dx; /* horizontal and */ 147*7dd7cddfSDavid du Colombier int dy; /* vertical displacements */ 148*7dd7cddfSDavid du Colombier } Disp; 149*7dd7cddfSDavid du Colombier 150*7dd7cddfSDavid du Colombier /* 151*7dd7cddfSDavid du Colombier * 152*7dd7cddfSDavid du Colombier * An array of type Fontmap helps convert font names requested by users into 153*7dd7cddfSDavid du Colombier * legitimate PostScript names. The array is initialized using FONTMAP, which must 154*7dd7cddfSDavid du Colombier * end with and entry that has NULL defined as its name field. 155*7dd7cddfSDavid du Colombier * 156*7dd7cddfSDavid du Colombier */ 157*7dd7cddfSDavid du Colombier 158*7dd7cddfSDavid du Colombier typedef struct { 159*7dd7cddfSDavid du Colombier char *name; /* user's font name */ 160*7dd7cddfSDavid du Colombier char *val; /* corresponding PostScript name */ 161*7dd7cddfSDavid du Colombier } Fontmap; 162*7dd7cddfSDavid du Colombier 163*7dd7cddfSDavid du Colombier #define FONTMAP \ 164*7dd7cddfSDavid du Colombier \ 165*7dd7cddfSDavid du Colombier { \ 166*7dd7cddfSDavid du Colombier "R", "Courier", \ 167*7dd7cddfSDavid du Colombier "I", "Courier-Oblique", \ 168*7dd7cddfSDavid du Colombier "B", "Courier-Bold", \ 169*7dd7cddfSDavid du Colombier "CO", "Courier", \ 170*7dd7cddfSDavid du Colombier "CI", "Courier-Oblique", \ 171*7dd7cddfSDavid du Colombier "CB", "Courier-Bold", \ 172*7dd7cddfSDavid du Colombier "CW", "Courier", \ 173*7dd7cddfSDavid du Colombier "PO", "Courier", \ 174*7dd7cddfSDavid du Colombier "courier", "Courier", \ 175*7dd7cddfSDavid du Colombier "cour", "Courier", \ 176*7dd7cddfSDavid du Colombier "co", "Courier", \ 177*7dd7cddfSDavid du Colombier NULL, NULL \ 178*7dd7cddfSDavid du Colombier } 179*7dd7cddfSDavid du Colombier 180*7dd7cddfSDavid du Colombier /* 181*7dd7cddfSDavid du Colombier * 182*7dd7cddfSDavid du Colombier * Two macros that are useful in processing BGI files: 183*7dd7cddfSDavid du Colombier * 184*7dd7cddfSDavid du Colombier * MAG(A, B) - Takes bytes A and B which have been read from a BGI file 185*7dd7cddfSDavid du Colombier * and returns the magnitude of the integer represented by 186*7dd7cddfSDavid du Colombier * the two bytes. 187*7dd7cddfSDavid du Colombier * 188*7dd7cddfSDavid du Colombier * LINESPACE(A) - Takes BGI size A and returns the number of address units 189*7dd7cddfSDavid du Colombier * that can be used for a reasonable interline spacing. 190*7dd7cddfSDavid du Colombier * 191*7dd7cddfSDavid du Colombier */ 192*7dd7cddfSDavid du Colombier 193*7dd7cddfSDavid du Colombier #define MAG(A, B) (((A & MSBMAG) << 6) | (B & DMASK)) 194*7dd7cddfSDavid du Colombier #define LINESPACE(A) (8 * A) 195*7dd7cddfSDavid du Colombier 196*7dd7cddfSDavid du Colombier /* 197*7dd7cddfSDavid du Colombier * 198*7dd7cddfSDavid du Colombier * Some of the non-integer valued functions in postdmd.c. 199*7dd7cddfSDavid du Colombier * 200*7dd7cddfSDavid du Colombier */ 201*7dd7cddfSDavid du Colombier 202*7dd7cddfSDavid du Colombier char *get_font(); 203*7dd7cddfSDavid du Colombier 204