040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * cfb8bit.h
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Defines which are only useful to 8 bit color frame buffers
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * That doesn't seem to be true any more. Some of the macros in here
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * are used for depths other than 8. Perhaps the file should be
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * renamed. dpw
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncCopyright 1989, 1998 The Open Group
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncPermission to use, copy, modify, distribute, and sell this software and its
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncdocumentation for any purpose is hereby granted without fee, provided that
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncthe above copyright notice appear in all copies and that both that
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsynccopyright notice and this permission notice appear in supporting
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncdocumentation.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncThe above copyright notice and this permission notice shall be included in
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncall copies or substantial portions of the Software.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncExcept as contained in this notice, the name of The Open Group shall not be
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncused in advertising or otherwise to promote the sale, use or other dealings
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncin this Software without prior written authorization from The Open Group.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#ifdef HAVE_DIX_CONFIG_H
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#include <dix-config.h>
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#include "servermd.h"
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if (BITMAP_BIT_ORDER == MSBFirst)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define GetBitGroup(x) (((PixelGroup) (x)) >> (PGSZ - PGSZB))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define NextBitGroup(x) ((x) <<= PGSZB)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define NextSomeBits(x,n) ((x) <<= (n))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define GetBitGroup(x) ((x) & PGSZBMSK)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define NextBitGroup(x) ((x) >>= PGSZB)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define NextSomeBits(x,n) ((x) >>= (n))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define RotBitsLeft(x,k) ((x) = BitLeft (x,k) | \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync BitRight (x, PGSZ-(k)))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if defined(__GNUC__) && defined(mc68020)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#undef RotBitsLeft
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define RotBitsLeft(x,k) asm("rol%.l %2,%0" \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync : "=d" (x) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync : "0" (x), "dI" (k))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PSZ == 8
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define GetPixelGroup(x) (cfb8StippleXor[GetBitGroup(x)])
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define RRopPixels(dst,x) (DoRRop(dst,cfb8StippleAnd[x], cfb8StippleXor[x]))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define RRopPixelGroup(dst,x) (RRopPixels(dst,GetBitGroup(x)))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define MaskRRopPixels(dst,x,mask) (DoMaskRRop(dst,cfb8StippleAnd[x], cfb8StippleXor[x], mask))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define NUM_MASKS (1<<PPW) /* XXX goes in cfbmskbits.h? */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern int cfb8StippleMode, cfb8StippleAlu;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern PixelGroup cfb8StippleFg, cfb8StippleBg, cfb8StipplePm;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern PixelGroup cfb8StippleMasks[NUM_MASKS];
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern PixelGroup cfb8StippleAnd[NUM_MASKS], cfb8StippleXor[NUM_MASKS];
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern int cfb8StippleRRop;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define cfb8PixelMasks cfb8StippleMasks
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define cfb8Pixels cfb8StippleXor
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define cfb8CheckPixels(fg, bg) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (FillOpaqueStippled == cfb8StippleMode && \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync GXcopy == cfb8StippleAlu && \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((fg) & PMSK) == cfb8StippleFg && \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((bg) & PMSK) == cfb8StippleBg && \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync PMSK == cfb8StipplePm)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define cfb8CheckOpaqueStipple(alu,fg,bg,pm) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((FillOpaqueStippled == cfb8StippleMode && \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (alu) == cfb8StippleAlu && \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((fg) & PMSK) == cfb8StippleFg && \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((bg) & PMSK) == cfb8StippleBg && \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((pm) & PMSK) == cfb8StipplePm) ? 0 : cfb8SetOpaqueStipple(alu,fg,bg,pm))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define cfb8CheckStipple(alu,fg,pm) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((FillStippled == cfb8StippleMode && \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (alu) == cfb8StippleAlu && \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((fg) & PMSK) == cfb8StippleFg && \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((pm) & PMSK) == cfb8StipplePm) ? 0 : cfb8SetStipple(alu,fg,pm))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define cfb8SetPixels(fg,bg) cfb8SetOpaqueStipple(GXcopy,fg,bg,PMSK)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * These macros are shared between the unnatural spans code
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * and the unnatural rectangle code. No reasonable person
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * would attempt to use them anyplace else.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define NextUnnaturalStippleWord \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if (bitsLeft >= MFB_PPW) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync inputBits = *srcTemp++; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync bitsLeft -= MFB_PPW; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync partBitsLeft = MFB_PPW; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync else \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync inputBits = 0; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if (bitsLeft) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync inputBits = *srcTemp & ~cfb8BitLenMasks[bitsLeft]; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync srcTemp = srcStart; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync partBitsLeft = bitsLeft; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync bitsLeft = bitsWhole; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define NextUnnaturalStippleBits \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if (partBitsLeft >= PPW) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync bits = GetBitGroup (inputBits); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync NextBitGroup (inputBits); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync partBitsLeft -= PPW; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } else { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync bits = GetBitGroup (inputBits); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync nextPartBits = PPW - partBitsLeft; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync NextUnnaturalStippleWord \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if (partBitsLeft < nextPartBits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if (partBitsLeft) {\
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync bits |= BitRight (GetBitGroup (inputBits), \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync PPW - nextPartBits) & PPWMSK;\
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync nextPartBits -= partBitsLeft; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync NextUnnaturalStippleWord \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync bits |= BitRight (GetBitGroup (inputBits), \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync PPW - nextPartBits) & PPWMSK; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync NextSomeBits (inputBits, nextPartBits); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync partBitsLeft -= nextPartBits; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define NextUnnaturalStippleBitsFast \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if (partBitsLeft >= PPW) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync bits = GetBitGroup(inputBits); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync NextBitGroup(inputBits); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync partBitsLeft -= PPW; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } else { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync bits = GetBitGroup (inputBits); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync nextPartBits = PPW - partBitsLeft; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync inputBits = *srcTemp++; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync bits |= BitRight (GetBitGroup (inputBits), \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync partBitsLeft) & PPWMSK; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync NextSomeBits (inputBits, nextPartBits); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync partBitsLeft = MFB_PPW - nextPartBits; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * WriteBitGroup takes the destination address, a pixel
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * value (which must be 8 bits duplicated 4 time with PFILL)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * and the PPW bits to write, which must be in the low order
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * bits of the register (probably from GetBitGroup) and writes
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * the appropriate locations in memory with the pixel value. This
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * is a copy-mode only operation.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define RRopBitGroup(dst,bits) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *(dst) = RRopPixels(*(dst),bits); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define MaskRRopBitGroup(dst,bits,mask) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *(dst) = MaskRRopPixels(*(dst),bits,mask); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PSZ == 8 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if !defined(AVOID_MEMORY_READ) && PSZ == 8
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define WriteBitGroup(dst,pixel,bits) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync register PixelGroup _maskTmp = cfb8PixelMasks[(bits)]; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *(dst) = (*(dst) & ~_maskTmp) | ((pixel) & _maskTmp); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SwitchBitGroup(dst,pixel,bits) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync register PixelGroup _maskTmp = cfb8PixelMasks[(bits)]; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync register PixelGroup _pixTmp = ((pixel) & _maskTmp); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync _maskTmp = ~_maskTmp; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (*(dst) = (*(dst) & _maskTmp) | _pixTmp;) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else /* AVOID_MEMORY_READ */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PGSZ == 32
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if (BITMAP_BIT_ORDER == MSBFirst)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel0 3
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel1 2
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel2 1
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel3 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel4 7
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel5 6
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel6 5
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel7 4
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel8 0xB
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel9 0xA
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel0 1
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel1 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel2 3
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel3 2
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel4 5
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel5 4
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel0 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel1 1
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel2 2
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel3 3
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel4 4
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel5 5
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel6 6
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel7 7
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel8 8
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel9 9
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel0 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel1 1
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel2 2
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel3 3
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel4 4
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel5 5
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define QuadPixel0 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define QuadPixel1 1
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define QuadPixel2 2
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if (BITMAP_BIT_ORDER == MSBFirst)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel0 7
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel1 6
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel2 5
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel3 4
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel4 3
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel5 2
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel6 1
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel7 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel0 3
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel1 2
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel2 1
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel3 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define QuadPixel0 1
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define QuadPixel1 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel0 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel1 1
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel2 2
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel3 3
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel4 4
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel5 5
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel6 6
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SinglePixel7 7
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel0 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel1 1
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel2 2
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DoublePixel3 3
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define QuadPixel0 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define QuadPixel1 1
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define OctaPixel0 0
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PSZ == 8
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PGSZ == 32
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define WriteBitGroup(dst,pixel,bits) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define WriteBitGroup(dst,pixel,bits) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if ( bits == 0xff ) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((PixelGroup *) (dst))[OctaPixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync else { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits & 0x0f) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[QuadPixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch ((bits & 0xf0) >> 4) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PGSZ == 32
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SwitchBitGroup(dst,pixel,bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[0] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync}
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SwitchBitGroup(dst,pixel,bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if ( bits == 0xff ) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((PixelGroup *) (dst))[OctaPixel0] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync else { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits & 0x0f) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel);)\
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel1] = (pixel);)\
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel1] = (pixel);)\
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel1] = (pixel);)\
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch ((bits & 0xf0) >> 4) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel);)\
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel);)\
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = (pixel);)\
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = (pixel);)\
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync}
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PSZ == 8 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PSZ == 16
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PGSZ == 32
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define WriteBitGroup(dst,pixel,bits) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define WriteBitGroup(dst,pixel,bits) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if ( bits == 0xff ) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((PixelGroup *) (dst))[QuadPixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((PixelGroup *) (dst))[QuadPixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync else { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits & 0x0f) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch ((bits & 0xf0) >> 4) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PGSZ */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PGSZ == 32
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SwitchBitGroup(dst,pixel,bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync}
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SwitchBitGroup(dst,pixel,bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync cfb cannot hack 64-bit SwitchBitGroup psz=PSZ
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PGSZ */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PSZ == 16 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PSZ == 24
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/* 32 000011112222*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/* 24 000111222333*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/* 16 001122334455*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/* 8 0123456789AB*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PGSZ == 32
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define WriteBitGroup(dst,pixel,bits) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync register CARD32 reg_pixel = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = ((reg_pixel>>16)&0xFF); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = reg_pixel&0xFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = (reg_pixel>>8)&0xFFFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = reg_pixel & 0xFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = (reg_pixel>>8)&0xFFFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (reg_pixel>>16&0xFF); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = (reg_pixel>>16)&0xFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 16; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = reg_pixel&0xFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = (reg_pixel>>8); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = reg_pixel&0xFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel0] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel3] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync reg_pixel >>= 8; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = reg_pixel; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define WriteBitGroup(dst,pixel,bits) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if ( bits == 0xff ) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((PixelGroup *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((PixelGroup *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((PixelGroup *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((PixelGroup *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync else { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits & 0x0f) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch ((bits & 0xf0) >> 4) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PGSZ */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PGSZ == 32
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SwitchBitGroup(dst,pixel,bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[QuadPixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel9] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel9] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel9] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel9] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync}
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SwitchBitGroup(dst,pixel,bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync cfb cannot hack 64-bit SwitchBitGroup psz=PSZ
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PGSZ */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PSZ == 24 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PSZ == 32
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PGSZ == 32
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define WriteBitGroup(dst,pixel,bits) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define WriteBitGroup(dst,pixel,bits) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if ( bits == 0xff ) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((PixelGroup *) (dst))[DoublePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((PixelGroup *) (dst))[DoublePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((PixelGroup *) (dst))[DoublePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((PixelGroup *) (dst))[DoublePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync else { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits & 0x0f) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch ((bits & 0xf0) >> 4) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync }
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PGSZ */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if PGSZ == 32
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SwitchBitGroup(dst,pixel,bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync switch (bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 0: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 1: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 2: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 3: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 4: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 5: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 6: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 7: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 8: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 9: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 10: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 11: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 12: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 13: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 14: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync case 15: \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync break; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync}
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else /* PGSZ == 64 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define SwitchBitGroup(dst,pixel,bits) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync cfb cannot hack 64-bit SwitchBitGroup psz=PSZ
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PGSZ */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* PSZ == 32 */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* AVOID_MEMORY_READ */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern PixelGroup cfb8BitLenMasks[PGSZ];
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern int cfb8SetStipple (
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int /*alu*/,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CfbBits /*fg*/,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CfbBits /*planemask*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern int cfb8SetOpaqueStipple (
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int /*alu*/,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CfbBits /*fg*/,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CfbBits /*bg*/,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CfbBits /*planemask*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern int cfb8ComputeClipMasks32 (
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync BoxPtr /*pBox*/,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int /*numRects*/,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int /*x*/,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int /*y*/,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int /*w*/,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int /*h*/,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CARD32 * /*clips*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync);