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