]> git.sesse.net Git - rdpsrv/blob - Xserver/programs/Xserver/cfb/cfbmskbits.c
Import X server from vnc-3.3.7.
[rdpsrv] / Xserver / programs / Xserver / cfb / cfbmskbits.c
1 /************************************************************
2 Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
3
4                     All Rights Reserved
5
6 Permission  to  use,  copy,  modify,  and  distribute   this
7 software  and  its documentation for any purpose and without
8 fee is hereby granted, provided that the above copyright no-
9 tice  appear  in all copies and that both that copyright no-
10 tice and this permission notice appear in  supporting  docu-
11 mentation,  and  that the names of Sun or X Consortium
12 not be used in advertising or publicity pertaining to 
13 distribution  of  the software  without specific prior 
14 written permission. Sun and X Consortium make no 
15 representations about the suitability of this software for 
16 any purpose. It is provided "as is" without any express or 
17 implied warranty.
18
19 SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO  THIS  SOFTWARE,
20 INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
21 NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE  LI-
22 ABLE  FOR  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
23 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,  DATA  OR
24 PROFITS,  WHETHER  IN  AN  ACTION OF CONTRACT, NEGLIGENCE OR
25 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
26 THE USE OR PERFORMANCE OF THIS SOFTWARE.
27
28 ********************************************************/
29
30 /* $XConsortium: cfbmskbits.c,v 4.13 94/07/28 12:30:41 dpw Exp $ */
31 /* $XFree86: xc/programs/Xserver/cfb/cfbmskbits.c,v 3.0 1996/06/29 09:05:41 dawes Exp $ */
32
33 /*
34  * ==========================================================================
35  * Converted to Color Frame Buffer by smarks@sun, April-May 1987.  The "bit 
36  * numbering" in the doc below really means "byte numbering" now.
37  * ==========================================================================
38  */
39
40 /*
41    these tables are used by several macros in the cfb code.
42
43    the vax numbers everything left to right, so bit indices on the
44 screen match bit indices in longwords.  the pc-rt and Sun number
45 bits on the screen the way they would be written on paper,
46 (i.e. msb to the left), and so a bit index n on the screen is
47 bit index 32-n in a longword
48
49    see also cfbmskbits.h
50 */
51 #include        <X.h>
52 #include        <Xmd.h>
53 #include        <servermd.h>
54 #include        "cfb.h"
55 #include        "cfbmskbits.h"
56
57 #define _cfbBits(a) (PixelGroup)(a)
58
59 #if     (BITMAP_BIT_ORDER == MSBFirst)
60 #define cfbBits(v)      _cfbBits(v)
61 #else /* BITMAP_BIT_ORDER == LSBFirst */
62 #define cfbFlip2(a)     ((((a) & 0x1) << 1) | (((a) & 0x2) >> 1))
63 #define cfbFlip4(a)     ((cfbFlip2(a) << 2) | cfbFlip2(a >> 2))
64 #define cfbFlip8(a)     ((cfbFlip4(a) << 4) | cfbFlip4(a >> 4))
65 #define cfbFlip16(a)    ((cfbFlip8(a) << 8) | cfbFlip8(a >> 8))
66 #define cfbFlip32(a)    ((cfbFlip16(a) << 16) | cfbFlip16(a >> 16))
67 #if PGSZ == 32
68 #define cfbBits(a)      cfbFlip32(_cfbBits(a))
69 #else /* PGSZ == 64 */
70 #define cfbFlip64(a)    ((cfbFlip32(a) << 32) | cfbFlip32(a >> 32))
71 #define cfbBits(a)      cfbFlip64(_cfbBits(a))
72 #endif /* PGSZ */
73 #endif /* BITMAP_BIT_ORDER */
74
75 /* NOTE:
76 the first element in starttab could be 0xffffffff.  making it 0
77 lets us deal with a full first word in the middle loop, rather
78 than having to do the multiple reads and masks that we'd
79 have to do if we thought it was partial.
80 */
81 #if PSZ == 4
82 #if PGSZ == 32
83 PixelGroup cfbstarttab[] =
84     {
85         cfbBits(0x00000000),
86         cfbBits(0x0FFFFFFF),
87         cfbBits(0x00FFFFFF),
88         cfbBits(0x000FFFFF),
89         cfbBits(0x0000FFFF),
90         cfbBits(0x00000FFF),
91         cfbBits(0x000000FF),
92         cfbBits(0x0000000F)
93     };
94 PixelGroup cfbendtab[] =
95     {
96         cfbBits(0x00000000),
97         cfbBits(0xF0000000),
98         cfbBits(0xFF000000),
99         cfbBits(0xFFF00000),
100         cfbBits(0xFFFF0000),
101         cfbBits(0xFFFFF000),
102         cfbBits(0xFFFFFF00),
103         cfbBits(0xFFFFFFF0)
104     };
105 #else /* PGSZ == 64 */
106 PixelGroup cfbstarttab[] =
107     {
108         cfbBits(0x0000000000000000),
109         cfbBits(0x0FFFFFFFFFFFFFFF),
110         cfbBits(0x00FFFFFFFFFFFFFF),
111         cfbBits(0x000FFFFFFFFFFFFF),
112         cfbBits(0x0000FFFFFFFFFFFF),
113         cfbBits(0x00000FFFFFFFFFFF),
114         cfbBits(0x000000FFFFFFFFFF),
115         cfbBits(0x0000000FFFFFFFFF),
116         cfbBits(0x00000000FFFFFFFF),
117         cfbBits(0x000000000FFFFFFF),
118         cfbBits(0x0000000000FFFFFF),
119         cfbBits(0x00000000000FFFFF),
120         cfbBits(0x000000000000FFFF),
121         cfbBits(0x0000000000000FFF),
122         cfbBits(0x00000000000000FF),
123         cfbBits(0x000000000000000F),
124     };
125 PixelGroup cfbendtab[] =
126     {
127         cfbBits(0x0000000000000000),
128         cfbBits(0xF000000000000000),
129         cfbBits(0xFF00000000000000),
130         cfbBits(0xFFF0000000000000),
131         cfbBits(0xFFFF000000000000),
132         cfbBits(0xFFFFF00000000000),
133         cfbBits(0xFFFFFF0000000000),
134         cfbBits(0xFFFFFFF000000000),
135         cfbBits(0xFFFFFFFF00000000),
136         cfbBits(0xFFFFFFFFF0000000),
137         cfbBits(0xFFFFFFFFFF000000),
138         cfbBits(0xFFFFFFFFFFF00000),
139         cfbBits(0xFFFFFFFFFFFF0000),
140         cfbBits(0xFFFFFFFFFFFFF000),
141         cfbBits(0xFFFFFFFFFFFFFF00),
142         cfbBits(0xFFFFFFFFFFFFFFF0),
143     };
144 #endif /* PGSZ */
145 #endif /* PSZ == 4 */
146
147 #if PSZ == 8
148 #if PGSZ == 32
149 PixelGroup cfbstarttab[] =
150     {
151         cfbBits(0x00000000),
152         cfbBits(0x00FFFFFF),
153         cfbBits(0x0000FFFF),
154         cfbBits(0x000000FF)
155     };
156 PixelGroup cfbendtab[] =
157     {
158         cfbBits(0x00000000),
159         cfbBits(0xFF000000),
160         cfbBits(0xFFFF0000),
161         cfbBits(0xFFFFFF00)
162     };
163 #else /* PGSZ == 64 */
164 PixelGroup cfbstarttab[] =
165     {
166         cfbBits(0x0000000000000000),
167         cfbBits(0x00FFFFFFFFFFFFFF),
168         cfbBits(0x0000FFFFFFFFFFFF),
169         cfbBits(0x000000FFFFFFFFFF),
170         cfbBits(0x00000000FFFFFFFF),
171         cfbBits(0x0000000000FFFFFF),
172         cfbBits(0x000000000000FFFF),
173         cfbBits(0x00000000000000FF)
174     };
175 PixelGroup cfbendtab[] =
176     {
177         cfbBits(0x0000000000000000),
178         cfbBits(0xFF00000000000000),
179         cfbBits(0xFFFF000000000000),
180         cfbBits(0xFFFFFF0000000000),
181         cfbBits(0xFFFFFFFF00000000),
182         cfbBits(0xFFFFFFFFFF000000),
183         cfbBits(0xFFFFFFFFFFFF0000),
184         cfbBits(0xFFFFFFFFFFFFFF00)
185     };
186 #endif /* PGSZ */
187 #endif /* PSZ == 8 */
188
189 #if PSZ == 16
190 #if PGSZ == 32
191 PixelGroup cfbstarttab[] =
192     {
193         cfbBits(0x00000000),
194         cfbBits(0x0000FFFF),
195     };
196 PixelGroup cfbendtab[] =
197     {
198         cfbBits(0x00000000),
199         cfbBits(0xFFFF0000),
200     };
201 #else /* PGSZ == 64 */
202 PixelGroup cfbstarttab[] =
203     {
204         cfbBits(0x0000000000000000),
205         cfbBits(0x0000FFFFFFFFFFFF),
206         cfbBits(0x00000000FFFFFFFF),
207         cfbBits(0x000000000000FFFF),
208     };
209 PixelGroup cfbendtab[] =
210     {
211         cfbBits(0x0000000000000000),
212         cfbBits(0xFFFF000000000000),
213         cfbBits(0xFFFFFFFF00000000),
214         cfbBits(0xFFFFFFFFFFFF0000),
215     };
216 #endif /* PGSZ */
217 #endif
218
219 #if PSZ == 24
220 #if PGSZ == 32
221 PixelGroup cfbstarttab[] =
222     {
223         cfbBits(0x00000000),
224         cfbBits(0x000000FF),
225         cfbBits(0x0000FFFF),
226         cfbBits(0x00FFFFFF),
227     };
228 PixelGroup cfbendtab[] = 
229     {
230         cfbBits(0x00000000),
231         cfbBits(0xFFFFFF00),
232         cfbBits(0xFFFF0000),
233         cfbBits(0xFF000000),
234     };
235 #else /* PGSZ == 64 */
236 PixelGroup cfbstarttab[] =
237     {
238         cfbBits(0x0000000000000000),
239         cfbBits(0x000000FFFFFFFFFF),
240         cfbBits(0x000000000000FFFF),
241     };
242 PixelGroup cfbendtab[] = 
243     {
244         cfbBits(0x0000000000000000),
245         cfbBits(0xFFFFFFFFFF000000),
246         cfbBits(0xFFFF000000000000),
247     };
248 #endif /* PGSZ */
249 #endif /* PSZ == 24 */
250
251 #if PSZ == 32
252 #if PGSZ == 32
253 PixelGroup cfbstarttab[] =
254     {
255         cfbBits(0x00000000),
256     };
257 PixelGroup cfbendtab[] = 
258     {
259         cfbBits(0x00000000),
260     };
261 #else /* PGSZ == 64 */
262 PixelGroup cfbstarttab[] =
263     {
264         cfbBits(0x0000000000000000),
265         cfbBits(0x00000000FFFFFFFF),
266     };
267 PixelGroup cfbendtab[] = 
268     {
269         cfbBits(0x0000000000000000),
270         cfbBits(0xFFFFFFFF00000000),
271     };
272 #endif /* PGSZ */
273 #endif /* PSZ == 32 */
274
275 /* a hack, for now, since the entries for 0 need to be all
276    1 bits, not all zeros.
277    this means the code DOES NOT WORK for segments of length
278    0 (which is only a problem in the horizontal line code.)
279 */
280 #if PSZ == 4
281 #if PGSZ == 32
282 PixelGroup cfbstartpartial[] =
283     {
284         cfbBits(0xFFFFFFFF),
285         cfbBits(0x0FFFFFFF),
286         cfbBits(0x00FFFFFF),
287         cfbBits(0x000FFFFF),
288         cfbBits(0x0000FFFF),
289         cfbBits(0x00000FFF),
290         cfbBits(0x000000FF),
291         cfbBits(0x0000000F)
292     };
293
294 PixelGroup cfbendpartial[] =
295     {
296         cfbBits(0xFFFFFFFF),
297         cfbBits(0xF0000000),
298         cfbBits(0xFF000000),
299         cfbBits(0xFFF00000),
300         cfbBits(0xFFFF0000),
301         cfbBits(0xFFFFF000),
302         cfbBits(0xFFFFFF00),
303         cfbBits(0xFFFFFFF0)
304     };
305 #else /* PGSZ == 64 */
306 PixelGroup cfbstartpartial[] =
307     {
308         cfbBits(0xFFFFFFFFFFFFFFFF),
309         cfbBits(0x0FFFFFFFFFFFFFFF),
310         cfbBits(0x00FFFFFFFFFFFFFF),
311         cfbBits(0x000FFFFFFFFFFFFF),
312         cfbBits(0x0000FFFFFFFFFFFF),
313         cfbBits(0x00000FFFFFFFFFFF),
314         cfbBits(0x000000FFFFFFFFFF),
315         cfbBits(0x0000000FFFFFFFFF),
316         cfbBits(0x00000000FFFFFFFF),
317         cfbBits(0x000000000FFFFFFF),
318         cfbBits(0x0000000000FFFFFF),
319         cfbBits(0x00000000000FFFFF),
320         cfbBits(0x000000000000FFFF),
321         cfbBits(0x0000000000000FFF),
322         cfbBits(0x00000000000000FF),
323         cfbBits(0x000000000000000F),
324     };
325
326 PixelGroup cfbendpartial[] =
327     {
328         cfbBits(0xFFFFFFFFFFFFFFFF),
329         cfbBits(0xF000000000000000),
330         cfbBits(0xFF00000000000000),
331         cfbBits(0xFFF0000000000000),
332         cfbBits(0xFFFF000000000000),
333         cfbBits(0xFFFFF00000000000),
334         cfbBits(0xFFFFFF0000000000),
335         cfbBits(0xFFFFFFF000000000),
336         cfbBits(0xFFFFFFFF00000000),
337         cfbBits(0xFFFFFFFFF0000000),
338         cfbBits(0xFFFFFFFFFF000000),
339         cfbBits(0xFFFFFFFFFFF00000),
340         cfbBits(0xFFFFFFFFFFFF0000),
341         cfbBits(0xFFFFFFFFFFFFF000),
342         cfbBits(0xFFFFFFFFFFFFFF00),
343         cfbBits(0xFFFFFFFFFFFFFFF0),
344     };
345 #endif /* PGSZ */
346 #endif /* PSZ == 4 */
347
348 #if PSZ == 8
349 #if PGSZ == 32
350 PixelGroup cfbstartpartial[] =
351     {
352         cfbBits(0xFFFFFFFF),
353         cfbBits(0x00FFFFFF),
354         cfbBits(0x0000FFFF),
355         cfbBits(0x000000FF)
356     };
357
358 PixelGroup cfbendpartial[] =
359     {
360         cfbBits(0xFFFFFFFF),
361         cfbBits(0xFF000000),
362         cfbBits(0xFFFF0000),
363         cfbBits(0xFFFFFF00)
364     };
365 #else /* PGSZ == 64 */
366 PixelGroup cfbstartpartial[] =
367     {
368         cfbBits(0xFFFFFFFFFFFFFFFF),
369         cfbBits(0x00FFFFFFFFFFFFFF),
370         cfbBits(0x0000FFFFFFFFFFFF),
371         cfbBits(0x000000FFFFFFFFFF),
372         cfbBits(0x00000000FFFFFFFF),
373         cfbBits(0x0000000000FFFFFF),
374         cfbBits(0x000000000000FFFF),
375         cfbBits(0x00000000000000FF),
376     };
377
378 PixelGroup cfbendpartial[] =
379     {
380         cfbBits(0xFFFFFFFFFFFFFFFF),
381         cfbBits(0xFF00000000000000),
382         cfbBits(0xFFFF000000000000),
383         cfbBits(0xFFFFFF0000000000),
384         cfbBits(0xFFFFFFFF00000000),
385         cfbBits(0xFFFFFFFFFF000000),
386         cfbBits(0xFFFFFFFFFFFF0000),
387         cfbBits(0xFFFFFFFFFFFFFF00),
388     };
389 #endif /* PGSZ */
390 #endif /* PSZ == 8 */
391
392 #if PSZ == 16
393 #if PGSZ == 32
394 PixelGroup cfbstartpartial[] =
395     {
396         cfbBits(0xFFFFFFFF),
397         cfbBits(0x0000FFFF),
398     };
399
400 PixelGroup cfbendpartial[] =
401     {
402         cfbBits(0xFFFFFFFF),
403         cfbBits(0xFFFF0000),
404     };
405 #else /* PGSZ == 64 */
406 PixelGroup cfbstartpartial[] =
407     {
408         cfbBits(0xFFFFFFFFFFFFFFFF),
409         cfbBits(0x0000FFFFFFFFFFFF),
410         cfbBits(0x00000000FFFFFFFF),
411         cfbBits(0x000000000000FFFF),
412     };
413
414 PixelGroup cfbendpartial[] =
415     {
416         cfbBits(0xFFFFFFFFFFFFFFFF),
417         cfbBits(0xFFFF000000000000),
418         cfbBits(0xFFFFFFFF00000000),
419         cfbBits(0xFFFFFFFFFFFF0000),
420     };
421 #endif /* PGSZ */
422 #endif /* PSZ == 16 */
423
424 #if PSZ == 24
425 #if PGSZ == 32
426 PixelGroup cfbstartpartial[] =
427     {
428         cfbBits(0xFFFFFFFF),
429         cfbBits(0x000000FF),
430         cfbBits(0x0000FFFF),
431         cfbBits(0x00FFFFFF),
432     };
433
434 PixelGroup cfbendpartial[] =
435     {
436         cfbBits(0xFFFFFFFF),
437         cfbBits(0xFFFFFF00),
438         cfbBits(0xFFFF0000),
439         cfbBits(0xFF000000),
440     };
441 #else /* PGSZ == 64 */
442 PixelGroup cfbstartpartial[] =
443     {
444         cfbBits(0xFFFFFFFFFFFFFFFF),
445         cfbBits(0x0000FFFFFFFFFFFF),
446         cfbBits(0x000000FFFFFFFFFF),
447         cfbBits(0x00000000FFFFFFFF),
448         cfbBits(0x0000000000FFFFFF),
449         cfbBits(0x000000000000FFFF),
450         cfbBits(0x00000000000000FF),
451     };
452
453 PixelGroup cfbendpartial[] =
454     {
455         cfbBits(0xFFFFFFFFFFFFFFFF),
456         cfbBits(0xFFFFFFFFFFFF0000),
457         cfbBits(0xFFFFFFFFFF000000),
458         cfbBits(0xFFFFFFFF00000000),
459         cfbBits(0xFFFFFF0000000000),
460         cfbBits(0xFFFF000000000000),
461         cfbBits(0xFF00000000000000),
462     };
463 #endif /* PGSZ */
464 #endif /* PSZ == 24 */
465
466 #if PSZ == 32
467 #if PGSZ == 32
468 PixelGroup cfbstartpartial[] =
469     {
470         cfbBits(0xFFFFFFFF),
471     };
472
473 PixelGroup cfbendpartial[] =
474     {
475         cfbBits(0xFFFFFFFF),
476     };
477 #else /* PGSZ == 64 */
478 PixelGroup cfbstartpartial[] =
479     {
480         cfbBits(0xFFFFFFFFFFFFFFFF),
481         cfbBits(0x00000000FFFFFFFF),
482     };
483
484 PixelGroup cfbendpartial[] =
485     {
486         cfbBits(0xFFFFFFFFFFFFFFFF),
487         cfbBits(0xFFFFFFFF00000000),
488     };
489 #endif /* PGSZ */
490 #endif /* PSZ == 32 */
491
492 /* used for masking bits in bresenham lines
493    mask[n] is used to mask out all but bit n in a longword (n is a
494 screen position).
495    rmask[n] is used to mask out the single bit at position n (n
496 is a screen posiotion.)
497 */
498
499 #if PSZ == 4
500 #if PGSZ == 32
501 PixelGroup cfbmask[] =
502     {
503         cfbBits(0xF0000000),
504         cfbBits(0x0F000000),
505         cfbBits(0x00F00000),
506         cfbBits(0x000F0000),
507         cfbBits(0x0000F000),
508         cfbBits(0x00000F00),
509         cfbBits(0x000000F0),
510         cfbBits(0x0000000F)
511     }; 
512 PixelGroup cfbrmask[] = 
513     {
514         cfbBits(0x0FFFFFFF),
515         cfbBits(0xF0FFFFFF),
516         cfbBits(0xFF0FFFFF),
517         cfbBits(0xFFF0FFFF),
518         cfbBits(0xFFFF0FFF),
519         cfbBits(0xFFFFF0FF),
520         cfbBits(0xFFFFFF0F),
521         cfbBits(0xFFFFFFF0)
522     };
523 #else /* PGSZ == 64 */
524 PixelGroup cfbmask[] =
525     {
526         cfbBits(0xF000000000000000),
527         cfbBits(0x0F00000000000000),
528         cfbBits(0x00F0000000000000),
529         cfbBits(0x000F000000000000),
530         cfbBits(0x0000F00000000000),
531         cfbBits(0x00000F0000000000),
532         cfbBits(0x000000F000000000),
533         cfbBits(0x0000000F00000000),
534         cfbBits(0x00000000F0000000),
535         cfbBits(0x000000000F000000),
536         cfbBits(0x0000000000F00000),
537         cfbBits(0x00000000000F0000),
538         cfbBits(0x000000000000F000),
539         cfbBits(0x0000000000000F00),
540         cfbBits(0x00000000000000F0),
541         cfbBits(0x000000000000000F),
542     }; 
543 PixelGroup cfbrmask[] = 
544     {
545         cfbBits(0x0FFFFFFFFFFFFFFF),
546         cfbBits(0xF0FFFFFFFFFFFFFF),
547         cfbBits(0xFF0FFFFFFFFFFFFF),
548         cfbBits(0xFFF0FFFFFFFFFFFF),
549         cfbBits(0xFFFF0FFFFFFFFFFF),
550         cfbBits(0xFFFFF0FFFFFFFFFF),
551         cfbBits(0xFFFFFF0FFFFFFFFF),
552         cfbBits(0xFFFFFFF0FFFFFFFF),
553         cfbBits(0xFFFFFFFF0FFFFFFF),
554         cfbBits(0xFFFFFFFFF0FFFFFF),
555         cfbBits(0xFFFFFFFFFF0FFFFF),
556         cfbBits(0xFFFFFFFFFFF0FFFF),
557         cfbBits(0xFFFFFFFFFFFF0FFF),
558         cfbBits(0xFFFFFFFFFFFFF0FF),
559         cfbBits(0xFFFFFFFFFFFFFF0F),
560         cfbBits(0xFFFFFFFFFFFFFFF0),
561     };
562 #endif /* PGSZ */
563 #endif /* PSZ == 4 */
564
565 #if PSZ == 8
566 #if PGSZ == 32
567 PixelGroup cfbmask[] =
568     {
569         cfbBits(0xFF000000),
570         cfbBits(0x00FF0000),
571         cfbBits(0x0000FF00),
572         cfbBits(0x000000FF)
573     }; 
574 PixelGroup cfbrmask[] = 
575     {
576         cfbBits(0x00FFFFFF),
577         cfbBits(0xFF00FFFF),
578         cfbBits(0xFFFF00FF),
579         cfbBits(0xFFFFFF00)
580     };
581 #else /* PGSZ == 64 */
582 PixelGroup cfbmask[] =
583     {
584         cfbBits(0xFF00000000000000),
585         cfbBits(0x00FF000000000000),
586         cfbBits(0x0000FF0000000000),
587         cfbBits(0x000000FF00000000),
588         cfbBits(0x00000000FF000000),
589         cfbBits(0x0000000000FF0000),
590         cfbBits(0x000000000000FF00),
591         cfbBits(0x00000000000000FF),
592     }; 
593 PixelGroup cfbrmask[] = 
594     {
595         cfbBits(0x00FFFFFFFFFFFFFF),
596         cfbBits(0xFF00FFFFFFFFFFFF),
597         cfbBits(0xFFFF00FFFFFFFFFF),
598         cfbBits(0xFFFFFF00FFFFFFFF),
599         cfbBits(0xFFFFFFFF00FFFFFF),
600         cfbBits(0xFFFFFFFFFF00FFFF),
601         cfbBits(0xFFFFFFFFFFFF00FF),
602         cfbBits(0xFFFFFFFFFFFFFF00),
603     };
604 #endif /* PGSZ */
605 #endif /* PSZ == 8 */
606
607 #if PSZ == 16
608 #if PGSZ == 32
609 PixelGroup cfbmask[] =
610     {
611         cfbBits(0xFFFF0000),
612         cfbBits(0x0000FFFF),
613     }; 
614 PixelGroup cfbrmask[] = 
615     {
616         cfbBits(0x0000FFFF),
617         cfbBits(0xFFFF0000),
618     };
619 #else /* PGSZ == 64 */
620 PixelGroup cfbmask[] =
621     {
622         cfbBits(0xFFFF000000000000),
623         cfbBits(0x0000FFFF00000000),
624         cfbBits(0x00000000FFFF0000),
625         cfbBits(0x000000000000FFFF),
626     }; 
627 PixelGroup cfbrmask[] = 
628     {
629         cfbBits(0x0000FFFFFFFFFFFF),
630         cfbBits(0xFFFF0000FFFFFFFF),
631         cfbBits(0xFFFFFFFF0000FFFF),
632         cfbBits(0xFFFFFFFFFFFF0000),
633     };
634 #endif /* PGSZ */
635 #endif /* PSZ == 16 */
636
637 #if PSZ == 24
638 #if PGSZ == 32
639 PixelGroup cfbmask[] =
640     {
641         cfbBits(0xFFFFFF00),
642         cfbBits(0x00000000),
643         cfbBits(0x000000FF),
644         cfbBits(0xFFFF0000),
645         cfbBits(0x0000FFFF),
646         cfbBits(0xFF000000),
647         cfbBits(0x00FFFFFF),
648         cfbBits(0x00000000),
649     }; 
650 PixelGroup cfbrmask[] = 
651     {
652         cfbBits(0x000000FF),
653         cfbBits(0xFFFFFFFF),
654         cfbBits(0xFFFFFF00),
655         cfbBits(0x0000FFFF),
656         cfbBits(0xFFFF0000),
657         cfbBits(0x00FFFFFF),
658         cfbBits(0xFF000000),
659         cfbBits(0xFFFFFFFF),
660     };
661 #else /* PGSZ == 64 */
662 PixelGroup cfbmask[] =
663     {
664         cfbBits(0xFFFFFF0000000000),
665         cfbBits(0x000000FFFFFF0000),
666         cfbBits(0x000000000000FFFF),
667     }; 
668 PixelGroup cfbmask2[] =
669     {
670         cfbBits(0x0000000000000000),
671         cfbBits(0x0000000000000000),
672         cfbBits(0xFF00000000000000),
673     }; 
674 PixelGroup cfbrmask[] = 
675     {
676         cfbBits(0x000000FFFFFFFFFF),
677         cfbBits(0xFFFFFF000000FFFF),
678         cfbBits(0xFFFFFFFFFFFF0000),
679     };
680 PixelGroup cfbrmask2[] = 
681     {
682         cfbBits(0x0000000000000000),
683         cfbBits(0x0000000000000000),
684         cfbBits(0x00FFFFFFFFFFFFFF),
685     };
686 #endif /* PGSZ */
687 #endif /* PSZ == 24 */
688
689 #if PSZ == 32
690 #if PGSZ == 32
691 PixelGroup cfbmask[] =
692     {
693         cfbBits(0xFFFFFFFF),
694     }; 
695 PixelGroup cfbrmask[] = 
696     {
697         cfbBits(0xFFFFFFFF),
698     };
699 #else /* PGSZ == 64 */
700 PixelGroup cfbmask[] =
701     {
702         cfbBits(0xFFFFFFFF00000000),
703         cfbBits(0x00000000FFFFFFFF),
704     }; 
705 PixelGroup cfbrmask[] = 
706     {
707         cfbBits(0x00000000FFFFFFFF),
708         cfbBits(0xFFFFFFFF00000000),
709     };
710 #endif /* PGSZ */
711 #endif /* PSZ == 32 */
712
713 /*
714  * QuartetBitsTable contains PPW+1 masks whose binary values are masks in the
715  * low order quartet that contain the number of bits specified in the
716  * index.  This table is used by getstipplepixels.
717  */
718 #if PSZ == 4
719 PixelGroup QuartetBitsTable[] = {
720 #if PGSZ == 32
721 #if (BITMAP_BIT_ORDER == MSBFirst)
722     0x00000000,                         /* 0 - 00000000 */
723     0x00000080,                         /* 1 - 10000000 */
724     0x000000C0,                         /* 2 - 11000000 */
725     0x000000E0,                         /* 3 - 11100000 */
726     0x000000F0,                         /* 4 - 11110000 */
727     0x000000F8,                         /* 5 - 11111000 */
728     0x000000FC,                         /* 6 - 11111100 */
729     0x000000FE,                         /* 7 - 11111110 */
730     0x000000FF                          /* 8 - 11111111 */
731 #else /* (BITMAP_BIT_ORDER == LSBFirst */
732     0x00000000,                         /* 0 - 00000000 */
733     0x00000001,                         /* 1 - 00000001 */
734     0x00000003,                         /* 2 - 00000011 */
735     0x00000007,                         /* 3 - 00000111 */
736     0x0000000F,                         /* 4 - 00001111 */
737     0x0000001F,                         /* 5 - 00011111 */
738     0x0000003F,                         /* 6 - 00111111 */
739     0x0000007F,                         /* 7 - 01111111 */
740     0x000000FF                          /* 8 - 11111111 */
741 #endif /* (BITMAP_BIT_ORDER == MSBFirst) */
742 #else /* PGSZ == 64 */
743 #if (BITMAP_BIT_ORDER == MSBFirst)
744     0x00000000,                         /* 0 - 0000000000000000 */
745     0x00008000,                         /* 1 - 1000000000000000 */
746     0x0000C000,                         /* 2 - 1100000000000000 */
747     0x0000E000,                         /* 3 - 1110000000000000 */
748     0x0000F000,                         /* 4 - 1111000000000000 */
749     0x0000F800,                         /* 5 - 1111100000000000 */
750     0x0000FC00,                         /* 6 - 1111110000000000 */
751     0x0000FE00,                         /* 7 - 1111111000000000 */
752     0x0000FF00,                         /* 8 - 1111111100000000 */
753     0x0000FF80,                         /* 9 - 1111111110000000 */
754     0x0000FFC0,                         /* 10- 1111111111000000 */
755     0x0000FFE0,                         /* 11- 1111111111100000 */
756     0x0000FFF0,                         /* 12- 1111111111110000 */
757     0x0000FFF8,                         /* 13- 1111111111111000 */
758     0x0000FFFC,                         /* 14- 1111111111111100 */
759     0x0000FFFE,                         /* 15- 1111111111111110 */
760     0x0000FFFF,                         /* 16- 1111111111111111 */
761 #else /* (BITMAP_BIT_ORDER == LSBFirst */
762     0x00000000,                         /* 0 - 0000000000000000 */
763     0x00000001,                         /* 1 - 0000000000000001 */
764     0x00000003,                         /* 2 - 0000000000000011 */
765     0x00000007,                         /* 3 - 0000000000000111 */
766     0x0000000F,                         /* 4 - 0000000000001111 */
767     0x0000001F,                         /* 5 - 0000000000011111 */
768     0x0000003F,                         /* 6 - 0000000000111111 */
769     0x0000007F,                         /* 7 - 0000000001111111 */
770     0x000000FF,                         /* 8 - 0000000011111111 */
771     0x000001FF,                         /* 9 - 0000000111111111 */
772     0x000003FF,                         /* 10- 0000001111111111 */
773     0x000007FF,                         /* 11- 0000011111111111 */
774     0x00000FFF,                         /* 12- 0000111111111111 */
775     0x00001FFF,                         /* 13- 0001111111111111 */
776     0x00003FFF,                         /* 14- 0011111111111111 */
777     0x00007FFF,                         /* 15- 0111111111111111 */
778     0x0000FFFF,                         /* 16- 1111111111111111 */
779 #endif /* (BITMAP_BIT_ORDER == MSBFirst) */
780 #endif /* PGSZ */
781 };
782 #endif /* PSZ == 4 */
783
784 #if PSZ == 8
785 PixelGroup QuartetBitsTable[] = {
786 #if PGSZ == 32
787 #if (BITMAP_BIT_ORDER == MSBFirst)
788     0x00000000,                         /* 0 - 0000 */
789     0x00000008,                         /* 1 - 1000 */
790     0x0000000C,                         /* 2 - 1100 */
791     0x0000000E,                         /* 3 - 1110 */
792     0x0000000F                          /* 4 - 1111 */
793 #else /* (BITMAP_BIT_ORDER == LSBFirst */
794     0x00000000,                         /* 0 - 0000 */
795     0x00000001,                         /* 1 - 0001 */
796     0x00000003,                         /* 2 - 0011 */
797     0x00000007,                         /* 3 - 0111 */
798     0x0000000F                          /* 4 - 1111 */
799 #endif /* (BITMAP_BIT_ORDER == MSBFirst) */
800 #else /* PGSZ == 64 */
801 #if (BITMAP_BIT_ORDER == MSBFirst)
802     0x00000000,                         /* 0 - 00000000 */
803     0x00000080,                         /* 1 - 10000000 */
804     0x000000C0,                         /* 2 - 11000000 */
805     0x000000E0,                         /* 3 - 11100000 */
806     0x000000F0,                         /* 4 - 11110000 */
807     0x000000F8,                         /* 5 - 11111000 */
808     0x000000FC,                         /* 6 - 11111100 */
809     0x000000FE,                         /* 7 - 11111110 */
810     0x000000FF                          /* 8 - 11111111 */
811 #else /* (BITMAP_BIT_ORDER == LSBFirst */
812     0x00000000,                         /* 0 - 00000000 */
813     0x00000001,                         /* 1 - 00000001 */
814     0x00000003,                         /* 2 - 00000011 */
815     0x00000007,                         /* 3 - 00000111 */
816     0x0000000F,                         /* 4 - 10000111 */
817     0x0000001F,                         /* 5 - 00011111 */
818     0x0000003F,                         /* 6 - 00111111 */
819     0x0000007F,                         /* 7 - 01111111 */
820     0x000000FF                          /* 8 - 11111111 */
821 #endif /* (BITMAP_BIT_ORDER == MSBFirst) */
822 #endif /* PGSZ */
823 };
824 #endif /* PSZ == 8 */
825
826 #if PSZ == 16
827 PixelGroup QuartetBitsTable[] = {
828 #if PGSZ == 32
829 #if (BITMAP_BIT_ORDER == MSBFirst)
830     0x00000000,                         /* 0 - 00 */
831     0x00000002,                         /* 1 - 10 */
832     0x00000003,                         /* 2 - 11 */
833 #else /* (BITMAP_BIT_ORDER == LSBFirst */
834     0x00000000,                         /* 0 - 00 */
835     0x00000001,                         /* 1 - 01 */
836     0x00000003,                         /* 2 - 11 */
837 #endif /* (BITMAP_BIT_ORDER == MSBFirst) */
838 #else /* PGSZ == 64 */
839 #if (BITMAP_BIT_ORDER == MSBFirst)
840     0x00000000,                         /* 0 - 0000 */
841     0x00000008,                         /* 1 - 1000 */
842     0x0000000C,                         /* 2 - 1100 */
843     0x0000000E,                         /* 3 - 1110 */
844     0x0000000F,                         /* 4 - 1111 */
845 #else /* (BITMAP_BIT_ORDER == LSBFirst */
846     0x00000000,                         /* 0 - 0000 */
847     0x00000001,                         /* 1 - 0001 */
848     0x00000003,                         /* 2 - 0011 */
849     0x00000007,                         /* 3 - 0111 */
850     0x0000000F,                         /* 4 - 1111 */
851 #endif /* (BITMAP_BIT_ORDER == MSBFirst) */
852 #endif /* PGSZ */
853 };
854 #endif /* PSZ == 16 */
855
856 #if PSZ == 24
857 PixelGroup QuartetBitsTable[] = {
858 #if PGSZ == 32
859 #if (BITMAP_BIT_ORDER == MSBFirst)
860     0x00000000,                         /* 0 - 0 */
861     0x00000001,                         /* 1 - 1 */
862 #else /* (BITMAP_BIT_ORDER == LSBFirst */
863     0x00000000,                         /* 0 - 0 */
864     0x00000001,                         /* 1 - 1 */
865 #endif /* (BITMAP_BIT_ORDER == MSBFirst) */
866 #else /* PGSZ == 64 */
867 #if (BITMAP_BIT_ORDER == MSBFirst)
868     0x00000000,                         /* 0 - 00 */
869     0x00000002,                         /* 1 - 10 */
870     0x00000003,                         /* 2 - 11*/
871 #else /* (BITMAP_BIT_ORDER == LSBFirst */
872     0x00000000,                         /* 0 - 00 */
873     0x00000001,                         /* 1 - 01 */
874     0x00000003,                         /* 2 - 11 */
875 #endif /* (BITMAP_BIT_ORDER == MSBFirst) */
876 #endif /* PGSZ */
877 };
878 #endif /* PSZ == 24 */
879
880 #if PSZ == 32
881 PixelGroup QuartetBitsTable[] = {
882 #if PGSZ == 32
883 #if (BITMAP_BIT_ORDER == MSBFirst)
884     0x00000000,                         /* 0 - 0 */
885     0x00000001,                         /* 1 - 1 */
886 #else /* (BITMAP_BIT_ORDER == LSBFirst */
887     0x00000000,                         /* 0 - 0 */
888     0x00000001,                         /* 1 - 1 */
889 #endif /* (BITMAP_BIT_ORDER == MSBFirst) */
890 #else /* PGSZ == 64 */
891 #if (BITMAP_BIT_ORDER == MSBFirst)
892     0x00000000,                         /* 0 - 00 */
893     0x00000002,                         /* 1 - 10 */
894     0x00000003,                         /* 2 - 11*/
895 #else /* (BITMAP_BIT_ORDER == LSBFirst */
896     0x00000000,                         /* 0 - 00 */
897     0x00000001,                         /* 1 - 01 */
898     0x00000003,                         /* 2 - 11 */
899 #endif /* (BITMAP_BIT_ORDER == MSBFirst) */
900 #endif /* PGSZ */
901 };
902 #endif /* PSZ == 32 */
903
904 /*
905  * QuartetPixelMaskTable is used by getstipplepixels to get a pixel mask
906  * corresponding to a quartet of bits.  Note: the bit/byte order dependency
907  * is handled by QuartetBitsTable above.
908  */
909 #if PSZ == 4
910 #if PGSZ == 32
911 PixelGroup QuartetPixelMaskTable[] = {
912     0x00000000,
913     0x0000000F,
914     0x000000F0,
915     0x000000FF,
916     0x00000F00,
917     0x00000F0F,
918     0x00000FF0,
919     0x00000FFF,
920     0x0000F000,
921     0x0000F00F,
922     0x0000F0F0,
923     0x0000F0FF,
924     0x0000FF00,
925     0x0000FF0F,
926     0x0000FFF0,
927     0x0000FFFF,
928     0x000F0000,
929     0x000F000F,
930     0x000F00F0,
931     0x000F00FF,
932     0x000F0F00,
933     0x000F0F0F,
934     0x000F0FF0,
935     0x000F0FFF,
936     0x000FF000,
937     0x000FF00F,
938     0x000FF0F0,
939     0x000FF0FF,
940     0x000FFF00,
941     0x000FFF0F,
942     0x000FFFF0,
943     0x000FFFFF,
944     0x00F00000,
945     0x00F0000F,
946     0x00F000F0,
947     0x00F000FF,
948     0x00F00F00,
949     0x00F00F0F,
950     0x00F00FF0,
951     0x00F00FFF,
952     0x00F0F000,
953     0x00F0F00F,
954     0x00F0F0F0,
955     0x00F0F0FF,
956     0x00F0FF00,
957     0x00F0FF0F,
958     0x00F0FFF0,
959     0x00F0FFFF,
960     0x00FF0000,
961     0x00FF000F,
962     0x00FF00F0,
963     0x00FF00FF,
964     0x00FF0F00,
965     0x00FF0F0F,
966     0x00FF0FF0,
967     0x00FF0FFF,
968     0x00FFF000,
969     0x00FFF00F,
970     0x00FFF0F0,
971     0x00FFF0FF,
972     0x00FFFF00,
973     0x00FFFF0F,
974     0x00FFFFF0,
975     0x00FFFFFF,
976     0x0F000000,
977     0x0F00000F,
978     0x0F0000F0,
979     0x0F0000FF,
980     0x0F000F00,
981     0x0F000F0F,
982     0x0F000FF0,
983     0x0F000FFF,
984     0x0F00F000,
985     0x0F00F00F,
986     0x0F00F0F0,
987     0x0F00F0FF,
988     0x0F00FF00,
989     0x0F00FF0F,
990     0x0F00FFF0,
991     0x0F00FFFF,
992     0x0F0F0000,
993     0x0F0F000F,
994     0x0F0F00F0,
995     0x0F0F00FF,
996     0x0F0F0F00,
997     0x0F0F0F0F,
998     0x0F0F0FF0,
999     0x0F0F0FFF,
1000     0x0F0FF000,
1001     0x0F0FF00F,
1002     0x0F0FF0F0,
1003     0x0F0FF0FF,
1004     0x0F0FFF00,
1005     0x0F0FFF0F,
1006     0x0F0FFFF0,
1007     0x0F0FFFFF,
1008     0x0FF00000,
1009     0x0FF0000F,
1010     0x0FF000F0,
1011     0x0FF000FF,
1012     0x0FF00F00,
1013     0x0FF00F0F,
1014     0x0FF00FF0,
1015     0x0FF00FFF,
1016     0x0FF0F000,
1017     0x0FF0F00F,
1018     0x0FF0F0F0,
1019     0x0FF0F0FF,
1020     0x0FF0FF00,
1021     0x0FF0FF0F,
1022     0x0FF0FFF0,
1023     0x0FF0FFFF,
1024     0x0FFF0000,
1025     0x0FFF000F,
1026     0x0FFF00F0,
1027     0x0FFF00FF,
1028     0x0FFF0F00,
1029     0x0FFF0F0F,
1030     0x0FFF0FF0,
1031     0x0FFF0FFF,
1032     0x0FFFF000,
1033     0x0FFFF00F,
1034     0x0FFFF0F0,
1035     0x0FFFF0FF,
1036     0x0FFFFF00,
1037     0x0FFFFF0F,
1038     0x0FFFFFF0,
1039     0x0FFFFFFF,
1040     0xF0000000,
1041     0xF000000F,
1042     0xF00000F0,
1043     0xF00000FF,
1044     0xF0000F00,
1045     0xF0000F0F,
1046     0xF0000FF0,
1047     0xF0000FFF,
1048     0xF000F000,
1049     0xF000F00F,
1050     0xF000F0F0,
1051     0xF000F0FF,
1052     0xF000FF00,
1053     0xF000FF0F,
1054     0xF000FFF0,
1055     0xF000FFFF,
1056     0xF00F0000,
1057     0xF00F000F,
1058     0xF00F00F0,
1059     0xF00F00FF,
1060     0xF00F0F00,
1061     0xF00F0F0F,
1062     0xF00F0FF0,
1063     0xF00F0FFF,
1064     0xF00FF000,
1065     0xF00FF00F,
1066     0xF00FF0F0,
1067     0xF00FF0FF,
1068     0xF00FFF00,
1069     0xF00FFF0F,
1070     0xF00FFFF0,
1071     0xF00FFFFF,
1072     0xF0F00000,
1073     0xF0F0000F,
1074     0xF0F000F0,
1075     0xF0F000FF,
1076     0xF0F00F00,
1077     0xF0F00F0F,
1078     0xF0F00FF0,
1079     0xF0F00FFF,
1080     0xF0F0F000,
1081     0xF0F0F00F,
1082     0xF0F0F0F0,
1083     0xF0F0F0FF,
1084     0xF0F0FF00,
1085     0xF0F0FF0F,
1086     0xF0F0FFF0,
1087     0xF0F0FFFF,
1088     0xF0FF0000,
1089     0xF0FF000F,
1090     0xF0FF00F0,
1091     0xF0FF00FF,
1092     0xF0FF0F00,
1093     0xF0FF0F0F,
1094     0xF0FF0FF0,
1095     0xF0FF0FFF,
1096     0xF0FFF000,
1097     0xF0FFF00F,
1098     0xF0FFF0F0,
1099     0xF0FFF0FF,
1100     0xF0FFFF00,
1101     0xF0FFFF0F,
1102     0xF0FFFFF0,
1103     0xF0FFFFFF,
1104     0xFF000000,
1105     0xFF00000F,
1106     0xFF0000F0,
1107     0xFF0000FF,
1108     0xFF000F00,
1109     0xFF000F0F,
1110     0xFF000FF0,
1111     0xFF000FFF,
1112     0xFF00F000,
1113     0xFF00F00F,
1114     0xFF00F0F0,
1115     0xFF00F0FF,
1116     0xFF00FF00,
1117     0xFF00FF0F,
1118     0xFF00FFF0,
1119     0xFF00FFFF,
1120     0xFF0F0000,
1121     0xFF0F000F,
1122     0xFF0F00F0,
1123     0xFF0F00FF,
1124     0xFF0F0F00,
1125     0xFF0F0F0F,
1126     0xFF0F0FF0,
1127     0xFF0F0FFF,
1128     0xFF0FF000,
1129     0xFF0FF00F,
1130     0xFF0FF0F0,
1131     0xFF0FF0FF,
1132     0xFF0FFF00,
1133     0xFF0FFF0F,
1134     0xFF0FFFF0,
1135     0xFF0FFFFF,
1136     0xFFF00000,
1137     0xFFF0000F,
1138     0xFFF000F0,
1139     0xFFF000FF,
1140     0xFFF00F00,
1141     0xFFF00F0F,
1142     0xFFF00FF0,
1143     0xFFF00FFF,
1144     0xFFF0F000,
1145     0xFFF0F00F,
1146     0xFFF0F0F0,
1147     0xFFF0F0FF,
1148     0xFFF0FF00,
1149     0xFFF0FF0F,
1150     0xFFF0FFF0,
1151     0xFFF0FFFF,
1152     0xFFFF0000,
1153     0xFFFF000F,
1154     0xFFFF00F0,
1155     0xFFFF00FF,
1156     0xFFFF0F00,
1157     0xFFFF0F0F,
1158     0xFFFF0FF0,
1159     0xFFFF0FFF,
1160     0xFFFFF000,
1161     0xFFFFF00F,
1162     0xFFFFF0F0,
1163     0xFFFFF0FF,
1164     0xFFFFFF00,
1165     0xFFFFFF0F,
1166     0xFFFFFFF0,
1167     0xFFFFFFFF,
1168 };
1169 #else /* PGSZ == 64 */
1170 No QuartetPixelMaskTable for psz=PSZ
1171 this would be a 64K entry table, a bit much I think.
1172 Try breaking things in two:
1173 mask = table[index&0xff00]<<32 | table[index&0xff]
1174 #endif /* PGSZ */
1175 #endif /* PSZ == 4 */
1176
1177 #if PSZ == 8
1178 PixelGroup QuartetPixelMaskTable[] = {
1179 #if PGSZ == 32
1180     0x00000000,
1181     0x000000FF,
1182     0x0000FF00,
1183     0x0000FFFF,
1184     0x00FF0000,
1185     0x00FF00FF,
1186     0x00FFFF00,
1187     0x00FFFFFF,
1188     0xFF000000,
1189     0xFF0000FF,
1190     0xFF00FF00,
1191     0xFF00FFFF,
1192     0xFFFF0000,
1193     0xFFFF00FF,
1194     0xFFFFFF00,
1195     0xFFFFFFFF
1196 #else /* PGSZ == 64 */
1197     0x0000000000000000,    0x00000000000000FF,
1198     0x000000000000FF00,    0x000000000000FFFF,
1199     0x0000000000FF0000,    0x0000000000FF00FF,
1200     0x0000000000FFFF00,    0x0000000000FFFFFF,
1201     0x00000000FF000000,    0x00000000FF0000FF,
1202     0x00000000FF00FF00,    0x00000000FF00FFFF,
1203     0x00000000FFFF0000,    0x00000000FFFF00FF,
1204     0x00000000FFFFFF00,    0x00000000FFFFFFFF,
1205     0x000000FF00000000,    0x000000FF000000FF,
1206     0x000000FF0000FF00,    0x000000FF0000FFFF,
1207     0x000000FF00FF0000,    0x000000FF00FF00FF,
1208     0x000000FF00FFFF00,    0x000000FF00FFFFFF,
1209     0x000000FFFF000000,    0x000000FFFF0000FF,
1210     0x000000FFFF00FF00,    0x000000FFFF00FFFF,
1211     0x000000FFFFFF0000,    0x000000FFFFFF00FF,
1212     0x000000FFFFFFFF00,    0x000000FFFFFFFFFF,
1213     0x0000FF0000000000,    0x0000FF00000000FF,
1214     0x0000FF000000FF00,    0x0000FF000000FFFF,
1215     0x0000FF0000FF0000,    0x0000FF0000FF00FF,
1216     0x0000FF0000FFFF00,    0x0000FF0000FFFFFF,
1217     0x0000FF00FF000000,    0x0000FF00FF0000FF,
1218     0x0000FF00FF00FF00,    0x0000FF00FF00FFFF,
1219     0x0000FF00FFFF0000,    0x0000FF00FFFF00FF,
1220     0x0000FF00FFFFFF00,    0x0000FF00FFFFFFFF,
1221     0x0000FFFF00000000,    0x0000FFFF000000FF,
1222     0x0000FFFF0000FF00,    0x0000FFFF0000FFFF,
1223     0x0000FFFF00FF0000,    0x0000FFFF00FF00FF,
1224     0x0000FFFF00FFFF00,    0x0000FFFF00FFFFFF,
1225     0x0000FFFFFF000000,    0x0000FFFFFF0000FF,
1226     0x0000FFFFFF00FF00,    0x0000FFFFFF00FFFF,
1227     0x0000FFFFFFFF0000,    0x0000FFFFFFFF00FF,
1228     0x0000FFFFFFFFFF00,    0x0000FFFFFFFFFFFF,
1229     0x00FF000000000000,    0x00FF0000000000FF,
1230     0x00FF00000000FF00,    0x00FF00000000FFFF,
1231     0x00FF000000FF0000,    0x00FF000000FF00FF,
1232     0x00FF000000FFFF00,    0x00FF000000FFFFFF,
1233     0x00FF0000FF000000,    0x00FF0000FF0000FF,
1234     0x00FF0000FF00FF00,    0x00FF0000FF00FFFF,
1235     0x00FF0000FFFF0000,    0x00FF0000FFFF00FF,
1236     0x00FF0000FFFFFF00,    0x00FF0000FFFFFFFF,
1237     0x00FF00FF00000000,    0x00FF00FF000000FF,
1238     0x00FF00FF0000FF00,    0x00FF00FF0000FFFF,
1239     0x00FF00FF00FF0000,    0x00FF00FF00FF00FF,
1240     0x00FF00FF00FFFF00,    0x00FF00FF00FFFFFF,
1241     0x00FF00FFFF000000,    0x00FF00FFFF0000FF,
1242     0x00FF00FFFF00FF00,    0x00FF00FFFF00FFFF,
1243     0x00FF00FFFFFF0000,    0x00FF00FFFFFF00FF,
1244     0x00FF00FFFFFFFF00,    0x00FF00FFFFFFFFFF,
1245     0x00FFFF0000000000,    0x00FFFF00000000FF,
1246     0x00FFFF000000FF00,    0x00FFFF000000FFFF,
1247     0x00FFFF0000FF0000,    0x00FFFF0000FF00FF,
1248     0x00FFFF0000FFFF00,    0x00FFFF0000FFFFFF,
1249     0x00FFFF00FF000000,    0x00FFFF00FF0000FF,
1250     0x00FFFF00FF00FF00,    0x00FFFF00FF00FFFF,
1251     0x00FFFF00FFFF0000,    0x00FFFF00FFFF00FF,
1252     0x00FFFF00FFFFFF00,    0x00FFFF00FFFFFFFF,
1253     0x00FFFFFF00000000,    0x00FFFFFF000000FF,
1254     0x00FFFFFF0000FF00,    0x00FFFFFF0000FFFF,
1255     0x00FFFFFF00FF0000,    0x00FFFFFF00FF00FF,
1256     0x00FFFFFF00FFFF00,    0x00FFFFFF00FFFFFF,
1257     0x00FFFFFFFF000000,    0x00FFFFFFFF0000FF,
1258     0x00FFFFFFFF00FF00,    0x00FFFFFFFF00FFFF,
1259     0x00FFFFFFFFFF0000,    0x00FFFFFFFFFF00FF,
1260     0x00FFFFFFFFFFFF00,    0x00FFFFFFFFFFFFFF,
1261     0xFF00000000000000,    0xFF000000000000FF,
1262     0xFF0000000000FF00,    0xFF0000000000FFFF,
1263     0xFF00000000FF0000,    0xFF00000000FF00FF,
1264     0xFF00000000FFFF00,    0xFF00000000FFFFFF,
1265     0xFF000000FF000000,    0xFF000000FF0000FF,
1266     0xFF000000FF00FF00,    0xFF000000FF00FFFF,
1267     0xFF000000FFFF0000,    0xFF000000FFFF00FF,
1268     0xFF000000FFFFFF00,    0xFF000000FFFFFFFF,
1269     0xFF0000FF00000000,    0xFF0000FF000000FF,
1270     0xFF0000FF0000FF00,    0xFF0000FF0000FFFF,
1271     0xFF0000FF00FF0000,    0xFF0000FF00FF00FF,
1272     0xFF0000FF00FFFF00,    0xFF0000FF00FFFFFF,
1273     0xFF0000FFFF000000,    0xFF0000FFFF0000FF,
1274     0xFF0000FFFF00FF00,    0xFF0000FFFF00FFFF,
1275     0xFF0000FFFFFF0000,    0xFF0000FFFFFF00FF,
1276     0xFF0000FFFFFFFF00,    0xFF0000FFFFFFFFFF,
1277     0xFF00FF0000000000,    0xFF00FF00000000FF,
1278     0xFF00FF000000FF00,    0xFF00FF000000FFFF,
1279     0xFF00FF0000FF0000,    0xFF00FF0000FF00FF,
1280     0xFF00FF0000FFFF00,    0xFF00FF0000FFFFFF,
1281     0xFF00FF00FF000000,    0xFF00FF00FF0000FF,
1282     0xFF00FF00FF00FF00,    0xFF00FF00FF00FFFF,
1283     0xFF00FF00FFFF0000,    0xFF00FF00FFFF00FF,
1284     0xFF00FF00FFFFFF00,    0xFF00FF00FFFFFFFF,
1285     0xFF00FFFF00000000,    0xFF00FFFF000000FF,
1286     0xFF00FFFF0000FF00,    0xFF00FFFF0000FFFF,
1287     0xFF00FFFF00FF0000,    0xFF00FFFF00FF00FF,
1288     0xFF00FFFF00FFFF00,    0xFF00FFFF00FFFFFF,
1289     0xFF00FFFFFF000000,    0xFF00FFFFFF0000FF,
1290     0xFF00FFFFFF00FF00,    0xFF00FFFFFF00FFFF,
1291     0xFF00FFFFFFFF0000,    0xFF00FFFFFFFF00FF,
1292     0xFF00FFFFFFFFFF00,    0xFF00FFFFFFFFFFFF,
1293     0xFFFF000000000000,    0xFFFF0000000000FF,
1294     0xFFFF00000000FF00,    0xFFFF00000000FFFF,
1295     0xFFFF000000FF0000,    0xFFFF000000FF00FF,
1296     0xFFFF000000FFFF00,    0xFFFF000000FFFFFF,
1297     0xFFFF0000FF000000,    0xFFFF0000FF0000FF,
1298     0xFFFF0000FF00FF00,    0xFFFF0000FF00FFFF,
1299     0xFFFF0000FFFF0000,    0xFFFF0000FFFF00FF,
1300     0xFFFF0000FFFFFF00,    0xFFFF0000FFFFFFFF,
1301     0xFFFF00FF00000000,    0xFFFF00FF000000FF,
1302     0xFFFF00FF0000FF00,    0xFFFF00FF0000FFFF,
1303     0xFFFF00FF00FF0000,    0xFFFF00FF00FF00FF,
1304     0xFFFF00FF00FFFF00,    0xFFFF00FF00FFFFFF,
1305     0xFFFF00FFFF000000,    0xFFFF00FFFF0000FF,
1306     0xFFFF00FFFF00FF00,    0xFFFF00FFFF00FFFF,
1307     0xFFFF00FFFFFF0000,    0xFFFF00FFFFFF00FF,
1308     0xFFFF00FFFFFFFF00,    0xFFFF00FFFFFFFFFF,
1309     0xFFFFFF0000000000,    0xFFFFFF00000000FF,
1310     0xFFFFFF000000FF00,    0xFFFFFF000000FFFF,
1311     0xFFFFFF0000FF0000,    0xFFFFFF0000FF00FF,
1312     0xFFFFFF0000FFFF00,    0xFFFFFF0000FFFFFF,
1313     0xFFFFFF00FF000000,    0xFFFFFF00FF0000FF,
1314     0xFFFFFF00FF00FF00,    0xFFFFFF00FF00FFFF,
1315     0xFFFFFF00FFFF0000,    0xFFFFFF00FFFF00FF,
1316     0xFFFFFF00FFFFFF00,    0xFFFFFF00FFFFFFFF,
1317     0xFFFFFFFF00000000,    0xFFFFFFFF000000FF,
1318     0xFFFFFFFF0000FF00,    0xFFFFFFFF0000FFFF,
1319     0xFFFFFFFF00FF0000,    0xFFFFFFFF00FF00FF,
1320     0xFFFFFFFF00FFFF00,    0xFFFFFFFF00FFFFFF,
1321     0xFFFFFFFFFF000000,    0xFFFFFFFFFF0000FF,
1322     0xFFFFFFFFFF00FF00,    0xFFFFFFFFFF00FFFF,
1323     0xFFFFFFFFFFFF0000,    0xFFFFFFFFFFFF00FF,
1324     0xFFFFFFFFFFFFFF00,    0xFFFFFFFFFFFFFFFF,
1325 #endif /* PGSZ */
1326 };
1327 #endif /* PSZ == 8 */
1328
1329 #if PSZ == 16
1330 PixelGroup QuartetPixelMaskTable[] = {
1331 #if PGSZ == 32
1332     0x00000000,
1333     0x0000FFFF,
1334     0xFFFF0000,
1335     0xFFFFFFFF,
1336 #else /* PGSZ == 64 */
1337     0x0000000000000000,    0x000000000000FFFF,
1338     0x00000000FFFF0000,    0x00000000FFFFFFFF,
1339     0x0000FFFF00000000,    0x0000FFFF0000FFFF,
1340     0x0000FFFFFFFF0000,    0x0000FFFFFFFFFFFF,
1341     0xFFFF000000000000,    0xFFFF00000000FFFF,
1342     0xFFFF0000FFFF0000,    0xFFFF0000FFFFFFFF,
1343     0xFFFFFFFF00000000,    0xFFFFFFFF0000FFFF,
1344     0xFFFFFFFFFFFF0000,    0xFFFFFFFFFFFFFFFF,
1345 #endif /* PGSZ */
1346 };
1347 #endif /* PSZ == 16 */
1348
1349 #if PSZ == 24
1350 PixelGroup QuartetPixelMaskTable[] = {
1351 #if PGSZ == 32
1352 /* Four pixels consist three pixel groups....*/
1353     0x00000000, 0x00FFFFFF, /*0x00000000, *//*0*/
1354 /*    0x00000000, 0x00000000, 0x00000000,*/ /*0*/
1355 /*    0x00FFFFFF, 0x00000000, 0x00000000,*/ /*1*/
1356 /*    0xFF000000, 0x0000FFFF, 0x00000000,*/ /*2*/
1357 /*    0xFFFFFFFF, 0x0000FFFF, 0x00000000,*/ /*3*/
1358 /*    0x00000000, 0xFFFF0000, 0x000000FF,*/ /*4*/
1359 /*    0x00FFFFFF, 0xFFFF0000, 0x000000FF,*/ /*5*/
1360 /*    0xFF000000, 0xFFFFFFFF, 0x000000FF,*/ /*6*/
1361 /*    0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF,*/ /*7*/
1362 /*    0x00000000, 0x00000000, 0xFFFFFF00,*/ /*8*/
1363 /*    0x00FFFFFF, 0x00000000, 0xFFFFFF00,*/ /*9*/
1364 /*    0xFF000000, 0x0000FFFF, 0xFFFFFF00,*/ /*10*/
1365 /*    0xFFFFFFFF, 0x0000FFFF, 0xFFFFFF00,*/ /*11*/
1366 /*    0x00000000, 0xFFFF0000, 0xFFFFFFFF,*/ /*12*/
1367 /*    0x00FFFFFF, 0xFFFF0000, 0xFFFFFFFF,*/ /*13*/
1368 /*    0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF,*/ /*14*/
1369 /*    0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,*/ /*15*/
1370 #else /* PGSZ == 64 */
1371     0x0000000000000000,    0x0000000000FFFFFF,
1372     0x0000FFFFFF000000,    0xFFFFFFFFFFFFFFFF
1373 #endif /* PGSZ */
1374 };
1375 #endif /* PSZ == 24 */
1376
1377 #if PSZ == 32
1378 PixelGroup QuartetPixelMaskTable[] = {
1379 #if PGSZ == 32
1380     0x00000000,
1381     0xFFFFFFFF,
1382 #else /* PGSZ == 64 */
1383     0x0000000000000000,
1384     0x00000000FFFFFFFF,
1385     0xFFFFFFFF00000000,
1386     0xFFFFFFFFFFFFFFFF
1387 #endif /* PGSZ */
1388 };
1389 #endif /* PSZ == 32 */
1390
1391 #if PSZ == 24
1392 int cfb24Shift[] = 
1393 #if     (BITMAP_BIT_ORDER == MSBFirst)
1394 {8,0,16,16,8,24,0,0};
1395 #else   /* (BITMAP_BIT_ORDER == LSBFirst) */
1396 {0,0,24,8,16,16,8,0};
1397 #endif  /* (BITMAP_BIT_ORDER == MSBFirst) */
1398 #endif