fbutil.c revision 05b261ec
105b261ecSmrg/* 205b261ecSmrg * Copyright © 1998 Keith Packard 305b261ecSmrg * 405b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its 505b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that 605b261ecSmrg * the above copyright notice appear in all copies and that both that 705b261ecSmrg * copyright notice and this permission notice appear in supporting 805b261ecSmrg * documentation, and that the name of Keith Packard not be used in 905b261ecSmrg * advertising or publicity pertaining to distribution of the software without 1005b261ecSmrg * specific, written prior permission. Keith Packard makes no 1105b261ecSmrg * representations about the suitability of this software for any purpose. It 1205b261ecSmrg * is provided "as is" without express or implied warranty. 1305b261ecSmrg * 1405b261ecSmrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 1505b261ecSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 1605b261ecSmrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR 1705b261ecSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 1805b261ecSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 1905b261ecSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 2005b261ecSmrg * PERFORMANCE OF THIS SOFTWARE. 2105b261ecSmrg */ 2205b261ecSmrg 2305b261ecSmrg#ifdef HAVE_DIX_CONFIG_H 2405b261ecSmrg#include <dix-config.h> 2505b261ecSmrg#endif 2605b261ecSmrg 2705b261ecSmrg#include "fb.h" 2805b261ecSmrg 2905b261ecSmrgFbBits 3005b261ecSmrgfbReplicatePixel (Pixel p, int bpp) 3105b261ecSmrg{ 3205b261ecSmrg FbBits b = p; 3305b261ecSmrg 3405b261ecSmrg b &= FbFullMask (bpp); 3505b261ecSmrg while (bpp < FB_UNIT) 3605b261ecSmrg { 3705b261ecSmrg b |= b << bpp; 3805b261ecSmrg bpp <<= 1; 3905b261ecSmrg } 4005b261ecSmrg return b; 4105b261ecSmrg} 4205b261ecSmrg 4305b261ecSmrgvoid 4405b261ecSmrgfbReduceRasterOp (int rop, FbBits fg, FbBits pm, FbBits *andp, FbBits *xorp) 4505b261ecSmrg{ 4605b261ecSmrg FbBits and, xor; 4705b261ecSmrg 4805b261ecSmrg switch (rop) 4905b261ecSmrg { 5005b261ecSmrg default: 5105b261ecSmrg case GXclear: /* 0 0 0 0 */ 5205b261ecSmrg and = 0; 5305b261ecSmrg xor = 0; 5405b261ecSmrg break; 5505b261ecSmrg case GXand: /* 0 0 0 1 */ 5605b261ecSmrg and = fg; 5705b261ecSmrg xor = 0; 5805b261ecSmrg break; 5905b261ecSmrg case GXandReverse: /* 0 0 1 0 */ 6005b261ecSmrg and = fg; 6105b261ecSmrg xor = fg; 6205b261ecSmrg break; 6305b261ecSmrg case GXcopy: /* 0 0 1 1 */ 6405b261ecSmrg and = 0; 6505b261ecSmrg xor = fg; 6605b261ecSmrg break; 6705b261ecSmrg case GXandInverted: /* 0 1 0 0 */ 6805b261ecSmrg and = ~fg; 6905b261ecSmrg xor = 0; 7005b261ecSmrg break; 7105b261ecSmrg case GXnoop: /* 0 1 0 1 */ 7205b261ecSmrg and = FB_ALLONES; 7305b261ecSmrg xor = 0; 7405b261ecSmrg break; 7505b261ecSmrg case GXxor: /* 0 1 1 0 */ 7605b261ecSmrg and = FB_ALLONES; 7705b261ecSmrg xor = fg; 7805b261ecSmrg break; 7905b261ecSmrg case GXor: /* 0 1 1 1 */ 8005b261ecSmrg and = ~fg; 8105b261ecSmrg xor = fg; 8205b261ecSmrg break; 8305b261ecSmrg case GXnor: /* 1 0 0 0 */ 8405b261ecSmrg and = ~fg; 8505b261ecSmrg xor = ~fg; 8605b261ecSmrg break; 8705b261ecSmrg case GXequiv: /* 1 0 0 1 */ 8805b261ecSmrg and = FB_ALLONES; 8905b261ecSmrg xor = ~fg; 9005b261ecSmrg break; 9105b261ecSmrg case GXinvert: /* 1 0 1 0 */ 9205b261ecSmrg and = FB_ALLONES; 9305b261ecSmrg xor = FB_ALLONES; 9405b261ecSmrg break; 9505b261ecSmrg case GXorReverse: /* 1 0 1 1 */ 9605b261ecSmrg and = ~fg; 9705b261ecSmrg xor = FB_ALLONES; 9805b261ecSmrg break; 9905b261ecSmrg case GXcopyInverted: /* 1 1 0 0 */ 10005b261ecSmrg and = 0; 10105b261ecSmrg xor = ~fg; 10205b261ecSmrg break; 10305b261ecSmrg case GXorInverted: /* 1 1 0 1 */ 10405b261ecSmrg and = fg; 10505b261ecSmrg xor = ~fg; 10605b261ecSmrg break; 10705b261ecSmrg case GXnand: /* 1 1 1 0 */ 10805b261ecSmrg and = fg; 10905b261ecSmrg xor = FB_ALLONES; 11005b261ecSmrg break; 11105b261ecSmrg case GXset: /* 1 1 1 1 */ 11205b261ecSmrg and = 0; 11305b261ecSmrg xor = FB_ALLONES; 11405b261ecSmrg break; 11505b261ecSmrg } 11605b261ecSmrg and |= ~pm; 11705b261ecSmrg xor &= pm; 11805b261ecSmrg *andp = and; 11905b261ecSmrg *xorp = xor; 12005b261ecSmrg} 12105b261ecSmrg 12205b261ecSmrg#define O 0 12305b261ecSmrg#define I FB_ALLONES 12405b261ecSmrg 12505b261ecSmrgconst FbMergeRopRec FbMergeRopBits[16] = { 12605b261ecSmrg { O,O,O,O }, /* clear 0x0 0 */ 12705b261ecSmrg { I,O,O,O }, /* and 0x1 src AND dst */ 12805b261ecSmrg { I,O,I,O }, /* andReverse 0x2 src AND NOT dst */ 12905b261ecSmrg { O,O,I,O }, /* copy 0x3 src */ 13005b261ecSmrg { I,I,O,O }, /* andInverted 0x4 NOT src AND dst */ 13105b261ecSmrg { O,I,O,O }, /* noop 0x5 dst */ 13205b261ecSmrg { O,I,I,O }, /* xor 0x6 src XOR dst */ 13305b261ecSmrg { I,I,I,O }, /* or 0x7 src OR dst */ 13405b261ecSmrg { I,I,I,I }, /* nor 0x8 NOT src AND NOT dst */ 13505b261ecSmrg { O,I,I,I }, /* equiv 0x9 NOT src XOR dst */ 13605b261ecSmrg { O,I,O,I }, /* invert 0xa NOT dst */ 13705b261ecSmrg { I,I,O,I }, /* orReverse 0xb src OR NOT dst */ 13805b261ecSmrg { O,O,I,I }, /* copyInverted 0xc NOT src */ 13905b261ecSmrg { I,O,I,I }, /* orInverted 0xd NOT src OR dst */ 14005b261ecSmrg { I,O,O,I }, /* nand 0xe NOT src OR NOT dst */ 14105b261ecSmrg { O,O,O,I }, /* set 0xf 1 */ 14205b261ecSmrg}; 14305b261ecSmrg 14405b261ecSmrg/* 14505b261ecSmrg * Stipple masks are independent of bit/byte order as long 14605b261ecSmrg * as bitorder == byteorder. FB doesn't handle the case 14705b261ecSmrg * where these differ 14805b261ecSmrg */ 14905b261ecSmrg#define BitsMask(x,w) ((FB_ALLONES << ((x) & FB_MASK)) & \ 15005b261ecSmrg (FB_ALLONES >> ((FB_UNIT - ((x) + (w))) & FB_MASK))) 15105b261ecSmrg 15205b261ecSmrg#define Mask(x,w) BitsMask((x)*(w),(w)) 15305b261ecSmrg 15405b261ecSmrg 15505b261ecSmrg#define SelMask(b,n,w) ((((b) >> n) & 1) * Mask(n,w)) 15605b261ecSmrg 15705b261ecSmrg#define C1(b,w) \ 15805b261ecSmrg (SelMask(b,0,w)) 15905b261ecSmrg 16005b261ecSmrg#define C2(b,w) \ 16105b261ecSmrg (SelMask(b,0,w) | \ 16205b261ecSmrg SelMask(b,1,w)) 16305b261ecSmrg 16405b261ecSmrg#define C4(b,w) \ 16505b261ecSmrg (SelMask(b,0,w) | \ 16605b261ecSmrg SelMask(b,1,w) | \ 16705b261ecSmrg SelMask(b,2,w) | \ 16805b261ecSmrg SelMask(b,3,w)) 16905b261ecSmrg 17005b261ecSmrg#define C8(b,w) \ 17105b261ecSmrg (SelMask(b,0,w) | \ 17205b261ecSmrg SelMask(b,1,w) | \ 17305b261ecSmrg SelMask(b,2,w) | \ 17405b261ecSmrg SelMask(b,3,w) | \ 17505b261ecSmrg SelMask(b,4,w) | \ 17605b261ecSmrg SelMask(b,5,w) | \ 17705b261ecSmrg SelMask(b,6,w) | \ 17805b261ecSmrg SelMask(b,7,w)) 17905b261ecSmrg 18005b261ecSmrg#if FB_UNIT == 16 18105b261ecSmrg#define fbStipple16Bits 0 18205b261ecSmrg#define fbStipple8Bits 0 18305b261ecSmrgconst FbBits fbStipple4Bits[16] = { 18405b261ecSmrg C4( 0,4), C4( 1,4), C4( 2,4), C4( 3,4), C4( 4,4), C4( 5,4), 18505b261ecSmrg C4( 6,4), C4( 7,4), C4( 8,4), C4( 9,4), C4( 10,4), C4( 11,4), 18605b261ecSmrg C4( 12,4), C4( 13,4), C4( 14,4), C4( 15,4),}; 18705b261ecSmrgconst FbBits fbStipple2Bits[4] = { 18805b261ecSmrg C2( 0,8), C2( 1,8), C2( 2,8), C2( 3,8), 18905b261ecSmrg}; 19005b261ecSmrgconst FbBits fbStipple1Bits[2] = { 19105b261ecSmrg C1( 0,16), C1( 1,16), 19205b261ecSmrg}; 19305b261ecSmrg#endif 19405b261ecSmrg#if FB_UNIT == 32 19505b261ecSmrg#define fbStipple16Bits 0 19605b261ecSmrgconst FbBits fbStipple8Bits[256] = { 19705b261ecSmrg C8( 0,4), C8( 1,4), C8( 2,4), C8( 3,4), C8( 4,4), C8( 5,4), 19805b261ecSmrg C8( 6,4), C8( 7,4), C8( 8,4), C8( 9,4), C8( 10,4), C8( 11,4), 19905b261ecSmrg C8( 12,4), C8( 13,4), C8( 14,4), C8( 15,4), C8( 16,4), C8( 17,4), 20005b261ecSmrg C8( 18,4), C8( 19,4), C8( 20,4), C8( 21,4), C8( 22,4), C8( 23,4), 20105b261ecSmrg C8( 24,4), C8( 25,4), C8( 26,4), C8( 27,4), C8( 28,4), C8( 29,4), 20205b261ecSmrg C8( 30,4), C8( 31,4), C8( 32,4), C8( 33,4), C8( 34,4), C8( 35,4), 20305b261ecSmrg C8( 36,4), C8( 37,4), C8( 38,4), C8( 39,4), C8( 40,4), C8( 41,4), 20405b261ecSmrg C8( 42,4), C8( 43,4), C8( 44,4), C8( 45,4), C8( 46,4), C8( 47,4), 20505b261ecSmrg C8( 48,4), C8( 49,4), C8( 50,4), C8( 51,4), C8( 52,4), C8( 53,4), 20605b261ecSmrg C8( 54,4), C8( 55,4), C8( 56,4), C8( 57,4), C8( 58,4), C8( 59,4), 20705b261ecSmrg C8( 60,4), C8( 61,4), C8( 62,4), C8( 63,4), C8( 64,4), C8( 65,4), 20805b261ecSmrg C8( 66,4), C8( 67,4), C8( 68,4), C8( 69,4), C8( 70,4), C8( 71,4), 20905b261ecSmrg C8( 72,4), C8( 73,4), C8( 74,4), C8( 75,4), C8( 76,4), C8( 77,4), 21005b261ecSmrg C8( 78,4), C8( 79,4), C8( 80,4), C8( 81,4), C8( 82,4), C8( 83,4), 21105b261ecSmrg C8( 84,4), C8( 85,4), C8( 86,4), C8( 87,4), C8( 88,4), C8( 89,4), 21205b261ecSmrg C8( 90,4), C8( 91,4), C8( 92,4), C8( 93,4), C8( 94,4), C8( 95,4), 21305b261ecSmrg C8( 96,4), C8( 97,4), C8( 98,4), C8( 99,4), C8(100,4), C8(101,4), 21405b261ecSmrg C8(102,4), C8(103,4), C8(104,4), C8(105,4), C8(106,4), C8(107,4), 21505b261ecSmrg C8(108,4), C8(109,4), C8(110,4), C8(111,4), C8(112,4), C8(113,4), 21605b261ecSmrg C8(114,4), C8(115,4), C8(116,4), C8(117,4), C8(118,4), C8(119,4), 21705b261ecSmrg C8(120,4), C8(121,4), C8(122,4), C8(123,4), C8(124,4), C8(125,4), 21805b261ecSmrg C8(126,4), C8(127,4), C8(128,4), C8(129,4), C8(130,4), C8(131,4), 21905b261ecSmrg C8(132,4), C8(133,4), C8(134,4), C8(135,4), C8(136,4), C8(137,4), 22005b261ecSmrg C8(138,4), C8(139,4), C8(140,4), C8(141,4), C8(142,4), C8(143,4), 22105b261ecSmrg C8(144,4), C8(145,4), C8(146,4), C8(147,4), C8(148,4), C8(149,4), 22205b261ecSmrg C8(150,4), C8(151,4), C8(152,4), C8(153,4), C8(154,4), C8(155,4), 22305b261ecSmrg C8(156,4), C8(157,4), C8(158,4), C8(159,4), C8(160,4), C8(161,4), 22405b261ecSmrg C8(162,4), C8(163,4), C8(164,4), C8(165,4), C8(166,4), C8(167,4), 22505b261ecSmrg C8(168,4), C8(169,4), C8(170,4), C8(171,4), C8(172,4), C8(173,4), 22605b261ecSmrg C8(174,4), C8(175,4), C8(176,4), C8(177,4), C8(178,4), C8(179,4), 22705b261ecSmrg C8(180,4), C8(181,4), C8(182,4), C8(183,4), C8(184,4), C8(185,4), 22805b261ecSmrg C8(186,4), C8(187,4), C8(188,4), C8(189,4), C8(190,4), C8(191,4), 22905b261ecSmrg C8(192,4), C8(193,4), C8(194,4), C8(195,4), C8(196,4), C8(197,4), 23005b261ecSmrg C8(198,4), C8(199,4), C8(200,4), C8(201,4), C8(202,4), C8(203,4), 23105b261ecSmrg C8(204,4), C8(205,4), C8(206,4), C8(207,4), C8(208,4), C8(209,4), 23205b261ecSmrg C8(210,4), C8(211,4), C8(212,4), C8(213,4), C8(214,4), C8(215,4), 23305b261ecSmrg C8(216,4), C8(217,4), C8(218,4), C8(219,4), C8(220,4), C8(221,4), 23405b261ecSmrg C8(222,4), C8(223,4), C8(224,4), C8(225,4), C8(226,4), C8(227,4), 23505b261ecSmrg C8(228,4), C8(229,4), C8(230,4), C8(231,4), C8(232,4), C8(233,4), 23605b261ecSmrg C8(234,4), C8(235,4), C8(236,4), C8(237,4), C8(238,4), C8(239,4), 23705b261ecSmrg C8(240,4), C8(241,4), C8(242,4), C8(243,4), C8(244,4), C8(245,4), 23805b261ecSmrg C8(246,4), C8(247,4), C8(248,4), C8(249,4), C8(250,4), C8(251,4), 23905b261ecSmrg C8(252,4), C8(253,4), C8(254,4), C8(255,4), 24005b261ecSmrg}; 24105b261ecSmrgconst FbBits fbStipple4Bits[16] = { 24205b261ecSmrg C4( 0,8), C4( 1,8), C4( 2,8), C4( 3,8), C4( 4,8), C4( 5,8), 24305b261ecSmrg C4( 6,8), C4( 7,8), C4( 8,8), C4( 9,8), C4( 10,8), C4( 11,8), 24405b261ecSmrg C4( 12,8), C4( 13,8), C4( 14,8), C4( 15,8),}; 24505b261ecSmrgconst FbBits fbStipple2Bits[4] = { 24605b261ecSmrg C2( 0,16), C2( 1,16), C2( 2,16), C2( 3,16), 24705b261ecSmrg}; 24805b261ecSmrgconst FbBits fbStipple1Bits[2] = { 24905b261ecSmrg C1( 0,32), C1( 1,32), 25005b261ecSmrg}; 25105b261ecSmrg#endif 25205b261ecSmrg#if FB_UNIT == 64 25305b261ecSmrgconst FbBits fbStipple16Bits[256] = { 25405b261ecSmrg C8( 0,4), C8( 1,4), C8( 2,4), C8( 3,4), C8( 4,4), C8( 5,4), 25505b261ecSmrg C8( 6,4), C8( 7,4), C8( 8,4), C8( 9,4), C8( 10,4), C8( 11,4), 25605b261ecSmrg C8( 12,4), C8( 13,4), C8( 14,4), C8( 15,4), C8( 16,4), C8( 17,4), 25705b261ecSmrg C8( 18,4), C8( 19,4), C8( 20,4), C8( 21,4), C8( 22,4), C8( 23,4), 25805b261ecSmrg C8( 24,4), C8( 25,4), C8( 26,4), C8( 27,4), C8( 28,4), C8( 29,4), 25905b261ecSmrg C8( 30,4), C8( 31,4), C8( 32,4), C8( 33,4), C8( 34,4), C8( 35,4), 26005b261ecSmrg C8( 36,4), C8( 37,4), C8( 38,4), C8( 39,4), C8( 40,4), C8( 41,4), 26105b261ecSmrg C8( 42,4), C8( 43,4), C8( 44,4), C8( 45,4), C8( 46,4), C8( 47,4), 26205b261ecSmrg C8( 48,4), C8( 49,4), C8( 50,4), C8( 51,4), C8( 52,4), C8( 53,4), 26305b261ecSmrg C8( 54,4), C8( 55,4), C8( 56,4), C8( 57,4), C8( 58,4), C8( 59,4), 26405b261ecSmrg C8( 60,4), C8( 61,4), C8( 62,4), C8( 63,4), C8( 64,4), C8( 65,4), 26505b261ecSmrg C8( 66,4), C8( 67,4), C8( 68,4), C8( 69,4), C8( 70,4), C8( 71,4), 26605b261ecSmrg C8( 72,4), C8( 73,4), C8( 74,4), C8( 75,4), C8( 76,4), C8( 77,4), 26705b261ecSmrg C8( 78,4), C8( 79,4), C8( 80,4), C8( 81,4), C8( 82,4), C8( 83,4), 26805b261ecSmrg C8( 84,4), C8( 85,4), C8( 86,4), C8( 87,4), C8( 88,4), C8( 89,4), 26905b261ecSmrg C8( 90,4), C8( 91,4), C8( 92,4), C8( 93,4), C8( 94,4), C8( 95,4), 27005b261ecSmrg C8( 96,4), C8( 97,4), C8( 98,4), C8( 99,4), C8(100,4), C8(101,4), 27105b261ecSmrg C8(102,4), C8(103,4), C8(104,4), C8(105,4), C8(106,4), C8(107,4), 27205b261ecSmrg C8(108,4), C8(109,4), C8(110,4), C8(111,4), C8(112,4), C8(113,4), 27305b261ecSmrg C8(114,4), C8(115,4), C8(116,4), C8(117,4), C8(118,4), C8(119,4), 27405b261ecSmrg C8(120,4), C8(121,4), C8(122,4), C8(123,4), C8(124,4), C8(125,4), 27505b261ecSmrg C8(126,4), C8(127,4), C8(128,4), C8(129,4), C8(130,4), C8(131,4), 27605b261ecSmrg C8(132,4), C8(133,4), C8(134,4), C8(135,4), C8(136,4), C8(137,4), 27705b261ecSmrg C8(138,4), C8(139,4), C8(140,4), C8(141,4), C8(142,4), C8(143,4), 27805b261ecSmrg C8(144,4), C8(145,4), C8(146,4), C8(147,4), C8(148,4), C8(149,4), 27905b261ecSmrg C8(150,4), C8(151,4), C8(152,4), C8(153,4), C8(154,4), C8(155,4), 28005b261ecSmrg C8(156,4), C8(157,4), C8(158,4), C8(159,4), C8(160,4), C8(161,4), 28105b261ecSmrg C8(162,4), C8(163,4), C8(164,4), C8(165,4), C8(166,4), C8(167,4), 28205b261ecSmrg C8(168,4), C8(169,4), C8(170,4), C8(171,4), C8(172,4), C8(173,4), 28305b261ecSmrg C8(174,4), C8(175,4), C8(176,4), C8(177,4), C8(178,4), C8(179,4), 28405b261ecSmrg C8(180,4), C8(181,4), C8(182,4), C8(183,4), C8(184,4), C8(185,4), 28505b261ecSmrg C8(186,4), C8(187,4), C8(188,4), C8(189,4), C8(190,4), C8(191,4), 28605b261ecSmrg C8(192,4), C8(193,4), C8(194,4), C8(195,4), C8(196,4), C8(197,4), 28705b261ecSmrg C8(198,4), C8(199,4), C8(200,4), C8(201,4), C8(202,4), C8(203,4), 28805b261ecSmrg C8(204,4), C8(205,4), C8(206,4), C8(207,4), C8(208,4), C8(209,4), 28905b261ecSmrg C8(210,4), C8(211,4), C8(212,4), C8(213,4), C8(214,4), C8(215,4), 29005b261ecSmrg C8(216,4), C8(217,4), C8(218,4), C8(219,4), C8(220,4), C8(221,4), 29105b261ecSmrg C8(222,4), C8(223,4), C8(224,4), C8(225,4), C8(226,4), C8(227,4), 29205b261ecSmrg C8(228,4), C8(229,4), C8(230,4), C8(231,4), C8(232,4), C8(233,4), 29305b261ecSmrg C8(234,4), C8(235,4), C8(236,4), C8(237,4), C8(238,4), C8(239,4), 29405b261ecSmrg C8(240,4), C8(241,4), C8(242,4), C8(243,4), C8(244,4), C8(245,4), 29505b261ecSmrg C8(246,4), C8(247,4), C8(248,4), C8(249,4), C8(250,4), C8(251,4), 29605b261ecSmrg C8(252,4), C8(253,4), C8(254,4), C8(255,4), 29705b261ecSmrg}; 29805b261ecSmrgconst FbBits fbStipple8Bits[256] = { 29905b261ecSmrg C8( 0,8), C8( 1,8), C8( 2,8), C8( 3,8), C8( 4,8), C8( 5,8), 30005b261ecSmrg C8( 6,8), C8( 7,8), C8( 8,8), C8( 9,8), C8( 10,8), C8( 11,8), 30105b261ecSmrg C8( 12,8), C8( 13,8), C8( 14,8), C8( 15,8), C8( 16,8), C8( 17,8), 30205b261ecSmrg C8( 18,8), C8( 19,8), C8( 20,8), C8( 21,8), C8( 22,8), C8( 23,8), 30305b261ecSmrg C8( 24,8), C8( 25,8), C8( 26,8), C8( 27,8), C8( 28,8), C8( 29,8), 30405b261ecSmrg C8( 30,8), C8( 31,8), C8( 32,8), C8( 33,8), C8( 34,8), C8( 35,8), 30505b261ecSmrg C8( 36,8), C8( 37,8), C8( 38,8), C8( 39,8), C8( 40,8), C8( 41,8), 30605b261ecSmrg C8( 42,8), C8( 43,8), C8( 44,8), C8( 45,8), C8( 46,8), C8( 47,8), 30705b261ecSmrg C8( 48,8), C8( 49,8), C8( 50,8), C8( 51,8), C8( 52,8), C8( 53,8), 30805b261ecSmrg C8( 54,8), C8( 55,8), C8( 56,8), C8( 57,8), C8( 58,8), C8( 59,8), 30905b261ecSmrg C8( 60,8), C8( 61,8), C8( 62,8), C8( 63,8), C8( 64,8), C8( 65,8), 31005b261ecSmrg C8( 66,8), C8( 67,8), C8( 68,8), C8( 69,8), C8( 70,8), C8( 71,8), 31105b261ecSmrg C8( 72,8), C8( 73,8), C8( 74,8), C8( 75,8), C8( 76,8), C8( 77,8), 31205b261ecSmrg C8( 78,8), C8( 79,8), C8( 80,8), C8( 81,8), C8( 82,8), C8( 83,8), 31305b261ecSmrg C8( 84,8), C8( 85,8), C8( 86,8), C8( 87,8), C8( 88,8), C8( 89,8), 31405b261ecSmrg C8( 90,8), C8( 91,8), C8( 92,8), C8( 93,8), C8( 94,8), C8( 95,8), 31505b261ecSmrg C8( 96,8), C8( 97,8), C8( 98,8), C8( 99,8), C8(100,8), C8(101,8), 31605b261ecSmrg C8(102,8), C8(103,8), C8(104,8), C8(105,8), C8(106,8), C8(107,8), 31705b261ecSmrg C8(108,8), C8(109,8), C8(110,8), C8(111,8), C8(112,8), C8(113,8), 31805b261ecSmrg C8(114,8), C8(115,8), C8(116,8), C8(117,8), C8(118,8), C8(119,8), 31905b261ecSmrg C8(120,8), C8(121,8), C8(122,8), C8(123,8), C8(124,8), C8(125,8), 32005b261ecSmrg C8(126,8), C8(127,8), C8(128,8), C8(129,8), C8(130,8), C8(131,8), 32105b261ecSmrg C8(132,8), C8(133,8), C8(134,8), C8(135,8), C8(136,8), C8(137,8), 32205b261ecSmrg C8(138,8), C8(139,8), C8(140,8), C8(141,8), C8(142,8), C8(143,8), 32305b261ecSmrg C8(144,8), C8(145,8), C8(146,8), C8(147,8), C8(148,8), C8(149,8), 32405b261ecSmrg C8(150,8), C8(151,8), C8(152,8), C8(153,8), C8(154,8), C8(155,8), 32505b261ecSmrg C8(156,8), C8(157,8), C8(158,8), C8(159,8), C8(160,8), C8(161,8), 32605b261ecSmrg C8(162,8), C8(163,8), C8(164,8), C8(165,8), C8(166,8), C8(167,8), 32705b261ecSmrg C8(168,8), C8(169,8), C8(170,8), C8(171,8), C8(172,8), C8(173,8), 32805b261ecSmrg C8(174,8), C8(175,8), C8(176,8), C8(177,8), C8(178,8), C8(179,8), 32905b261ecSmrg C8(180,8), C8(181,8), C8(182,8), C8(183,8), C8(184,8), C8(185,8), 33005b261ecSmrg C8(186,8), C8(187,8), C8(188,8), C8(189,8), C8(190,8), C8(191,8), 33105b261ecSmrg C8(192,8), C8(193,8), C8(194,8), C8(195,8), C8(196,8), C8(197,8), 33205b261ecSmrg C8(198,8), C8(199,8), C8(200,8), C8(201,8), C8(202,8), C8(203,8), 33305b261ecSmrg C8(204,8), C8(205,8), C8(206,8), C8(207,8), C8(208,8), C8(209,8), 33405b261ecSmrg C8(210,8), C8(211,8), C8(212,8), C8(213,8), C8(214,8), C8(215,8), 33505b261ecSmrg C8(216,8), C8(217,8), C8(218,8), C8(219,8), C8(220,8), C8(221,8), 33605b261ecSmrg C8(222,8), C8(223,8), C8(224,8), C8(225,8), C8(226,8), C8(227,8), 33705b261ecSmrg C8(228,8), C8(229,8), C8(230,8), C8(231,8), C8(232,8), C8(233,8), 33805b261ecSmrg C8(234,8), C8(235,8), C8(236,8), C8(237,8), C8(238,8), C8(239,8), 33905b261ecSmrg C8(240,8), C8(241,8), C8(242,8), C8(243,8), C8(244,8), C8(245,8), 34005b261ecSmrg C8(246,8), C8(247,8), C8(248,8), C8(249,8), C8(250,8), C8(251,8), 34105b261ecSmrg C8(252,8), C8(253,8), C8(254,8), C8(255,8), 34205b261ecSmrg}; 34305b261ecSmrgconst FbBits fbStipple4Bits[16] = { 34405b261ecSmrg C4( 0,16), C4( 1,16), C4( 2,16), C4( 3,16), C4( 4,16), C4( 5,16), 34505b261ecSmrg C4( 6,16), C4( 7,16), C4( 8,16), C4( 9,16), C4( 10,16), C4( 11,16), 34605b261ecSmrg C4( 12,16), C4( 13,16), C4( 14,16), C4( 15,16),}; 34705b261ecSmrgconst FbBits fbStipple2Bits[4] = { 34805b261ecSmrg C2( 0,32), C2( 1,32), C2( 2,32), C2( 3,32), 34905b261ecSmrg}; 35005b261ecSmrg#define fbStipple1Bits 0 35105b261ecSmrg#endif 35205b261ecSmrgconst FbBits * const fbStippleTable[] = { 35305b261ecSmrg 0, 35405b261ecSmrg fbStipple1Bits, 35505b261ecSmrg fbStipple2Bits, 35605b261ecSmrg 0, 35705b261ecSmrg fbStipple4Bits, 35805b261ecSmrg 0, 35905b261ecSmrg 0, 36005b261ecSmrg 0, 36105b261ecSmrg fbStipple8Bits, 36205b261ecSmrg}; 363