1 /************************************************************
2 Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
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
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.
28 ********************************************************/
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 $ */
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 * ==========================================================================
41 these tables are used by several macros in the cfb code.
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
55 #include "cfbmskbits.h"
57 #define _cfbBits(a) (PixelGroup)(a)
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))
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))
73 #endif /* BITMAP_BIT_ORDER */
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.
83 PixelGroup cfbstarttab[] =
94 PixelGroup cfbendtab[] =
105 #else /* PGSZ == 64 */
106 PixelGroup cfbstarttab[] =
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),
125 PixelGroup cfbendtab[] =
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),
145 #endif /* PSZ == 4 */
149 PixelGroup cfbstarttab[] =
156 PixelGroup cfbendtab[] =
163 #else /* PGSZ == 64 */
164 PixelGroup cfbstarttab[] =
166 cfbBits(0x0000000000000000),
167 cfbBits(0x00FFFFFFFFFFFFFF),
168 cfbBits(0x0000FFFFFFFFFFFF),
169 cfbBits(0x000000FFFFFFFFFF),
170 cfbBits(0x00000000FFFFFFFF),
171 cfbBits(0x0000000000FFFFFF),
172 cfbBits(0x000000000000FFFF),
173 cfbBits(0x00000000000000FF)
175 PixelGroup cfbendtab[] =
177 cfbBits(0x0000000000000000),
178 cfbBits(0xFF00000000000000),
179 cfbBits(0xFFFF000000000000),
180 cfbBits(0xFFFFFF0000000000),
181 cfbBits(0xFFFFFFFF00000000),
182 cfbBits(0xFFFFFFFFFF000000),
183 cfbBits(0xFFFFFFFFFFFF0000),
184 cfbBits(0xFFFFFFFFFFFFFF00)
187 #endif /* PSZ == 8 */
191 PixelGroup cfbstarttab[] =
196 PixelGroup cfbendtab[] =
201 #else /* PGSZ == 64 */
202 PixelGroup cfbstarttab[] =
204 cfbBits(0x0000000000000000),
205 cfbBits(0x0000FFFFFFFFFFFF),
206 cfbBits(0x00000000FFFFFFFF),
207 cfbBits(0x000000000000FFFF),
209 PixelGroup cfbendtab[] =
211 cfbBits(0x0000000000000000),
212 cfbBits(0xFFFF000000000000),
213 cfbBits(0xFFFFFFFF00000000),
214 cfbBits(0xFFFFFFFFFFFF0000),
221 PixelGroup cfbstarttab[] =
228 PixelGroup cfbendtab[] =
235 #else /* PGSZ == 64 */
236 PixelGroup cfbstarttab[] =
238 cfbBits(0x0000000000000000),
239 cfbBits(0x000000FFFFFFFFFF),
240 cfbBits(0x000000000000FFFF),
242 PixelGroup cfbendtab[] =
244 cfbBits(0x0000000000000000),
245 cfbBits(0xFFFFFFFFFF000000),
246 cfbBits(0xFFFF000000000000),
249 #endif /* PSZ == 24 */
253 PixelGroup cfbstarttab[] =
257 PixelGroup cfbendtab[] =
261 #else /* PGSZ == 64 */
262 PixelGroup cfbstarttab[] =
264 cfbBits(0x0000000000000000),
265 cfbBits(0x00000000FFFFFFFF),
267 PixelGroup cfbendtab[] =
269 cfbBits(0x0000000000000000),
270 cfbBits(0xFFFFFFFF00000000),
273 #endif /* PSZ == 32 */
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.)
282 PixelGroup cfbstartpartial[] =
294 PixelGroup cfbendpartial[] =
305 #else /* PGSZ == 64 */
306 PixelGroup cfbstartpartial[] =
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),
326 PixelGroup cfbendpartial[] =
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),
346 #endif /* PSZ == 4 */
350 PixelGroup cfbstartpartial[] =
358 PixelGroup cfbendpartial[] =
365 #else /* PGSZ == 64 */
366 PixelGroup cfbstartpartial[] =
368 cfbBits(0xFFFFFFFFFFFFFFFF),
369 cfbBits(0x00FFFFFFFFFFFFFF),
370 cfbBits(0x0000FFFFFFFFFFFF),
371 cfbBits(0x000000FFFFFFFFFF),
372 cfbBits(0x00000000FFFFFFFF),
373 cfbBits(0x0000000000FFFFFF),
374 cfbBits(0x000000000000FFFF),
375 cfbBits(0x00000000000000FF),
378 PixelGroup cfbendpartial[] =
380 cfbBits(0xFFFFFFFFFFFFFFFF),
381 cfbBits(0xFF00000000000000),
382 cfbBits(0xFFFF000000000000),
383 cfbBits(0xFFFFFF0000000000),
384 cfbBits(0xFFFFFFFF00000000),
385 cfbBits(0xFFFFFFFFFF000000),
386 cfbBits(0xFFFFFFFFFFFF0000),
387 cfbBits(0xFFFFFFFFFFFFFF00),
390 #endif /* PSZ == 8 */
394 PixelGroup cfbstartpartial[] =
400 PixelGroup cfbendpartial[] =
405 #else /* PGSZ == 64 */
406 PixelGroup cfbstartpartial[] =
408 cfbBits(0xFFFFFFFFFFFFFFFF),
409 cfbBits(0x0000FFFFFFFFFFFF),
410 cfbBits(0x00000000FFFFFFFF),
411 cfbBits(0x000000000000FFFF),
414 PixelGroup cfbendpartial[] =
416 cfbBits(0xFFFFFFFFFFFFFFFF),
417 cfbBits(0xFFFF000000000000),
418 cfbBits(0xFFFFFFFF00000000),
419 cfbBits(0xFFFFFFFFFFFF0000),
422 #endif /* PSZ == 16 */
426 PixelGroup cfbstartpartial[] =
434 PixelGroup cfbendpartial[] =
441 #else /* PGSZ == 64 */
442 PixelGroup cfbstartpartial[] =
444 cfbBits(0xFFFFFFFFFFFFFFFF),
445 cfbBits(0x0000FFFFFFFFFFFF),
446 cfbBits(0x000000FFFFFFFFFF),
447 cfbBits(0x00000000FFFFFFFF),
448 cfbBits(0x0000000000FFFFFF),
449 cfbBits(0x000000000000FFFF),
450 cfbBits(0x00000000000000FF),
453 PixelGroup cfbendpartial[] =
455 cfbBits(0xFFFFFFFFFFFFFFFF),
456 cfbBits(0xFFFFFFFFFFFF0000),
457 cfbBits(0xFFFFFFFFFF000000),
458 cfbBits(0xFFFFFFFF00000000),
459 cfbBits(0xFFFFFF0000000000),
460 cfbBits(0xFFFF000000000000),
461 cfbBits(0xFF00000000000000),
464 #endif /* PSZ == 24 */
468 PixelGroup cfbstartpartial[] =
473 PixelGroup cfbendpartial[] =
477 #else /* PGSZ == 64 */
478 PixelGroup cfbstartpartial[] =
480 cfbBits(0xFFFFFFFFFFFFFFFF),
481 cfbBits(0x00000000FFFFFFFF),
484 PixelGroup cfbendpartial[] =
486 cfbBits(0xFFFFFFFFFFFFFFFF),
487 cfbBits(0xFFFFFFFF00000000),
490 #endif /* PSZ == 32 */
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
495 rmask[n] is used to mask out the single bit at position n (n
496 is a screen posiotion.)
501 PixelGroup cfbmask[] =
512 PixelGroup cfbrmask[] =
523 #else /* PGSZ == 64 */
524 PixelGroup cfbmask[] =
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),
543 PixelGroup cfbrmask[] =
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),
563 #endif /* PSZ == 4 */
567 PixelGroup cfbmask[] =
574 PixelGroup cfbrmask[] =
581 #else /* PGSZ == 64 */
582 PixelGroup cfbmask[] =
584 cfbBits(0xFF00000000000000),
585 cfbBits(0x00FF000000000000),
586 cfbBits(0x0000FF0000000000),
587 cfbBits(0x000000FF00000000),
588 cfbBits(0x00000000FF000000),
589 cfbBits(0x0000000000FF0000),
590 cfbBits(0x000000000000FF00),
591 cfbBits(0x00000000000000FF),
593 PixelGroup cfbrmask[] =
595 cfbBits(0x00FFFFFFFFFFFFFF),
596 cfbBits(0xFF00FFFFFFFFFFFF),
597 cfbBits(0xFFFF00FFFFFFFFFF),
598 cfbBits(0xFFFFFF00FFFFFFFF),
599 cfbBits(0xFFFFFFFF00FFFFFF),
600 cfbBits(0xFFFFFFFFFF00FFFF),
601 cfbBits(0xFFFFFFFFFFFF00FF),
602 cfbBits(0xFFFFFFFFFFFFFF00),
605 #endif /* PSZ == 8 */
609 PixelGroup cfbmask[] =
614 PixelGroup cfbrmask[] =
619 #else /* PGSZ == 64 */
620 PixelGroup cfbmask[] =
622 cfbBits(0xFFFF000000000000),
623 cfbBits(0x0000FFFF00000000),
624 cfbBits(0x00000000FFFF0000),
625 cfbBits(0x000000000000FFFF),
627 PixelGroup cfbrmask[] =
629 cfbBits(0x0000FFFFFFFFFFFF),
630 cfbBits(0xFFFF0000FFFFFFFF),
631 cfbBits(0xFFFFFFFF0000FFFF),
632 cfbBits(0xFFFFFFFFFFFF0000),
635 #endif /* PSZ == 16 */
639 PixelGroup cfbmask[] =
650 PixelGroup cfbrmask[] =
661 #else /* PGSZ == 64 */
662 PixelGroup cfbmask[] =
664 cfbBits(0xFFFFFF0000000000),
665 cfbBits(0x000000FFFFFF0000),
666 cfbBits(0x000000000000FFFF),
668 PixelGroup cfbmask2[] =
670 cfbBits(0x0000000000000000),
671 cfbBits(0x0000000000000000),
672 cfbBits(0xFF00000000000000),
674 PixelGroup cfbrmask[] =
676 cfbBits(0x000000FFFFFFFFFF),
677 cfbBits(0xFFFFFF000000FFFF),
678 cfbBits(0xFFFFFFFFFFFF0000),
680 PixelGroup cfbrmask2[] =
682 cfbBits(0x0000000000000000),
683 cfbBits(0x0000000000000000),
684 cfbBits(0x00FFFFFFFFFFFFFF),
687 #endif /* PSZ == 24 */
691 PixelGroup cfbmask[] =
695 PixelGroup cfbrmask[] =
699 #else /* PGSZ == 64 */
700 PixelGroup cfbmask[] =
702 cfbBits(0xFFFFFFFF00000000),
703 cfbBits(0x00000000FFFFFFFF),
705 PixelGroup cfbrmask[] =
707 cfbBits(0x00000000FFFFFFFF),
708 cfbBits(0xFFFFFFFF00000000),
711 #endif /* PSZ == 32 */
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.
719 PixelGroup QuartetBitsTable[] = {
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) */
782 #endif /* PSZ == 4 */
785 PixelGroup QuartetBitsTable[] = {
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) */
824 #endif /* PSZ == 8 */
827 PixelGroup QuartetBitsTable[] = {
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) */
854 #endif /* PSZ == 16 */
857 PixelGroup QuartetBitsTable[] = {
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) */
878 #endif /* PSZ == 24 */
881 PixelGroup QuartetBitsTable[] = {
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) */
902 #endif /* PSZ == 32 */
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.
911 PixelGroup QuartetPixelMaskTable[] = {
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]
1175 #endif /* PSZ == 4 */
1178 PixelGroup QuartetPixelMaskTable[] = {
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,
1327 #endif /* PSZ == 8 */
1330 PixelGroup QuartetPixelMaskTable[] = {
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,
1347 #endif /* PSZ == 16 */
1350 PixelGroup QuartetPixelMaskTable[] = {
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
1375 #endif /* PSZ == 24 */
1378 PixelGroup QuartetPixelMaskTable[] = {
1382 #else /* PGSZ == 64 */
1389 #endif /* PSZ == 32 */
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) */