source: buchla-68k/vlib/vbfill4.c@ 0580615

Last change on this file since 0580615 was 0580615, checked in by Thomas Lopatic <thomas@…>, 7 years ago

Point of no return.

  • Property mode set to 100644
File size: 3.7 KB
Line 
1/*
2 =============================================================================
3 vbfill4.c -- video block fill blitter for 4 bit per pixel objects
4 Version 3 -- 1987-08-04 -- D.N. Lynx Crowe
5
6 Fills an area with a color. Coded for speed, not space.
7 =============================================================================
8*/
9
10static short fm[] = { /* fill masks */
11
12 0x000F,
13 0x00FF,
14 0x0FFF,
15 0xFFFF,
16
17 0x00F0,
18 0x0FF0,
19 0xFFF0,
20
21 0x0F00,
22 0xFF00,
23
24 0xF000
25};
26
27/*
28
29*/
30
31void vbfill4(unsigned *obj, short obwidth, short xmin, short ymin, short xmax, short ymax, unsigned color)
32{
33 short mw, nl, width;
34
35 register unsigned *fwp, *wp;
36
37 register unsigned lmask, rmask;
38 register short i, j;
39
40 fwp = obj + (long)(xmin >> 2) + ((long)ymin * obwidth);
41 width = xmax - xmin + 1;
42 nl = ymax - ymin + 1;
43 lmask = rmask = 0;
44
45/*
46
47*/
48 switch (xmin & 3) {
49
50 case 0:
51
52 if (width > 4) {
53
54 width -= 5;
55 lmask = fm[3];
56 mw = width >> 2;
57
58 if (mw) {
59
60 rmask = fm[width & 3];
61
62 for (i = 0; i < nl; i++) {
63
64 wp = fwp;
65 fwp += obwidth;
66 *wp++ = (*wp & ~lmask) | (color & lmask);
67
68 for (j = 0; j < mw; j++)
69 *wp++ = color;
70
71 *wp = (*wp & ~rmask) | (color & rmask);
72 }
73
74 } else {
75
76 rmask = fm[width & 3];
77
78 for (i = 0; i < nl; i++) {
79
80 wp = fwp;
81 fwp += obwidth;
82 *wp++ = (*wp & ~lmask) | (color & lmask);
83 *wp = (*wp & ~rmask) | (color & rmask);
84 }
85 }
86
87 } else {
88
89 lmask = fm[width - 1];
90
91 for (i = 0; i < nl; i++) {
92
93 wp = fwp;
94 fwp += obwidth;
95 *wp = (*wp & ~lmask) | (color & lmask);
96 }
97 }
98
99 return;
100
101/*
102
103*/
104 case 1:
105
106 if (width > 3) {
107
108 width -= 4;
109 lmask = fm[6];
110 mw = width >> 2;
111
112 if (mw) {
113
114 rmask = fm[width & 3];
115
116 for (i = 0; i < nl; i++) {
117
118 wp = fwp;
119 fwp += obwidth;
120 *wp++ = (*wp & ~lmask) | (color & lmask);
121
122 for (j = 0; j < mw; j++)
123 *wp++ = color;
124
125 *wp = (*wp & ~rmask) | (color & rmask);
126 }
127
128 } else {
129
130 rmask = fm[width & 3];
131
132 for (i = 0; i < nl; i++) {
133
134 wp = fwp;
135 fwp += obwidth;
136 *wp++ = (*wp & ~lmask) | (color & lmask);
137 *wp = (*wp & ~rmask) | (color & rmask);
138 }
139 }
140
141 } else {
142
143 lmask = fm[width + 3];
144
145 for (i = 0; i < nl; i++) {
146
147 wp = fwp;
148 fwp += obwidth;
149 *wp = (*wp & ~lmask) | (color & lmask);
150 }
151 }
152
153 return;
154
155/*
156
157*/
158 case 2:
159
160 if (width > 2) {
161
162 width -= 3;
163 lmask = fm[8];
164 mw = width >> 2;
165
166 if (mw) {
167
168 rmask = fm[width & 3];
169
170 for (i = 0; i < nl; i++) {
171
172 wp = fwp;
173 fwp += obwidth;
174 *wp++ = (*wp & ~lmask) | (color & lmask);
175
176 for (j = 0; j < mw; j++)
177 *wp++ = color;
178
179 *wp = (*wp & ~rmask) | (color & rmask);
180 }
181
182 } else {
183
184 rmask = fm[width & 3];
185
186 for (i = 0; i < nl; i++) {
187
188 wp = fwp;
189 fwp += obwidth;
190 *wp++ = (*wp & ~lmask) | (color & lmask);
191 *wp = (*wp & ~rmask) | (color & rmask);
192 }
193 }
194
195 } else {
196
197 lmask = fm[width + 6];
198
199 for (i = 0; i < nl; i++) {
200
201 wp = fwp;
202 fwp += obwidth;
203 *wp = (*wp & ~lmask) | (color & lmask);
204 }
205 }
206
207 return;
208
209/*
210
211*/
212 case 3:
213
214 if (width > 1) {
215
216 width -= 2;
217 lmask = fm[9];
218 mw = width >> 2;
219
220 if (mw) {
221
222 rmask = fm[width & 3];
223
224 for (i = 0; i < nl; i++) {
225
226 wp = fwp;
227 fwp += obwidth;
228 *wp++ = (*wp & ~lmask) | (color & lmask);
229
230 for (j = 0; j < mw; j++)
231 *wp++ = color;
232
233 *wp = (*wp &~rmask) | (color & rmask);
234 }
235
236 } else {
237
238 rmask = fm[width & 3];
239
240 for (i = 0; i < nl; i++) {
241
242 wp = fwp;
243 fwp += obwidth;
244 *wp++ = (*wp & ~lmask) | (color & lmask);
245 *wp = (*wp & ~rmask) | (color & rmask);
246 }
247 }
248
249 } else {
250
251 lmask = fm[9];
252
253 for (i = 0; i < nl; i++) {
254
255 wp = fwp;
256 fwp += obwidth;
257 *wp = (*wp & ~lmask) | (color & lmask);
258 }
259 }
260
261 return;
262 }
263}
Note: See TracBrowser for help on using the repository browser.