b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * $XFree86$
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Copyright © 1998 Keith Packard
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Permission to use, copy, modify, distribute, and sell this software and its
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * documentation for any purpose is hereby granted without fee, provided that
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * the above copyright notice appear in all copies and that both that
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * copyright notice and this permission notice appear in supporting
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * documentation, and that the name of Keith Packard not be used in
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * advertising or publicity pertaining to distribution of the software without
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * specific, written prior permission. Keith Packard makes no
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * representations about the suitability of this software for any purpose. It
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * is provided "as is" without express or implied warranty.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * PERFORMANCE OF THIS SOFTWARE.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * This file defines functions for drawing some primitives using
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * underlying datatypes instead of masks
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define isClipped(c,ul,lr) ((((c) - (ul)) | ((lr) - (c))) & 0x80008000)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef HAVE_DIX_CONFIG_H
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include <dix-config.h>
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef BITSMUL
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define MUL BITSMUL
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define MUL 1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef BITSSTORE
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define STORE(b,x) BITSSTORE(b,x)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define STORE(b,x) (*(b) = (x))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef BITSRROP
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define RROP(b,a,x) BITSRROP(b,a,x)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define RROP(b,a,x) (*(b) = FbDoRRop (*(b), (a), (x)))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef BITSUNIT
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define UNIT BITSUNIT
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define USE_SOLID
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define UNIT BITS
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Define the following before including this file:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * BRESSOLID name of function for drawing a solid segment
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * BRESDASH name of function for drawing a dashed segment
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * DOTS name of function for drawing dots
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * ARC name of function for drawing a solid arc
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * BITS type of underlying unit
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef BRESSOLID
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncBRESSOLID (DrawablePtr pDrawable,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync GCPtr pGC,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dashOffset,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int signdx,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int signdy,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int axis,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int x1,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int y1,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int e,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int e1,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int e3,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int len)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync{
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits *dst;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride dstStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstBpp;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstXoff, dstYoff;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbGCPrivPtr pPriv = fbGetGCPrivate (pGC);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync UNIT *bits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride majorStep, minorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BITS xor = (BITS) pPriv->xor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits = ((UNIT *) (dst + ((y1 + dstYoff) * dstStride))) + (x1 + dstXoff) * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bitsStride = dstStride * (sizeof (FbBits) / sizeof (UNIT));
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (signdy < 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bitsStride = -bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (axis == X_AXIS)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync majorStep = signdx * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync minorStep = bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync majorStep = bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync minorStep = signdx * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (len--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync STORE(bits,xor);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += majorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (e >= 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += minorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync}
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef BRESDASH
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncBRESDASH (DrawablePtr pDrawable,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync GCPtr pGC,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dashOffset,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int signdx,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int signdy,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int axis,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int x1,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int y1,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int e,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int e1,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int e3,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int len)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync{
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits *dst;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride dstStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstBpp;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstXoff, dstYoff;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbGCPrivPtr pPriv = fbGetGCPrivate (pGC);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync UNIT *bits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride majorStep, minorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BITS xorfg, xorbg;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbDashDeclare;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dashlen;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync Bool even;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync Bool doOdd;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync doOdd = pGC->lineStyle == LineDoubleDash;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xorfg = (BITS) pPriv->xor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xorbg = (BITS) pPriv->bgxor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbDashInit (pGC, pPriv, dashOffset, dashlen, even);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits = ((UNIT *) (dst + ((y1 + dstYoff) * dstStride))) + (x1 + dstXoff) * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bitsStride = dstStride * (sizeof (FbBits) / sizeof (UNIT));
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (signdy < 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bitsStride = -bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (axis == X_AXIS)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync majorStep = signdx * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync minorStep = bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync majorStep = bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync minorStep = signdx * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (dashlen >= len)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dashlen = len;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (doOdd)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!even)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync goto doubleOdd;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync for (;;)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync len -= dashlen;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (dashlen--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync STORE(bits,xorfg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += majorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if ((e += e1) >= 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += minorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!len)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbDashNextEven(dashlen);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (dashlen >= len)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dashlen = len;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncdoubleOdd:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync len -= dashlen;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (dashlen--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync STORE(bits,xorbg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += majorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if ((e += e1) >= 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += minorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!len)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbDashNextOdd(dashlen);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (dashlen >= len)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dashlen = len;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!even)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync goto onOffOdd;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync for (;;)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync len -= dashlen;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (dashlen--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync STORE(bits,xorfg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += majorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if ((e += e1) >= 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += minorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!len)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbDashNextEven (dashlen);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (dashlen >= len)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dashlen = len;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynconOffOdd:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync len -= dashlen;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (dashlen--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += majorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if ((e += e1) >= 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += minorStep;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!len)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbDashNextOdd (dashlen);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (dashlen >= len)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dashlen = len;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync}
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef DOTS
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncDOTS (FbBits *dst,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride dstStride,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstBpp,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BoxPtr pBox,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xPoint *ptsOrig,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int npt,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int xorg,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int yorg,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int xoff,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int yoff,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits and,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits xor)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync{
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync INT32 *pts = (INT32 *) ptsOrig;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync UNIT *bits = (UNIT *) dst;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync UNIT *point;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BITS bxor = (BITS) xor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BITS band = (BITS) and;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride bitsStride = dstStride * (sizeof (FbBits) / sizeof (UNIT));
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync INT32 ul, lr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync INT32 pt;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ul = coordToInt(pBox->x1 - xorg, pBox->y1 - yorg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync lr = coordToInt(pBox->x2 - xorg - 1, pBox->y2 - yorg - 1);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += bitsStride * (yorg + yoff) + (xorg + xoff) * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (and == 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (npt--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync pt = *pts++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!isClipped(pt,ul,lr))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync point = bits + intToY(pt) * bitsStride + intToX(pt) * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync STORE(point,bxor);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (npt--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync pt = *pts++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!isClipped(pt,ul,lr))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync point = bits + intToY(pt) * bitsStride + intToX(pt) * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync RROP(point,band,bxor);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync}
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef ARC
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define ARCCOPY(d) STORE(d,xorBits)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define ARCRROP(d) RROP(d,andBits,xorBits)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncARC (FbBits *dst,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride dstStride,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstBpp,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xArc *arc,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int drawX,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int drawY,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits and,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits xor)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync{
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync UNIT *bits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync miZeroArcRec info;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync Bool do360;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int x;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync UNIT *yorgp, *yorgop;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BITS andBits, xorBits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int yoffset, dyoffset;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int y, a, b, d, mask;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int k1, k3, dx, dy;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits = (UNIT *) dst;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bitsStride = dstStride * (sizeof (FbBits) / sizeof (UNIT));
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync andBits = (BITS) and;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xorBits = (BITS) xor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync do360 = miZeroArcSetup(arc, &info, TRUE);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync yorgp = bits + ((info.yorg + drawY) * bitsStride);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync yorgop = bits + ((info.yorgo + drawY) * bitsStride);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync info.xorg = (info.xorg + drawX) * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync info.xorgo = (info.xorgo + drawX) * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync MIARCSETUP();
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync yoffset = y ? bitsStride : 0;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dyoffset = 0;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync mask = info.initialMask;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!(arc->width & 1))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (andBits == 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 2)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgp + info.xorgo);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 8)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgop + info.xorgo);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 2)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgp + info.xorgo);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 8)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgop + info.xorgo);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!info.end.x || !info.end.y)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync mask = info.end.mask;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync info.end = info.altend;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (do360 && (arc->width == arc->height) && !(arc->width & 1))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int xoffset = bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync UNIT *yorghb = yorgp + (info.h * bitsStride) + info.xorg;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync UNIT *yorgohb = yorghb - info.h * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync yorgp += info.xorg;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync yorgop += info.xorg;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync yorghb += info.h * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (1)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (andBits == 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgp + yoffset + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgp + yoffset - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgop - yoffset - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgop - yoffset + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgp + yoffset + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgp + yoffset - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgop - yoffset - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgop - yoffset + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (a < 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (andBits == 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorghb - xoffset - y * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgohb - xoffset + y * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgohb + xoffset + y * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorghb + xoffset - y * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorghb - xoffset - y * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgohb - xoffset + y * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgohb + xoffset + y * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorghb + xoffset - y * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xoffset += bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync MIARCCIRCLESTEP(yoffset += bitsStride;);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync yorgp -= info.xorg;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync yorgop -= info.xorg;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync x = info.w;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync yoffset = info.h * bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else if (do360)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (y < info.h || x < info.w)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync MIARCOCTANTSHIFT(dyoffset = bitsStride;);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (andBits == 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgp + yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgp + yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgop - yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgop - yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgp + yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgp + yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgop - yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgop - yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync MIARCSTEP(yoffset += dyoffset;, yoffset += bitsStride;);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (y < info.h || x < info.w)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync MIARCOCTANTSHIFT(dyoffset = bitsStride;);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if ((x == info.start.x) || (y == info.start.y))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync mask = info.start.mask;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync info.start = info.altstart;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (andBits == 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 1)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgp + yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 2)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgp + yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 4)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgop - yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 8)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgop - yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 1)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgp + yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 2)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgp + yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 4)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgop - yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 8)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgop - yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if ((x == info.end.x) || (y == info.end.y))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync mask = info.end.mask;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync info.end = info.altend;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync MIARCSTEP(yoffset += dyoffset;, yoffset += bitsStride;);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if ((x == info.start.x) || (y == info.start.y))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync mask = info.start.mask;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (andBits == 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 1)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgp + yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 4)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgop - yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (arc->height & 1)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 2)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgp + yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 8)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCCOPY(yorgop - yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 1)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgp + yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 4)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgop - yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (arc->height & 1)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 2)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgp + yoffset + info.xorgo - x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mask & 8)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ARCRROP(yorgop - yoffset + info.xorg + x * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync}
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef ARCCOPY
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef ARCRROP
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef GLYPH
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#if BITMAP_BIT_ORDER == LSBFirst
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# define WRITE_ADDR1(n) (n)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# define WRITE_ADDR2(n) (n)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# define WRITE_ADDR4(n) (n)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# define WRITE_ADDR1(n) ((n) ^ 3)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# define WRITE_ADDR2(n) ((n) ^ 2)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# define WRITE_ADDR4(n) ((n))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define WRITE1(d,n,fg) ((d)[WRITE_ADDR1(n)] = (BITS) (fg))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef BITS2
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# define WRITE2(d,n,fg) (*((BITS2 *) &((d)[WRITE_ADDR2(n)])) = (BITS2) (fg))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# define WRITE2(d,n,fg) WRITE1(d,(n)+1,WRITE1(d,n,fg))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef BITS4
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# define WRITE4(d,n,fg) (*((BITS4 *) &((d)[WRITE_ADDR4(n)])) = (BITS4) (fg))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# define WRITE4(d,n,fg) WRITE2(d,(n)+2,WRITE2(d,n,fg))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncGLYPH (FbBits *dstBits,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride dstStride,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstBpp,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStip *stipple,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits fg,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int x,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int height)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync{
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int lshift;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStip bits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BITS *dstLine;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BITS *dst;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int n;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int shift;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dstLine = (BITS *) dstBits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dstLine += x & ~3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dstStride *= (sizeof (FbBits) / sizeof (BITS));
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync shift = x & 3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync lshift = 4 - shift;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (height--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits = *stipple++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dst = (BITS *) dstLine;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync n = lshift;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (bits)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync switch (FbStipMoveLsb (FbLeftStipBits (bits, n), 4, n)) {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 0:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 1:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,0,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 2:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,1,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 3:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE2(dst,0,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 4:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,2,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 5:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,0,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,2,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 6:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,1,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,2,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 7:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE2(dst,0,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,2,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 8:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,3,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 9:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,0,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,3,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 10:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,1,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,3,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 11:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE2(dst,0,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,3,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 12:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE2(dst,2,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 13:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,0,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE2(dst,2,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 14:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE1(dst,1,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE2(dst,2,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync case 15:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync WRITE4(dst,0,fg);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits = FbStipLeft (bits, n);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync n = 4;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dst += 4;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dstLine += dstStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync}
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef WRITE_ADDR1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef WRITE_ADDR2
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef WRITE_ADDR4
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef WRITE1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef WRITE2
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef WRITE4
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef POLYLINE
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncPOLYLINE (DrawablePtr pDrawable,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync GCPtr pGC,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int mode,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int npt,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync DDXPointPtr ptsOrig)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync{
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync INT32 *pts = (INT32 *) ptsOrig;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int xoff = pDrawable->x;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int yoff = pDrawable->y;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned int bias = miGetZeroLineBias(pDrawable->pScreen);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BoxPtr pBox = REGION_EXTENTS (pDrawable->pScreen, fbGetCompositeClip (pGC));
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits *dst;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstBpp;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstXoff, dstYoff;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync UNIT *bits, *bitsBase;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BITS xor = fbGetGCPrivate(pGC)->xor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BITS and = fbGetGCPrivate(pGC)->and;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dashoffset = 0;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync INT32 ul, lr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync INT32 pt1, pt2;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int e, e1, e3, len;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int stepmajor, stepminor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int octant;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (mode == CoordModePrevious)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync fbFixCoordModePrevious (npt, ptsOrig);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bitsStride = dstStride * (sizeof (FbBits) / sizeof (UNIT));
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bitsBase = ((UNIT *) dst) + (yoff + dstYoff) * bitsStride + (xoff + dstXoff) * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ul = coordToInt(pBox->x1 - xoff, pBox->y1 - yoff);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync lr = coordToInt(pBox->x2 - xoff - 1, pBox->y2 - yoff - 1);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync pt1 = *pts++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync npt--;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync pt2 = *pts++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync npt--;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync for (;;)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (isClipped (pt1, ul, lr) | isClipped (pt2, ul, lr))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync fbSegment (pDrawable, pGC,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync intToX(pt1) + xoff, intToY(pt1) + yoff,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync intToX(pt2) + xoff, intToY(pt2) + yoff,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync npt == 0 && pGC->capStyle != CapNotLast,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync &dashoffset);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!npt)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync return;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync pt1 = pt2;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync pt2 = *pts++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync npt--;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits = bitsBase + intToY(pt1) * bitsStride + intToX(pt1) * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync for (;;)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CalcLineDeltas (intToX(pt1), intToY(pt1),
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync intToX(pt2), intToY(pt2),
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync len, e1, stepmajor, stepminor, 1, bitsStride,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync octant);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync stepmajor *= MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (len < e1)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e3 = len;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync len = e1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e1 = e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e3 = stepminor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync stepminor = stepmajor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync stepmajor = e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync SetYMajorOctant(octant);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e = -len;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e1 <<= 1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e3 = e << 1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FIXUP_ERROR (e, octant, bias);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (and == 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (len--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync STORE(bits,xor);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += stepmajor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (e >= 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += stepminor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (len--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync RROP(bits,and,xor);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += stepmajor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (e >= 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += stepminor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!npt)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (pGC->capStyle != CapNotLast &&
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync pt2 != *((INT32 *) ptsOrig))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync RROP(bits,and,xor);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync return;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync pt1 = pt2;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync pt2 = *pts++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync --npt;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (isClipped (pt2, ul, lr))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync break;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync}
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef POLYSEGMENT
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncvoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncPOLYSEGMENT (DrawablePtr pDrawable,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync GCPtr pGC,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int nseg,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xSegment *pseg)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync{
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync INT32 *pts = (INT32 *) pseg;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int xoff = pDrawable->x;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int yoff = pDrawable->y;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned int bias = miGetZeroLineBias(pDrawable->pScreen);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BoxPtr pBox = REGION_EXTENTS (pDrawable->pScreen, fbGetCompositeClip (pGC));
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits *dst;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstBpp;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstXoff, dstYoff;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync UNIT *bits, *bitsBase;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbStride bitsStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits xorBits = fbGetGCPrivate(pGC)->xor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits andBits = fbGetGCPrivate(pGC)->and;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BITS xor = xorBits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync BITS and = andBits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dashoffset = 0;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync INT32 ul, lr;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync INT32 pt1, pt2;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int e, e1, e3, len;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int stepmajor, stepminor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int octant;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync Bool capNotLast;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bitsStride = dstStride * (sizeof (FbBits) / sizeof (UNIT));
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bitsBase = ((UNIT *) dst) + (yoff + dstYoff) * bitsStride + (xoff + dstXoff) * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync ul = coordToInt(pBox->x1 - xoff, pBox->y1 - yoff);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync lr = coordToInt(pBox->x2 - xoff - 1, pBox->y2 - yoff - 1);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync capNotLast = pGC->capStyle == CapNotLast;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (nseg--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync pt1 = *pts++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync pt2 = *pts++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (isClipped (pt1, ul, lr) | isClipped (pt2, ul, lr))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync fbSegment (pDrawable, pGC,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync intToX(pt1) + xoff, intToY(pt1) + yoff,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync intToX(pt2) + xoff, intToY(pt2) + yoff,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync !capNotLast, &dashoffset);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync CalcLineDeltas (intToX(pt1), intToY(pt1),
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync intToX(pt2), intToY(pt2),
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync len, e1, stepmajor, stepminor, 1, bitsStride,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync octant);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (e1 == 0 && len > 3
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#if MUL != 1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync && FbCheck24Pix(and) && FbCheck24Pix(xor)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync )
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int x1, x2;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits *dstLine;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int dstX, width;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbBits startmask, endmask;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync int nmiddle;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (stepmajor < 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync x1 = intToX(pt2);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync x2 = intToX(pt1) + 1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (capNotLast)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync x1++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync x1 = intToX(pt1);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync x2 = intToX(pt2);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!capNotLast)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync x2++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dstX = (x1 + xoff + dstXoff) * (sizeof (UNIT) * 8 * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync width = (x2 - x1) * (sizeof (UNIT) * 8 * MUL);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dstLine = dst + (intToY(pt1) + yoff + dstYoff) * dstStride;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dstLine += dstX >> FB_SHIFT;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dstX &= FB_MASK;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FbMaskBits (dstX, width, startmask, nmiddle, endmask);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (startmask)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *dstLine = FbDoMaskRRop (*dstLine, andBits, xorBits, startmask);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dstLine++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!andBits)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (nmiddle--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *dstLine++ = xorBits;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (nmiddle--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *dstLine = FbDoRRop (*dstLine, andBits, xorBits);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync dstLine++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (endmask)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync *dstLine = FbDoMaskRRop (*dstLine, andBits, xorBits, endmask);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync stepmajor *= MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits = bitsBase + intToY(pt1) * bitsStride + intToX(pt1) * MUL;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (len < e1)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e3 = len;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync len = e1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e1 = e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e3 = stepminor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync stepminor = stepmajor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync stepmajor = e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync SetYMajorOctant(octant);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e = -len;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e1 <<= 1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e3 = e << 1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync FIXUP_ERROR (e, octant, bias);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (!capNotLast)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync len++;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (and == 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (len--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync STORE(bits,xor);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += stepmajor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (e >= 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += stepminor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync while (len--)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync RROP(bits,and,xor);
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += stepmajor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e1;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync if (e >= 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync bits += stepminor;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync e += e3;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync }
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync}
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef MUL
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef STORE
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef RROP
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef UNIT
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef USE_SOLID
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#undef isClipped