summaryrefslogtreecommitdiff
path: root/cfb
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2008-04-11 09:47:51 -0400
committerAdam Jackson <ajax@redhat.com>2008-04-11 09:47:51 -0400
commit0dab6fa3582b70ccd0f01459902415c28dbc81ff (patch)
tree03b5e217d7132d5878c42a60ca7ee7683af1b414 /cfb
parent059b4876e6350aa1110648788cdfbb3f45b4d66d (diff)
So long, and thanks for all the cfb.
Diffstat (limited to 'cfb')
-rw-r--r--cfb/Makefile.am21
-rw-r--r--cfb/Makefile.am.inc153
-rw-r--r--cfb/cfb.h1268
-rw-r--r--cfb/cfb16.h93
-rw-r--r--cfb/cfb24.h97
-rw-r--r--cfb/cfb32.h93
-rw-r--r--cfb/cfb8bit.c469
-rw-r--r--cfb/cfb8bit.h1570
-rw-r--r--cfb/cfb8line.c1503
-rw-r--r--cfb/cfballpriv.c70
-rw-r--r--cfb/cfbbitblt.c1455
-rw-r--r--cfb/cfbblt.c933
-rw-r--r--cfb/cfbbres.c340
-rw-r--r--cfb/cfbbresd.c404
-rw-r--r--cfb/cfbcmap.c119
-rw-r--r--cfb/cfbcppl.c486
-rw-r--r--cfb/cfbfillarc.c374
-rw-r--r--cfb/cfbfillrct.c305
-rw-r--r--cfb/cfbfillsp.c1004
-rw-r--r--cfb/cfbgc.c799
-rw-r--r--cfb/cfbgetsp.c213
-rw-r--r--cfb/cfbglblt8.c477
-rw-r--r--cfb/cfbhrzvert.c554
-rw-r--r--cfb/cfbigblt8.c106
-rw-r--r--cfb/cfbimage.c206
-rw-r--r--cfb/cfbline.c756
-rw-r--r--cfb/cfbmap.h210
-rw-r--r--cfb/cfbmskbits.c1400
-rw-r--r--cfb/cfbmskbits.h854
-rw-r--r--cfb/cfbpixmap.c375
-rw-r--r--cfb/cfbply1rct.c363
-rw-r--r--cfb/cfbpolypnt.c202
-rw-r--r--cfb/cfbpush8.c184
-rw-r--r--cfb/cfbrctstp8.c593
-rw-r--r--cfb/cfbrrop.c227
-rw-r--r--cfb/cfbrrop.h343
-rw-r--r--cfb/cfbscrinit.c223
-rw-r--r--cfb/cfbsetsp.c316
-rw-r--r--cfb/cfbsolid.c1365
-rw-r--r--cfb/cfbteblt8.c589
-rw-r--r--cfb/cfbtegblt.c218
-rw-r--r--cfb/cfbtile32.c517
-rw-r--r--cfb/cfbtileodd.c1245
-rw-r--r--cfb/cfbunmap.h161
-rw-r--r--cfb/cfbwindow.c160
-rw-r--r--cfb/cfbzerarc.c322
-rw-r--r--cfb/stip68kgnu.h121
-rw-r--r--cfb/stipmips.s281
-rw-r--r--cfb/stipsparc.s290
-rw-r--r--cfb/stipsprc32.s291
50 files changed, 0 insertions, 24718 deletions
diff --git a/cfb/Makefile.am b/cfb/Makefile.am
deleted file mode 100644
index 901fc95ae..000000000
--- a/cfb/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-noinst_LTLIBRARIES = libcfb.la
-
-include Makefile.am.inc
-
-DISTCLEANFILES += cfbglrop8.c
-
-libcfb_la_SOURCES = cfb8bit.c cfbteblt8.c cfbglrop8.c cfbpush8.c cfbrctstp8.c \
- $(libcfb_gen_sources) $(libcfb_common_sources)
-
-libcfb_la_LIBADD = ../mfb/libmfb.la
-
-AM_CFLAGS = -DPSZ=8 $(DIX_CFLAGS) $(PLATFORMDEFS)
-
-INCLUDES = $(CFB_INCLUDES) -I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/common
-
-EXTRA_DIST = cfbline.c cfbfillarc.c cfbzerarc.c cfbblt.c cfbsolid.c \
- cfbtileodd.c cfbtile32.c cfb8line.c cfbply1rct.c cfbglblt8.c \
- cfb16.h cfb24.h cfb32.h cfb8bit.h cfbrrop.h \
- stip68kgnu.h stipmips.s stipsparc.s stipsprc32.s
-
-sdk_HEADERS = cfb.h cfb32.h cfb16.h cfbmap.h cfbunmap.h cfbmskbits.h
diff --git a/cfb/Makefile.am.inc b/cfb/Makefile.am.inc
deleted file mode 100644
index a2ee143aa..000000000
--- a/cfb/Makefile.am.inc
+++ /dev/null
@@ -1,153 +0,0 @@
-libcfb_gen_sources = cfbseg.c cfbfillarcC.c cfbfillarcG.c cfbzerarcC.c cfbzerarcX.c cfbzerarcG.c \
- cfbbltC.c cfbbltX.c cfbbltO.c cfbbltG.c cfbsolidC.c cfbsolidX.c cfbsolidG.c cfbtileoddC.c \
- cfbtileoddG.c cfbtile32C.c cfbtile32G.c cfb8lineCO.c cfb8lineCP.c cfb8lineX.c cfb8lineG.c \
- cfb8segCS.c cfb8segC.c cfb8segX.c cfb8setG.c cfbply1rctC.c cfbply1rctG.c
-
-DISTCLEANFILES = $(libcfb_gen_sources)
-
-CFB_INCLUDES = -I$(top_srcdir)/mfb -I$(top_srcdir)/cfb
-
-libcfb_common_sources = $(top_srcdir)/cfb/cfbgc.c $(top_srcdir)/cfb/cfbrrop.c \
- $(top_srcdir)/cfb/cfbwindow.c \
- $(top_srcdir)/cfb/cfbmskbits.c $(top_srcdir)/cfb/cfbpixmap.c \
- $(top_srcdir)/cfb/cfbbitblt.c $(top_srcdir)/cfb/cfbfillsp.c \
- $(top_srcdir)/cfb/cfbsetsp.c $(top_srcdir)/cfb/cfbscrinit.c \
- $(top_srcdir)/cfb/cfballpriv.c $(top_srcdir)/cfb/cfbgetsp.c \
- $(top_srcdir)/cfb/cfbfillrct.c $(top_srcdir)/cfb/cfbigblt8.c \
- $(top_srcdir)/cfb/cfbglblt8.c $(top_srcdir)/cfb/cfbtegblt.c \
- $(top_srcdir)/cfb/cfbpolypnt.c \
- $(top_srcdir)/cfb/cfbbres.c $(top_srcdir)/cfb/cfbline.c \
- $(top_srcdir)/cfb/cfbhrzvert.c $(top_srcdir)/cfb/cfbbresd.c \
- $(top_srcdir)/cfb/cfbimage.c $(top_srcdir)/cfb/cfbcppl.c \
- $(top_srcdir)/cfb/cfbcmap.c
-
-cfbseg.c:
- echo "#define POLYSEGMENT" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbline.c\"" >> $@
-
-cfbfillarcC.c:
- echo "#define RROP GXcopy" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbfillarc.c\"" >> $@
-
-cfbfillarcG.c:
- echo "#define RROP GXset" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbfillarc.c\"" >> $@
-
-cfbzerarcC.c:
- echo "#define RROP GXcopy" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbzerarc.c\"" >> $@
-
-cfbzerarcX.c:
- echo "#define RROP GXxor" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbzerarc.c\"" >> $@
-
-cfbzerarcG.c:
- echo "#define RROP GXset" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbzerarc.c\"" >> $@
-
-cfbbltC.c:
- echo "#define MROP Mcopy" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbblt.c\"" >> $@
-
-cfbbltX.c:
- echo "#define MROP Mxor" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbblt.c\"" >> $@
-
-cfbbltO.c:
- echo "#define MROP Mor" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbblt.c\"" >> $@
-
-cfbbltG.c:
- echo "#define MROP 0" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbblt.c\"" >> $@
-
-cfbsolidC.c:
- echo "#define RROP GXcopy" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbsolid.c\"" >> $@
-
-cfbsolidX.c:
- echo "#define RROP GXxor" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbsolid.c\"" >> $@
-
-cfbsolidG.c:
- echo "#define RROP GXset" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbsolid.c\"" >> $@
-
-cfbtileoddC.c:
- echo "#define MROP Mcopy" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbtileodd.c\"" >> $@
-
-cfbtileoddG.c:
- echo "#define MROP 0" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbtileodd.c\"" >> $@
-
-cfbtile32C.c:
- echo "#define MROP Mcopy" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbtile32.c\"" >> $@
-
-cfbtile32G.c:
- echo "#define MROP 0" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbtile32.c\"" >> $@
-
-cfb8lineCO.c:
- echo "#define RROP GXcopy" > $@
- echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@
-
-cfb8lineCP.c:
- echo "#define RROP GXcopy" > $@
- echo "#define PREVIOUS" >> $@
- echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@
-
-cfb8lineX.c:
- echo "#define RROP GXxor" > $@
- echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@
-
-cfb8lineG.c:
- echo "#define RROP GXset" > $@
- echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@
-
-cfb8segCS.c:
- echo "#define RROP GXcopy" > $@
- echo "#define POLYSEGMENT" >> $@
- echo "#define WIDTH_SHIFT" >> $@
- echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@
-
-cfb8segC.c:
- echo "#define RROP GXcopy" > $@
- echo "#define POLYSEGMENT" >> $@
- echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@
-
-cfb8segX.c:
- echo "#define RROP GXxor" > $@
- echo "#define POLYSEGMENT" >> $@
- echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@
-
-cfb8setG.c:
- echo "#define RROP GXset" > $@
- echo "#define POLYSEGMENT" >> $@
- echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@
-
-cfbply1rctC.c:
- echo "#define RROP GXcopy" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbply1rct.c\"" >> $@
-
-cfbply1rctG.c:
- echo "#define RROP GXset" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbply1rct.c\"" >> $@
-
-cfbglrop8.c:
- echo "#define GLYPHROP" > $@
- echo "#include \"$(top_srcdir)/cfb/cfbglblt8.c\"" >> $@
-
-
-if XPRINT
-
-PLATFORMDEFS = -DXFREE86
-
-cfb8bit.o: compiler.h
-
-compiler.h:
- echo "#include \"$(top_srcdir)/hw/xfree86/common/compiler.h\"" >> $@
-
-endif
-
diff --git a/cfb/cfb.h b/cfb/cfb.h
deleted file mode 100644
index aece13341..000000000
--- a/cfb/cfb.h
+++ /dev/null
@@ -1,1268 +0,0 @@
-/************************************************************
-Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this
-software and its documentation for any purpose and without
-fee is hereby granted, provided that the above copyright no-
-tice appear in all copies and that both that copyright no-
-tice and this permission notice appear in supporting docu-
-mentation, and that the names of Sun or The Open Group
-not be used in advertising or publicity pertaining to
-distribution of the software without specific prior
-written permission. Sun and The Open Group make no
-representations about the suitability of this software for
-any purpose. It is provided "as is" without any express or
-implied warranty.
-
-SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
-NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-
-ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
-THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-#if !defined(__CFB_H__) || defined(CFB_PROTOTYPES_ONLY)
-
-#include <X11/X.h>
-#include "globals.h"
-#include "pixmap.h"
-#include "region.h"
-#include "gc.h"
-#include "colormap.h"
-#include "miscstruct.h"
-#include "servermd.h"
-#include "privates.h"
-#include "windowstr.h"
-#include "mfb.h"
-#undef PixelType
-
-#include "cfbmap.h"
-
-#ifndef CfbBits
-#define CfbBits CARD32
-#endif
-
-#ifndef CFB_PROTOTYPES_ONLY
-#define __CFB_H__
-/*
- private filed of pixmap
- pixmap.devPrivate = (unsigned int *)pointer_to_bits
- pixmap.devKind = width_of_pixmap_in_bytes
-*/
-
-extern DevPrivateKey cfbGCPrivateKey;
-
-/* private field of GC */
-typedef struct {
- unsigned char rop; /* special case rop values */
- /* next two values unused in cfb, included for compatibility with mfb */
- unsigned char ropOpStip; /* rop for opaque stipple */
- /* this value is ropFillArea in mfb, usurped for cfb */
- unsigned char oneRect; /* drawable has one clip rect */
- CfbBits xor, and; /* reduced rop values */
- } cfbPrivGC;
-
-typedef cfbPrivGC *cfbPrivGCPtr;
-
-#define cfbGetGCPrivate(pGC) ((cfbPrivGCPtr)\
- dixLookupPrivate(&(pGC)->devPrivates, cfbGCPrivateKey))
-
-#define cfbGetCompositeClip(pGC) ((pGC)->pCompositeClip)
-
-/* way to carry RROP info around */
-typedef struct {
- unsigned char rop;
- CfbBits xor, and;
-} cfbRRopRec, *cfbRRopPtr;
-
-/* cfb8bit.c */
-
-extern int cfbSetStipple(
- int /*alu*/,
- CfbBits /*fg*/,
- CfbBits /*planemask*/
-);
-
-extern int cfbSetOpaqueStipple(
- int /*alu*/,
- CfbBits /*fg*/,
- CfbBits /*bg*/,
- CfbBits /*planemask*/
-);
-
-extern int cfbComputeClipMasks32(
- BoxPtr /*pBox*/,
- int /*numRects*/,
- int /*x*/,
- int /*y*/,
- int /*w*/,
- int /*h*/,
- CARD32 * /*clips*/
-);
-#endif /* !CFB_PROTOTYPES_ONLY */
-/* cfb8cppl.c */
-
-extern void cfbCopyImagePlane(
- DrawablePtr /*pSrcDrawable*/,
- DrawablePtr /*pDstDrawable*/,
- int /*rop*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/
-);
-
-#ifndef CFB_PROTOTYPES_ONLY
-extern void cfbCopyPlane8to1(
- DrawablePtr /*pSrcDrawable*/,
- DrawablePtr /*pDstDrawable*/,
- int /*rop*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/,
- unsigned long /*bitPlane*/
-);
-
-extern void cfbCopyPlane16to1(
- DrawablePtr /*pSrcDrawable*/,
- DrawablePtr /*pDstDrawable*/,
- int /*rop*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/,
- unsigned long /*bitPlane*/
-);
-
-extern void cfbCopyPlane24to1(
- DrawablePtr /*pSrcDrawable*/,
- DrawablePtr /*pDstDrawable*/,
- int /*rop*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/,
- unsigned long /*bitPlane*/
-);
-
-extern void cfbCopyPlane32to1(
- DrawablePtr /*pSrcDrawable*/,
- DrawablePtr /*pDstDrawable*/,
- int /*rop*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/,
- unsigned long /*bitPlane*/
-);
-#endif
-
-/* cfb8lineCO.c */
-
-extern int cfb8LineSS1RectCopy(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*mode*/,
- int /*npt*/,
- DDXPointPtr /*pptInit*/,
- DDXPointPtr /*pptInitOrig*/,
- int * /*x1p*/,
- int * /*y1p*/,
- int * /*x2p*/,
- int * /*y2p*/
-);
-
-extern void cfb8LineSS1Rect(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*mode*/,
- int /*npt*/,
- DDXPointPtr /*pptInit*/
-);
-
-extern void cfb8ClippedLineCopy(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*x1*/,
- int /*y1*/,
- int /*x2*/,
- int /*y2*/,
- BoxPtr /*boxp*/,
- Bool /*shorten*/
-);
-/* cfb8lineCP.c */
-
-extern int cfb8LineSS1RectPreviousCopy(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*mode*/,
- int /*npt*/,
- DDXPointPtr /*pptInit*/,
- DDXPointPtr /*pptInitOrig*/,
- int * /*x1p*/,
- int * /*y1p*/,
- int * /*x2p*/,
- int * /*y2p*/
-);
-/* cfb8lineG.c */
-
-extern int cfb8LineSS1RectGeneral(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*mode*/,
- int /*npt*/,
- DDXPointPtr /*pptInit*/,
- DDXPointPtr /*pptInitOrig*/,
- int * /*x1p*/,
- int * /*y1p*/,
- int * /*x2p*/,
- int * /*y2p*/
-);
-
-extern void cfb8ClippedLineGeneral(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*x1*/,
- int /*y1*/,
- int /*x2*/,
- int /*y2*/,
- BoxPtr /*boxp*/,
- Bool /*shorten*/
-);
-/* cfb8lineX.c */
-
-extern int cfb8LineSS1RectXor(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*mode*/,
- int /*npt*/,
- DDXPointPtr /*pptInit*/,
- DDXPointPtr /*pptInitOrig*/,
- int * /*x1p*/,
- int * /*y1p*/,
- int * /*x2p*/,
- int * /*y2p*/
-);
-
-extern void cfb8ClippedLineXor(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*x1*/,
- int /*y1*/,
- int /*x2*/,
- int /*y2*/,
- BoxPtr /*boxp*/,
- Bool /*shorten*/
-);
-/* cfb8segC.c */
-
-extern int cfb8SegmentSS1RectCopy(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nseg*/,
- xSegment * /*pSegInit*/
-);
-/* cfb8segCS.c */
-
-extern int cfb8SegmentSS1RectShiftCopy(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nseg*/,
- xSegment * /*pSegInit*/
-);
-
-extern void cfb8SegmentSS1Rect(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nseg*/,
- xSegment * /*pSegInit*/
-);
-/* cfb8segG.c */
-
-extern int cfb8SegmentSS1RectGeneral(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nseg*/,
- xSegment * /*pSegInit*/
-);
-/* cfbsegX.c */
-
-extern int cfb8SegmentSS1RectXor(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nseg*/,
- xSegment * /*pSegInit*/
-);
-/* cfballpriv.c */
-
-extern Bool cfbAllocatePrivates(
- ScreenPtr /*pScreen*/,
- DevPrivateKey * /*gc_key*/
-);
-/* cfbbitblt.c */
-
-extern RegionPtr cfbBitBlt(
- DrawablePtr /*pSrcDrawable*/,
- DrawablePtr /*pDstDrawable*/,
- GCPtr/*pGC*/,
- int /*srcx*/,
- int /*srcy*/,
- int /*width*/,
- int /*height*/,
- int /*dstx*/,
- int /*dsty*/,
- void (* /*doBitBlt*/)(
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/
- ),
- unsigned long /*bitPlane*/
-);
-
-#define cfbCopyPlaneExpand cfbBitBlt
-
-extern RegionPtr cfbCopyPlaneReduce(
- DrawablePtr /*pSrcDrawable*/,
- DrawablePtr /*pDstDrawable*/,
- GCPtr /*pGC*/,
- int /*srcx*/,
- int /*srcy*/,
- int /*width*/,
- int /*height*/,
- int /*dstx*/,
- int /*dsty*/,
- void (* /*doCopyPlane*/)(
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/,
- unsigned long /*bitPlane*/ /* We must know which plane to reduce! */
- ),
- unsigned long /*bitPlane*/
-);
-
-extern void cfbDoBitblt(
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/
-);
-
-extern RegionPtr cfbCopyArea(
- DrawablePtr /*pSrcDrawable*/,
- DrawablePtr /*pDstDrawable*/,
- GCPtr/*pGC*/,
- int /*srcx*/,
- int /*srcy*/,
- int /*width*/,
- int /*height*/,
- int /*dstx*/,
- int /*dsty*/
-);
-
-#ifndef CFB_PROTOTYPES_ONLY
-extern void cfbCopyPlane1to8(
- DrawablePtr /*pSrcDrawable*/,
- DrawablePtr /*pDstDrawable*/,
- int /*rop*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/
-);
-#endif
-
-extern RegionPtr cfbCopyPlane(
- DrawablePtr /*pSrcDrawable*/,
- DrawablePtr /*pDstDrawable*/,
- GCPtr /*pGC*/,
- int /*srcx*/,
- int /*srcy*/,
- int /*width*/,
- int /*height*/,
- int /*dstx*/,
- int /*dsty*/,
- unsigned long /*bitPlane*/
-);
-/* cfbbltC.c */
-
-extern void cfbDoBitbltCopy(
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/
-);
-/* cfbbltG.c */
-
-extern void cfbDoBitbltGeneral(
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/
-);
-/* cfbbltO.c */
-
-extern void cfbDoBitbltOr(
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/
-);
-/* cfbbltX.c */
-
-extern void cfbDoBitbltXor(
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/
-);
-/* cfbbres.c */
-
-extern void cfbBresS(
- int /*rop*/,
- CfbBits /*and*/,
- CfbBits /*xor*/,
- CfbBits * /*addrl*/,
- int /*nlwidth*/,
- int /*signdx*/,
- int /*signdy*/,
- int /*axis*/,
- int /*x1*/,
- int /*y1*/,
- int /*e*/,
- int /*e1*/,
- int /*e2*/,
- int /*len*/
-);
-/* cfbbresd.c */
-
-extern void cfbBresD(
- cfbRRopPtr /*rrops*/,
- int * /*pdashIndex*/,
- unsigned char * /*pDash*/,
- int /*numInDashList*/,
- int * /*pdashOffset*/,
- int /*isDoubleDash*/,
- CfbBits * /*addrl*/,
- int /*nlwidth*/,
- int /*signdx*/,
- int /*signdy*/,
- int /*axis*/,
- int /*x1*/,
- int /*y1*/,
- int /*e*/,
- int /*e1*/,
- int /*e2*/,
- int /*len*/
-);
-
-/* cfbcmap.c */
-
-#ifndef CFB_PROTOTYPES_ONLY
-extern int cfbListInstalledColormaps(
- ScreenPtr /*pScreen*/,
- Colormap * /*pmaps*/
-);
-
-extern void cfbInstallColormap(
- ColormapPtr /*pmap*/
-);
-
-extern void cfbUninstallColormap(
- ColormapPtr /*pmap*/
-);
-
-extern void cfbResolveColor(
- unsigned short * /*pred*/,
- unsigned short * /*pgreen*/,
- unsigned short * /*pblue*/,
- VisualPtr /*pVisual*/
-);
-
-extern Bool cfbInitializeColormap(
- ColormapPtr /*pmap*/
-);
-
-extern int cfbExpandDirectColors(
- ColormapPtr /*pmap*/,
- int /*ndef*/,
- xColorItem * /*indefs*/,
- xColorItem * /*outdefs*/
-);
-
-extern Bool cfbCreateDefColormap(
- ScreenPtr /*pScreen*/
-);
-
-extern Bool cfbSetVisualTypes(
- int /*depth*/,
- int /*visuals*/,
- int /*bitsPerRGB*/
-);
-
-extern void cfbClearVisualTypes(void);
-
-extern Bool cfbInitVisuals(
- VisualPtr * /*visualp*/,
- DepthPtr * /*depthp*/,
- int * /*nvisualp*/,
- int * /*ndepthp*/,
- int * /*rootDepthp*/,
- VisualID * /*defaultVisp*/,
- unsigned long /*sizes*/,
- int /*bitsPerRGB*/
-);
-#endif
-/* cfbfillarcC.c */
-
-extern void cfbPolyFillArcSolidCopy(
- DrawablePtr /*pDraw*/,
- GCPtr /*pGC*/,
- int /*narcs*/,
- xArc * /*parcs*/
-);
-/* cfbfillarcG.c */
-
-extern void cfbPolyFillArcSolidGeneral(
- DrawablePtr /*pDraw*/,
- GCPtr /*pGC*/,
- int /*narcs*/,
- xArc * /*parcs*/
-);
-/* cfbfillrct.c */
-
-extern void cfbFillBoxTileOdd(
- DrawablePtr /*pDrawable*/,
- int /*n*/,
- BoxPtr /*rects*/,
- PixmapPtr /*tile*/,
- int /*xrot*/,
- int /*yrot*/
-);
-
-extern void cfbFillRectTileOdd(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nBox*/,
- BoxPtr /*pBox*/
-);
-
-extern void cfbPolyFillRect(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nrectFill*/,
- xRectangle * /*prectInit*/
-);
-/* cfbfillsp.c */
-
-extern void cfbUnnaturalTileFS(
- DrawablePtr /*pDrawable*/,
- GCPtr/*pGC*/,
- int /*nInit*/,
- DDXPointPtr /*pptInit*/,
- int * /*pwidthInit*/,
- int /*fSorted*/
-);
-
-extern void cfbUnnaturalStippleFS(
- DrawablePtr /*pDrawable*/,
- GCPtr/*pGC*/,
- int /*nInit*/,
- DDXPointPtr /*pptInit*/,
- int * /*pwidthInit*/,
- int /*fSorted*/
-);
-
-#ifndef CFB_PROTOTYPES_ONLY
-extern void cfb8Stipple32FS(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nInit*/,
- DDXPointPtr /*pptInit*/,
- int * /*pwidthInit*/,
- int /*fSorted*/
-);
-
-extern void cfb8OpaqueStipple32FS(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nInit*/,
- DDXPointPtr /*pptInit*/,
- int * /*pwidthInit*/,
- int /*fSorted*/
-);
-#endif
-/* cfbgc.c */
-
-extern GCOpsPtr cfbMatchCommon(
- GCPtr /*pGC*/,
- cfbPrivGCPtr /*devPriv*/
-);
-
-extern Bool cfbCreateGC(
- GCPtr /*pGC*/
-);
-
-extern void cfbValidateGC(
- GCPtr /*pGC*/,
- unsigned long /*changes*/,
- DrawablePtr /*pDrawable*/
-);
-
-/* cfbgetsp.c */
-
-extern void cfbGetSpans(
- DrawablePtr /*pDrawable*/,
- int /*wMax*/,
- DDXPointPtr /*ppt*/,
- int * /*pwidth*/,
- int /*nspans*/,
- char * /*pdstStart*/
-);
-/* cfbglblt8.c */
-
-extern void cfbPolyGlyphBlt8(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*x*/,
- int /*y*/,
- unsigned int /*nglyph*/,
- CharInfoPtr * /*ppci*/,
- pointer /*pglyphBase*/
-);
-/* cfbglrop8.c */
-
-extern void cfbPolyGlyphRop8(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*x*/,
- int /*y*/,
- unsigned int /*nglyph*/,
- CharInfoPtr * /*ppci*/,
- pointer /*pglyphBase*/
-);
-/* cfbhrzvert.c */
-
-extern void cfbHorzS(
- int /*rop*/,
- CfbBits /*and*/,
- CfbBits /*xor*/,
- CfbBits * /*addrl*/,
- int /*nlwidth*/,
- int /*x1*/,
- int /*y1*/,
- int /*len*/
-);
-
-extern void cfbVertS(
- int /*rop*/,
- CfbBits /*and*/,
- CfbBits /*xor*/,
- CfbBits * /*addrl*/,
- int /*nlwidth*/,
- int /*x1*/,
- int /*y1*/,
- int /*len*/
-);
-/* cfbigblt8.c */
-
-extern void cfbImageGlyphBlt8(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*x*/,
- int /*y*/,
- unsigned int /*nglyph*/,
- CharInfoPtr * /*ppci*/,
- pointer /*pglyphBase*/
-);
-/* cfbimage.c */
-
-extern void cfbPutImage(
- DrawablePtr /*pDraw*/,
- GCPtr /*pGC*/,
- int /*depth*/,
- int /*x*/,
- int /*y*/,
- int /*w*/,
- int /*h*/,
- int /*leftPad*/,
- int /*format*/,
- char * /*pImage*/
-);
-
-extern void cfbGetImage(
- DrawablePtr /*pDrawable*/,
- int /*sx*/,
- int /*sy*/,
- int /*w*/,
- int /*h*/,
- unsigned int /*format*/,
- unsigned long /*planeMask*/,
- char * /*pdstLine*/
-);
-/* cfbline.c */
-
-extern void cfbLineSS(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*mode*/,
- int /*npt*/,
- DDXPointPtr /*pptInit*/
-);
-
-extern void cfbLineSD(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*mode*/,
- int /*npt*/,
- DDXPointPtr /*pptInit*/
-);
-/* cfbmskbits.c */
-/* cfbpixmap.c */
-
-extern PixmapPtr cfbCreatePixmap(
- ScreenPtr /*pScreen*/,
- int /*width*/,
- int /*height*/,
- int /*depth*/,
- unsigned /*usage_hint*/
-);
-
-extern Bool cfbDestroyPixmap(
- PixmapPtr /*pPixmap*/
-);
-
-extern PixmapPtr cfbCopyPixmap(
- PixmapPtr /*pSrc*/
-);
-
-extern void cfbPadPixmap(
- PixmapPtr /*pPixmap*/
-);
-
-extern void cfbXRotatePixmap(
- PixmapPtr /*pPix*/,
- int /*rw*/
-);
-
-extern void cfbYRotatePixmap(
- PixmapPtr /*pPix*/,
- int /*rh*/
-);
-
-extern void cfbCopyRotatePixmap(
- PixmapPtr /*psrcPix*/,
- PixmapPtr * /*ppdstPix*/,
- int /*xrot*/,
- int /*yrot*/
-);
-/* cfbply1rctC.c */
-
-extern void cfbFillPoly1RectCopy(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*shape*/,
- int /*mode*/,
- int /*count*/,
- DDXPointPtr /*ptsIn*/
-);
-/* cfbply1rctG.c */
-
-extern void cfbFillPoly1RectGeneral(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*shape*/,
- int /*mode*/,
- int /*count*/,
- DDXPointPtr /*ptsIn*/
-);
-/* cfbpolypnt.c */
-
-extern void cfbPolyPoint(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*mode*/,
- int /*npt*/,
- xPoint * /*pptInit*/
-);
-/* cfbpush8.c */
-
-#ifndef CFB_PROTOTYPES_ONLY
-extern void cfbPushPixels8(
- GCPtr /*pGC*/,
- PixmapPtr /*pBitmap*/,
- DrawablePtr /*pDrawable*/,
- int /*dx*/,
- int /*dy*/,
- int /*xOrg*/,
- int /*yOrg*/
-);
-/* cfbrctstp8.c */
-
-extern void cfb8FillRectOpaqueStippled32(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nBox*/,
- BoxPtr /*pBox*/
-);
-
-extern void cfb8FillRectTransparentStippled32(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nBox*/,
- BoxPtr /*pBox*/
-);
-
-extern void cfb8FillRectStippledUnnatural(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nBox*/,
- BoxPtr /*pBox*/
-);
-#endif
-/* cfbrrop.c */
-
-extern int cfbReduceRasterOp(
- int /*rop*/,
- CfbBits /*fg*/,
- CfbBits /*pm*/,
- CfbBits * /*andp*/,
- CfbBits * /*xorp*/
-);
-/* cfbscrinit.c */
-
-extern Bool cfbCloseScreen(
- int /*index*/,
- ScreenPtr /*pScreen*/
-);
-
-extern Bool cfbSetupScreen(
- ScreenPtr /*pScreen*/,
- pointer /*pbits*/,
- int /*xsize*/,
- int /*ysize*/,
- int /*dpix*/,
- int /*dpiy*/,
- int /*width*/
-);
-
-extern Bool cfbFinishScreenInit(
- ScreenPtr /*pScreen*/,
- pointer /*pbits*/,
- int /*xsize*/,
- int /*ysize*/,
- int /*dpix*/,
- int /*dpiy*/,
- int /*width*/
-);
-
-extern Bool cfbScreenInit(
- ScreenPtr /*pScreen*/,
- pointer /*pbits*/,
- int /*xsize*/,
- int /*ysize*/,
- int /*dpix*/,
- int /*dpiy*/,
- int /*width*/
-);
-
-extern PixmapPtr cfbGetScreenPixmap(
- ScreenPtr /*pScreen*/
-);
-
-extern void cfbSetScreenPixmap(
- PixmapPtr /*pPix*/
-);
-
-/* cfbseg.c */
-
-extern void cfbSegmentSS(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nseg*/,
- xSegment * /*pSeg*/
-);
-
-extern void cfbSegmentSD(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nseg*/,
- xSegment * /*pSeg*/
-);
-/* cfbsetsp.c */
-
-extern void cfbSetScanline(
- int /*y*/,
- int /*xOrigin*/,
- int /*xStart*/,
- int /*xEnd*/,
- unsigned int * /*psrc*/,
- int /*alu*/,
- int * /*pdstBase*/,
- int /*widthDst*/,
- unsigned long /*planemask*/
-);
-
-extern void cfbSetSpans(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- char * /*psrc*/,
- DDXPointPtr /*ppt*/,
- int * /*pwidth*/,
- int /*nspans*/,
- int /*fSorted*/
-);
-/* cfbsolidC.c */
-
-extern void cfbFillRectSolidCopy(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nBox*/,
- BoxPtr /*pBox*/
-);
-
-extern void cfbSolidSpansCopy(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nInit*/,
- DDXPointPtr /*pptInit*/,
- int * /*pwidthInit*/,
- int /*fSorted*/
-);
-/* cfbsolidG.c */
-
-extern void cfbFillRectSolidGeneral(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nBox*/,
- BoxPtr /*pBox*/
-);
-
-extern void cfbSolidSpansGeneral(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nInit*/,
- DDXPointPtr /*pptInit*/,
- int * /*pwidthInit*/,
- int /*fSorted*/
-);
-/* cfbsolidX.c */
-
-extern void cfbFillRectSolidXor(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nBox*/,
- BoxPtr /*pBox*/
-);
-
-extern void cfbSolidSpansXor(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nInit*/,
- DDXPointPtr /*pptInit*/,
- int * /*pwidthInit*/,
- int /*fSorted*/
-);
-/* cfbteblt8.c */
-
-#ifndef CFB_PROTOTYPES_ONLY
-extern void cfbTEGlyphBlt8(
- DrawablePtr /*pDrawable*/,
- GCPtr/*pGC*/,
- int /*xInit*/,
- int /*yInit*/,
- unsigned int /*nglyph*/,
- CharInfoPtr * /*ppci*/,
- pointer /*pglyphBase*/
-);
-#endif
-/* cfbtegblt.c */
-
-extern void cfbTEGlyphBlt(
- DrawablePtr /*pDrawable*/,
- GCPtr/*pGC*/,
- int /*x*/,
- int /*y*/,
- unsigned int /*nglyph*/,
- CharInfoPtr * /*ppci*/,
- pointer /*pglyphBase*/
-);
-/* cfbtile32C.c */
-
-extern void cfbFillRectTile32Copy(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nBox*/,
- BoxPtr /*pBox*/
-);
-
-extern void cfbTile32FSCopy(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nInit*/,
- DDXPointPtr /*pptInit*/,
- int * /*pwidthInit*/,
- int /*fSorted*/
-);
-/* cfbtile32G.c */
-
-extern void cfbFillRectTile32General(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nBox*/,
- BoxPtr /*pBox*/
-);
-
-extern void cfbTile32FSGeneral(
- DrawablePtr /*pDrawable*/,
- GCPtr /*pGC*/,
- int /*nInit*/,
- DDXPointPtr /*pptInit*/,
- int * /*pwidthInit*/,
- int /*fSorted*/
-);
-/* cfbtileoddC.c */
-
-extern void cfbFillBoxTileOddCopy(
- DrawablePtr /*pDrawable*/,
- int /*nBox*/,
- BoxPtr /*pBox*/,
- PixmapPtr /*tile*/,
- int /*xrot*/,
- int /*yrot*/,
- int /*alu*/,
- unsigned long /*planemask*/
-);
-
-extern void cfbFillSpanTileOddCopy(
- DrawablePtr /*pDrawable*/,
- int /*n*/,
- DDXPointPtr /*ppt*/,
- int * /*pwidth*/,
- PixmapPtr /*tile*/,
- int /*xrot*/,
- int /*yrot*/,
- int /*alu*/,
- unsigned long /*planemask*/
-);
-
-extern void cfbFillBoxTile32sCopy(
- DrawablePtr /*pDrawable*/,
- int /*nBox*/,
- BoxPtr /*pBox*/,
- PixmapPtr /*tile*/,
- int /*xrot*/,
- int /*yrot*/,
- int /*alu*/,
- unsigned long /*planemask*/
-);
-
-extern void cfbFillSpanTile32sCopy(
- DrawablePtr /*pDrawable*/,
- int /*n*/,
- DDXPointPtr /*ppt*/,
- int * /*pwidth*/,
- PixmapPtr /*tile*/,
- int /*xrot*/,
- int /*yrot*/,
- int /*alu*/,
- unsigned long /*planemask*/
-);
-/* cfbtileoddG.c */
-
-extern void cfbFillBoxTileOddGeneral(
- DrawablePtr /*pDrawable*/,
- int /*nBox*/,
- BoxPtr /*pBox*/,
- PixmapPtr /*tile*/,
- int /*xrot*/,
- int /*yrot*/,
- int /*alu*/,
- unsigned long /*planemask*/
-);
-
-extern void cfbFillSpanTileOddGeneral(
- DrawablePtr /*pDrawable*/,
- int /*n*/,
- DDXPointPtr /*ppt*/,
- int * /*pwidth*/,
- PixmapPtr /*tile*/,
- int /*xrot*/,
- int /*yrot*/,
- int /*alu*/,
- unsigned long /*planemask*/
-);
-
-extern void cfbFillBoxTile32sGeneral(
- DrawablePtr /*pDrawable*/,
- int /*nBox*/,
- BoxPtr /*pBox*/,
- PixmapPtr /*tile*/,
- int /*xrot*/,
- int /*yrot*/,
- int /*alu*/,
- unsigned long /*planemask*/
-);
-
-extern void cfbFillSpanTile32sGeneral(
- DrawablePtr /*pDrawable*/,
- int /*n*/,
- DDXPointPtr /*ppt*/,
- int * /*pwidth*/,
- PixmapPtr /*tile*/,
- int /*xrot*/,
- int /*yrot*/,
- int /*alu*/,
- unsigned long /*planemask*/
-);
-/* cfbwindow.c */
-
-extern Bool cfbCreateWindow(
- WindowPtr /*pWin*/
-);
-
-extern Bool cfbDestroyWindow(
- WindowPtr /*pWin*/
-);
-
-extern Bool cfbMapWindow(
- WindowPtr /*pWindow*/
-);
-
-extern Bool cfbPositionWindow(
- WindowPtr /*pWin*/,
- int /*x*/,
- int /*y*/
-);
-
-extern Bool cfbUnmapWindow(
- WindowPtr /*pWindow*/
-);
-
-extern void cfbCopyWindow(
- WindowPtr /*pWin*/,
- DDXPointRec /*ptOldOrg*/,
- RegionPtr /*prgnSrc*/
-);
-
-extern Bool cfbChangeWindowAttributes(
- WindowPtr /*pWin*/,
- unsigned long /*mask*/
-);
-/* cfbzerarcC.c */
-
-extern void cfbZeroPolyArcSS8Copy(
- DrawablePtr /*pDraw*/,
- GCPtr /*pGC*/,
- int /*narcs*/,
- xArc * /*parcs*/
-);
-/* cfbzerarcG.c */
-
-extern void cfbZeroPolyArcSS8General(
- DrawablePtr /*pDraw*/,
- GCPtr /*pGC*/,
- int /*narcs*/,
- xArc * /*parcs*/
-);
-/* cfbzerarcX.c */
-
-extern void cfbZeroPolyArcSS8Xor(
- DrawablePtr /*pDraw*/,
- GCPtr /*pGC*/,
- int /*narcs*/,
- xArc * /*parcs*/
-);
-
-#if (!defined(SINGLEDEPTH) && PSZ != 8) || defined(FORCE_SEPARATE_PRIVATE)
-
-#define CFB_NEED_SCREEN_PRIVATE
-
-extern DevPrivateKey cfbScreenPrivateKey;
-#endif
-
-#ifndef CFB_PROTOTYPES_ONLY
-
-/* Common macros for extracting drawing information */
-
-#define cfbGetWindowPixmap(d) \
- ((* ((DrawablePtr)(d))->pScreen->GetWindowPixmap)((WindowPtr)(d)))
-
-#define cfbGetTypedWidth(pDrawable,wtype) (\
- (((pDrawable)->type != DRAWABLE_PIXMAP) ? \
- (int) (cfbGetWindowPixmap(pDrawable)->devKind) : \
- (int)(((PixmapPtr)pDrawable)->devKind)) / sizeof (wtype))
-
-#define cfbGetByteWidth(pDrawable) cfbGetTypedWidth(pDrawable, unsigned char)
-
-#define cfbGetPixelWidth(pDrawable) cfbGetTypedWidth(pDrawable, PixelType)
-
-#define cfbGetLongWidth(pDrawable) cfbGetTypedWidth(pDrawable, CfbBits)
-
-#define cfbGetTypedWidthAndPointer(pDrawable, width, pointer, wtype, ptype) {\
- PixmapPtr _pPix; \
- if ((pDrawable)->type != DRAWABLE_PIXMAP) \
- _pPix = cfbGetWindowPixmap(pDrawable); \
- else \
- _pPix = (PixmapPtr) (pDrawable); \
- (pointer) = (ptype *) _pPix->devPrivate.ptr; \
- (width) = ((int) _pPix->devKind) / sizeof (wtype); \
-}
-
-#define cfbGetByteWidthAndPointer(pDrawable, width, pointer) \
- cfbGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned char, unsigned char)
-
-#define cfbGetLongWidthAndPointer(pDrawable, width, pointer) \
- cfbGetTypedWidthAndPointer(pDrawable, width, pointer, CfbBits, CfbBits)
-
-#define cfbGetPixelWidthAndPointer(pDrawable, width, pointer) \
- cfbGetTypedWidthAndPointer(pDrawable, width, pointer, PixelType, PixelType)
-
-#define cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, wtype, ptype) {\
- PixmapPtr _pPix = cfbGetWindowPixmap((DrawablePtr) (pWin)); \
- (pointer) = (ptype *) _pPix->devPrivate.ptr; \
- (width) = ((int) _pPix->devKind) / sizeof (wtype); \
-}
-
-#define cfbGetWindowLongWidthAndPointer(pWin, width, pointer) \
- cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, CfbBits, CfbBits)
-
-#define cfbGetWindowByteWidthAndPointer(pWin, width, pointer) \
- cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, unsigned char, unsigned char)
-
-#define cfbGetWindowPixelWidthAndPointer(pDrawable, width, pointer) \
- cfbGetWindowTypedWidthAndPointer(pDrawable, width, pointer, PixelType, PixelType)
-
-/*
- * XFree86 empties the root BorderClip when the VT is inactive,
- * here's a macro which uses that to disable GetImage and GetSpans
- */
-#define cfbWindowEnabled(pWin) \
- REGION_NOTEMPTY((pWin)->drawable.pScreen, \
- &WindowTable[(pWin)->drawable.pScreen->myNum]->borderClip)
-
-#define cfbDrawableEnabled(pDrawable) \
- ((pDrawable)->type == DRAWABLE_PIXMAP ? \
- TRUE : cfbWindowEnabled((WindowPtr) pDrawable))
-
-#include "micoord.h"
-
-#endif /* !CFB_PROTOTYPES_ONLY */
-
-#endif
diff --git a/cfb/cfb16.h b/cfb/cfb16.h
deleted file mode 100644
index 6b5c30209..000000000
--- a/cfb/cfb16.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 1994-1998 The XFree86 Project, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the XFree86 Project shall
- * not be used in advertising or otherwise to promote the sale, use or other
- * dealings in this Software without prior written authorization from the
- * XFree86 Project.
- */
-
-#ifndef _CFB16_H_
-#define _CFB16_H_
-
-/*
- * C's preprocessing language substitutes >text<, not values...
- */
-
-#ifdef OLDPSZ
-# undef OLDPSZ
-#endif
-
-#ifdef PSZ
-
-# if (PSZ == 8)
-# define OLDPSZ 8
-# endif
-
-# if (PSZ == 16)
-# define OLDPSZ 16
-# endif
-
-# if (PSZ == 24)
-# define OLDPSZ 24
-# endif
-
-# if (PSZ == 32)
-# define OLDPSZ 32
-# endif
-
-# ifndef OLDPSZ
- /* Maybe an #error here ? */
-# endif
-
-# undef PSZ
-
-#endif
-
-#define PSZ 16
-#define CFB_PROTOTYPES_ONLY
-#include "cfb.h"
-#undef CFB_PROTOTYPES_ONLY
-#include "cfbunmap.h"
-
-#undef PSZ
-#ifdef OLDPSZ
-
-# if (OLDPSZ == 8)
-# define PSZ 8
-# endif
-
-# if (OLDPSZ == 16)
-# define PSZ 16
-# endif
-
-# if (OLDPSZ == 24)
-# define PSZ 24
-# endif
-
-# if (OLDPSZ == 32)
-# define PSZ 32
-# endif
-
-# undef OLDPSZ
-
-#endif
-
-#endif /* _CFB16_H_ */
diff --git a/cfb/cfb24.h b/cfb/cfb24.h
deleted file mode 100644
index ea5fc848e..000000000
--- a/cfb/cfb24.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 1994-1998 The XFree86 Project, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the XFree86 Project shall
- * not be used in advertising or otherwise to promote the sale, use or other
- * dealings in this Software without prior written authorization from the
- * XFree86 Project.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#ifndef _CFB24_H_
-#define _CFB24_H_
-
-/*
- * C's preprocessing language substitutes >text<, not values...
- */
-
-#ifdef OLDPSZ
-# undef OLDPSZ
-#endif
-
-#ifdef PSZ
-
-# if (PSZ == 8)
-# define OLDPSZ 8
-# endif
-
-# if (PSZ == 16)
-# define OLDPSZ 16
-# endif
-
-# if (PSZ == 24)
-# define OLDPSZ 24
-# endif
-
-# if (PSZ == 32)
-# define OLDPSZ 32
-# endif
-
-# ifndef OLDPSZ
- /* Maybe an #error here ? */
-# endif
-
-# undef PSZ
-
-#endif
-
-#define PSZ 24
-#define CFB_PROTOTYPES_ONLY
-#include "cfb.h"
-#undef CFB_PROTOTYPES_ONLY
-#include "cfbunmap.h"
-
-#undef PSZ
-#ifdef OLDPSZ
-
-# if (OLDPSZ == 8)
-# define PSZ 8
-# endif
-
-# if (OLDPSZ == 16)
-# define PSZ 16
-# endif
-
-# if (OLDPSZ == 24)
-# define PSZ 24
-# endif
-
-# if (OLDPSZ == 32)
-# define PSZ 32
-# endif
-
-# undef OLDPSZ
-
-#endif
-
-#endif /* _CFB24_H_ */
diff --git a/cfb/cfb32.h b/cfb/cfb32.h
deleted file mode 100644
index 18a5dc1c3..000000000
--- a/cfb/cfb32.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 1994-1998 The XFree86 Project, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the XFree86 Project shall
- * not be used in advertising or otherwise to promote the sale, use or other
- * dealings in this Software without prior written authorization from the
- * XFree86 Project.
- */
-
-#ifndef _CFB32_H_
-#define _CFB32_H_
-
-/*
- * C's preprocessing language substitutes >text<, not values...
- */
-
-#ifdef OLDPSZ
-# undef OLDPSZ
-#endif
-
-#ifdef PSZ
-
-# if (PSZ == 8)
-# define OLDPSZ 8
-# endif
-
-# if (PSZ == 16)
-# define OLDPSZ 16
-# endif
-
-# if (PSZ == 24)
-# define OLDPSZ 24
-# endif
-
-# if (PSZ == 32)
-# define OLDPSZ 32
-# endif
-
-# ifndef OLDPSZ
- /* Maybe an #error here ? */
-# endif
-
-# undef PSZ
-
-#endif
-
-#define PSZ 32
-#define CFB_PROTOTYPES_ONLY
-#include "cfb.h"
-#undef CFB_PROTOTYPES_ONLY
-#include "cfbunmap.h"
-
-#undef PSZ
-#ifdef OLDPSZ
-
-# if (OLDPSZ == 8)
-# define PSZ 8
-# endif
-
-# if (OLDPSZ == 16)
-# define PSZ 16
-# endif
-
-# if (OLDPSZ == 24)
-# define PSZ 24
-# endif
-
-# if (OLDPSZ == 32)
-# define PSZ 32
-# endif
-
-# undef OLDPSZ
-
-#endif
-
-#endif /* _CFB32_H_ */
diff --git a/cfb/cfb8bit.c b/cfb/cfb8bit.c
deleted file mode 100644
index 54a08c53d..000000000
--- a/cfb/cfb8bit.c
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
-
-Copyright 1989, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-
-/*
- * cfb8bit.c
- *
- * 8 bit color frame buffer utility routines
- */
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#if PSZ == 8
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <X11/Xproto.h>
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "cfb8bit.h"
-
-PixelGroup cfb8StippleMasks[NUM_MASKS] = {
-#if NUM_MASKS == 16
- 0x00000000, 0x000000ff, 0x0000ff00, 0x0000ffff,
- 0x00ff0000, 0x00ff00ff, 0x00ffff00, 0x00ffffff,
- 0xff000000, 0xff0000ff, 0xff00ff00, 0xff00ffff,
- 0xffff0000, 0xffff00ff, 0xffffff00, 0xffffffff
-#else /* NUM_MASKS == 256 */
- 0x0000000000000000, 0x00000000000000ff,
- 0x000000000000ff00, 0x000000000000ffff,
- 0x0000000000ff0000, 0x0000000000ff00ff,
- 0x0000000000ffff00, 0x0000000000ffffff,
- 0x00000000ff000000, 0x00000000ff0000ff,
- 0x00000000ff00ff00, 0x00000000ff00ffff,
- 0x00000000ffff0000, 0x00000000ffff00ff,
- 0x00000000ffffff00, 0x00000000ffffffff,
- 0x000000ff00000000, 0x000000ff000000ff,
- 0x000000ff0000ff00, 0x000000ff0000ffff,
- 0x000000ff00ff0000, 0x000000ff00ff00ff,
- 0x000000ff00ffff00, 0x000000ff00ffffff,
- 0x000000ffff000000, 0x000000ffff0000ff,
- 0x000000ffff00ff00, 0x000000ffff00ffff,
- 0x000000ffffff0000, 0x000000ffffff00ff,
- 0x000000ffffffff00, 0x000000ffffffffff,
- 0x0000ff0000000000, 0x0000ff00000000ff,
- 0x0000ff000000ff00, 0x0000ff000000ffff,
- 0x0000ff0000ff0000, 0x0000ff0000ff00ff,
- 0x0000ff0000ffff00, 0x0000ff0000ffffff,
- 0x0000ff00ff000000, 0x0000ff00ff0000ff,
- 0x0000ff00ff00ff00, 0x0000ff00ff00ffff,
- 0x0000ff00ffff0000, 0x0000ff00ffff00ff,
- 0x0000ff00ffffff00, 0x0000ff00ffffffff,
- 0x0000ffff00000000, 0x0000ffff000000ff,
- 0x0000ffff0000ff00, 0x0000ffff0000ffff,
- 0x0000ffff00ff0000, 0x0000ffff00ff00ff,
- 0x0000ffff00ffff00, 0x0000ffff00ffffff,
- 0x0000ffffff000000, 0x0000ffffff0000ff,
- 0x0000ffffff00ff00, 0x0000ffffff00ffff,
- 0x0000ffffffff0000, 0x0000ffffffff00ff,
- 0x0000ffffffffff00, 0x0000ffffffffffff,
- 0x00ff000000000000, 0x00ff0000000000ff,
- 0x00ff00000000ff00, 0x00ff00000000ffff,
- 0x00ff000000ff0000, 0x00ff000000ff00ff,
- 0x00ff000000ffff00, 0x00ff000000ffffff,
- 0x00ff0000ff000000, 0x00ff0000ff0000ff,
- 0x00ff0000ff00ff00, 0x00ff0000ff00ffff,
- 0x00ff0000ffff0000, 0x00ff0000ffff00ff,
- 0x00ff0000ffffff00, 0x00ff0000ffffffff,
- 0x00ff00ff00000000, 0x00ff00ff000000ff,
- 0x00ff00ff0000ff00, 0x00ff00ff0000ffff,
- 0x00ff00ff00ff0000, 0x00ff00ff00ff00ff,
- 0x00ff00ff00ffff00, 0x00ff00ff00ffffff,
- 0x00ff00ffff000000, 0x00ff00ffff0000ff,
- 0x00ff00ffff00ff00, 0x00ff00ffff00ffff,
- 0x00ff00ffffff0000, 0x00ff00ffffff00ff,
- 0x00ff00ffffffff00, 0x00ff00ffffffffff,
- 0x00ffff0000000000, 0x00ffff00000000ff,
- 0x00ffff000000ff00, 0x00ffff000000ffff,
- 0x00ffff0000ff0000, 0x00ffff0000ff00ff,
- 0x00ffff0000ffff00, 0x00ffff0000ffffff,
- 0x00ffff00ff000000, 0x00ffff00ff0000ff,
- 0x00ffff00ff00ff00, 0x00ffff00ff00ffff,
- 0x00ffff00ffff0000, 0x00ffff00ffff00ff,
- 0x00ffff00ffffff00, 0x00ffff00ffffffff,
- 0x00ffffff00000000, 0x00ffffff000000ff,
- 0x00ffffff0000ff00, 0x00ffffff0000ffff,
- 0x00ffffff00ff0000, 0x00ffffff00ff00ff,
- 0x00ffffff00ffff00, 0x00ffffff00ffffff,
- 0x00ffffffff000000, 0x00ffffffff0000ff,
- 0x00ffffffff00ff00, 0x00ffffffff00ffff,
- 0x00ffffffffff0000, 0x00ffffffffff00ff,
- 0x00ffffffffffff00, 0x00ffffffffffffff,
- 0xff00000000000000, 0xff000000000000ff,
- 0xff0000000000ff00, 0xff0000000000ffff,
- 0xff00000000ff0000, 0xff00000000ff00ff,
- 0xff00000000ffff00, 0xff00000000ffffff,
- 0xff000000ff000000, 0xff000000ff0000ff,
- 0xff000000ff00ff00, 0xff000000ff00ffff,
- 0xff000000ffff0000, 0xff000000ffff00ff,
- 0xff000000ffffff00, 0xff000000ffffffff,
- 0xff0000ff00000000, 0xff0000ff000000ff,
- 0xff0000ff0000ff00, 0xff0000ff0000ffff,
- 0xff0000ff00ff0000, 0xff0000ff00ff00ff,
- 0xff0000ff00ffff00, 0xff0000ff00ffffff,
- 0xff0000ffff000000, 0xff0000ffff0000ff,
- 0xff0000ffff00ff00, 0xff0000ffff00ffff,
- 0xff0000ffffff0000, 0xff0000ffffff00ff,
- 0xff0000ffffffff00, 0xff0000ffffffffff,
- 0xff00ff0000000000, 0xff00ff00000000ff,
- 0xff00ff000000ff00, 0xff00ff000000ffff,
- 0xff00ff0000ff0000, 0xff00ff0000ff00ff,
- 0xff00ff0000ffff00, 0xff00ff0000ffffff,
- 0xff00ff00ff000000, 0xff00ff00ff0000ff,
- 0xff00ff00ff00ff00, 0xff00ff00ff00ffff,
- 0xff00ff00ffff0000, 0xff00ff00ffff00ff,
- 0xff00ff00ffffff00, 0xff00ff00ffffffff,
- 0xff00ffff00000000, 0xff00ffff000000ff,
- 0xff00ffff0000ff00, 0xff00ffff0000ffff,
- 0xff00ffff00ff0000, 0xff00ffff00ff00ff,
- 0xff00ffff00ffff00, 0xff00ffff00ffffff,
- 0xff00ffffff000000, 0xff00ffffff0000ff,
- 0xff00ffffff00ff00, 0xff00ffffff00ffff,
- 0xff00ffffffff0000, 0xff00ffffffff00ff,
- 0xff00ffffffffff00, 0xff00ffffffffffff,
- 0xffff000000000000, 0xffff0000000000ff,
- 0xffff00000000ff00, 0xffff00000000ffff,
- 0xffff000000ff0000, 0xffff000000ff00ff,
- 0xffff000000ffff00, 0xffff000000ffffff,
- 0xffff0000ff000000, 0xffff0000ff0000ff,
- 0xffff0000ff00ff00, 0xffff0000ff00ffff,
- 0xffff0000ffff0000, 0xffff0000ffff00ff,
- 0xffff0000ffffff00, 0xffff0000ffffffff,
- 0xffff00ff00000000, 0xffff00ff000000ff,
- 0xffff00ff0000ff00, 0xffff00ff0000ffff,
- 0xffff00ff00ff0000, 0xffff00ff00ff00ff,
- 0xffff00ff00ffff00, 0xffff00ff00ffffff,
- 0xffff00ffff000000, 0xffff00ffff0000ff,
- 0xffff00ffff00ff00, 0xffff00ffff00ffff,
- 0xffff00ffffff0000, 0xffff00ffffff00ff,
- 0xffff00ffffffff00, 0xffff00ffffffffff,
- 0xffffff0000000000, 0xffffff00000000ff,
- 0xffffff000000ff00, 0xffffff000000ffff,
- 0xffffff0000ff0000, 0xffffff0000ff00ff,
- 0xffffff0000ffff00, 0xffffff0000ffffff,
- 0xffffff00ff000000, 0xffffff00ff0000ff,
- 0xffffff00ff00ff00, 0xffffff00ff00ffff,
- 0xffffff00ffff0000, 0xffffff00ffff00ff,
- 0xffffff00ffffff00, 0xffffff00ffffffff,
- 0xffffffff00000000, 0xffffffff000000ff,
- 0xffffffff0000ff00, 0xffffffff0000ffff,
- 0xffffffff00ff0000, 0xffffffff00ff00ff,
- 0xffffffff00ffff00, 0xffffffff00ffffff,
- 0xffffffffff000000, 0xffffffffff0000ff,
- 0xffffffffff00ff00, 0xffffffffff00ffff,
- 0xffffffffffff0000, 0xffffffffffff00ff,
- 0xffffffffffffff00, 0xffffffffffffffff
-#endif
-};
-
-int cfb8StippleMode, cfb8StippleAlu, cfb8StippleRRop;
-PixelGroup cfb8StippleFg, cfb8StippleBg, cfb8StipplePm;
-PixelGroup cfb8StippleAnd[NUM_MASKS], cfb8StippleXor[NUM_MASKS];
-
-int
-cfb8SetStipple (alu, fg, planemask)
-int alu;
-CfbBits fg, planemask;
-{
- CfbBits and, xor, rrop;
- int s;
- CfbBits c;
-
- cfb8StippleMode = FillStippled;
- cfb8StippleAlu = alu;
- cfb8StippleFg = fg & PMSK;
- cfb8StipplePm = planemask & PMSK;
- rrop = cfbReduceRasterOp (alu, fg, planemask, &and, &xor);
- cfb8StippleRRop = rrop;
- /*
- * create the appropriate pixel-fill bits for current
- * foreground
- */
- for (s = 0; s < NUM_MASKS; s++)
- {
- c = cfb8StippleMasks[s];
- cfb8StippleAnd[s] = and | ~c;
- cfb8StippleXor[s] = xor & c;
- }
- return TRUE;
-}
-
-
-int
-cfb8SetOpaqueStipple (alu, fg, bg, planemask)
-int alu;
-CfbBits fg, bg, planemask;
-{
- CfbBits andfg, xorfg, andbg, xorbg, rropfg, rropbg;
- int s;
- CfbBits c;
-
- cfb8StippleMode = FillOpaqueStippled;
- cfb8StippleAlu = alu;
- cfb8StippleFg = fg & PMSK;
- cfb8StippleBg = bg & PMSK;
- cfb8StipplePm = planemask & PMSK;
- rropfg = cfbReduceRasterOp (alu, cfb8StippleFg, cfb8StipplePm, &andfg, &xorfg);
- rropbg = cfbReduceRasterOp (alu, cfb8StippleBg, cfb8StipplePm, &andbg, &xorbg);
- if (rropfg == rropbg)
- cfb8StippleRRop = rropfg;
- else
- cfb8StippleRRop = GXset;
- /*
- * create the appropriate pixel-fill bits for current
- * foreground
- */
- for (s = 0; s < NUM_MASKS; s++)
- {
- c = cfb8StippleMasks[s];
- cfb8StippleAnd[s] = (andfg | ~c) & (andbg | c);
- cfb8StippleXor[s] = (xorfg & c) | (xorbg & ~c);
- }
- return TRUE;
-}
-
-/*
- * a grungy little routine. This computes clip masks
- * for partial character blts. Returns rgnOUT if the
- * entire character is clipped; returns rgnIN if the entire
- * character is unclipped; returns rgnPART if a portion of
- * the character is visible. Computes clip masks for each
- * longword of the character -- and those with the
- * contents of the glyph to compute the visible bits.
- */
-
-#if PGSZ == 32
-#if (BITMAP_BIT_ORDER == MSBFirst)
-PixelGroup cfb8BitLenMasks[PGSZ] = {
- 0xffffffff, 0x7fffffff, 0x3fffffff, 0x1fffffff,
- 0x0fffffff, 0x07ffffff, 0x03ffffff, 0x01ffffff,
- 0x00ffffff, 0x007fffff, 0x003fffff, 0x001fffff,
- 0x000fffff, 0x0007ffff, 0x0003ffff, 0x0001ffff,
- 0x0000ffff, 0x00007fff, 0x00003fff, 0x00001fff,
- 0x00000fff, 0x000007ff, 0x000003ff, 0x000001ff,
- 0x000000ff, 0x0000007f, 0x0000003f, 0x0000001f,
- 0x0000000f, 0x00000007, 0x00000003, 0x00000001,
-};
-#else
-PixelGroup cfb8BitLenMasks[PGSZ] = {
- 0xffffffff, 0xfffffffe, 0xfffffffc, 0xfffffff8,
- 0xfffffff0, 0xffffffe0, 0xffffffc0, 0xffffff80,
- 0xffffff00, 0xfffffe00, 0xfffffc00, 0xfffff800,
- 0xfffff000, 0xffffe000, 0xffffc000, 0xffff8000,
- 0xffff0000, 0xfffe0000, 0xfffc0000, 0xfff80000,
- 0xfff00000, 0xffe00000, 0xffc00000, 0xff800000,
- 0xff000000, 0xfe000000, 0xfc000000, 0xf8000000,
- 0xf0000000, 0xe0000000, 0xc0000000, 0x80000000,
-};
-#endif /* BITMAP_BIT_ORDER */
-#else /* PGSZ == 64 */
-#if (BITMAP_BIT_ORDER == MSBFirst)
-PixelGroup cfb8BitLenMasks[PGSZ] = {
- 0xffffffffffffffff, 0x7fffffffffffffff,
- 0x3fffffffffffffff, 0x1fffffffffffffff,
- 0x0fffffffffffffff, 0x07ffffffffffffff,
- 0x03ffffffffffffff, 0x01ffffffffffffff,
- 0x00ffffffffffffff, 0x007fffffffffffff,
- 0x003fffffffffffff, 0x001fffffffffffff,
- 0x000fffffffffffff, 0x0007ffffffffffff,
- 0x0003ffffffffffff, 0x0001ffffffffffff,
- 0x0000ffffffffffff, 0x00007fffffffffff,
- 0x00003fffffffffff, 0x00001fffffffffff,
- 0x00000fffffffffff, 0x000007ffffffffff,
- 0x000003ffffffffff, 0x000001ffffffffff,
- 0x000000ffffffffff, 0x0000007fffffffff,
- 0x0000003fffffffff, 0x0000001fffffffff,
- 0x0000000fffffffff, 0x00000007ffffffff,
- 0x00000003ffffffff, 0x00000001ffffffff,
- 0x00000000ffffffff, 0x000000007fffffff,
- 0x000000003fffffff, 0x000000001fffffff,
- 0x000000000fffffff, 0x0000000007ffffff,
- 0x0000000003ffffff, 0x0000000001ffffff,
- 0x0000000000ffffff, 0x00000000007fffff,
- 0x00000000003fffff, 0x00000000001fffff,
- 0x00000000000fffff, 0x000000000007ffff,
- 0x000000000003ffff, 0x000000000001ffff,
- 0x000000000000ffff, 0x0000000000007fff,
- 0x0000000000003fff, 0x0000000000001fff,
- 0x0000000000000fff, 0x00000000000007ff,
- 0x00000000000003ff, 0x00000000000001ff,
- 0x00000000000000ff, 0x000000000000007f,
- 0x000000000000003f, 0x000000000000001f,
- 0x000000000000000f, 0x0000000000000007,
- 0x0000000000000003, 0x0000000000000001
-};
-#else
-PixelGroup cfb8BitLenMasks[PGSZ] = {
- 0xffffffffffffffff, 0xfffffffffffffffe,
- 0xfffffffffffffffc, 0xfffffffffffffff8,
- 0xfffffffffffffff0, 0xffffffffffffffe0,
- 0xffffffffffffffc0, 0xffffffffffffff80,
- 0xffffffffffffff00, 0xfffffffffffffe00,
- 0xfffffffffffffc00, 0xfffffffffffff800,
- 0xfffffffffffff000, 0xffffffffffffe000,
- 0xffffffffffffc000, 0xffffffffffff8000,
- 0xffffffffffff0000, 0xfffffffffffe0000,
- 0xfffffffffffc0000, 0xfffffffffff80000,
- 0xfffffffffff00000, 0xffffffffffe00000,
- 0xffffffffffc00000, 0xffffffffff800000,
- 0xffffffffff000000, 0xfffffffffe000000,
- 0xfffffffffc000000, 0xfffffffff8000000,
- 0xfffffffff0000000, 0xffffffffe0000000,
- 0xffffffffc0000000, 0xffffffff80000000,
- 0xffffffff00000000, 0xfffffffe00000000,
- 0xfffffffc00000000, 0xfffffff800000000,
- 0xfffffff000000000, 0xffffffe000000000,
- 0xffffffc000000000, 0xffffff8000000000,
- 0xffffff0000000000, 0xfffffe0000000000,
- 0xfffffc0000000000, 0xfffff80000000000,
- 0xfffff00000000000, 0xffffe00000000000,
- 0xffffc00000000000, 0xffff800000000000,
- 0xffff000000000000, 0xfffe000000000000,
- 0xfffc000000000000, 0xfff8000000000000,
- 0xfff0000000000000, 0xffe0000000000000,
- 0xffc0000000000000, 0xff80000000000000,
- 0xff00000000000000, 0xfe00000000000000,
- 0xfc00000000000000, 0xf800000000000000,
- 0xf000000000000000, 0xe000000000000000,
- 0xc000000000000000, 0x8000000000000000
-};
-#endif /* BITMAP_BIT_ORDER */
-#endif /* PGSZ */
-
-
-
-int
-cfb8ComputeClipMasks32 (pBox, numRects, x, y, w, h, clips)
- BoxPtr pBox;
- int numRects;
- int x, y, w, h;
- CARD32 *clips;
-{
- int yBand, yBandBot;
- int ch;
- CfbBits clip;
- int partIN = FALSE, partOUT = FALSE;
- int result;
-
- if (numRects == 0)
- return rgnOUT;
- while (numRects && pBox->y2 <= y)
- {
- --numRects;
- ++pBox;
- }
- if (!numRects || pBox->y1 >= y + h)
- return rgnOUT;
- yBand = pBox->y1;
- while (numRects && pBox->y1 == yBand && pBox->x2 <= x)
- {
- --numRects;
- ++pBox;
- }
- if (!numRects || pBox->y1 >= y + h)
- return rgnOUT;
- if (numRects &&
- x >= pBox->x1 &&
- x + w <= pBox->x2 &&
- y >= pBox->y1 &&
- y + h <= pBox->y2)
- {
- return rgnIN;
- }
- ch = 0;
- while (numRects && pBox->y1 < y + h)
- {
- yBand = pBox->y1;
- yBandBot = pBox->y2;
- while (ch < h && y + ch < yBand)
- {
- partOUT = TRUE;
- clips[ch++] = 0;
- }
- if (ch >= h)
- break;
- while (numRects && pBox->y1 == yBand && pBox->x2 <= x)
- {
- --numRects;
- ++pBox;
- }
- if (!numRects)
- break;
- clip = 0;
- while (numRects && pBox->y1 == yBand && pBox->x1 < x + w)
- {
- if (x < pBox->x1)
- if (pBox->x2 < x + w)
- clip |= cfb8BitLenMasks[pBox->x1 - x] & ~cfb8BitLenMasks[pBox->x2 - x];
- else
- clip |= cfb8BitLenMasks[pBox->x1 - x];
- else
- if (pBox->x2 < x + w)
- clip |= ~cfb8BitLenMasks[pBox->x2 - x];
- else
- clip = ~0;
- --numRects;
- ++pBox;
- }
- if (clip != 0)
- partIN = TRUE;
- if (clip != ~0)
- partOUT = TRUE;
- while (ch < h && y + ch < yBandBot)
- clips[ch++] = clip;
- while (numRects && pBox->y1 == yBand)
- {
- --numRects;
- ++pBox;
- }
- }
- while (ch < h)
- {
- partOUT = TRUE;
- clips[ch++] = 0;
- }
- result = rgnOUT;
- if (partIN)
- {
- if (partOUT)
- result = rgnPART;
- else
- result = rgnIN;
- }
- return result;
-}
-
-#endif /* PSZ == 8 */
diff --git a/cfb/cfb8bit.h b/cfb/cfb8bit.h
deleted file mode 100644
index 5a17adf4f..000000000
--- a/cfb/cfb8bit.h
+++ /dev/null
@@ -1,1570 +0,0 @@
-/*
- * cfb8bit.h
- *
- * Defines which are only useful to 8 bit color frame buffers
- *
- * That doesn't seem to be true any more. Some of the macros in here
- * are used for depths other than 8. Perhaps the file should be
- * renamed. dpw
- */
-
-/*
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-*/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "servermd.h"
-
-#if (BITMAP_BIT_ORDER == MSBFirst)
-#define GetBitGroup(x) (((PixelGroup) (x)) >> (PGSZ - PGSZB))
-#define NextBitGroup(x) ((x) <<= PGSZB)
-#define NextSomeBits(x,n) ((x) <<= (n))
-#else
-#define GetBitGroup(x) ((x) & PGSZBMSK)
-#define NextBitGroup(x) ((x) >>= PGSZB)
-#define NextSomeBits(x,n) ((x) >>= (n))
-#endif
-
-#define RotBitsLeft(x,k) ((x) = BitLeft (x,k) | \
- BitRight (x, PGSZ-(k)))
-
-#if defined(__GNUC__) && defined(mc68020)
-#undef RotBitsLeft
-#define RotBitsLeft(x,k) asm("rol%.l %2,%0" \
- : "=d" (x) \
- : "0" (x), "dI" (k))
-#endif
-
-#if PSZ == 8
-
-#define GetPixelGroup(x) (cfb8StippleXor[GetBitGroup(x)])
-#define RRopPixels(dst,x) (DoRRop(dst,cfb8StippleAnd[x], cfb8StippleXor[x]))
-#define RRopPixelGroup(dst,x) (RRopPixels(dst,GetBitGroup(x)))
-#define MaskRRopPixels(dst,x,mask) (DoMaskRRop(dst,cfb8StippleAnd[x], cfb8StippleXor[x], mask))
-
-#define NUM_MASKS (1<<PPW) /* XXX goes in cfbmskbits.h? */
-extern int cfb8StippleMode, cfb8StippleAlu;
-extern PixelGroup cfb8StippleFg, cfb8StippleBg, cfb8StipplePm;
-extern PixelGroup cfb8StippleMasks[NUM_MASKS];
-extern PixelGroup cfb8StippleAnd[NUM_MASKS], cfb8StippleXor[NUM_MASKS];
-extern int cfb8StippleRRop;
-
-#define cfb8PixelMasks cfb8StippleMasks
-#define cfb8Pixels cfb8StippleXor
-
-#define cfb8CheckPixels(fg, bg) \
- (FillOpaqueStippled == cfb8StippleMode && \
- GXcopy == cfb8StippleAlu && \
- ((fg) & PMSK) == cfb8StippleFg && \
- ((bg) & PMSK) == cfb8StippleBg && \
- PMSK == cfb8StipplePm)
-
-#define cfb8CheckOpaqueStipple(alu,fg,bg,pm) \
- ((FillOpaqueStippled == cfb8StippleMode && \
- (alu) == cfb8StippleAlu && \
- ((fg) & PMSK) == cfb8StippleFg && \
- ((bg) & PMSK) == cfb8StippleBg && \
- ((pm) & PMSK) == cfb8StipplePm) ? 0 : cfb8SetOpaqueStipple(alu,fg,bg,pm))
-
-#define cfb8CheckStipple(alu,fg,pm) \
- ((FillStippled == cfb8StippleMode && \
- (alu) == cfb8StippleAlu && \
- ((fg) & PMSK) == cfb8StippleFg && \
- ((pm) & PMSK) == cfb8StipplePm) ? 0 : cfb8SetStipple(alu,fg,pm))
-
-#define cfb8SetPixels(fg,bg) cfb8SetOpaqueStipple(GXcopy,fg,bg,PMSK)
-
-/*
- * These macros are shared between the unnatural spans code
- * and the unnatural rectangle code. No reasonable person
- * would attempt to use them anyplace else.
- */
-
-#define NextUnnaturalStippleWord \
- if (bitsLeft >= MFB_PPW) \
- { \
- inputBits = *srcTemp++; \
- bitsLeft -= MFB_PPW; \
- partBitsLeft = MFB_PPW; \
- } \
- else \
- { \
- inputBits = 0; \
- if (bitsLeft) \
- inputBits = *srcTemp & ~cfb8BitLenMasks[bitsLeft]; \
- srcTemp = srcStart; \
- partBitsLeft = bitsLeft; \
- bitsLeft = bitsWhole; \
- }
-
-#define NextUnnaturalStippleBits \
- if (partBitsLeft >= PPW) { \
- bits = GetBitGroup (inputBits); \
- NextBitGroup (inputBits); \
- partBitsLeft -= PPW; \
- } else { \
- bits = GetBitGroup (inputBits); \
- nextPartBits = PPW - partBitsLeft; \
- NextUnnaturalStippleWord \
- if (partBitsLeft < nextPartBits) { \
- if (partBitsLeft) {\
- bits |= BitRight (GetBitGroup (inputBits), \
- PPW - nextPartBits) & PPWMSK;\
- nextPartBits -= partBitsLeft; \
- } \
- NextUnnaturalStippleWord \
- } \
- bits |= BitRight (GetBitGroup (inputBits), \
- PPW - nextPartBits) & PPWMSK; \
- NextSomeBits (inputBits, nextPartBits); \
- partBitsLeft -= nextPartBits; \
- }
-
-#define NextUnnaturalStippleBitsFast \
- if (partBitsLeft >= PPW) { \
- bits = GetBitGroup(inputBits); \
- NextBitGroup(inputBits); \
- partBitsLeft -= PPW; \
- } else { \
- bits = GetBitGroup (inputBits); \
- nextPartBits = PPW - partBitsLeft; \
- inputBits = *srcTemp++; \
- bits |= BitRight (GetBitGroup (inputBits), \
- partBitsLeft) & PPWMSK; \
- NextSomeBits (inputBits, nextPartBits); \
- partBitsLeft = MFB_PPW - nextPartBits; \
- }
-
-/*
- * WriteBitGroup takes the destination address, a pixel
- * value (which must be 8 bits duplicated 4 time with PFILL)
- * and the PPW bits to write, which must be in the low order
- * bits of the register (probably from GetBitGroup) and writes
- * the appropriate locations in memory with the pixel value. This
- * is a copy-mode only operation.
- */
-
-#define RRopBitGroup(dst,bits) \
- { \
- *(dst) = RRopPixels(*(dst),bits); \
- }
-
-#define MaskRRopBitGroup(dst,bits,mask) \
- { \
- *(dst) = MaskRRopPixels(*(dst),bits,mask); \
- }
-#endif /* PSZ == 8 */
-
-#if !defined(AVOID_MEMORY_READ) && PSZ == 8
-
-#define WriteBitGroup(dst,pixel,bits) \
- { \
- register PixelGroup _maskTmp = cfb8PixelMasks[(bits)]; \
- *(dst) = (*(dst) & ~_maskTmp) | ((pixel) & _maskTmp); \
- }
-
-#define SwitchBitGroup(dst,pixel,bits) \
- { \
- register PixelGroup _maskTmp = cfb8PixelMasks[(bits)]; \
- register PixelGroup _pixTmp = ((pixel) & _maskTmp); \
- _maskTmp = ~_maskTmp; \
- SwitchBitsLoop (*(dst) = (*(dst) & _maskTmp) | _pixTmp;) \
- }
-
-#else /* AVOID_MEMORY_READ */
-
-#if PGSZ == 32
-#if (BITMAP_BIT_ORDER == MSBFirst)
-#define SinglePixel0 3
-#define SinglePixel1 2
-#define SinglePixel2 1
-#define SinglePixel3 0
-#define SinglePixel4 7
-#define SinglePixel5 6
-#define SinglePixel6 5
-#define SinglePixel7 4
-#define SinglePixel8 0xB
-#define SinglePixel9 0xA
-#define DoublePixel0 1
-#define DoublePixel1 0
-#define DoublePixel2 3
-#define DoublePixel3 2
-#define DoublePixel4 5
-#define DoublePixel5 4
-#else
-#define SinglePixel0 0
-#define SinglePixel1 1
-#define SinglePixel2 2
-#define SinglePixel3 3
-#define SinglePixel4 4
-#define SinglePixel5 5
-#define SinglePixel6 6
-#define SinglePixel7 7
-#define SinglePixel8 8
-#define SinglePixel9 9
-#define DoublePixel0 0
-#define DoublePixel1 1
-#define DoublePixel2 2
-#define DoublePixel3 3
-#define DoublePixel4 4
-#define DoublePixel5 5
-#endif
-#define QuadPixel0 0
-#define QuadPixel1 1
-#define QuadPixel2 2
-#else /* PGSZ == 64 */
-#if (BITMAP_BIT_ORDER == MSBFirst)
-#define SinglePixel0 7
-#define SinglePixel1 6
-#define SinglePixel2 5
-#define SinglePixel3 4
-#define SinglePixel4 3
-#define SinglePixel5 2
-#define SinglePixel6 1
-#define SinglePixel7 0
-#define DoublePixel0 3
-#define DoublePixel1 2
-#define DoublePixel2 1
-#define DoublePixel3 0
-#define QuadPixel0 1
-#define QuadPixel1 0
-#else
-#define SinglePixel0 0
-#define SinglePixel1 1
-#define SinglePixel2 2
-#define SinglePixel3 3
-#define SinglePixel4 4
-#define SinglePixel5 5
-#define SinglePixel6 6
-#define SinglePixel7 7
-#define DoublePixel0 0
-#define DoublePixel1 1
-#define DoublePixel2 2
-#define DoublePixel3 3
-#define QuadPixel0 0
-#define QuadPixel1 1
-#endif
-#define OctaPixel0 0
-#endif /* PGSZ == 64 */
-
-#if PSZ == 8
-
-#if PGSZ == 32
-#define WriteBitGroup(dst,pixel,bits) \
- switch (bits) { \
- case 0: \
- break; \
- case 1: \
- ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- break; \
- case 2: \
- ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- break; \
- case 3: \
- ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- break; \
- case 4: \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 5: \
- ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 6: \
- ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 7: \
- ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 8: \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 9: \
- ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 10: \
- ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 11: \
- ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 12: \
- ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 13: \
- ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 14: \
- ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 15: \
- ((CARD32 *) (dst))[0] = (pixel); \
- break; \
- }
-#else /* PGSZ == 64 */
-#define WriteBitGroup(dst,pixel,bits) \
- if ( bits == 0xff ) \
- ((PixelGroup *) (dst))[OctaPixel0] = (pixel); \
- else { \
- switch (bits & 0x0f) { \
- case 0: \
- break; \
- case 1: \
- ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- break; \
- case 2: \
- ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- break; \
- case 3: \
- ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- break; \
- case 4: \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 5: \
- ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 6: \
- ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 7: \
- ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 8: \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 9: \
- ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 10: \
- ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 11: \
- ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 12: \
- ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 13: \
- ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 14: \
- ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 15: \
- ((CARD32 *) (dst))[QuadPixel0] = (pixel); \
- break; \
- } \
- switch ((bits & 0xf0) >> 4) { \
- case 0: \
- break; \
- case 1: \
- ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
- break; \
- case 2: \
- ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
- break; \
- case 3: \
- ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
- break; \
- case 4: \
- ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 5: \
- ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 6: \
- ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 7: \
- ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 8: \
- ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 9: \
- ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 10: \
- ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 11: \
- ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 12: \
- ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
- break; \
- case 13: \
- ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
- break; \
- case 14: \
- ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
- break; \
- case 15: \
- ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
- break; \
- } \
- }
-#endif /* PGSZ == 64 */
-
-#if PGSZ == 32
-#define SwitchBitGroup(dst,pixel,bits) { \
- switch (bits) { \
- case 0: \
- break; \
- case 1: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel);) \
- break; \
- case 2: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel);) \
- break; \
- case 3: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel);) \
- break; \
- case 4: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 5: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 6: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 7: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 8: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 9: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 10: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 11: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 12: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel1] = (pixel);) \
- break; \
- case 13: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel1] = (pixel);) \
- break; \
- case 14: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel1] = (pixel);) \
- break; \
- case 15: \
- SwitchBitsLoop (((CARD32 *) (dst))[0] = (pixel);) \
- break; \
- } \
-}
-#else /* PGSZ == 64 */
-#define SwitchBitGroup(dst,pixel,bits) { \
- if ( bits == 0xff ) \
- SwitchBitsLoop (((PixelGroup *) (dst))[OctaPixel0] = (pixel);) \
- else { \
- switch (bits & 0x0f) { \
- case 0: \
- break; \
- case 1: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel);) \
- break; \
- case 2: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel);) \
- break; \
- case 3: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel);)\
- break; \
- case 4: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 5: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 6: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 7: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 8: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 9: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 10: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 11: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 12: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel1] = (pixel);)\
- break; \
- case 13: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel1] = (pixel);)\
- break; \
- case 14: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel1] = (pixel);)\
- break; \
- case 15: \
- SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel);) \
- break; \
- } \
- switch ((bits & 0xf0) >> 4) { \
- case 0: \
- break; \
- case 1: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel);) \
- break; \
- case 2: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel);) \
- break; \
- case 3: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel);)\
- break; \
- case 4: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
- break; \
- case 5: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
- break; \
- case 6: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
- break; \
- case 7: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
- break; \
- case 8: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
- break; \
- case 9: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
- break; \
- case 10: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
- break; \
- case 11: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
- break; \
- case 12: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel);)\
- break; \
- case 13: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel3] = (pixel);)\
- break; \
- case 14: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel3] = (pixel);)\
- break; \
- case 15: \
- SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel1] = (pixel);) \
- break; \
- } \
- } \
-}
-#endif /* PGSZ == 64 */
-#endif /* PSZ == 8 */
-
-#if PSZ == 16
-
-#if PGSZ == 32
-#define WriteBitGroup(dst,pixel,bits) \
- switch (bits) { \
- case 0: \
- break; \
- case 1: \
- ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- break; \
- case 2: \
- ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
- break; \
- case 3: \
- ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
- break; \
- case 4: \
- ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 5: \
- ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 6: \
- ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 7: \
- ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 8: \
- ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 9: \
- ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 10: \
- ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 11: \
- ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 12: \
- ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 13: \
- ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 14: \
- ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 15: \
- ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- }
-#else /* PGSZ == 64 */
-#define WriteBitGroup(dst,pixel,bits) \
- if ( bits == 0xff ) { \
- ((PixelGroup *) (dst))[QuadPixel0] = (pixel); \
- ((PixelGroup *) (dst))[QuadPixel1] = (pixel); \
- } \
- else { \
- switch (bits & 0x0f) { \
- case 0: \
- break; \
- case 1: \
- ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- break; \
- case 2: \
- ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
- break; \
- case 3: \
- ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
- break; \
- case 4: \
- ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 5: \
- ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 6: \
- ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 7: \
- ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 8: \
- ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 9: \
- ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 10: \
- ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 11: \
- ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 12: \
- ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 13: \
- ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 14: \
- ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- case 15: \
- ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
- break; \
- } \
- switch ((bits & 0xf0) >> 4) { \
- case 0: \
- break; \
- case 1: \
- ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
- break; \
- case 2: \
- ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
- break; \
- case 3: \
- ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
- break; \
- case 4: \
- ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 5: \
- ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 6: \
- ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 7: \
- ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 8: \
- ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 9: \
- ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 10: \
- ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 11: \
- ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 12: \
- ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
- break; \
- case 13: \
- ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
- break; \
- case 14: \
- ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
- break; \
- case 15: \
- ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
- break; \
- } \
- }
-#endif /* PGSZ */
-
-#if PGSZ == 32
-#define SwitchBitGroup(dst,pixel,bits) { \
- switch (bits) { \
- case 0: \
- break; \
- case 1: \
- SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel);) \
- break; \
- case 2: \
- SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel);) \
- break; \
- case 3: \
- SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel);) \
- break; \
- case 4: \
- SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 5: \
- SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 6: \
- SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 7: \
- SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 8: \
- SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 9: \
- SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 10: \
- SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 11: \
- SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 12: \
- SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
- break; \
- case 13: \
- SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
- break; \
- case 14: \
- SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
- break; \
- case 15: \
- SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
- break; \
- } \
-}
-#else /* PGSZ == 64 */
-#define SwitchBitGroup(dst,pixel,bits) { \
- cfb cannot hack 64-bit SwitchBitGroup psz=PSZ
-#endif /* PGSZ */
-
-#endif /* PSZ == 16 */
-
-#if PSZ == 24
-/* 32 000011112222*/
-/* 24 000111222333*/
-/* 16 001122334455*/
-/* 8 0123456789AB*/
-#if PGSZ == 32
-#define WriteBitGroup(dst,pixel,bits) \
- { \
- register CARD32 reg_pixel = (pixel); \
- switch (bits) { \
- case 0: \
- break; \
- case 1: \
- ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
- ((CARD8 *) (dst))[SinglePixel2] = ((reg_pixel>>16)&0xFF); \
- break; \
- case 2: \
- ((CARD8 *) (dst))[SinglePixel3] = reg_pixel&0xFF; \
- ((CARD16 *) (dst))[DoublePixel2] = (reg_pixel>>8)&0xFFFF; \
- break; \
- case 3: \
- ((CARD8 *) (dst))[SinglePixel3] = reg_pixel & 0xFF; \
- ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
- ((CARD16 *) (dst))[DoublePixel2] = (reg_pixel>>8)&0xFFFF; \
- ((CARD8 *) (dst))[SinglePixel2] = (reg_pixel>>16&0xFF); \
- break; \
- case 4: \
- ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
- ((CARD8 *) (dst))[SinglePixel8] = (reg_pixel>>16)&0xFF; \
- break; \
- case 5: \
- ((CARD16 *) (dst))[DoublePixel0] = \
- ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
- reg_pixel >>= 16; \
- ((CARD8 *) (dst))[SinglePixel2] = \
- ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \
- break; \
- case 6: \
- ((CARD8 *) (dst))[SinglePixel3] = reg_pixel; \
- ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD16 *) (dst))[DoublePixel2] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \
- break; \
- case 7: \
- ((CARD16 *) (dst))[DoublePixel0] = \
- ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
- ((CARD8 *) (dst))[SinglePixel3] = reg_pixel&0xFF; \
- reg_pixel >>= 8; \
- ((CARD16 *) (dst))[DoublePixel2] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD8 *) (dst))[SinglePixel2] = \
- ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \
- break; \
- case 8: \
- ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \
- ((CARD16 *) (dst))[DoublePixel5] = (reg_pixel>>8); \
- break; \
- case 9: \
- ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
- ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \
- reg_pixel >>= 8; \
- ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD8 *) (dst))[SinglePixel2] = reg_pixel&0xFF; \
- break; \
- case 10: \
- ((CARD8 *) (dst))[SinglePixel3] = \
- ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \
- reg_pixel >>= 8; \
- ((CARD16 *) (dst))[DoublePixel2] = \
- ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
- break; \
- case 11: \
- ((CARD8 *) (dst))[SinglePixel3] = \
- ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
- ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD16 *) (dst))[DoublePixel2] = \
- ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD8 *) (dst))[SinglePixel2] = reg_pixel; \
- break; \
- case 12: \
- ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
- ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \
- break; \
- case 13: \
- ((CARD16 *) (dst))[DoublePixel0] = \
- ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
- ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD8 *) (dst))[SinglePixel2] = \
- ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \
- break; \
- case 14: \
- ((CARD8 *) (dst))[SinglePixel3] = \
- ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
- ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD16 *) (dst))[DoublePixel2] = \
- ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \
- break; \
- case 15: \
- ((CARD16 *) (dst))[DoublePixel0] = \
- ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
- ((CARD8 *) (dst))[SinglePixel3] = \
- ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD16 *) (dst))[DoublePixel2] = \
- ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
- reg_pixel >>= 8; \
- ((CARD8 *) (dst))[SinglePixel8] = \
- ((CARD8 *) (dst))[SinglePixel2] = reg_pixel; \
- break; \
- } \
- }
-#else /* PGSZ == 64 */
-#define WriteBitGroup(dst,pixel,bits) \
- if ( bits == 0xff ) { \
- ((PixelGroup *) (dst))[DoublePixel0] = (pixel); \
- ((PixelGroup *) (dst))[DoublePixel1] = (pixel); \
- ((PixelGroup *) (dst))[DoublePixel2] = (pixel); \
- ((PixelGroup *) (dst))[DoublePixel3] = (pixel); \
- } \
- else { \
- switch (bits & 0x0f) { \
- case 0: \
- break; \
- case 1: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- break; \
- case 2: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- break; \
- case 3: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- break; \
- case 4: \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 5: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 6: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 7: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 8: \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 9: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 10: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 11: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 12: \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 13: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 14: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 15: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- } \
- switch ((bits & 0xf0) >> 4) { \
- case 0: \
- break; \
- case 1: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- break; \
- case 2: \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- break; \
- case 3: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- break; \
- case 4: \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 5: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 6: \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 7: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 8: \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 9: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 10: \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 11: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 12: \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 13: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 14: \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 15: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- } \
- }
-#endif /* PGSZ */
-
-#if PGSZ == 32
-#define SwitchBitGroup(dst,pixel,bits) { \
- switch (bits) { \
- case 0: \
- break; \
- case 1: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 2: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel2] = (pixel);) \
- break; \
- case 3: \
- SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel2] = (pixel);) \
- break; \
- case 4: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
- break; \
- case 5: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
- break; \
- case 6: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- ((CARD32 *) (dst))[QuadPixel2] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
- break; \
- case 7: \
- SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
- ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
- break; \
- case 8: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel9] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
- break; \
- case 9: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel9] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
- break; \
- case 10: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel9] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
- break; \
- case 11: \
- SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel3] = (pixel);) \
- ((CARD8 *) (dst))[SinglePixel9] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
- break; \
- case 12: \
- SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel); \
- ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
- break; \
- case 13: \
- SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
- ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
- break; \
- case 14: \
- SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
- ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
- ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
- break; \
- case 15: \
- SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
- ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
- ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
- break; \
- } \
-}
-#else /* PGSZ == 64 */
-#define SwitchBitGroup(dst,pixel,bits) { \
- cfb cannot hack 64-bit SwitchBitGroup psz=PSZ
-#endif /* PGSZ */
-
-#endif /* PSZ == 24 */
-
-#if PSZ == 32
-
-#if PGSZ == 32
-#define WriteBitGroup(dst,pixel,bits) \
- switch (bits) { \
- case 0: \
- break; \
- case 1: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- break; \
- case 2: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- break; \
- case 3: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- break; \
- case 4: \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 5: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 6: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 7: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 8: \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 9: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 10: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 11: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 12: \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 13: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 14: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 15: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- }
-#else /* PGSZ == 64 */
-#define WriteBitGroup(dst,pixel,bits) \
- if ( bits == 0xff ) { \
- ((PixelGroup *) (dst))[DoublePixel0] = (pixel); \
- ((PixelGroup *) (dst))[DoublePixel1] = (pixel); \
- ((PixelGroup *) (dst))[DoublePixel2] = (pixel); \
- ((PixelGroup *) (dst))[DoublePixel3] = (pixel); \
- } \
- else { \
- switch (bits & 0x0f) { \
- case 0: \
- break; \
- case 1: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- break; \
- case 2: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- break; \
- case 3: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- break; \
- case 4: \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 5: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 6: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 7: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- break; \
- case 8: \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 9: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 10: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 11: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 12: \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 13: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 14: \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- case 15: \
- ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
- break; \
- } \
- switch ((bits & 0xf0) >> 4) { \
- case 0: \
- break; \
- case 1: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- break; \
- case 2: \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- break; \
- case 3: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- break; \
- case 4: \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 5: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 6: \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 7: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- break; \
- case 8: \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 9: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 10: \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 11: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 12: \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 13: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 14: \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- case 15: \
- ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
- break; \
- } \
- }
-#endif /* PGSZ */
-
-#if PGSZ == 32
-#define SwitchBitGroup(dst,pixel,bits) { \
- switch (bits) { \
- case 0: \
- break; \
- case 1: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel);) \
- break; \
- case 2: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel);) \
- break; \
- case 3: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel);) \
- break; \
- case 4: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 5: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 6: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 7: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
- break; \
- case 8: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 9: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 10: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 11: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 12: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 13: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 14: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- case 15: \
- SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
- ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
- break; \
- } \
-}
-#else /* PGSZ == 64 */
-#define SwitchBitGroup(dst,pixel,bits) { \
- cfb cannot hack 64-bit SwitchBitGroup psz=PSZ
-#endif /* PGSZ */
-
-#endif /* PSZ == 32 */
-#endif /* AVOID_MEMORY_READ */
-
-extern PixelGroup cfb8BitLenMasks[PGSZ];
-
-extern int cfb8SetStipple (
- int /*alu*/,
- CfbBits /*fg*/,
- CfbBits /*planemask*/
-);
-
-extern int cfb8SetOpaqueStipple (
- int /*alu*/,
- CfbBits /*fg*/,
- CfbBits /*bg*/,
- CfbBits /*planemask*/
-);
-
-extern int cfb8ComputeClipMasks32 (
- BoxPtr /*pBox*/,
- int /*numRects*/,
- int /*x*/,
- int /*y*/,
- int /*w*/,
- int /*h*/,
- CARD32 * /*clips*/
-);
diff --git a/cfb/cfb8line.c b/cfb/cfb8line.c
deleted file mode 100644
index 8c00d9fea..000000000
--- a/cfb/cfb8line.c
+++ /dev/null
@@ -1,1503 +0,0 @@
-/*
- *
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- *
- * Jeff Anton'x fixes: cfb8line.c 97/02/07
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <stdlib.h>
-#include <X11/X.h>
-
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "scrnintstr.h"
-#include "mistruct.h"
-
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "cfbrrop.h"
-#include "miline.h"
-
-#ifdef PIXEL_ADDR
-
-#if defined(__GNUC__) && defined(mc68020)
-#define STUPID volatile
-#define REARRANGE
-#else
-#define STUPID
-#endif
-
-#ifdef __GNUC__
-/* lame compiler doesn't even look at 'register' attributes */
-#define I_H do{
-#define I_T }while(0);
-#define IMPORTANT_START I_H I_H I_H I_H I_H I_H I_H I_H I_H I_H
-#define IMPORTANT_END I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T
-#else
-#define IMPORTANT_START
-#define IMPORTANT_END
-#endif
-
-#define isClipped(c,ul,lr) ((((c) - (ul)) | ((lr) - (c))) & ClipMask)
-
-#ifdef POLYSEGMENT
-
-# if (defined(sun) || defined(__bsdi__)) && \
- (defined(sparc) || defined(__sparc__))
-# define WIDTH_FAST 1152
-# endif
-
-# ifdef ultrix
-# define WIDTH_FAST 1024
-# endif
-
-# ifdef Mips
-# define WIDTH_FAST 4096
-# endif
-# ifdef WIDTH_FAST
-# if WIDTH_FAST == 1024
-# define FAST_MUL(y) ((y) << 10)
-# endif
-
-# if WIDTH_FAST == 1152
-# define FAST_MUL(y) (((y) << 10) + ((y) << 7))
-# endif
-
-# if WIDTH_FAST == 1280
-# define FAST_MUL(y) (((y) << 10) + ((y) << 8))
-# endif
-
-# if WIDTH_FAST == 2048
-# define FAST_MUL(y) ((y) << 11)
-# endif
-
-# if WIDTH_FAST == 4096
-# define FAST_MUL(y) ((y) << 12)
-# endif
-# endif
-
-# if defined(WIDTH_SHIFT)
-# ifdef FAST_MUL
-# define FUNC_NAME(e) RROP_NAME(RROP_NAME_CAT(e,Shift))
-# if RROP == GXcopy
-# define INCLUDE_OTHERS
-# define SERIOUS_UNROLLING
-# endif
-# define INCLUDE_DRAW
-# define NWIDTH(nwidth) WIDTH_FAST
-# define WIDTH_MUL(y,w) FAST_MUL(y)
-# endif
-# else
-# define FUNC_NAME(e) RROP_NAME(e)
-# define WIDTH_MUL(y,w) ((y) * (w))
-# define NWIDTH(nwidth) (nwidth)
-# define INCLUDE_DRAW
-# if !defined (FAST_MUL) && RROP == GXcopy
-# define INCLUDE_OTHERS
-# define SERIOUS_UNROLLING
-# endif
-# endif
-#else
-
-# define INCLUDE_DRAW
-# define WIDTH_MUL(y,w) ((y) * (w))
-# define NWIDTH(nwidth) nwidth
-# ifdef PREVIOUS
-# define FUNC_NAME(e) RROP_NAME(RROP_NAME_CAT(e,Previous))
-# else
-# define FUNC_NAME(e) RROP_NAME(e)
-# if RROP == GXcopy
-# define INCLUDE_OTHERS
-# ifdef PLENTIFUL_REGISTERS
-# define SAVE_X2Y2
-# endif
-# define ORIGIN
-# define SERIOUS_UNROLLING
-# else
-# define EITHER_MODE
-# endif
-# endif
-#endif
-
-#if PSZ == 24
-#define PXL2ADR(x) ((x)*3 >> 2)
-
-#if RROP == GXcopy
-#define body_rop \
- addrp = (PixelType *)((unsigned long)addrb & ~0x03); \
- switch((unsigned long)addrb & 3){ \
- case 0: \
- *addrp = (*addrp & 0xFF000000)|(piQxelXor[0] & 0xFFFFFF); \
- break; \
- case 1: \
- *addrp = (*addrp & 0xFF)|(piQxelXor[2] & 0xFFFFFF00); \
- break; \
- case 3: \
- *addrp = (*addrp & 0xFFFFFF)|(piQxelXor[0] & 0xFF000000); \
- *(addrp+1)=(*(addrp+1) & 0xFFFF0000)|(piQxelXor[1] & 0xFFFF); \
- break; \
- case 2: \
- *addrp = (*addrp & 0xFFFF)|(piQxelXor[1] & 0xFFFF0000); \
- *(addrp+1)=(*(addrp+1) & 0xFFFFFF00)|(piQxelXor[2] & 0xFF); \
- break; \
- }
-#endif
-#if RROP == GXxor
-#define body_rop \
- addrp = (PixelType *)((unsigned long)addrb & ~0x03); \
- switch((unsigned long)addrb & 3){ \
- case 0: \
- *addrp ^= piQxelXor[0] & 0xFFFFFF; \
- break; \
- case 1: \
- *addrp ^= piQxelXor[2] & 0xFFFFFF00; \
- break; \
- case 3: \
- *addrp ^= piQxelXor[0] & 0xFF000000; \
- *(addrp+1) ^= piQxelXor[1] & 0xFFFF; \
- break; \
- case 2: \
- *addrp ^= piQxelXor[1] & 0xFFFF0000; \
- *(addrp+1) ^= piQxelXor[2] & 0xFF; \
- break; \
- }
-#endif
-#if RROP == GXand
-#define body_rop \
- addrp = (PixelType *)((unsigned long)addrb & ~0x03); \
- switch((unsigned long)addrb & 3){ \
- case 0: \
- *addrp &= piQxelAnd[0] | 0xFF000000; \
- break; \
- case 1: \
- *addrp &= piQxelAnd[2] | 0xFF; \
- break; \
- case 3: \
- *addrp &= 0xFFFFFF | piQxelAnd[0]; \
- *(addrp+1) &= 0xFFFF0000 | piQxelAnd[1]; \
- break; \
- case 2: \
- *addrp &= 0xFFFF | piQxelAnd[1]; \
- *(addrp+1) &= 0xFFFFFF00 | piQxelAnd[2]; \
- break; \
- }
-#endif
-#if RROP == GXor
-#define body_rop \
- addrp = (PixelType *)((unsigned long)addrb & ~0x03); \
- switch((unsigned long)addrb & 3){ \
- case 0: \
- *addrp |= piQxelOr[0] & 0xFFFFFF; \
- break; \
- case 1: \
- *addrp |= piQxelOr[2] & 0xFFFFFF00; \
- break; \
- case 3: \
- *addrp |= piQxelOr[0] & 0xFF000000; \
- *(addrp+1) |= piQxelOr[1] & 0xFFFF; \
- break; \
- case 2: \
- *addrp |= piQxelOr[1] & 0xFFFF0000; \
- *(addrp+1) |= piQxelOr[2] & 0xFF; \
- break; \
- }
-#endif
-#if RROP == GXset
-#define body_rop \
- addrp = (PixelType *)((unsigned long)addrb & ~0x03); \
- switch((unsigned long)addrb & 3){ \
- case 0: \
- *addrp = (*addrp & (piQxelAnd[0]|0xFF000000)) \
- ^ (piQxelXor[0] & 0xFFFFFF); \
- break; \
- case 1: \
- *addrp = (*addrp & (piQxelAnd[2]|0xFF)) \
- ^ (piQxelXor[2] & 0xFFFFFF00); \
- break; \
- case 3: \
- *addrp = (*addrp & (piQxelAnd[0]|0xFFFFFF)) \
- ^ (piQxelXor[0] & 0xFF000000); \
- *(addrp+1) = (*(addrp+1) & (piQxelAnd[1]|0xFFFF0000)) \
- ^ (piQxelXor[1] & 0xFFFF); \
- break; \
- case 2: \
- *addrp = (*addrp & (piQxelAnd[1]|0xFFFF)) \
- ^ (piQxelXor[1] & 0xFFFF0000); \
- *(addrp+1) = (*(addrp+1) & (piQxelAnd[2]|0xFFFFFF00)) \
- ^ (piQxelXor[2] & 0xFF); \
- break; \
- }
-#endif
-#endif /* PSZ == 24 */
-
-#define BUGFIX_clip
-
-#ifdef INCLUDE_DRAW
-
-int
-#ifdef POLYSEGMENT
-FUNC_NAME(cfb8SegmentSS1Rect) (pDrawable, pGC, nseg, pSegInit)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nseg;
- xSegment *pSegInit;
-#else
-FUNC_NAME(cfb8LineSS1Rect) (pDrawable, pGC, mode, npt, pptInit, pptInitOrig,
- x1p,y1p,x2p,y2p)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int mode; /* Origin or Previous */
- int npt; /* number of points */
- DDXPointPtr pptInit, pptInitOrig;
- int *x1p, *y1p, *x2p, *y2p;
-#endif /* POLYSEGMENT */
-{
- register long e;
- register int y1_or_e1;
- register PixelType *addrp;
- register int stepmajor;
- register int stepminor;
-#ifndef REARRANGE
- register long e3;
-#endif
-#ifdef mc68000
- register short x1_or_len;
-#else
- register int x1_or_len;
-#endif
- RROP_DECLARE
-
-#ifdef SAVE_X2Y2
-# define c2 y2
-#else
- register int c2;
-#endif
-#if !defined(ORIGIN) && !defined(POLYSEGMENT)
- register int _x1 = 0, _y1 = 0, _x2 = 0, _y2 = 0;
- int extents_x1, extents_y1, extents_x2, extents_y2;
-#endif /* !ORIGIN */
-#ifndef PREVIOUS
- register int upperleft, lowerright;
- CARD32 ClipMask = 0x80008000;
-#endif /* !PREVIOUS */
-#ifdef POLYSEGMENT
- register int capStyle;
-#endif /* POLYSEGMENT */
-#ifdef SAVE_X2Y2
- register int x2, y2;
-# define X1 x1_or_len
-# define Y1 y1_or_e1
-# define X2 x2
-# define Y2 y2
-#else
-# ifdef POLYSEGMENT
-# define X1 x1_or_len
-# define Y1 y1_or_e1
-# else
-# define X1 intToX(y1_or_e1)
-# define Y1 intToY(y1_or_e1)
-# endif /* POLYSEGMENT */
-# define X2 intToX(c2)
-# define Y2 intToY(c2)
-#endif /* SAVE_X2Y2 */
- PixelType *addr;
- int nwidth;
- cfbPrivGCPtr devPriv;
- BoxPtr extents;
- int *ppt;
-#if PSZ == 24
- int xBase; /* x of addr */
- int xOffset; /* x of addrp */
- PixelType *addrLineEnd;
- char *addrb;
- int stepmajor3, stepminor3, majordx, minordx;
-#endif
-#ifndef POLYSEGMENT
-#ifndef ORIGIN
-#ifdef BUGFIX_clip
- int ex_x1, ex_y1, ex_x2, ex_y2;
-#endif
-#endif
-#endif
- int octant;
- unsigned int bias = miGetZeroLineBias(pDrawable->pScreen);
-
- devPriv = cfbGetGCPrivate(pGC);
- cfbGetPixelWidthAndPointer (pDrawable, nwidth, addr);
-#ifndef REARRANGE
- RROP_FETCH_GCPRIV(devPriv);
-#endif
- extents = &pGC->pCompositeClip->extents;
-#ifndef PREVIOUS
- c2 = *((int *) &pDrawable->x);
- c2 -= (c2 & 0x8000) << 1;
- upperleft = *((int *) &extents->x1) - c2;
- lowerright = *((int *) &extents->x2) - c2 - 0x00010001;
-#endif /* !PREVIOUS */
-#ifndef POLYSEGMENT
-#ifndef ORIGIN
-#ifdef BUGFIX_clip
- ex_x1 = extents->x1 - pDrawable->x;
- ex_y1 = extents->y1 - pDrawable->y;
- ex_x2 = extents->x2 - pDrawable->x;
- ex_y2 = extents->y2 - pDrawable->y;
-#endif
-#endif
-#endif
-#if PSZ == 24
- xBase = pDrawable->x;
- addr += WIDTH_MUL(pDrawable->y,nwidth);
-#else
- addr = addr + WIDTH_MUL(pDrawable->y,nwidth) + pDrawable->x;
-#endif
-#ifdef POLYSEGMENT
- capStyle = pGC->capStyle - CapNotLast;
- ppt = (int *) pSegInit;
- while (nseg--)
-#else /* POLYSEGMENT */
-#ifdef EITHER_MODE
- mode -= CoordModePrevious;
- if (!mode)
-#endif /* EITHER_MODE */
-#ifndef ORIGIN
- { /* CoordModePrevious */
- ppt = (int *)pptInit + 1;
- _x1 = *x1p;
- _y1 = *y1p;
- extents_x1 = extents->x1 - pDrawable->x;
- extents_x2 = extents->x2 - pDrawable->x;
- extents_y1 = extents->y1 - pDrawable->y;
- extents_y2 = extents->y2 - pDrawable->y;
- if (_x1 < extents_x1 || _x1 >= extents_x2 ||
- _y1 < extents_y1 || _y1 >= extents_y2)
- {
- c2 = *ppt++;
- intToCoord(c2, _x2, _y2);
- *x2p = _x1 + _x2;
- *y2p = _y1 + _y2;
- return 1;
- }
-#if PSZ == 24
- addrLineEnd = addr + WIDTH_MUL(_y1, nwidth);
- xOffset = xBase + _x1;
- addrb = (char *)addrLineEnd + xOffset * 3;
- addrp = (PixelType *)((unsigned long)addrb & ~0x03);
-#else
- addrp = addr + WIDTH_MUL(_y1, nwidth) + _x1;
-#endif
- _x2 = _x1;
- _y2 = _y1;
- }
-#endif /* !ORIGIN */
-#ifdef EITHER_MODE
- else
-#endif /* EITHER_MODE */
-#ifndef PREVIOUS
- {
- ppt = (int *) pptInit;
- c2 = *ppt++;
- if (isClipped (c2, upperleft, lowerright))
- {
- return 1;
- }
-#ifdef SAVE_X2Y2
- intToCoord(c2,x2,y2);
-#endif
-#if PSZ == 24
- addrLineEnd = addr + WIDTH_MUL(Y2, nwidth);
- xOffset = xBase + X2;
- addrb = (char *)addrLineEnd + xOffset * 3;
- addrp = (PixelType *)((unsigned long)addrb & ~0x03);
-#else
- addrp = addr + WIDTH_MUL(Y2, nwidth) + X2;
-#endif
- }
-#endif /* !PREVIOUS */
- while (--npt)
-#endif /* POLYSEGMENT */
- {
-#ifdef POLYSEGMENT
- y1_or_e1 = ppt[0];
- c2 = ppt[1];
- ppt += 2;
- if (isClipped(y1_or_e1,upperleft,lowerright)|isClipped(c2,upperleft,lowerright))
- break;
- intToCoord(y1_or_e1,x1_or_len,y1_or_e1);
- /* compute now to avoid needing x1, y1 later */
-#if PSZ == 24
- addrLineEnd = addr + WIDTH_MUL(y1_or_e1, nwidth);
- xOffset = xBase + x1_or_len;
- addrb = (char *)addrLineEnd + xOffset * 3;
- addrp = (PixelType *)((unsigned long)addrb & ~0x03);
-#else
- addrp = addr + WIDTH_MUL(y1_or_e1, nwidth) + x1_or_len;
-#endif
-#else /* !POLYSEGMENT */
-#ifdef EITHER_MODE
- if (!mode)
-#endif /* EITHER_MODE */
-#ifndef ORIGIN
- {
- /* CoordModePrevious */
- _x1 = _x2;
- _y1 = _y2;
- c2 = *ppt++;
- intToCoord(c2, _x2, _y2);
- _x2 = _x1 + _x2;
- _y2 = _y1 + _y2;
-
-#ifdef BUGFIX_clip
- if (_x2 < ex_x1 || _x2 >= ex_x2 ||
- _y2 < ex_y1 || _y2 >= ex_y2)
-#else
- if (_x2 < extents_x1 || _x2 >= extents_x2 ||
- _y2 < extents_y1 || _y2 >= extents_y2)
-#endif
- {
- break;
- }
- CalcLineDeltas(_x1, _y1, _x2, _y2, x1_or_len, y1_or_e1,
- stepmajor, stepminor, 1, NWIDTH(nwidth), octant);
- }
-#endif /* !ORIGIN */
-#ifdef EITHER_MODE
- else
-#endif /* EITHER_MODE */
-#ifndef PREVIOUS
- {
-#ifndef SAVE_X2Y2
- y1_or_e1 = c2;
-#else
- y1_or_e1 = y2;
- x1_or_len = x2;
-#endif /* SAVE_X2Y2 */
- c2 = *ppt++;
-
- if (isClipped (c2, upperleft, lowerright))
- break;
-#ifdef SAVE_X2Y2
- intToCoord(c2,x2,y2);
-#endif
- CalcLineDeltas(X1, Y1, X2, Y2, x1_or_len, y1_or_e1,
- stepmajor, stepminor, 1, NWIDTH(nwidth), octant);
- }
-#endif /* !PREVIOUS */
-#endif /* POLYSEGMENT */
-
-#ifdef POLYSEGMENT
- CalcLineDeltas(X1, Y1, X2, Y2, x1_or_len, y1_or_e1,
- stepmajor, stepminor, 1, NWIDTH(nwidth), octant);
- /*
- * although the horizontal code works for polyline, it
- * slows down 10 pixel lines by 15%. Thus, this
- * code is optimized for horizontal segments and
- * random orientation lines, which seems like a reasonable
- * assumption
- */
- if (y1_or_e1 != 0)
- {
-#endif /* POLYSEGMENT */
- if (x1_or_len < y1_or_e1)
- {
-#ifdef REARRANGE
- register int e3;
-#endif
-
- e3 = x1_or_len;
- x1_or_len = y1_or_e1;
- y1_or_e1 = e3;
-
- e3 = stepminor;
- stepminor = stepmajor;
- stepmajor = e3;
- SetYMajorOctant(octant);
- }
-
- e = -x1_or_len;
-#ifdef POLYSEGMENT
- if (!capStyle)
- x1_or_len--;
-#endif
-
- {
-#ifdef REARRANGE
- register int e3;
- RROP_DECLARE
- RROP_FETCH_GCPRIV(devPriv);
-#endif
-
- y1_or_e1 = y1_or_e1 << 1;
- e3 = e << 1;
-
- FIXUP_ERROR(e, octant, bias);
-
-#if PSZ == 24
- if (stepmajor == 1 || stepmajor == -1){
- stepmajor3 = stepmajor * 3;
- stepminor3 = stepminor * sizeof (CfbBits);
- majordx = stepmajor; minordx = 0;
- } else {
- stepmajor3 = stepmajor * sizeof (CfbBits);
- stepminor3 = stepminor * 3;
- majordx = 0; minordx = stepminor;
- }
-#endif
-
-#if PSZ == 24
-#define body {\
- body_rop \
- addrb += stepmajor3; \
- xOffset += majordx; \
- e += y1_or_e1; \
- if (e >= 0){ \
- addrb += stepminor3; \
- xOffset += minordx; \
- e += e3; \
- } \
- }
-#else /* PSZ == 24 */
-
-#define body {\
- RROP_SOLID(addrp); \
- addrp += stepmajor; \
- e += y1_or_e1; \
- if (e >= 0) \
- { \
- addrp += stepminor; \
- e += e3; \
- } \
- }
-#endif /* PSZ == 24 */
-
-#ifdef LARGE_INSTRUCTION_CACHE
-
-# ifdef SERIOUS_UNROLLING
-# define UNROLL 16
-# else
-# define UNROLL 4
-# endif
-#define CASE(n) case -n: body
-
- while ((x1_or_len -= UNROLL) >= 0)
- {
- body body body body
-# if UNROLL >= 8
- body body body body
-# endif
-# if UNROLL >= 12
- body body body body
-# endif
-# if UNROLL >= 16
- body body body body
-# endif
- }
- switch (x1_or_len)
- {
- CASE(1) CASE(2) CASE(3)
-# if UNROLL >= 8
- CASE(4) CASE(5) CASE(6) CASE(7)
-# endif
-# if UNROLL >= 12
- CASE(8) CASE(9) CASE(10) CASE(11)
-# endif
-# if UNROLL >= 16
- CASE(12) CASE(13) CASE(14) CASE(15)
-# endif
- }
-#else /* !LARGE_INSTRUCTION_CACHE */
-
- IMPORTANT_START
- IMPORTANT_START
-
- if (x1_or_len & 1)
- body
- x1_or_len >>= 1;
- while (x1_or_len--) {
- body body
- }
-
- IMPORTANT_END
- IMPORTANT_END
-#endif /* LARGE_INSTRUCTION_CACHE */
-
-#ifdef POLYSEGMENT
-#if PSZ == 24
- body_rop
-#else
- RROP_SOLID(addrp);
-#endif
-#endif
-#if PSZ == 24
- addrp = (PixelType *)((unsigned long)addrb & ~0x03);
-#endif
- }
-#undef body
-#ifdef POLYSEGMENT
- }
- else /* Polysegment horizontal line optimization */
- {
-# ifdef REARRANGE
- register int e3;
- RROP_DECLARE
- RROP_FETCH_GCPRIV(devPriv);
-# endif /* REARRANGE */
- if (stepmajor < 0)
- {
-#if PSZ == 24
- xOffset -= x1_or_len;
- addrp = addrLineEnd + PXL2ADR(xOffset);
-#else
- addrp -= x1_or_len;
-#endif
- if (capStyle)
- x1_or_len++;
- else
-#if PSZ == 24
- xOffset++;
- addrp = addrLineEnd + PXL2ADR(xOffset);
-#else
- addrp++;
-#endif
- }
- else
- {
-#if PSZ == 24
- addrp = addrLineEnd + PXL2ADR(xOffset);
-#endif
- if (capStyle)
- x1_or_len++;
- }
-# if PSZ == 24
- y1_or_e1 = xOffset & 3;
-# else
-# if PGSZ == 64 /* PIM value from <cfbmskbits.h> is not it! (for 16/32 PSZ)*/
- y1_or_e1 = ((long) addrp) & 0x7;
- addrp = (PixelType *) (((unsigned char *) addrp) - y1_or_e1);
-# else
- y1_or_e1 = ((long) addrp) & PIM;
- addrp = (PixelType *) (((unsigned char *) addrp) - y1_or_e1);
-# endif
-#if PGSZ == 32
-# if PWSH != 2
- y1_or_e1 >>= (2 - PWSH);
-# endif
-#else /* PGSZ == 64 */
-# if PWSH != 3
- y1_or_e1 >>= (3 - PWSH);
-# endif
-#endif /* PGSZ */
-# endif /* PSZ == 24 */
-#if PSZ == 24
- {
-#if RROP == GXcopy
- register int nlmiddle;
- int leftIndex = xOffset & 3;
- int rightIndex = (xOffset + x1_or_len) & 3;
-#else
- register int pidx;
-#endif
-
-#if RROP == GXcopy
- nlmiddle = x1_or_len;
- if(leftIndex){
- nlmiddle -= (4 - leftIndex);
- }
- if(rightIndex){
- nlmiddle -= rightIndex;
- }
-
- nlmiddle >>= 2;
- switch(leftIndex+x1_or_len){
- case 4:
- switch(leftIndex){
- case 0:
- *addrp++ = piQxelXor[0];
- *addrp++ = piQxelXor[1];
- *addrp = piQxelXor[2];
- break;
- case 1:
- *addrp = ((*addrp) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- addrp++;
- *addrp = piQxelXor[1];
- addrp++;
- *addrp = piQxelXor[2];
- break;
- case 2:
- *addrp = ((*addrp) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000);
- addrp++;
- *addrp = piQxelXor[2];
- break;
- case 3:
- *addrp = ((*addrp) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00);
- break;
- }
- break;
- case 3:
- switch(leftIndex){
- case 0:
- *addrp++ = piQxelXor[0];
- *addrp++ = piQxelXor[1];
- *addrp = ((*addrp) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- break;
- case 1:
- *addrp = ((*addrp) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- addrp++;
- *addrp = piQxelXor[1];
- addrp++;
- *addrp = ((*addrp) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- break;
- case 2:
- *addrp = ((*addrp) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000);
- addrp++;
- *addrp = ((*addrp) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- break;
- }
- break;
- case 2:
- switch(leftIndex){
-/*
- case 2:
- *addrp = ((*addrp) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000);
- addrp++;
- *addrp = ((*addrp) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- break;
-*/
- case 1:
- *addrp = ((*addrp) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- addrp++;
- *addrp = ((*addrp) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);
- break;
- case 0:
- *addrp++ = piQxelXor[0];
- *addrp = ((*addrp) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);
- break;
- }
- break;
- case 1: /*only if leftIndex = 0 and w = 1*/
- if(x1_or_len){
- *addrp = ((*addrp) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF);
- }
-/*
- else{
- *addrp = ((*addrp) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- addrp++;
- *addrp = ((*addrp) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);
- }
-*/
- break;
- case 0: /*never*/
- break;
- default:
- {
-/*
- maskbits(y1_or_e1, x1_or_len, e, e3, x1_or_len)
-*/
- switch(leftIndex){
- case 0:
- break;
- case 1:
- *addrp = ((*addrp) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- addrp++;
- *addrp = piQxelXor[1];
- addrp++;
- *addrp = piQxelXor[2];
- addrp++;
- break;
- case 2:
- *addrp = ((*addrp) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000);
- addrp++;
- *addrp = piQxelXor[2];
- addrp++;
- break;
- case 3:
- *addrp = ((*addrp) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00);
- addrp++;
- break;
- }
- while(nlmiddle--){
- *addrp++ = piQxelXor[0];
- *addrp++ = piQxelXor[1];
- *addrp++ = piQxelXor[2];
- }
- switch(rightIndex++){
- case 0:
- break;
- case 1:
- *addrp = ((*addrp) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF);
- break;
- case 2:
- *addrp++ = piQxelXor[0];
- *addrp = ((*addrp) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);
- break;
- case 3:
- *addrp++ = piQxelXor[0];
- *addrp++ = piQxelXor[1];
- *addrp = ((*addrp) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- break;
- }
-/*
- if (e3){
- e3 &= 0xFFFFFF;
- switch(rightIndex&3){
- case 0:
- *addrp = ((*addrp) & (0xFF000000 | ~e3))
- | (piQxelXor[0] & 0xFFFFFF & e3);
- break;
- case 1:
- *addrp = ((*addrp) & (0xFFFFFF | ~(e3<<24)))
- + (piQxelXor[0] & 0xFF000000 & (e3<<24));
- addrp++;
- *addrp = ((*addrp) & (0xFFFF0000|~(e3 >> 8)))
- | (piQxelXor[1] & 0xFFFF & (e3 >> 8));
- break;
- case 2:
- *addrp = ((*addrp) & (0xFFFF|~(e3 << 16)))
- | (piQxelXor[1] & 0xFFFF0000 & (e3 << 16));
- addrp++;
- *addrp = ((*addrp) & (0xFFFFFF00|~(e3>>16)))
- | (piQxelXor[2] & 0xFF & (e3 >> 16));
- break;
- case 3:
- *addrp = ((*addrp) & (0xFF|~(e3<<8)))
- | (piQxelXor[2] & 0xFFFFFF00 & (e3<<8));
- addrp++;
- break;
- }
- }
-*/
- }
- }
-#else /* GXcopy */
- addrp = (PixelType *)((char *)addrLineEnd + ((xOffset * 3) & ~0x03));
- if (x1_or_len <= 1){
- if (x1_or_len)
- RROP_SOLID24(addrp, xOffset);
- } else {
- maskbits(xOffset, x1_or_len, e, e3, x1_or_len);
- pidx = xOffset & 3;
- if (e){
- RROP_SOLID_MASK(addrp, e, pidx-1);
- addrp++;
- if (pidx == 3)
- pidx = 0;
- }
- while (--x1_or_len >= 0){
- RROP_SOLID(addrp, pidx);
- addrp++;
- if (++pidx == 3)
- pidx = 0;
- }
- if (e3)
- RROP_SOLID_MASK(addrp, e3, pidx);
- }
-#endif /* GXcopy */
- }
-#else /* PSZ == 24 */
- if (y1_or_e1 + x1_or_len <= PPW)
- {
- if (x1_or_len)
- {
- maskpartialbits(y1_or_e1, x1_or_len, e)
- RROP_SOLID_MASK((CfbBits *) addrp, e);
- }
- }
- else
- {
- maskbits(y1_or_e1, x1_or_len, e, e3, x1_or_len)
- if (e)
- {
- RROP_SOLID_MASK((CfbBits *) addrp, e);
- addrp += PPW;
- }
- RROP_SPAN(addrp, x1_or_len)
- if (e3)
- RROP_SOLID_MASK((CfbBits *) addrp, e3);
- }
-#endif /* PSZ == 24 */
- }
-#endif /* POLYSEGMENT */
- }
-#ifdef POLYSEGMENT
- if (nseg >= 0)
- return (xSegment *) ppt - pSegInit;
-#else
- if (npt)
- {
-#ifdef EITHER_MODE
- if (!mode)
-#endif /* EITHER_MODE */
-#ifndef ORIGIN
- {
- *x1p = _x1;
- *y1p = _y1;
- *x2p = _x2;
- *y2p = _y2;
- }
-#endif /* !ORIGIN */
- return ((DDXPointPtr) ppt - pptInit) - 1;
- }
-
-# ifndef ORIGIN
-# define C2 c2
-# else
-# define C2 ppt[-1]
-# endif
-#ifdef EITHER_MODE
- if (pGC->capStyle != CapNotLast &&
- ((mode ? (C2 != *((int *) pptInitOrig))
- : ((_x2 != pptInitOrig->x) ||
- (_y2 != pptInitOrig->y)))
- || (ppt == ((int *)pptInitOrig) + 2)))
-#endif /* EITHER_MODE */
-#ifdef PREVIOUS
- if (pGC->capStyle != CapNotLast &&
- ((_x2 != pptInitOrig->x) ||
- (_y2 != pptInitOrig->y) ||
- (ppt == ((int *)pptInitOrig) + 2)))
-#endif /* PREVIOUS */
-#ifdef ORIGIN
- if (pGC->capStyle != CapNotLast &&
- ((C2 != *((int *) pptInitOrig)) ||
- (ppt == ((int *)pptInitOrig) + 2)))
-#endif /* !PREVIOUS */
- {
-# ifdef REARRANGE
- RROP_DECLARE
-
- RROP_FETCH_GCPRIV(devPriv);
-# endif
-#if PSZ == 24
-#if RROP == GXcopy
- switch(xOffset & 3){
- case 0:
- *addrp = ((*addrp)&0xFF000000)|(piQxelXor[0] & 0xFFFFFF);
- break;
- case 3:
- *addrp = ((*addrp)&0xFF)|(piQxelXor[2] & 0xFFFFFF00);
- break;
- case 1:
- *addrp = ((*addrp)&0xFFFFFF)|(piQxelXor[0] & 0xFF000000);
- *(addrp+1) = ((*(addrp+1))&0xFFFF0000)|(piQxelXor[1] & 0xFFFF);
- break;
- case 2:
- *addrp = ((*addrp)&0xFFFF)|(piQxelXor[1] & 0xFFFF0000);
- *(addrp+1) = ((*(addrp+1))&0xFFFFFF00)|(piQxelXor[2] & 0xFF);
- break;
- }
-#endif
-#if RROP == GXxor
- switch(xOffset & 3){
- case 0:
- *addrp ^= (piQxelXor[0] & 0xFFFFFF);
- break;
- case 3:
- *addrp ^= (piQxelXor[2] & 0xFFFFFF00);
- break;
- case 1:
- *addrp ^= (piQxelXor[0] & 0xFF000000);
- *(addrp+1) ^= (piQxelXor[1] & 0xFFFF);
- break;
- case 2:
- *addrp ^= (piQxelXor[1] & 0xFFFF0000);
- *(addrp+1) ^= (piQxelXor[2] & 0xFF);
- break;
- }
-#endif
-#if RROP == GXand
- switch(xOffset & 3){
- case 0:
- *addrp &= (piQxelAnd[0] | 0xFF000000);
- break;
- case 3:
- *addrp &= (piQxelAnd[2] | 0xFF);
- break;
- case 1:
- *addrp &= (0xFFFFFF|piQxelAnd[0]);
- *(addrp+1) &= (0xFFFF0000|piQxelAnd[1]);
- break;
- case 2:
- *addrp &= (0xFFFF|piQxelAnd[1]);
- *(addrp+1) &= (0xFFFFFF00|piQxelAnd[2]);
- break;
- }
-#endif
-#if RROP == GXor
- switch(xOffset & 3){
- case 0:
- *addrp |= (piQxelOr[0] & 0xFFFFFF);
- break;
- case 3:
- *addrp |= (piQxelOr[2] & 0xFFFFFF00);
- break;
- case 1:
- *addrp |= (piQxelOr[0] & 0xFF000000);
- *(addrp+1) |= (piQxelOr[1] & 0xFFFF);
- break;
- case 2:
- *addrp |= (piQxelOr[1] & 0xFFFF0000);
- *(addrp+1) |= (piQxelOr[2] & 0xFF);
- break;
- }
-#endif
-#if RROP == GXset
- switch(xOffset & 3){
- case 0:
- *addrp = (((*addrp)&(piQxelAnd[0] |0xFF000000))^(piQxelXor[0] & 0xFFFFFF));
- break;
- case 3:
- *addrp = (((*addrp)&(piQxelAnd[2]|0xFF))^(piQxelXor[2] & 0xFFFFFF00));
- break;
- case 1:
- *addrp = (((*addrp)&(piQxelAnd[0]|0xFFFFFF))^(piQxelXor[0] & 0xFF000000));
- *(addrp+1) = (((*(addrp+1))&(piQxelAnd[1]|0xFFFF0000))^(piQxelXor[1] & 0xFFFF));
- break;
- case 2:
- *addrp = (((*addrp)&(piQxelAnd[1]|0xFFFF))^(piQxelXor[1] & 0xFFFF0000));
- *(addrp+1) = (((*(addrp+1))&(piQxelAnd[2]|0xFFFFFF00))^(piQxelXor[2] & 0xFF));
- break;
- }
-#endif
-#else
- RROP_SOLID (addrp);
-# endif
- }
-#endif /* !POLYSEGMENT */
- RROP_UNDECLARE;
- return -1;
-}
-
-#endif /* INCLUDE_DRAW */
-
-
-#ifdef INCLUDE_OTHERS
-
-#ifdef POLYSEGMENT
-
-void
-cfb8SegmentSS1Rect (pDrawable, pGC, nseg, pSegInit)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nseg;
- xSegment *pSegInit;
-{
- int (*func)(DrawablePtr, GCPtr, int, xSegment *);
- void (*clip)(DrawablePtr, GCPtr, int, int, int, int, BoxPtr, Bool);
- int drawn;
- cfbPrivGCPtr devPriv;
-
-#if defined(__arm32__) && PSZ != 8
- /* XXX -JJK */
- /* There is a painting bug when PSZ != 8; I need to track it down! */
- cfbSegmentSS(pDrawable, pGC, nseg, pSegInit);
- return;
-#endif
-
- devPriv = cfbGetGCPrivate(pGC);
-#ifdef NO_ONE_RECT
- if (REGION_NUM_RECTS(pGC->pCompositeClip) != 1)
- {
- cfbSegmentSS(pDrawable, pGC, nseg, pSegInit);
- return;
- }
-#endif
- switch (devPriv->rop)
- {
- case GXcopy:
- func = cfb8SegmentSS1RectCopy;
- clip = cfb8ClippedLineCopy;
-#ifdef FAST_MUL
- if (cfbGetPixelWidth (pDrawable) == WIDTH_FAST)
- func = cfb8SegmentSS1RectShiftCopy;
-#endif
- break;
- case GXxor:
- func = cfb8SegmentSS1RectXor;
- clip = cfb8ClippedLineXor;
- break;
- default:
- func = cfb8SegmentSS1RectGeneral;
- clip = cfb8ClippedLineGeneral;
- break;
- }
- while (nseg)
- {
- drawn = (*func) (pDrawable, pGC, nseg, pSegInit);
- if (drawn == -1)
- break;
- (*clip) (pDrawable, pGC,
- pSegInit[drawn-1].x1, pSegInit[drawn-1].y1,
- pSegInit[drawn-1].x2, pSegInit[drawn-1].y2,
- &pGC->pCompositeClip->extents,
- pGC->capStyle == CapNotLast);
- pSegInit += drawn;
- nseg -= drawn;
- }
-}
-
-#else /* POLYSEGMENT */
-
-void
-cfb8LineSS1Rect (pDrawable, pGC, mode, npt, pptInit)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int mode;
- int npt;
- DDXPointPtr pptInit;
-{
- int (*func)(DrawablePtr, GCPtr, int, int,
- DDXPointPtr, DDXPointPtr,
- int *, int *, int *, int *);
- void (*clip)(DrawablePtr, GCPtr, int, int, int, int, BoxPtr, Bool);
- int drawn;
- cfbPrivGCPtr devPriv;
- int x1, y1, x2, y2;
- DDXPointPtr pptInitOrig = pptInit;
-
-#if defined(__arm32__) && PSZ != 8
- /* XXX -JJK */
- /* There is a painting bug when PSZ != 8; I need to track it down! */
- cfbLineSS(pDrawable, pGC, mode, npt, pptInit);
- return;
-#endif
-
- devPriv = cfbGetGCPrivate(pGC);
-#ifdef NO_ONE_RECT
- if (REGION_NUM_RECTS(pGC->pCompositeClip) != 1)
- {
- cfbLineSS(pDrawable, pGC, mode, npt, pptInit);
- return;
- }
-#endif
- switch (devPriv->rop)
- {
- case GXcopy:
- func = cfb8LineSS1RectCopy;
- clip = cfb8ClippedLineCopy;
- if (mode == CoordModePrevious)
- func = cfb8LineSS1RectPreviousCopy;
- break;
- case GXxor:
- func = cfb8LineSS1RectXor;
- clip = cfb8ClippedLineXor;
- break;
- default:
- func = cfb8LineSS1RectGeneral;
- clip = cfb8ClippedLineGeneral;
- break;
- }
- if (mode == CoordModePrevious)
- {
- x1 = pptInit->x;
- y1 = pptInit->y;
- while (npt > 1)
- {
- drawn = (*func) (pDrawable, pGC, mode, npt, pptInit, pptInitOrig,
- &x1, &y1, &x2, &y2);
- if (drawn == -1)
- break;
- (*clip) (pDrawable, pGC, x1, y1, x2, y2,
- &pGC->pCompositeClip->extents,
- drawn != npt - 1 || pGC->capStyle == CapNotLast);
- pptInit += drawn;
- npt -= drawn;
- x1 = x2;
- y1 = y2;
- }
- }
- else
- {
- while (npt > 1)
- {
- drawn = (*func) (pDrawable, pGC, mode, npt, pptInit, pptInitOrig,
- &x1, &y1, &x2, &y2);
- if (drawn == -1)
- break;
- (*clip) (pDrawable, pGC,
- pptInit[drawn-1].x, pptInit[drawn-1].y,
- pptInit[drawn].x, pptInit[drawn].y,
- &pGC->pCompositeClip->extents,
- drawn != npt - 1 || pGC->capStyle == CapNotLast);
- pptInit += drawn;
- npt -= drawn;
- }
- }
-}
-
-#endif /* else POLYSEGMENT */
-#endif /* INCLUDE_OTHERS */
-
-#if !defined(POLYSEGMENT) && !defined (PREVIOUS)
-
-void
-RROP_NAME (cfb8ClippedLine) (pDrawable, pGC, x1, y1, x2, y2, boxp, shorten)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int x1, y1, x2, y2;
- BoxPtr boxp;
- Bool shorten;
-{
- int oc1, oc2;
- int e, e1, e3, len;
- int adx, ady;
-
- PixelType *addr;
- int nwidth;
- int stepx, stepy;
- int xorg, yorg;
- int new_x1, new_y1, new_x2, new_y2;
- Bool pt1_clipped, pt2_clipped;
- int changex, changey, result;
-#if PSZ == 24
- PixelType *addrLineEnd;
- char *addrb;
- int stepx3, stepy3;
-#endif
- int octant;
- unsigned int bias = miGetZeroLineBias(pDrawable->pScreen);
-
- cfbGetPixelWidthAndPointer(pDrawable, nwidth, addr);
-
- xorg = pDrawable->x;
- yorg = pDrawable->y;
- x1 += xorg;
- y1 += yorg;
- x2 += xorg;
- y2 += yorg;
- oc1 = 0;
- oc2 = 0;
- OUTCODES (oc1, x1, y1, boxp);
- OUTCODES (oc2, x2, y2, boxp);
-
- if (oc1 & oc2)
- return;
-
- CalcLineDeltas(x1, y1, x2, y2, adx, ady, stepx, stepy, 1, nwidth, octant);
-
- if (adx <= ady)
- {
- int t;
-
- t = adx;
- adx = ady;
- ady = t;
-
- t = stepx;
- stepx = stepy;
- stepy = t;
-
- SetYMajorOctant(octant);
- }
- e = - adx;
- e1 = ady << 1;
- e3 = - (adx << 1);
-
- FIXUP_ERROR(e, octant, bias);
-
- new_x1 = x1;
- new_y1 = y1;
- new_x2 = x2;
- new_y2 = y2;
- pt1_clipped = 0;
- pt2_clipped = 0;
-
- if (IsXMajorOctant(octant))
- {
- result = miZeroClipLine(boxp->x1, boxp->y1, boxp->x2 - 1, boxp->y2 - 1,
- &new_x1, &new_y1, &new_x2, &new_y2,
- adx, ady,
- &pt1_clipped, &pt2_clipped,
- octant, bias, oc1, oc2);
- if (result == -1)
- return;
-
- len = abs(new_x2 - new_x1) - 1; /* this routine needs the "-1" */
-
- /* if we've clipped the endpoint, always draw the full length
- * of the segment, because then the capstyle doesn't matter
- * if x2,y2 isn't clipped, use the capstyle
- * (shorten == TRUE <--> CapNotLast)
- */
- if (pt2_clipped || !shorten)
- len++;
-
- if (pt1_clipped)
- {
- /* must calculate new error terms */
- changex = abs(new_x1 - x1);
- changey = abs(new_y1 - y1);
- e = e + changey * e3 + changex * e1;
- }
- }
- else /* Y_AXIS */
- {
- result = miZeroClipLine(boxp->x1, boxp->y1, boxp->x2 - 1, boxp->y2 - 1,
- &new_x1, &new_y1, &new_x2, &new_y2,
- ady, adx,
- &pt1_clipped, &pt2_clipped,
- octant, bias, oc1, oc2);
- if (result == -1)
- return;
-
- len = abs(new_y2 - new_y1) - 1; /* this routine needs the "-1" */
-
- /* if we've clipped the endpoint, always draw the full length
- * of the segment, because then the capstyle doesn't matter
- * if x2,y2 isn't clipped, use the capstyle
- * (shorten == TRUE <--> CapNotLast)
- */
- if (pt2_clipped || !shorten)
- len++;
-
- if (pt1_clipped)
- {
- /* must calculate new error terms */
- changex = abs(new_x1 - x1);
- changey = abs(new_y1 - y1);
- e = e + changex * e3 + changey * e1;
- }
- }
- x1 = new_x1;
- y1 = new_y1;
- {
- register PixelType *addrp;
- RROP_DECLARE
-
- RROP_FETCH_GC(pGC);
-
-#if PSZ == 24
- addrLineEnd = addr + (y1 * nwidth);
- addrb = (char *)addrLineEnd + x1 * 3;
- if (stepx == 1 || stepx == -1){
- stepx3 = stepx * 3;
- stepy3 = stepy * sizeof (CfbBits);
- } else {
- stepx3 = stepx * sizeof (CfbBits);
- stepy3 = stepy * 3;
- }
-#else
- addrp = addr + (y1 * nwidth) + x1;
-#endif
-
-#ifndef REARRANGE
- if (!ady)
- {
-#if PSZ == 24
-#define body {\
- body_rop \
- addrb += stepx3; \
- }
-#else
-#define body { RROP_SOLID(addrp); addrp += stepx; }
-#endif
- while (len >= PGSZB)
- {
- body body body body
-#if PGSZ == 64
- body body body body
-#endif
- len -= PGSZB;
- }
- switch (len)
- {
-#if PGSZ == 64
- case 7: body case 6: body case 5: body case 4: body
-#endif
- case 3: body case 2: body case 1: body
- }
-#undef body
- }
- else
-#endif /* !REARRANGE */
- {
-#if PSZ == 24
-#define body {\
- body_rop \
- addrb += stepx3; \
- e += e1; \
- if (e >= 0) \
- { \
- addrb += stepy3; \
- e += e3; \
- } \
- }
-#else
-#define body {\
- RROP_SOLID(addrp); \
- addrp += stepx; \
- e += e1; \
- if (e >= 0) \
- { \
- addrp += stepy; \
- e += e3; \
- } \
- }
-#endif
-
-#ifdef LARGE_INSTRUCTION_CACHE
- while ((len -= PGSZB) >= 0)
- {
- body body body body
-#if PGSZ == 64
- body body body body
-#endif
- }
- switch (len)
- {
- case -1: body case -2: body case -3: body
-#if PGSZ == 64
- case -4: body case -5: body case -6: body case -7: body
-#endif
- }
-#else /* !LARGE_INSTRUCTION_CACHE */
- IMPORTANT_START;
-
- while ((len -= 2) >= 0)
- {
- body body;
- }
- if (len & 1)
- body;
-
- IMPORTANT_END;
-#endif /* LARGE_INSTRUCTION_CACHE */
- }
-#if PSZ == 24
- body_rop
-#else
- RROP_SOLID(addrp);
-#endif
-#undef body
- RROP_UNDECLARE
- }
-}
-
-#endif /* !POLYSEGMENT && !PREVIOUS */
-#endif /* PIXEL_ADDR */
diff --git a/cfb/cfballpriv.c b/cfb/cfballpriv.c
deleted file mode 100644
index 3b58266c5..000000000
--- a/cfb/cfballpriv.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- *
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "resource.h"
-#include "colormap.h"
-#include "colormapst.h"
-#include "cfb.h"
-#include "mi.h"
-#include "mistruct.h"
-#include "dix.h"
-#include "cfbmskbits.h"
-#include "mibstore.h"
-
-#if 1 || PSZ==8
-DevPrivateKey cfbGCPrivateKey = &cfbGCPrivateKey;
-#endif
-#ifdef CFB_NEED_SCREEN_PRIVATE
-DevPrivateKey cfbScreenPrivateKey = &cfbScreenPrivateKey;
-#endif
-
-
-Bool
-cfbAllocatePrivates(ScreenPtr pScreen, DevPrivateKey *gc_key)
-{
- if (!gc_key || !*gc_key)
- {
- if (!mfbAllocatePrivates(pScreen, &cfbGCPrivateKey))
- return FALSE;
- if (gc_key)
- *gc_key = cfbGCPrivateKey;
- }
- else
- {
- cfbGCPrivateKey = *gc_key;
- }
- return dixRequestPrivate(cfbGCPrivateKey, sizeof(cfbPrivGC));
-}
diff --git a/cfb/cfbbitblt.c b/cfb/cfbbitblt.c
deleted file mode 100644
index 00bf41367..000000000
--- a/cfb/cfbbitblt.c
+++ /dev/null
@@ -1,1455 +0,0 @@
-/*
- * cfb copy area
- */
-
-
-/*
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-Author: Keith Packard
-
-*/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <stdlib.h>
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <X11/Xproto.h>
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mi.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "cfb8bit.h"
-#include "fastblt.h"
-#define MFB_CONSTS_ONLY
-#include "maskbits.h"
-
-#if PSZ == 8
-#define cfbCopyPlane1toN cfbCopyPlane1to8
-#define cfbCopyPlaneNto1 cfbCopyPlane8to1
-#else
-static unsigned int FgPixel, BgPixel;
-# if PSZ == 16
-#define cfbCopyPlane1toN cfbCopyPlane1to16
-#define cfbCopyPlaneNto1 cfbCopyPlane16to1
-# endif
-# if PSZ == 24
-#define cfbCopyPlane1toN cfbCopyPlane1to24
-#define cfbCopyPlaneNto1 cfbCopyPlane24to1
-# endif
-# if PSZ == 32
-#define cfbCopyPlane1toN cfbCopyPlane1to32
-#define cfbCopyPlaneNto1 cfbCopyPlane32to1
-# endif
-#endif
-
-/* cfbBitBltcfb == cfbCopyPlaneExpand */
-RegionPtr
-cfbBitBlt (
- register DrawablePtr pSrcDrawable,
- register DrawablePtr pDstDrawable,
- GC *pGC,
- int srcx, int srcy,
- int width, int height,
- int dstx, int dsty,
- void (*doBitBlt)(
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/),
- unsigned long bitPlane)
-{
- RegionPtr prgnSrcClip = NULL; /* may be a new region, or just a copy */
- Bool freeSrcClip = FALSE;
-
- RegionPtr prgnExposed;
- RegionRec rgnDst;
- DDXPointPtr pptSrc;
- register DDXPointPtr ppt;
- register BoxPtr pbox;
- int i;
- register int dx;
- register int dy;
- xRectangle origSource;
- DDXPointRec origDest;
- int numRects;
- BoxRec fastBox;
- int fastClip = 0; /* for fast clipping with pixmap source */
- int fastExpose = 0; /* for fast exposures with pixmap source */
-
- origSource.x = srcx;
- origSource.y = srcy;
- origSource.width = width;
- origSource.height = height;
- origDest.x = dstx;
- origDest.y = dsty;
-
- if ((pSrcDrawable != pDstDrawable) &&
- pSrcDrawable->pScreen->SourceValidate)
- {
- (*pSrcDrawable->pScreen->SourceValidate) (pSrcDrawable, srcx, srcy, width, height);
- }
-
- srcx += pSrcDrawable->x;
- srcy += pSrcDrawable->y;
-
- /* clip the source */
-
- if (pSrcDrawable->type == DRAWABLE_PIXMAP)
- {
- if ((pSrcDrawable == pDstDrawable) &&
- (pGC->clientClipType == CT_NONE))
- {
- prgnSrcClip = cfbGetCompositeClip(pGC);
- }
- else
- {
- fastClip = 1;
- }
- }
- else
- {
- if (pGC->subWindowMode == IncludeInferiors)
- {
- /*
- * XFree86 DDX empties the border clip when the
- * VT is inactive
- */
- if (!((WindowPtr) pSrcDrawable)->parent &&
- REGION_NOTEMPTY (pSrcDrawable->pScreen,
- &((WindowPtr) pSrcDrawable)->borderClip))
- {
- /*
- * special case bitblt from root window in
- * IncludeInferiors mode; just like from a pixmap
- */
- fastClip = 1;
- }
- else if ((pSrcDrawable == pDstDrawable) &&
- (pGC->clientClipType == CT_NONE))
- {
- prgnSrcClip = cfbGetCompositeClip(pGC);
- }
- else
- {
- prgnSrcClip = NotClippedByChildren((WindowPtr)pSrcDrawable);
- freeSrcClip = TRUE;
- }
- }
- else
- {
- prgnSrcClip = &((WindowPtr)pSrcDrawable)->clipList;
- }
- }
-
- fastBox.x1 = srcx;
- fastBox.y1 = srcy;
- fastBox.x2 = srcx + width;
- fastBox.y2 = srcy + height;
-
- /* Don't create a source region if we are doing a fast clip */
- if (fastClip)
- {
- fastExpose = 1;
- /*
- * clip the source; if regions extend beyond the source size,
- * make sure exposure events get sent
- */
- if (fastBox.x1 < pSrcDrawable->x)
- {
- fastBox.x1 = pSrcDrawable->x;
- fastExpose = 0;
- }
- if (fastBox.y1 < pSrcDrawable->y)
- {
- fastBox.y1 = pSrcDrawable->y;
- fastExpose = 0;
- }
- if (fastBox.x2 > pSrcDrawable->x + (int) pSrcDrawable->width)
- {
- fastBox.x2 = pSrcDrawable->x + (int) pSrcDrawable->width;
- fastExpose = 0;
- }
- if (fastBox.y2 > pSrcDrawable->y + (int) pSrcDrawable->height)
- {
- fastBox.y2 = pSrcDrawable->y + (int) pSrcDrawable->height;
- fastExpose = 0;
- }
- }
- else
- {
- REGION_INIT(pGC->pScreen, &rgnDst, &fastBox, 1);
- REGION_INTERSECT(pGC->pScreen, &rgnDst, &rgnDst, prgnSrcClip);
- }
-
- dstx += pDstDrawable->x;
- dsty += pDstDrawable->y;
-
- if (pDstDrawable->type == DRAWABLE_WINDOW)
- {
- if (!((WindowPtr)pDstDrawable)->realized)
- {
- if (!fastClip)
- REGION_UNINIT(pGC->pScreen, &rgnDst);
- if (freeSrcClip)
- REGION_DESTROY(pGC->pScreen, prgnSrcClip);
- return NULL;
- }
- }
-
- dx = srcx - dstx;
- dy = srcy - dsty;
-
- /* Translate and clip the dst to the destination composite clip */
- if (fastClip)
- {
- RegionPtr cclip;
-
- /* Translate the region directly */
- fastBox.x1 -= dx;
- fastBox.x2 -= dx;
- fastBox.y1 -= dy;
- fastBox.y2 -= dy;
-
- /* If the destination composite clip is one rectangle we can
- do the clip directly. Otherwise we have to create a full
- blown region and call intersect */
-
- /* XXX because CopyPlane uses this routine for 8-to-1 bit
- * copies, this next line *must* also correctly fetch the
- * composite clip from an mfb gc
- */
-
- cclip = cfbGetCompositeClip(pGC);
- if (REGION_NUM_RECTS(cclip) == 1)
- {
- BoxPtr pBox = REGION_RECTS(cclip);
-
- if (fastBox.x1 < pBox->x1) fastBox.x1 = pBox->x1;
- if (fastBox.x2 > pBox->x2) fastBox.x2 = pBox->x2;
- if (fastBox.y1 < pBox->y1) fastBox.y1 = pBox->y1;
- if (fastBox.y2 > pBox->y2) fastBox.y2 = pBox->y2;
-
- /* Check to see if the region is empty */
- if (fastBox.x1 >= fastBox.x2 || fastBox.y1 >= fastBox.y2)
- {
- REGION_NULL(pGC->pScreen, &rgnDst);
- }
- else
- {
- REGION_INIT(pGC->pScreen, &rgnDst, &fastBox, 1);
- }
- }
- else
- {
- /* We must turn off fastClip now, since we must create
- a full blown region. It is intersected with the
- composite clip below. */
- fastClip = 0;
- REGION_INIT(pGC->pScreen, &rgnDst, &fastBox,1);
- }
- }
- else
- {
- REGION_TRANSLATE(pGC->pScreen, &rgnDst, -dx, -dy);
- }
-
- if (!fastClip)
- {
- REGION_INTERSECT(pGC->pScreen, &rgnDst,
- &rgnDst,
- cfbGetCompositeClip(pGC));
- }
-
- /* Do bit blitting */
- numRects = REGION_NUM_RECTS(&rgnDst);
- if (numRects && width && height)
- {
- if(!(pptSrc = (DDXPointPtr)xalloc(numRects *
- sizeof(DDXPointRec))))
- {
- REGION_UNINIT(pGC->pScreen, &rgnDst);
- if (freeSrcClip)
- REGION_DESTROY(pGC->pScreen, prgnSrcClip);
- return NULL;
- }
- pbox = REGION_RECTS(&rgnDst);
- ppt = pptSrc;
- for (i = numRects; --i >= 0; pbox++, ppt++)
- {
- ppt->x = pbox->x1 + dx;
- ppt->y = pbox->y1 + dy;
- }
-
- (*doBitBlt) (pSrcDrawable, pDstDrawable, pGC->alu, &rgnDst, pptSrc, pGC->planemask);
- xfree(pptSrc);
- }
-
- prgnExposed = NULL;
- if (pGC->fExpose)
- {
- /* Pixmap sources generate a NoExposed (we return NULL to do this) */
- if (!fastExpose)
- prgnExposed =
- miHandleExposures(pSrcDrawable, pDstDrawable, pGC,
- origSource.x, origSource.y,
- (int)origSource.width,
- (int)origSource.height,
- origDest.x, origDest.y, bitPlane);
- }
- REGION_UNINIT(pGC->pScreen, &rgnDst);
- if (freeSrcClip)
- REGION_DESTROY(pGC->pScreen, prgnSrcClip);
- return prgnExposed;
-}
-
-
-RegionPtr
-cfbCopyPlaneReduce (
- register DrawablePtr pSrcDrawable,
- register DrawablePtr pDstDrawable,
- GC *pGC,
- int srcx, int srcy,
- int width, int height,
- int dstx, int dsty,
- void (*doCopyPlane)(
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/,
- unsigned long /*bitPlane*/),
- unsigned long bitPlane)
-{
- RegionPtr prgnSrcClip = NULL; /* may be a new region, or just a copy */
- Bool freeSrcClip = FALSE;
-
- RegionPtr prgnExposed;
- RegionRec rgnDst;
- DDXPointPtr pptSrc;
- register DDXPointPtr ppt;
- register BoxPtr pbox;
- int i;
- register int dx;
- register int dy;
- xRectangle origSource;
- DDXPointRec origDest;
- int numRects;
- BoxRec fastBox;
- int fastClip = 0; /* for fast clipping with pixmap source */
- int fastExpose = 0; /* for fast exposures with pixmap source */
-
- origSource.x = srcx;
- origSource.y = srcy;
- origSource.width = width;
- origSource.height = height;
- origDest.x = dstx;
- origDest.y = dsty;
-
- if ((pSrcDrawable != pDstDrawable) &&
- pSrcDrawable->pScreen->SourceValidate)
- {
- (*pSrcDrawable->pScreen->SourceValidate) (pSrcDrawable, srcx, srcy, width, height);
- }
-
- srcx += pSrcDrawable->x;
- srcy += pSrcDrawable->y;
-
- /* clip the source */
-
- if (pSrcDrawable->type == DRAWABLE_PIXMAP)
- {
- if ((pSrcDrawable == pDstDrawable) &&
- (pGC->clientClipType == CT_NONE))
- {
- prgnSrcClip = cfbGetCompositeClip(pGC);
- }
- else
- {
- fastClip = 1;
- }
- }
- else
- {
- if (pGC->subWindowMode == IncludeInferiors)
- {
- /*
- * XFree86 DDX empties the border clip when the
- * VT is inactive
- */
- if (!((WindowPtr) pSrcDrawable)->parent &&
- REGION_NOTEMPTY (pSrcDrawable->pScreen,
- &((WindowPtr) pSrcDrawable)->borderClip))
- {
- /*
- * special case bitblt from root window in
- * IncludeInferiors mode; just like from a pixmap
- */
- fastClip = 1;
- }
- else if ((pSrcDrawable == pDstDrawable) &&
- (pGC->clientClipType == CT_NONE))
- {
- prgnSrcClip = cfbGetCompositeClip(pGC);
- }
- else
- {
- prgnSrcClip = NotClippedByChildren((WindowPtr)pSrcDrawable);
- freeSrcClip = TRUE;
- }
- }
- else
- {
- prgnSrcClip = &((WindowPtr)pSrcDrawable)->clipList;
- }
- }
-
- fastBox.x1 = srcx;
- fastBox.y1 = srcy;
- fastBox.x2 = srcx + width;
- fastBox.y2 = srcy + height;
-
- /* Don't create a source region if we are doing a fast clip */
- if (fastClip)
- {
- fastExpose = 1;
- /*
- * clip the source; if regions extend beyond the source size,
- * make sure exposure events get sent
- */
- if (fastBox.x1 < pSrcDrawable->x)
- {
- fastBox.x1 = pSrcDrawable->x;
- fastExpose = 0;
- }
- if (fastBox.y1 < pSrcDrawable->y)
- {
- fastBox.y1 = pSrcDrawable->y;
- fastExpose = 0;
- }
- if (fastBox.x2 > pSrcDrawable->x + (int) pSrcDrawable->width)
- {
- fastBox.x2 = pSrcDrawable->x + (int) pSrcDrawable->width;
- fastExpose = 0;
- }
- if (fastBox.y2 > pSrcDrawable->y + (int) pSrcDrawable->height)
- {
- fastBox.y2 = pSrcDrawable->y + (int) pSrcDrawable->height;
- fastExpose = 0;
- }
- }
- else
- {
- REGION_INIT(pGC->pScreen, &rgnDst, &fastBox, 1);
- REGION_INTERSECT(pGC->pScreen, &rgnDst, &rgnDst, prgnSrcClip);
- }
-
- dstx += pDstDrawable->x;
- dsty += pDstDrawable->y;
-
- if (pDstDrawable->type == DRAWABLE_WINDOW)
- {
- if (!((WindowPtr)pDstDrawable)->realized)
- {
- if (!fastClip)
- REGION_UNINIT(pGC->pScreen, &rgnDst);
- if (freeSrcClip)
- REGION_DESTROY(pGC->pScreen, prgnSrcClip);
- return NULL;
- }
- }
-
- dx = srcx - dstx;
- dy = srcy - dsty;
-
- /* Translate and clip the dst to the destination composite clip */
- if (fastClip)
- {
- RegionPtr cclip;
-
- /* Translate the region directly */
- fastBox.x1 -= dx;
- fastBox.x2 -= dx;
- fastBox.y1 -= dy;
- fastBox.y2 -= dy;
-
- /* If the destination composite clip is one rectangle we can
- do the clip directly. Otherwise we have to create a full
- blown region and call intersect */
-
- /* XXX because CopyPlane uses this routine for 8-to-1 bit
- * copies, this next line *must* also correctly fetch the
- * composite clip from an mfb gc
- */
-
- cclip = cfbGetCompositeClip(pGC);
- if (REGION_NUM_RECTS(cclip) == 1)
- {
- BoxPtr pBox = REGION_RECTS(cclip);
-
- if (fastBox.x1 < pBox->x1) fastBox.x1 = pBox->x1;
- if (fastBox.x2 > pBox->x2) fastBox.x2 = pBox->x2;
- if (fastBox.y1 < pBox->y1) fastBox.y1 = pBox->y1;
- if (fastBox.y2 > pBox->y2) fastBox.y2 = pBox->y2;
-
- /* Check to see if the region is empty */
- if (fastBox.x1 >= fastBox.x2 || fastBox.y1 >= fastBox.y2)
- {
- REGION_NULL(pGC->pScreen, &rgnDst);
- }
- else
- {
- REGION_INIT(pGC->pScreen, &rgnDst, &fastBox, 1);
- }
- }
- else
- {
- /* We must turn off fastClip now, since we must create
- a full blown region. It is intersected with the
- composite clip below. */
- fastClip = 0;
- REGION_INIT(pGC->pScreen, &rgnDst, &fastBox, 1);
- }
- }
- else
- {
- REGION_TRANSLATE(pGC->pScreen, &rgnDst, -dx, -dy);
- }
-
- if (!fastClip)
- {
- REGION_INTERSECT(pGC->pScreen, &rgnDst,
- &rgnDst,
- cfbGetCompositeClip(pGC));
- }
-
- /* Do bit blitting */
- numRects = REGION_NUM_RECTS(&rgnDst);
- if (numRects && width && height)
- {
- if(!(pptSrc = (DDXPointPtr)xalloc(numRects *
- sizeof(DDXPointRec))))
- {
- REGION_UNINIT(pGC->pScreen, &rgnDst);
- if (freeSrcClip)
- REGION_DESTROY(pGC->pScreen, prgnSrcClip);
- return NULL;
- }
- pbox = REGION_RECTS(&rgnDst);
- ppt = pptSrc;
- for (i = numRects; --i >= 0; pbox++, ppt++)
- {
- ppt->x = pbox->x1 + dx;
- ppt->y = pbox->y1 + dy;
- }
-
- (*doCopyPlane) (pSrcDrawable, pDstDrawable, pGC->alu, &rgnDst, pptSrc, pGC->planemask, bitPlane);
- xfree(pptSrc);
- }
-
- prgnExposed = NULL;
- if (pGC->fExpose)
- {
- /* Pixmap sources generate a NoExposed (we return NULL to do this) */
- if (!fastExpose)
- prgnExposed =
- miHandleExposures(pSrcDrawable, pDstDrawable, pGC,
- origSource.x, origSource.y,
- (int)origSource.width,
- (int)origSource.height,
- origDest.x, origDest.y, bitPlane);
- }
- REGION_UNINIT(pGC->pScreen, &rgnDst);
- if (freeSrcClip)
- REGION_DESTROY(pGC->pScreen, prgnSrcClip);
- return prgnExposed;
-}
-
-
-void
-cfbDoBitblt (pSrc, pDst, alu, prgnDst, pptSrc, planemask)
- DrawablePtr pSrc, pDst;
- int alu;
- RegionPtr prgnDst;
- DDXPointPtr pptSrc;
- unsigned long planemask;
-{
- void (*doBitBlt)(
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/)
- = cfbDoBitbltGeneral;
-
- if ((planemask & PMSK) == PMSK) {
- switch (alu) {
- case GXcopy:
- doBitBlt = cfbDoBitbltCopy;
- break;
- case GXxor:
- doBitBlt = cfbDoBitbltXor;
- break;
- case GXor:
- doBitBlt = cfbDoBitbltOr;
- break;
- }
- }
- (*doBitBlt) (pSrc, pDst, alu, prgnDst, pptSrc, planemask);
-}
-
-RegionPtr
-cfbCopyArea(pSrcDrawable, pDstDrawable,
- pGC, srcx, srcy, width, height, dstx, dsty)
- register DrawablePtr pSrcDrawable;
- register DrawablePtr pDstDrawable;
- GC *pGC;
- int srcx, srcy;
- int width, height;
- int dstx, dsty;
-{
- void (*doBitBlt) (
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/);
-
- doBitBlt = cfbDoBitbltCopy;
- if (pGC->alu != GXcopy || (pGC->planemask & PMSK) != PMSK)
- {
- doBitBlt = cfbDoBitbltGeneral;
- if ((pGC->planemask & PMSK) == PMSK)
- {
- switch (pGC->alu) {
- case GXxor:
- doBitBlt = cfbDoBitbltXor;
- break;
- case GXor:
- doBitBlt = cfbDoBitbltOr;
- break;
- }
- }
- }
- return cfbBitBlt (pSrcDrawable, pDstDrawable,
- pGC, srcx, srcy, width, height, dstx, dsty, doBitBlt, 0L);
-}
-
-#if PSZ == 8
-void
-cfbCopyPlane1to8 (pSrcDrawable, pDstDrawable, rop, prgnDst, pptSrc, planemask)
- DrawablePtr pSrcDrawable; /* must be a bitmap */
- DrawablePtr pDstDrawable; /* must be depth 8 drawable */
- int rop; /* not used; caller must call cfb8CheckOpaqueStipple
- * beforehand to get cfb8StippleRRop set correctly */
- RegionPtr prgnDst; /* region in destination to draw to;
- * screen relative coords. if dest is a window;
- * drawable relative if dest is a pixmap */
- DDXPointPtr pptSrc; /* drawable relative src coords to copy from;
- * must be one point for each box in prgnDst */
- unsigned long planemask; /* to apply to destination writes */
-{
- int srcx, srcy; /* upper left corner of box being copied in source */
- int dstx, dsty; /* upper left corner of box being copied in dest */
- int width, height; /* in pixels, unpadded, of box being copied */
- int xoffSrc; /* bit # in leftmost word of row from which copying starts */
- int xoffDst; /* byte # in leftmost word of row from which copying starts */
- CfbBits *psrcBase, *pdstBase; /* start of drawable's pixel data */
- int widthSrc; /* # of groups of 32 pixels (1 bit/pixel) in src bitmap*/
- int widthDst; /* # of groups of 4 pixels (8 bits/pixel) in dst */
- CfbBits *psrcLine, *pdstLine; /* steps a row at a time thru src/dst;
- * may point into middle of row */
- register CfbBits *psrc, *pdst; /* steps within the row */
- register CfbBits bits, tmp; /* bits from source */
- register int leftShift;
- register int rightShift;
- CfbBits startmask; /* left edge pixel mask */
- CfbBits endmask; /* right edge pixel mask */
- register int nlMiddle; /* number of words in middle of the row to draw */
- register int nl;
- int firstoff = 0;
- int secondoff = 0;
- CfbBits src;
- int nbox; /* number of boxes in region to copy */
- BoxPtr pbox; /* steps thru boxes in region */
- int pixelsRemainingOnRightEdge; /* # pixels to be drawn on a row after
- * the main "middle" loop */
-
- cfbGetLongWidthAndPointer (pSrcDrawable, widthSrc, psrcBase)
- cfbGetLongWidthAndPointer (pDstDrawable, widthDst, pdstBase)
-
- nbox = REGION_NUM_RECTS(prgnDst);
- pbox = REGION_RECTS(prgnDst);
- while (nbox--)
- {
- dstx = pbox->x1;
- dsty = pbox->y1;
- srcx = pptSrc->x;
- srcy = pptSrc->y;
- width = pbox->x2 - pbox->x1;
- height = pbox->y2 - pbox->y1;
- pbox++;
- pptSrc++;
-
- psrcLine = psrcBase + srcy * widthSrc + (srcx >> MFB_PWSH);
- pdstLine = pdstBase + dsty * widthDst + (dstx >> PWSH);
- xoffSrc = srcx & MFB_PIM; /* finds starting bit in src */
- xoffDst = dstx & PIM; /* finds starting byte in dst */
-
- /* compute startmask, endmask, nlMiddle */
-
- if (xoffDst + width < PPW) /* XXX should this be '<= PPW' ? */
- { /* the copy only affects one word per row in destination */
- maskpartialbits(dstx, width, startmask);
- endmask = 0; /* nothing on right edge */
- nlMiddle = 0; /* nothing in middle */
- }
- else
- { /* the copy will affect multiple words per row in destination */
- maskbits(dstx, width, startmask, endmask, nlMiddle);
- }
-
- /*
- * compute constants for the first four bits to be
- * copied. This avoids troubles with partial first
- * writes, and difficult shift computation
- */
- if (startmask)
- {
- firstoff = xoffSrc - xoffDst;
- if (firstoff > (MFB_PPW-PPW))
- secondoff = MFB_PPW - firstoff;
- if (xoffDst)
- {
- srcx += (PPW-xoffDst);
- xoffSrc = srcx & MFB_PIM;
- }
- }
- leftShift = xoffSrc;
- rightShift = MFB_PPW - leftShift;
-
- pixelsRemainingOnRightEdge = (nlMiddle & 7) * PPW +
- ((dstx + width) & PIM);
-
- /* setup is done; now let's move some bits */
-
- /* caller must call cfb8CheckOpaqueStipple before this function
- * to set cfb8StippleRRop!
- */
-
- if (cfb8StippleRRop == GXcopy)
- {
- while (height--)
- { /* one iteration of this loop copies one row */
- psrc = psrcLine;
- pdst = pdstLine;
- psrcLine += widthSrc;
- pdstLine += widthDst;
- bits = *psrc++;
- if (startmask)
- {
- if (firstoff < 0)
- tmp = BitRight (bits, -firstoff);
- else
- {
- tmp = BitLeft (bits, firstoff);
- /*
- * need a more cautious test for partialmask
- * case...
- */
- if (firstoff >= (MFB_PPW-PPW))
- {
- bits = *psrc++;
- if (firstoff != (MFB_PPW-PPW))
- tmp |= BitRight (bits, secondoff);
- }
- }
- *pdst = (*pdst & ~startmask) | (GetPixelGroup(tmp) & startmask);
- pdst++;
- }
- nl = nlMiddle;
- while (nl >= 8)
- {
- nl -= 8;
- tmp = BitLeft(bits, leftShift);
- bits = *psrc++;
- if (rightShift != MFB_PPW)
- tmp |= BitRight(bits, rightShift);
-
-#ifdef FAST_CONSTANT_OFFSET_MODE
-# define StorePixels(pdst,o,pixels) (pdst)[o] = (pixels)
-# define EndStep(pdst,o) (pdst) += (o)
-# define StoreRopPixels(pdst,o,and,xor) (pdst)[o] = DoRRop((pdst)[o],and,xor);
-#else
-# define StorePixels(pdst,o,pixels) *(pdst)++ = (pixels)
-# define EndStep(pdst,o)
-# define StoreRopPixels(pdst,o,and,xor) *(pdst) = DoRRop(*(pdst),and,xor); (pdst)++;
-#endif
-
-#define Step(c) NextBitGroup(c);
-#define StoreBitsPlain(o,c) StorePixels(pdst,o,GetPixelGroup(c))
-#define StoreRopBitsPlain(o,c) StoreRopPixels(pdst,o,\
- cfb8StippleAnd[GetBitGroup(c)], \
- cfb8StippleXor[GetBitGroup(c)])
-#define StoreBits0(c) StoreBitsPlain(0,c)
-#define StoreRopBits0(c) StoreRopBitsPlain(0,c)
-
-#if (BITMAP_BIT_ORDER == MSBFirst)
-# define StoreBits(o,c) StoreBitsPlain(o,c)
-# define StoreRopBits(o,c) StoreRopBitsPlain(o,c)
-# define FirstStep(c) Step(c)
-#else /* BITMAP_BIT_ORDER == LSBFirst */
-#if PGSZ == 64
-# define StoreBits(o,c) StorePixels(pdst,o, (cfb8Pixels[c & 0xff]))
-# define StoreRopBits(o,c) StoreRopPixels(pdst,o, \
- (cfb8StippleAnd[c & 0xff]), \
- (cfb8StippleXor[c & 0xff]))
-# define FirstStep(c) c = BitLeft (c, 8);
-#else
-/* 0x3c is 0xf << 2 (4 bits, long word) */
-# define StoreBits(o,c) StorePixels(pdst,o,*((CfbBits *)\
- (((char *) cfb8Pixels) + (c & 0x3c))))
-# define StoreRopBits(o,c) StoreRopPixels(pdst,o, \
- *((CfbBits *) (((char *) cfb8StippleAnd) + (c & 0x3c))), \
- *((CfbBits *) (((char *) cfb8StippleXor) + (c & 0x3c))))
-# define FirstStep(c) c = BitLeft (c, 2);
-#endif /* PGSZ */
-#endif /* BITMAP_BIT_ORDER */
-
- StoreBits0(tmp); FirstStep(tmp);
- StoreBits(1,tmp); Step(tmp);
- StoreBits(2,tmp); Step(tmp);
- StoreBits(3,tmp); Step(tmp);
- StoreBits(4,tmp); Step(tmp);
- StoreBits(5,tmp); Step(tmp);
- StoreBits(6,tmp); Step(tmp);
- StoreBits(7,tmp); EndStep (pdst,8);
- }
-
- /* do rest of middle and partial word on right edge */
-
- if (pixelsRemainingOnRightEdge)
- {
- tmp = BitLeft(bits, leftShift);
-
- if (pixelsRemainingOnRightEdge > rightShift)
- {
- bits = *psrc++;
- tmp |= BitRight (bits, rightShift);
- }
- EndStep (pdst, nl);
- switch (nl)
- {
- case 7:
- StoreBitsPlain(-7,tmp); Step(tmp);
- case 6:
- StoreBitsPlain(-6,tmp); Step(tmp);
- case 5:
- StoreBitsPlain(-5,tmp); Step(tmp);
- case 4:
- StoreBitsPlain(-4,tmp); Step(tmp);
- case 3:
- StoreBitsPlain(-3,tmp); Step(tmp);
- case 2:
- StoreBitsPlain(-2,tmp); Step(tmp);
- case 1:
- StoreBitsPlain(-1,tmp); Step(tmp);
- }
- if (endmask)
- *pdst = (*pdst & ~endmask) | (GetPixelGroup(tmp) & endmask);
- }
- }
- }
- else /* cfb8StippleRRop != GXcopy */
- {
- while (height--)
- { /* one iteration of this loop copies one row */
- psrc = psrcLine;
- pdst = pdstLine;
- psrcLine += widthSrc;
- pdstLine += widthDst;
- bits = *psrc++;
-
- /* do partial word on left edge */
-
- if (startmask)
- {
- if (firstoff < 0)
- tmp = BitRight (bits, -firstoff);
- else
- {
- tmp = BitLeft (bits, firstoff);
- if (firstoff >= (MFB_PPW-PPW))
- {
- bits = *psrc++;
- if (firstoff != (MFB_PPW-PPW))
- tmp |= BitRight (bits, secondoff);
- }
- }
- src = GetBitGroup(tmp);
- *pdst = MaskRRopPixels (*pdst, src, startmask);
- pdst++;
- }
-
- /* do middle of row */
-
- nl = nlMiddle;
- while (nl >= 8)
- {
- nl -= 8;
- tmp = BitLeft(bits, leftShift);
- bits = *psrc++;
- if (rightShift != MFB_PPW)
- tmp |= BitRight(bits, rightShift);
- StoreRopBits0(tmp); FirstStep(tmp);
- StoreRopBits(1,tmp); Step(tmp);
- StoreRopBits(2,tmp); Step(tmp);
- StoreRopBits(3,tmp); Step(tmp);
- StoreRopBits(4,tmp); Step(tmp);
- StoreRopBits(5,tmp); Step(tmp);
- StoreRopBits(6,tmp); Step(tmp);
- StoreRopBits(7,tmp); EndStep(pdst,8);
- }
-
- /* do rest of middle and partial word on right edge */
-
- if (pixelsRemainingOnRightEdge)
- {
- tmp = BitLeft(bits, leftShift);
-
- if (pixelsRemainingOnRightEdge > rightShift)
- {
- bits = *psrc++; /* XXX purify abr here */
- tmp |= BitRight (bits, rightShift);
- }
- while (nl--)
- {
- src = GetBitGroup (tmp);
- *pdst = RRopPixels (*pdst, src);
- pdst++;
- NextBitGroup(tmp);
- }
- if (endmask)
- {
- src = GetBitGroup (tmp);
- *pdst = MaskRRopPixels (*pdst, src, endmask);
- }
- }
- } /* end copy one row */
- } /* end alu is non-copy-mode case */
- } /* end iteration over region boxes */
-}
-
-#else /* PSZ == 8 */
-
-#define mfbmaskbits(x, w, startmask, endmask, nlw) \
- startmask = mfbGetstarttab((x)&0x1f); \
- endmask = mfbGetendtab(((x)+(w)) & 0x1f); \
- if (startmask) \
- nlw = (((w) - (32 - ((x)&0x1f))) >> 5); \
- else \
- nlw = (w) >> 5;
-
-#define mfbmaskpartialbits(x, w, mask) \
- mask = mfbGetpartmasks((x)&0x1f,(w)&0x1f);
-
-#define LeftMost 0
-#define StepBit(bit, inc) ((bit) += (inc))
-
-
-#define GetBits(psrc, nBits, curBit, bitPos, bits) {\
- bits = 0; \
- while (nBits--) \
- { \
- bits |= ((*psrc++ >> bitPos) & 1) << curBit; \
- StepBit (curBit, 1); \
- } \
-}
-
-/******************************************************************/
-
-static void
-#if PSZ == 16
-cfbCopyPlane1to16
-#endif
-#if PSZ == 24
-cfbCopyPlane1to24
-#endif
-#if PSZ == 32
-cfbCopyPlane1to32
-#endif
-(
- DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- int rop,
- RegionPtr prgnDst,
- DDXPointPtr pptSrc,
- unsigned long planemask)
-{
- int srcx, srcy, dstx, dsty;
- int width, height;
- int xoffSrc;
- CfbBits *psrcBase, *pdstBase;
- int widthSrc, widthDst;
- unsigned int *psrcLine;
- register unsigned int *psrc;
-#if PSZ == 16
- unsigned short *pdstLine;
- register unsigned short *pdst;
-#endif
-#if PSZ == 32
- unsigned int *pdstLine;
- register unsigned int *pdst;
-#endif
-#if PSZ == 24
- unsigned char *pdstLine;
- register unsigned char *pdst;
-#endif
- register unsigned int bits, tmp;
- register unsigned int fgpixel, bgpixel;
- register unsigned int src;
-#if PSZ == 24
- register unsigned int dst;
-#endif
- register int leftShift, rightShift;
- register int i, nl;
- int nbox;
- BoxPtr pbox;
- int result;
-
-#if PSZ == 16
- unsigned int doublet[4]; /* Pixel values for 16bpp expansion. */
-#endif
-#if PSZ == 32
- unsigned int doublet[8]; /* Pixel values for 32bpp expansion */
-#endif
-
- fgpixel = FgPixel & planemask;
- bgpixel = BgPixel & planemask;
-
-#if PSZ == 16
- if (rop == GXcopy && (planemask & PMSK) == PMSK) {
- doublet[0] = bgpixel | (bgpixel << 16);
- doublet[1] = fgpixel | (bgpixel << 16);
- doublet[2] = bgpixel | (fgpixel << 16);
- doublet[3] = fgpixel | (fgpixel << 16);
- }
-#endif
-#if PSZ == 32
- if (rop == GXcopy && (planemask & PMSK) == PMSK) {
- doublet[0] = bgpixel; doublet[1] = bgpixel;
- doublet[2] = fgpixel; doublet[3] = bgpixel;
- doublet[4] = bgpixel; doublet[5] = fgpixel;
- doublet[6] = fgpixel; doublet[7] = fgpixel;
- }
-#endif
-
- /* must explicitly ask for "int" widths, as code below expects it */
- /* on some machines (Alpha), "long" and "int" are not the same size */
- cfbGetTypedWidthAndPointer (pSrcDrawable, widthSrc, psrcBase, int, CfbBits)
- cfbGetTypedWidthAndPointer (pDstDrawable, widthDst, pdstBase, int, CfbBits)
-
-#if PSZ == 16
- widthDst <<= 1;
-#endif
-#if PSZ == 24
- widthDst <<= 2;
-#endif
-
- nbox = REGION_NUM_RECTS(prgnDst);
- pbox = REGION_RECTS(prgnDst);
-
- while (nbox--)
- {
- dstx = pbox->x1;
- dsty = pbox->y1;
- srcx = pptSrc->x;
- srcy = pptSrc->y;
- width = pbox->x2 - pbox->x1;
- height = pbox->y2 - pbox->y1;
- pbox++;
- pptSrc++;
- psrcLine = (unsigned int *)psrcBase + srcy * widthSrc + (srcx >> 5);
-#if PSZ == 16
- pdstLine = (unsigned short *)pdstBase + dsty * widthDst + dstx;
-#endif
-#if PSZ == 24
- pdstLine = (unsigned char *)pdstBase + dsty * widthDst + dstx * 3;
-#endif
-#if PSZ == 32
- pdstLine = (unsigned int *)pdstBase + dsty * widthDst + dstx;
-#endif
- xoffSrc = srcx & 0x1f;
-
- /*
- * compute constants for the first four bits to be
- * copied. This avoids troubles with partial first
- * writes, and difficult shift computation
- */
- leftShift = xoffSrc;
- rightShift = 32 - leftShift;
-
- if (rop == GXcopy && (planemask & PMSK) == PMSK)
- {
- while (height--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- psrcLine += widthSrc;
- pdstLine += widthDst;
- bits = *psrc++;
- nl = width;
- while (nl >= 32)
- {
- tmp = BitLeft(bits, leftShift);
- bits = *psrc++;
- if (rightShift != 32)
- tmp |= BitRight(bits, rightShift);
- i = 0;
-#if PSZ == 16
- /*
- * I've thrown in some optimization to at least write
- * some aligned 32-bit words instead of 16-bit shorts.
- */
- if ((unsigned long)psrc & 2) {
- /* Write unaligned 16-bit word at left edge. */
- if (tmp & 0x01)
- *pdst = fgpixel;
- else
- *pdst = bgpixel;
- pdst++;
- i++;
- }
- while (i <= 24)
- {
- unsigned tmpbits = tmp >> i;
- *(unsigned int *)pdst = doublet[tmpbits & 0x03];
- *(unsigned int *)(pdst + 2) =
- doublet[(tmpbits >> 2) & 0x03];
- *(unsigned int *)(pdst + 4) =
- doublet[(tmpbits >> 4) & 0x03];
- *(unsigned int *)(pdst + 6) =
- doublet[(tmpbits >> 6) & 0x03];
- pdst += 8; /* Advance four 32-bit words. */
- i += 8;
- }
- while (i <= 30)
- {
- *(unsigned int *)pdst =
- doublet[(tmp >> i) & 0x03];
- pdst += 2; /* Advance one 32-bit word. */
- i += 2;
- }
- if (i == 31) {
- if ((tmp >> 31) & 0x01)
- *pdst = fgpixel;
- else
- *pdst = bgpixel;
- pdst++;
- }
-#endif
-#if PSZ == 24
- while (i < 32) {
- if ((tmp >> i) & 0x01) {
- *pdst = fgpixel;
- *(pdst + 1) = fgpixel >> 8;
- *(pdst + 2) = fgpixel >> 16;
- }
- else {
- *pdst = bgpixel;
- *(pdst + 1) = bgpixel >> 8;
- *(pdst + 2) = bgpixel >> 16;
- }
- pdst += 3;
- i++;
- }
-#endif
-#if PSZ == 32
- while (i <= 28) {
- int pair;
- pair = (tmp >> i) & 0x03;
- *pdst = doublet[pair * 2];
- *(pdst + 1) = doublet[pair * 2 + 1];
- pair = (tmp >> (i + 2)) & 0x03;
- *(pdst + 2) = doublet[pair * 2];
- *(pdst + 3) = doublet[pair * 2 + 1];
- pdst += 4;
- i += 4;
- }
- while (i < 32) {
- *pdst = ((tmp >> i) & 0x01) ? fgpixel : bgpixel;
- pdst++;
- i++;
- }
-#endif
- nl -= 32;
- }
-
- if (nl)
- {
- tmp = BitLeft(bits, leftShift);
- /*
- * better condition needed -- mustn't run
- * off the end of the source...
- */
- if (rightShift != 32)
- {
- bits = *psrc++;
- tmp |= BitRight (bits, rightShift);
- }
- i = 32;
- while (nl--)
- {
- --i;
-#if PSZ == 24
- if ((tmp >> (31 - i)) & 0x01) {
- *pdst = fgpixel;
- *(pdst + 1) = fgpixel >> 8;
- *(pdst + 2) = fgpixel >> 16;
- }
- else {
- *pdst = bgpixel;
- *(pdst + 1) = bgpixel >> 8;
- *(pdst + 2) = bgpixel >> 16;
- }
- pdst += 3;
-#else
- *pdst = ((tmp >> (31 - i)) & 0x01) ? fgpixel : bgpixel;
- pdst++;
-#endif
- }
- }
- }
- }
- else
- {
- while (height--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- psrcLine += widthSrc;
- pdstLine += widthDst;
- bits = *psrc++;
- nl = width;
- while (nl >= 32)
- {
- tmp = BitLeft(bits, leftShift);
- bits = *psrc++;
- if (rightShift != 32)
- tmp |= BitRight(bits, rightShift);
- i = 32;
- while (i--)
- {
- src = ((tmp >> (31 - i)) & 0x01) ? fgpixel : bgpixel;
-#if PSZ == 24
- dst = *pdst;
- dst |= (*(pdst + 1)) << 8;
- dst |= (*(pdst + 2)) << 16;
- DoRop (result, rop, src, dst);
- *pdst = (dst & ~planemask) |
- (result & planemask);
- *(pdst+1) = ((dst & ~planemask) >> 8) |
- ((result & planemask) >> 8);
- *(pdst+2) = ((dst & ~planemask) >> 16) |
- ((result & planemask) >> 16);
- pdst += 3;
-#else
- DoRop (result, rop, src, *pdst);
-
- *pdst = (*pdst & ~planemask) |
- (result & planemask);
- pdst++;
-#endif
- }
- nl -= 32;
- }
-
- if (nl)
- {
- tmp = BitLeft(bits, leftShift);
- /*
- * better condition needed -- mustn't run
- * off the end of the source...
- */
- if (rightShift != 32)
- {
- bits = *psrc++;
- tmp |= BitRight (bits, rightShift);
- }
- i = 32;
- while (nl--)
- {
- --i;
- src = ((tmp >> (31 - i)) & 0x01) ? fgpixel : bgpixel;
-#if PSZ == 24
- dst = *pdst;
- dst |= (*(pdst + 1)) << 8;
- dst |= (*(pdst + 2)) << 16;
- DoRop (result, rop, src, dst);
- *pdst = (dst & ~planemask) |
- (result & planemask);
- *(pdst+1) = ((dst & ~planemask) >> 8) |
- ((result & planemask) >> 8);
- *(pdst+2) = ((dst & ~planemask) >> 16) |
- ((result & planemask) >> 16);
- pdst += 3;
-#else
- DoRop (result, rop, src, *pdst);
-
- *pdst = (*pdst & ~planemask) |
- (result & planemask);
- pdst++;
-#endif
- }
- }
- }
- }
- }
-}
-
-#endif /* PSZ == 8 */
-
-/* shared among all different cfb depths through linker magic */
-
-RegionPtr cfbCopyPlane(pSrcDrawable, pDstDrawable,
- pGC, srcx, srcy, width, height, dstx, dsty, bitPlane)
- DrawablePtr pSrcDrawable;
- DrawablePtr pDstDrawable;
- GCPtr pGC;
- int srcx, srcy;
- int width, height;
- int dstx, dsty;
- unsigned long bitPlane;
-{
- RegionPtr ret;
-
-#if IMAGE_BYTE_ORDER == LSBFirst
-
- void (*doCopyPlaneExpand)(
- DrawablePtr /*pSrc*/,
- DrawablePtr /*pDst*/,
- int /*alu*/,
- RegionPtr /*prgnDst*/,
- DDXPointPtr /*pptSrc*/,
- unsigned long /*planemask*/);
-
- if (pSrcDrawable->bitsPerPixel == 1 && pDstDrawable->bitsPerPixel == PSZ)
- {
- if (bitPlane == 1)
- {
- doCopyPlaneExpand = cfbCopyPlane1toN;
-#if PSZ == 8
- cfb8CheckOpaqueStipple (pGC->alu,
- pGC->fgPixel, pGC->bgPixel,
- pGC->planemask);
-#else
- FgPixel = pGC->fgPixel;
- BgPixel = pGC->bgPixel;
-#endif
- ret = cfbCopyPlaneExpand (pSrcDrawable, pDstDrawable,
- pGC, srcx, srcy, width, height, dstx, dsty, doCopyPlaneExpand, bitPlane);
- }
- else
- ret = miHandleExposures (pSrcDrawable, pDstDrawable,
- pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
- }
- else if (pSrcDrawable->bitsPerPixel == PSZ && pDstDrawable->bitsPerPixel == 1)
- {
- int oldalu;
-
- oldalu = pGC->alu;
- if ((pGC->fgPixel & 1) == 0 && (pGC->bgPixel&1) == 1)
- pGC->alu = mfbGetInverseAlu(pGC->alu);
- else if ((pGC->fgPixel & 1) == (pGC->bgPixel & 1))
- pGC->alu = mfbReduceRop(pGC->alu, pGC->fgPixel);
- ret = cfbCopyPlaneReduce(pSrcDrawable, pDstDrawable,
- pGC, srcx, srcy, width, height, dstx, dsty,
- cfbCopyPlaneNto1, bitPlane);
- pGC->alu = oldalu;
- }
- else if (pSrcDrawable->bitsPerPixel == PSZ && pDstDrawable->bitsPerPixel == PSZ)
- {
- PixmapPtr pBitmap;
- ScreenPtr pScreen = pSrcDrawable->pScreen;
- GCPtr pGC1;
-
- pBitmap = (*pScreen->CreatePixmap) (pScreen, width, height, 1,
- CREATE_PIXMAP_USAGE_SCRATCH);
- if (!pBitmap)
- return NULL;
- pGC1 = GetScratchGC (1, pScreen);
- if (!pGC1)
- {
- (*pScreen->DestroyPixmap) (pBitmap);
- return NULL;
- }
- /*
- * don't need to set pGC->fgPixel,bgPixel as copyPlaneNto1
- * ignores pixel values, expecting the rop to "do the
- * right thing", which GXcopy will.
- */
- ValidateGC ((DrawablePtr) pBitmap, pGC1);
- /* no exposures here, scratch GC's don't get graphics expose */
- cfbCopyPlaneReduce(pSrcDrawable, (DrawablePtr) pBitmap,
- pGC1, srcx, srcy, width, height, 0, 0,
- cfbCopyPlaneNto1, bitPlane);
-#if PSZ == 8
- cfb8CheckOpaqueStipple (pGC->alu,
- pGC->fgPixel, pGC->bgPixel,
- pGC->planemask);
-#else
- FgPixel = pGC->fgPixel;
- BgPixel = pGC->bgPixel;
-#endif
- /* no exposures here, copy bits from inside a pixmap */
- cfbCopyPlaneExpand((DrawablePtr) pBitmap, pDstDrawable, pGC,
- 0, 0, width, height, dstx, dsty, cfbCopyPlane1toN, 1);
- FreeScratchGC (pGC1);
- (*pScreen->DestroyPixmap) (pBitmap);
- /* compute resultant exposures */
- ret = miHandleExposures (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height,
- dstx, dsty, bitPlane);
- }
- else
-#endif
- ret = miCopyPlane (pSrcDrawable, pDstDrawable,
- pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
- return ret;
-}
-
-
diff --git a/cfb/cfbblt.c b/cfb/cfbblt.c
deleted file mode 100644
index ff34589ff..000000000
--- a/cfb/cfbblt.c
+++ /dev/null
@@ -1,933 +0,0 @@
-/*
- * cfb copy area
- */
-
-/*
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-Author: Keith Packard
-
-*/
-
-/* 24-bit bug fixes: Peter Wainwright, 1998/11/28 */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <stdlib.h>
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <X11/Xproto.h>
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "cfb8bit.h"
-#include "fastblt.h"
-#include "mergerop.h"
-
-#ifdef notdef /* XXX fails right now, walks off end of pixmaps */
-#if defined (FAST_UNALIGNED_READS) && PSZ == 8
-#define DO_UNALIGNED_BITBLT
-#endif
-#endif
-
-#if defined(FAST_MEMCPY) && (MROP == Mcopy) && PSZ == 8
-#define DO_MEMCPY
-#endif
-
-/* ................................................. */
-/* SPECIAL CODE FOR 24 BITS by Peter Wainwright */
-
-#if PSZ == 24 && (MROP) == 0
-
-/* The default macros are defined in mergerop.h, and none of them are
- really appropriate for what we want to do.
-
- There are two ways of fixing this: either define SLOW_24BIT_COPY
- to copy pixel by pixel, or (by default) use the following macros
- modified from mergerop.h
-
- MROP_SOLID and MROP_MASK are defined for each of the operations,
- i.e. each value of MROP.
-
- There are special cases for Mcopy, McopyInverted, Mxor, and Mor.
- There is a completely generic version for MROP=0, and a simplified
- generic version which works for (Mcopy|Mxor|MandReverse|Mor).
-
- However, the generic version does not work for the 24-bit case
- because the pixels cannot be packed exactly into a machine word (32
- bits).
-
- Alternative macros MROP_SOLID24 and MROP_MASK24 are provided for
- the 24-bit case. However, these each copy a single *pixel*, not a
- single machine word. They take an rvalue source pixel, an lvalue
- destination, and the pixel index. The latter is used to find the
- position of the pixel data within the two words *dst and *(dst+1).
-
- Further macros MROP_SOLID24P and MROP_MASK24P are used to copy from
- an lvalue source to an lvalue destination. MROP_PIXEL24 is used to
- assemble the source pixel from the adjacent words *src and
- *(src+1), and this is then split between the destination words
- using the non-P macros above.
-
- But we want to copy entire words for the sake of efficiency.
- Unfortunately if a plane mask is specified this must be shifted
- from one word to the next. Fortunately the pattern repeats after 3
- words, so we unroll the planemask here and redefine MROP_SOLID
- and MROP_MASK. */
-
-
-#endif /* MROP == 0 && PSZ == 24 */
-
-/* ................................................. */
-
-#if PSZ == 24
-#define BYPP 3
-#if PGSZ == 32
-#define P3W 4 /* pixels in 3 machine words */
-#define PAM 3 /* pixel align mask; PAM = P3W -1 */
-#define P2WSH 2
-#else
-#define P3W 8 /* pixels in 3 machine words */
-#define PAM 7 /* pixel align mask; PAM = P3W -1 */
-#define P2WSH 3
-#endif
-#endif
-
-void
-MROP_NAME(cfbDoBitblt)(
- DrawablePtr pSrc,
- DrawablePtr pDst,
- int alu,
- RegionPtr prgnDst,
- DDXPointPtr pptSrc,
- unsigned long planemask)
-{
- CfbBits *psrcBase, *pdstBase;
- /* start of src and dst bitmaps */
- int widthSrc, widthDst; /* add to get to same position in next line */
-
- BoxPtr pbox;
- int nbox;
-
- BoxPtr pboxTmp, pboxNext, pboxBase, pboxNew1, pboxNew2;
- /* temporaries for shuffling rectangles */
- DDXPointPtr pptTmp, pptNew1, pptNew2;
- /* shuffling boxes entails shuffling the
- source points too */
- int w, h;
- int xdir; /* 1 = left right, -1 = right left/ */
- int ydir; /* 1 = top down, -1 = bottom up */
-
- CfbBits *psrcLine, *pdstLine;
- /* pointers to line with current src and dst */
- register CfbBits *psrc;/* pointer to current src longword */
- register CfbBits *pdst;/* pointer to current dst longword */
-
- MROP_DECLARE_REG()
-
- /* following used for looping through a line */
- CfbBits startmask, endmask; /* masks for writing ends of dst */
- int nlMiddle; /* whole longwords in dst */
- int xoffSrc, xoffDst;
- register int nl; /* temp copy of nlMiddle */
- int careful;
-
-#if (PSZ != 24) || (MROP != 0)
- register int leftShift, rightShift;
- register CfbBits bits;
- register CfbBits bits1;
-#endif
-
-#if PSZ == 24
-#ifdef DO_MEMCPY
- int w2;
-#endif
-
-#if MROP == 0
- int widthSrcBytes = cfbGetByteWidth(pSrc);
- int widthDstBytes = cfbGetByteWidth(pDst);
-#endif
-#endif
-
- MROP_INITIALIZE(alu,planemask)
-
- cfbGetLongWidthAndPointer (pSrc, widthSrc, psrcBase)
-
- cfbGetLongWidthAndPointer (pDst, widthDst, pdstBase)
-
- /* XXX we have to err on the side of safety when both are windows,
- * because we don't know if IncludeInferiors is being used.
- */
- careful = ((pSrc == pDst) ||
- ((pSrc->type == DRAWABLE_WINDOW) &&
- (pDst->type == DRAWABLE_WINDOW)));
-
- pbox = REGION_RECTS(prgnDst);
- nbox = REGION_NUM_RECTS(prgnDst);
-
- pboxNew1 = NULL;
- pptNew1 = NULL;
- pboxNew2 = NULL;
- pptNew2 = NULL;
- if (careful && (pptSrc->y < pbox->y1))
- {
- /* walk source botttom to top */
- ydir = -1;
- widthSrc = -widthSrc;
- widthDst = -widthDst;
-
- if (nbox > 1)
- {
- /* keep ordering in each band, reverse order of bands */
- pboxNew1 = (BoxPtr)xalloc(sizeof(BoxRec) * nbox);
- if(!pboxNew1)
- return;
- pptNew1 = (DDXPointPtr)xalloc(sizeof(DDXPointRec) * nbox);
- if(!pptNew1)
- {
- xfree(pboxNew1);
- return;
- }
- pboxBase = pboxNext = pbox+nbox-1;
- while (pboxBase >= pbox)
- {
- while ((pboxNext >= pbox) &&
- (pboxBase->y1 == pboxNext->y1))
- pboxNext--;
- pboxTmp = pboxNext+1;
- pptTmp = pptSrc + (pboxTmp - pbox);
- while (pboxTmp <= pboxBase)
- {
- *pboxNew1++ = *pboxTmp++;
- *pptNew1++ = *pptTmp++;
- }
- pboxBase = pboxNext;
- }
- pboxNew1 -= nbox;
- pbox = pboxNew1;
- pptNew1 -= nbox;
- pptSrc = pptNew1;
- }
- }
- else
- {
- /* walk source top to bottom */
- ydir = 1;
- }
-
- if (careful && (pptSrc->x < pbox->x1))
- {
- /* walk source right to left */
- xdir = -1;
-
- if (nbox > 1)
- {
- /* reverse order of rects in each band */
- pboxNew2 = (BoxPtr)xalloc(sizeof(BoxRec) * nbox);
- pptNew2 = (DDXPointPtr)xalloc(sizeof(DDXPointRec) * nbox);
- if(!pboxNew2 || !pptNew2)
- {
- if (pptNew2) xfree(pptNew2);
- if (pboxNew2) xfree(pboxNew2);
- if (pboxNew1)
- {
- xfree(pptNew1);
- xfree(pboxNew1);
- }
- return;
- }
- pboxBase = pboxNext = pbox;
- while (pboxBase < pbox+nbox)
- {
- while ((pboxNext < pbox+nbox) &&
- (pboxNext->y1 == pboxBase->y1))
- pboxNext++;
- pboxTmp = pboxNext;
- pptTmp = pptSrc + (pboxTmp - pbox);
- while (pboxTmp != pboxBase)
- {
- *pboxNew2++ = *--pboxTmp;
- *pptNew2++ = *--pptTmp;
- }
- pboxBase = pboxNext;
- }
- pboxNew2 -= nbox;
- pbox = pboxNew2;
- pptNew2 -= nbox;
- pptSrc = pptNew2;
- }
- }
- else
- {
- /* walk source left to right */
- xdir = 1;
- }
-
- while(nbox--)
- {
- w = pbox->x2 - pbox->x1;
- h = pbox->y2 - pbox->y1;
-
-#if PSZ == 24
-#ifdef DO_MEMCPY
- w2 = w * BYPP;
-#endif
-#endif
- if (ydir == -1) /* start at last scanline of rectangle */
- {
- psrcLine = psrcBase + ((pptSrc->y+h-1) * -widthSrc);
- pdstLine = pdstBase + ((pbox->y2-1) * -widthDst);
- }
- else /* start at first scanline */
- {
- psrcLine = psrcBase + (pptSrc->y * widthSrc);
- pdstLine = pdstBase + (pbox->y1 * widthDst);
- }
-#if PSZ == 24
- if (w == 1 && ((pbox->x1 & PAM) == 0 || (pbox->x1 & PAM) == PAM))
-#else
- if ((pbox->x1 & PIM) + w <= PPW)
-#endif
- {
- maskpartialbits (pbox->x1, w, endmask);
- startmask = 0;
- nlMiddle = 0;
- }
- else
- {
- maskbits(pbox->x1, w, startmask, endmask, nlMiddle);
- }
-
-#if PSZ == 24
-#if 0
- nlMiddle = w - (pbox->x2 &PAM);;
- if(pbox->x1 & PAM){
- nlMiddle -= (PAM+1 - (pbox->x1 &PAM));
- }
- nlMiddle >>= P2WSH;
- if(nlMiddle < 0)
- nlMiddle = 0;
-#endif
-#endif
-
-#ifdef DO_MEMCPY
- /* If the src and dst scanline don't overlap, do forward case. */
-
- if ((xdir == 1) || (pptSrc->y != pbox->y1)
- || (pptSrc->x + w <= pbox->x1))
- {
-#if PSZ == 24
- char *psrc = (char *) psrcLine + (pptSrc->x * BYPP);
- char *pdst = (char *) pdstLine + (pbox->x1 * BYPP);
-#else
- char *psrc = (char *) psrcLine + pptSrc->x;
- char *pdst = (char *) pdstLine + pbox->x1;
-#endif
- while (h--)
- {
-#if PSZ == 24
- memcpy(pdst, psrc, w2);
-#else
- memcpy(pdst, psrc, w);
-#endif
- pdst += widthDst << PWSH;
- psrc += widthSrc << PWSH;
- }
- }
-#else /* ! DO_MEMCPY */
- if (xdir == 1)
- {
-#if PSZ == 24 && MROP == 0
- /* Note: x is a pixel number; the byte offset is 3*x;
- therefore the offset within a word is (3*x) & 3 ==
- (4*x-x) & 3 == (-x) & 3. The offsets therefore
- DECREASE by 1 for each pixel.
- */
- xoffSrc = ( - pptSrc->x) & PAM;
- xoffDst = ( - pbox->x1) & PAM;
-#if 1
- if((int)xoffSrc != (int)xoffDst /* Alignments must be same. */
- || ((widthDstBytes & PAM) != (widthSrcBytes & PAM) && h > 1))
-#else
- if(1)
-#endif
- /* Width also must be same, if hight > 1 */
- {
- /* ...otherwise, pixel by pixel operation */
- while (h--)
- {
- register int i, si, sii, di;
-
- for (i = 0, si = pptSrc->x, di = pbox->x1;
- i < w;
- i++, si++, di++) {
- psrc = psrcLine + ((si * BYPP) >> P2WSH);
- pdst = pdstLine + ((di * BYPP) >> P2WSH);
- sii = (si & 3);
- MROP_SOLID24P(psrc, pdst, sii, di);
- }
- pdstLine += widthDst;
- psrcLine += widthSrc;
- }
- }
- else
-#endif
- {
-
-#if PSZ == 24
-
-#if MROP != 0
- xoffSrc = ( - pptSrc->x) & PAM;
- xoffDst = ( - pbox->x1) & PAM;
-#endif
- pdstLine += (pbox->x1 * BYPP) >> P2WSH;
- psrcLine += (pptSrc->x * BYPP) >> P2WSH;
-#else
- xoffSrc = pptSrc->x & PIM;
- xoffDst = pbox->x1 & PIM;
- pdstLine += (pbox->x1 >> PWSH);
- psrcLine += (pptSrc->x >> PWSH);
-#endif
-#ifdef DO_UNALIGNED_BITBLT
- nl = xoffSrc - xoffDst;
- psrcLine = (CfbBits *)
- (((unsigned char *) psrcLine) + nl);
-#else
-#if PSZ == 24 && MROP == 0
- /* alredy satisfied */
-#else
- if (xoffSrc == xoffDst)
-#endif
-#endif
- {
- while (h--)
- {
-#if PSZ == 24 && MROP == 0
- register int index;
- register int im3;
-#endif /* PSZ == 24 && MROP == 0 */
- psrc = psrcLine;
- pdst = pdstLine;
- pdstLine += widthDst;
- psrcLine += widthSrc;
-#if PSZ == 24 && MROP == 0
- index = (int)(pdst - pdstBase);
- im3 = index % 3;
-#endif /* PSZ == 24 && MROP == 0 */
- if (startmask)
- {
-#if PSZ == 24 && MROP == 0
- *pdst = DoMaskMergeRop24u(*psrc, *pdst, startmask, im3);
- index++;
- im3 = index % 3;
-#else /* PSZ != 24 || MROP != 0 */
- *pdst = MROP_MASK(*psrc, *pdst, startmask);
-#endif /* PSZ == 24 && MROP == 0 */
- psrc++;
- pdst++;
- }
-
- nl = nlMiddle;
-#ifdef LARGE_INSTRUCTION_CACHE
-#ifdef FAST_CONSTANT_OFFSET_MODE
-
- psrc += nl & (UNROLL-1);
- pdst += nl & (UNROLL-1);
-
-#if PSZ == 24 && MROP == 0
-#define BodyOdd(n) pdst[-n] = DoMergeRop24u(psrc[-n], pdst[-n], ((int)(pdst - n - pdstBase))%3);
-#define BodyEven(n) pdst[-n] = DoMergeRop24u(psrc[-n], pdst[-n], ((int)(pdst - n - pdstBase))%3);
-#else /* PSZ != 24 || MROP != 0 */
-#define BodyOdd(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]);
-#define BodyEven(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]);
-#endif /* PSZ == 24 && MROP == 0 */
-
-#define LoopReset \
-pdst += UNROLL; \
-psrc += UNROLL;
-
-#else
-
-#if PSZ == 24 && MROP == 0
-#define BodyOdd(n) *pdst = DoMergeRop24u(*psrc, *pdst, im3); pdst++; psrc++; index++; im3 = index % 3;
-#define BodyEven(n) BodyOdd(n)
-#else /* PSZ != 24 || MROP != 0 */
-#define BodyOdd(n) *pdst = MROP_SOLID (*psrc, *pdst); pdst++; psrc++;
-#define BodyEven(n) BodyOdd(n)
-#endif /* PSZ == 24 && MROP == 0 */
-
-#define LoopReset ;
-
-#endif
- PackedLoop
-
-#undef BodyOdd
-#undef BodyEven
-#undef LoopReset
-
-#else
-#ifdef NOTDEF
- /* you'd think this would be faster --
- * a single instruction instead of 6
- * but measurements show it to be ~15% slower
- */
- while ((nl -= 6) >= 0)
- {
- asm ("moveml %1+,#0x0c0f;moveml#0x0c0f,%0"
- : "=m" (*(char *)pdst)
- : "m" (*(char *)psrc)
- : "d0", "d1", "d2", "d3",
- "a2", "a3");
- pdst += 6;
- }
- nl += 6;
- while (nl--)
- *pdst++ = *psrc++;
-#endif
-#if 0 /*PSZ == 24 && MROP == 0*/
- DuffL(nl, label1,
- *pdst = DoMergeRop24u(*psrc, *pdst, im3);
- pdst++; psrc++; index++;im3 = index % 3;)
-#else /* !(PSZ == 24 && MROP == 0) */
- DuffL(nl, label1,
- *pdst = MROP_SOLID (*psrc, *pdst);
- pdst++; psrc++;)
-#endif /* PSZ == 24 && MROP == 0 */
-#endif
-
- if (endmask)
-#if PSZ == 24 && MROP == 0
- *pdst = DoMaskMergeRop24u(*psrc, *pdst, endmask, (int)(pdst - pdstBase) % 3);
-#else /* !(PSZ == 24 && MROP == 0) */
- *pdst = MROP_MASK(*psrc, *pdst, endmask);
-#endif /* PSZ == 24 && MROP == 0 */
- }
- }
-#ifndef DO_UNALIGNED_BITBLT
-#if PSZ == 24 && MROP == 0
- /* can not happen */
-#else /* !(PSZ == 24 && MROP == 0) */
- else /* xoffSrc != xoffDst */
- {
- if (xoffSrc > xoffDst)
- {
-#if PSZ == 24
- leftShift = (xoffSrc - xoffDst) << 3;
-#else
-#if PGSZ == 32
- leftShift = (xoffSrc - xoffDst) << (5 - PWSH);
-#else /* PGSZ == 64 */
- leftShift = (xoffSrc - xoffDst) << (6 - PWSH);
-#endif /* PGSZ */
-#endif
- rightShift = PGSZ - leftShift;
- }
- else
- {
-#if PSZ == 24
- rightShift = (xoffDst - xoffSrc) << 3;
-#else
-#if PGSZ == 32
- rightShift = (xoffDst - xoffSrc) << (5 - PWSH);
-#else /* PGSZ == 64 */
- rightShift = (xoffDst - xoffSrc) << (6 - PWSH);
-#endif /* PGSZ */
-#endif
- leftShift = PGSZ - rightShift;
- }
- while (h--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- pdstLine += widthDst;
- psrcLine += widthSrc;
- bits = 0;
- if (xoffSrc > xoffDst)
- bits = *psrc++;
- if (startmask)
- {
- bits1 = BitLeft(bits,leftShift);
- bits = *psrc++;
- bits1 |= BitRight(bits,rightShift);
- *pdst = MROP_MASK(bits1, *pdst, startmask);
- pdst++;
- }
- nl = nlMiddle;
-#ifdef LARGE_INSTRUCTION_CACHE
- bits1 = bits;
-
-#ifdef FAST_CONSTANT_OFFSET_MODE
-
- psrc += nl & (UNROLL-1);
- pdst += nl & (UNROLL-1);
-
-#define BodyOdd(n) \
-bits = psrc[-n]; \
-pdst[-n] = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), pdst[-n]);
-
-#define BodyEven(n) \
-bits1 = psrc[-n]; \
-pdst[-n] = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), pdst[-n]);
-
-#define LoopReset \
-pdst += UNROLL; \
-psrc += UNROLL;
-
-#else
-
-#define BodyOdd(n) \
-bits = *psrc++; \
-*pdst = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), *pdst); \
-pdst++;
-
-#define BodyEven(n) \
-bits1 = *psrc++; \
-*pdst = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), *pdst); \
-pdst++;
-
-#define LoopReset ;
-
-#endif /* !FAST_CONSTANT_OFFSET_MODE */
-
- PackedLoop
-
-#undef BodyOdd
-#undef BodyEven
-#undef LoopReset
-
-#else
- DuffL (nl,label2,
- bits1 = BitLeft(bits, leftShift);
- bits = *psrc++;
- *pdst = MROP_SOLID (bits1 | BitRight(bits, rightShift), *pdst);
- pdst++;
- )
-#endif
-
- if (endmask)
- {
- bits1 = BitLeft(bits, leftShift);
- if (BitLeft(endmask, rightShift))
- {
- bits = *psrc;
- bits1 |= BitRight(bits, rightShift);
- }
- *pdst = MROP_MASK (bits1, *pdst, endmask);
- }
- }
- }
-#endif /* (PSZ == 24 && MROP == 0) */
-#endif /* DO_UNALIGNED_BITBLT */
-
- }
- }
-#endif /* ! DO_MEMCPY */
- else /* xdir == -1 */
- {
-#if PSZ == 24 && MROP == 0
- xoffSrc = (-(pptSrc->x + w)) & PAM;
- xoffDst = (-pbox->x2) & PAM;
-#if 1
- if(xoffSrc != xoffDst /* Alignments must be same. */
- || ((widthDstBytes & PAM) != (widthSrcBytes & PAM) && h > 1))
-#else
- if(1)
-#endif
- /* Width also must be same, if hight > 1 */
- {
- /* ...otherwise, pixel by pixel operation */
- while (h--)
- {
- register int i, si, sii, di;
-
- for (i = 0, si = pptSrc->x + w - 1, di = pbox->x2 - 1;
- i < w;
- i++, si--, di--) {
- psrc = psrcLine + ((si * BYPP) >> P2WSH);
- pdst = pdstLine + ((di * BYPP) >> P2WSH);
- sii = (si & PAM);
- MROP_SOLID24P(psrc, pdst, sii, di);
- }
- psrcLine += widthSrc;
- pdstLine += widthDst;
- }
- }else
-#endif /* MROP == 0 && PSZ == 24 */
- {
-
-#if PSZ == 24
-#if MROP == 0
- /* already calculated */
-#else
- xoffSrc = (pptSrc->x + w) & PAM;
- xoffDst = pbox->x2 & PAM;
-#endif
- pdstLine += ((pbox->x2 * BYPP - 1) >> P2WSH) + 1;
- psrcLine += (((pptSrc->x+w) * BYPP - 1) >> P2WSH) + 1;
-#else
- xoffSrc = (pptSrc->x + w - 1) & PIM;
- xoffDst = (pbox->x2 - 1) & PIM;
- pdstLine += ((pbox->x2-1) >> PWSH) + 1;
- psrcLine += ((pptSrc->x+w - 1) >> PWSH) + 1;
-#endif
-#ifdef DO_UNALIGNED_BITBLT
-#if PSZ == 24
- nl = xoffDst - xoffSrc;
-#else
- nl = xoffSrc - xoffDst;
-#endif
- psrcLine = (CfbBits *)
- (((unsigned char *) psrcLine) + nl);
-#else
-#if PSZ == 24 && MROP == 0
- /* already satisfied */
-#else
- if (xoffSrc == xoffDst)
-#endif
-#endif
- {
- while (h--)
- {
-#if PSZ == 24 && MROP == 0
- register int index;
- register int im3;
-#endif /* PSZ == 24 && MROP == 0 */
- psrc = psrcLine;
- pdst = pdstLine;
- pdstLine += widthDst;
- psrcLine += widthSrc;
-#if PSZ == 24 && MROP == 0
- index = (int)(pdst - pdstBase);
-#endif /* PSZ == 24 && MROP == 0 */
-
- if (endmask)
- {
- pdst--;
- psrc--;
-#if PSZ == 24 && MROP == 0
- index--;
- im3 = index % 3;
- *pdst = DoMaskMergeRop24u(*psrc, *pdst, endmask, im3);
-#else /* !(PSZ == 24 && MROP == 0) */
- *pdst = MROP_MASK (*psrc, *pdst, endmask);
-#endif /* PSZ == 24 && MROP == 0 */
- }
- nl = nlMiddle;
-#ifdef LARGE_INSTRUCTION_CACHE
-#ifdef FAST_CONSTANT_OFFSET_MODE
- psrc -= nl & (UNROLL - 1);
- pdst -= nl & (UNROLL - 1);
-
-#if PSZ == 24 && MROP == 0
-#define BodyOdd(n) pdst[n-1] = DoMergeRop24u(psrc[n-1], pdst[n-1], ((int)(pdst - (n - 1) -pdstBase)) % 3);
-#else /* !(PSZ == 24 && MROP == 0) */
-#define BodyOdd(n) pdst[n-1] = MROP_SOLID (psrc[n-1], pdst[n-1]);
-#endif /* PSZ == 24 && MROP == 0 */
-
-#define BodyEven(n) BodyOdd(n)
-
-#define LoopReset \
-pdst -= UNROLL;\
-psrc -= UNROLL;
-
-#else
-
-#if PSZ == 24 && MROP == 0
-#define BodyOdd(n) --pdst; --psrc; --index; im3 = index % 3;*pdst = DoMergeRop24u(*psrc, *pdst, im3);
-#else /* !(PSZ == 24 && MROP == 0) */
-#define BodyOdd(n) --pdst; --psrc; *pdst = MROP_SOLID(*psrc, *pdst);
-#endif /* PSZ == 24 && MROP == 0 */
-#define BodyEven(n) BodyOdd(n)
-#define LoopReset ;
-
-#endif
- PackedLoop
-
-#undef BodyOdd
-#undef BodyEven
-#undef LoopReset
-
-#else
-#if PSZ == 24 && MROP == 0
- DuffL(nl,label3,
- --pdst; --psrc; --index; im3= index%3;*pdst = DoMergeRop24u(*psrc, *pdst, im3);)
-#else /* !(PSZ == 24 && MROP == 0) */
- DuffL(nl,label3,
- --pdst; --psrc; *pdst = MROP_SOLID (*psrc, *pdst);)
-#endif /* PSZ == 24 && MROP == 0 */
-#endif
-
- if (startmask)
- {
- --pdst;
- --psrc;
-#if PSZ == 24 && MROP == 0
- *pdst = DoMaskMergeRop24u(*psrc, *pdst, startmask, (int)(pdst - pdstBase) % 3);
-#else /* !(PSZ == 24 && MROP == 0) */
- *pdst = MROP_MASK(*psrc, *pdst, startmask);
-#endif /* PSZ == 24 && MROP == 0 */
- }
- }
- }
-#ifndef DO_UNALIGNED_BITBLT
-#if PSZ == 24 && MROP == 0
- /* can not happen */
-#else /* !( PSZ == 24 && MROP == 0) */
- else
- {
- if (xoffDst > xoffSrc)
- {
-#if PSZ == 24
- leftShift = (xoffDst - xoffSrc) << 3;
- rightShift = PGSZ - leftShift;
-#else
-#if PGSZ == 32
- rightShift = (xoffDst - xoffSrc) << (5 - PWSH);
-#else /* PGSZ == 64 */
- rightShift = (xoffDst - xoffSrc) << (6 - PWSH);
-#endif /* PGSZ */
- leftShift = PGSZ - rightShift;
-#endif
- }
- else
- {
-#if PSZ == 24
- rightShift = (xoffSrc - xoffDst) << 3;
- leftShift = PGSZ - rightShift;
-#else
-#if PGSZ == 32
- leftShift = (xoffSrc - xoffDst) << (5 - PWSH);
-#else /* PGSZ == 64 */
- leftShift = (xoffSrc - xoffDst) << (6 - PWSH);
-#endif /* PGSZ */
- rightShift = PGSZ - leftShift;
-#endif
- }
- while (h--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- pdstLine += widthDst;
- psrcLine += widthSrc;
- bits = 0;
-#if PSZ == 24
- if (xoffSrc > xoffDst)
-#else
- if (xoffDst > xoffSrc)
-#endif
- bits = *--psrc;
- if (endmask)
- {
- bits1 = BitRight(bits, rightShift);
- bits = *--psrc;
- bits1 |= BitLeft(bits, leftShift);
- pdst--;
- *pdst = MROP_MASK(bits1, *pdst, endmask);
- }
- nl = nlMiddle;
-#ifdef LARGE_INSTRUCTION_CACHE
- bits1 = bits;
-#ifdef FAST_CONSTANT_OFFSET_MODE
- psrc -= nl & (UNROLL - 1);
- pdst -= nl & (UNROLL - 1);
-
-#define BodyOdd(n) \
-bits = psrc[n-1]; \
-pdst[n-1] = MROP_SOLID(BitRight(bits1, rightShift) | BitLeft(bits, leftShift),pdst[n-1]);
-
-#define BodyEven(n) \
-bits1 = psrc[n-1]; \
-pdst[n-1] = MROP_SOLID(BitRight(bits, rightShift) | BitLeft(bits1, leftShift),pdst[n-1]);
-
-#define LoopReset \
-pdst -= UNROLL; \
-psrc -= UNROLL;
-
-#else
-
-#define BodyOdd(n) \
-bits = *--psrc; --pdst; \
-*pdst = MROP_SOLID(BitRight(bits1, rightShift) | BitLeft(bits, leftShift),*pdst);
-
-#define BodyEven(n) \
-bits1 = *--psrc; --pdst; \
-*pdst = MROP_SOLID(BitRight(bits, rightShift) | BitLeft(bits1, leftShift),*pdst);
-
-#define LoopReset ;
-
-#endif
-
- PackedLoop
-
-#undef BodyOdd
-#undef BodyEven
-#undef LoopReset
-
-#else
- DuffL (nl, label4,
- bits1 = BitRight(bits, rightShift);
- bits = *--psrc;
- --pdst;
- *pdst = MROP_SOLID(bits1 | BitLeft(bits, leftShift),*pdst);
- )
-#endif
-
- if (startmask)
- {
- bits1 = BitRight(bits, rightShift);
- if (BitRight (startmask, leftShift))
- {
- bits = *--psrc;
- bits1 |= BitLeft(bits, leftShift);
- }
- --pdst;
- *pdst = MROP_MASK(bits1, *pdst, startmask);
- }
- }
- }
-#endif /* PSZ == 24 && MROP == 0 */
-#endif
- }
- }
- pbox++;
- pptSrc++;
- }
- if (pboxNew2)
- {
- xfree(pptNew2);
- xfree(pboxNew2);
- }
- if (pboxNew1)
- {
- xfree(pptNew1);
- xfree(pboxNew1);
- }
-}
diff --git a/cfb/cfbbres.c b/cfb/cfbbres.c
deleted file mode 100644
index fa1ee1379..000000000
--- a/cfb/cfbbres.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include "misc.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "servermd.h"
-#include "miline.h"
-
-/* Solid bresenham line */
-/* NOTES
- e2 is used less often than e1, so it's not in a register
-*/
-
-void
-cfbBresS(rop, and, xor, addrl, nlwidth, signdx, signdy, axis, x1, y1, e, e1,
- e2, len)
- int rop;
- CfbBits and, xor;
- CfbBits *addrl; /* pointer to base of bitmap */
- int nlwidth; /* width in longwords of bitmap */
- register int signdx;
- int signdy; /* signs of directions */
- int axis; /* major axis (Y_AXIS or X_AXIS) */
- int x1, y1; /* initial point */
- register int e; /* error accumulator */
- register int e1; /* bresenham increments */
- int e2;
- int len; /* length of line */
-{
- register int e3 = e2-e1;
-#if PSZ == 24
- CfbBits piQxelXor[3],piQxelAnd[3];
- char *addrb;
- int nlwidth3, signdx3;
-#endif
-#ifdef PIXEL_ADDR
- register PixelType *addrp; /* Pixel pointer */
-
- if (len == 0)
- return;
- /* point to first point */
- nlwidth <<= PWSH;
-#if PSZ == 24
- addrp = (PixelType *)(addrl) + (y1 * nlwidth);
- addrb = (char *)addrp + x1 * 3;
-
- piQxelXor[0] = (xor << 24) | xor;
- piQxelXor[1] = (xor << 16)| (xor >> 8);
- piQxelXor[2] = (xor << 8) | (xor >> 16);
- piQxelAnd[0] = (and << 24) | and;
- piQxelAnd[1] = (and << 16)| (and >> 8);
- piQxelAnd[2] = (and << 8) | (and >> 16);
-#else
- addrp = (PixelType *)(addrl) + (y1 * nlwidth) + x1;
-#endif
- if (signdy < 0)
- nlwidth = -nlwidth;
- e = e-e1; /* to make looping easier */
-#if PSZ == 24
- nlwidth3 = nlwidth * sizeof (CfbBits);
- signdx3 = signdx * 3;
-#endif
-
- if (axis == Y_AXIS)
- {
- int t;
-
- t = nlwidth;
- nlwidth = signdx;
- signdx = t;
-#if PSZ == 24
- t = nlwidth3;
- nlwidth3 = signdx3;
- signdx3 = t;
-#endif
- }
- if (rop == GXcopy)
- {
- --len;
-#if PSZ == 24
-#define body_copy \
- addrp = (PixelType *)((unsigned long)addrb & ~0x03); \
- switch((unsigned long)addrb & 3){ \
- case 0: \
- *addrp = ((*addrp)&0xFF000000)|(piQxelXor[0] & 0xFFFFFF); \
- break; \
- case 1: \
- *addrp = ((*addrp)&0xFF)|(piQxelXor[2] & 0xFFFFFF00); \
- break; \
- case 3: \
- *addrp = ((*addrp)&0xFFFFFF)|(piQxelXor[0] & 0xFF000000); \
- *(addrp+1) = ((*(addrp+1))&0xFFFF0000)|(piQxelXor[1] & 0xFFFF); \
- break; \
- case 2: \
- *addrp = ((*addrp)&0xFFFF)|(piQxelXor[1] & 0xFFFF0000); \
- *(addrp+1) = ((*(addrp+1))&0xFFFFFF00)|(piQxelXor[2] & 0xFF); \
- break; \
- }
-#define body {\
- body_copy \
- addrb += signdx3; \
- e += e1; \
- if (e >= 0) \
- { \
- addrb += nlwidth3; \
- e += e3; \
- } \
- }
-#else /* PSZ == 24 */
-#define body {\
- *addrp = xor; \
- addrp += signdx; \
- e += e1; \
- if (e >= 0) \
- { \
- addrp += nlwidth; \
- e += e3; \
- } \
- }
-#endif /* PSZ == 24 */
- while (len >= 4)
- {
- body body body body
- len -= 4;
- }
- switch (len)
- {
- case 3: body case 2: body case 1: body
- }
-#undef body
-#if PSZ == 24
- body_copy
-# undef body_copy
-#else
- *addrp = xor;
-#endif
- }
- else /* not GXcopy */
- {
- while(len--)
- {
-#if PSZ == 24
- addrp = (PixelType *)((unsigned long)addrb & ~0x03);
- switch((unsigned long)addrb & 3){
- case 0:
- *addrp = (*addrp & (piQxelAnd[0]|0xFF000000))
- ^ (piQxelXor[0] & 0xFFFFFF);
- break;
- case 1:
- *addrp = (*addrp & (piQxelAnd[2]|0xFF))
- ^ (piQxelXor[2] & 0xFFFFFF00);
- break;
- case 3:
- *addrp = (*addrp & (piQxelAnd[0]|0xFFFFFF))
- ^ (piQxelXor[0] & 0xFF000000);
- *(addrp+1) = (*(addrp+1) & (piQxelAnd[1]|0xFFFF0000))
- ^ (piQxelXor[1] & 0xFFFF);
- break;
- case 2:
- *addrp = (*addrp & (piQxelAnd[1]|0xFFFF))
- ^ (piQxelXor[1] & 0xFFFF0000);
- *(addrp+1) = (*(addrp+1) & (piQxelAnd[2]|0xFFFFFF00))
- ^ (piQxelXor[2] & 0xFF);
- break;
- }
- e += e1;
- if (e >= 0)
- {
- addrb += nlwidth3;
- e += e3;
- }
- addrb += signdx3;
-#else /* PSZ == 24 */
- *addrp = DoRRop (*addrp, and, xor);
- e += e1;
- if (e >= 0)
- {
- addrp += nlwidth;
- e += e3;
- }
- addrp += signdx;
-#endif /* PSZ == 24 */
- }
- }
-#else /* !PIXEL_ADDR */
- register CfbBits tmp, bit;
- CfbBits leftbit, rightbit;
-
- /* point to longword containing first point */
-#if PSZ == 24
- addrl = (addrl + (y1 * nlwidth) + ((x1 * 3) >>2);
-#else
- addrl = (addrl + (y1 * nlwidth) + (x1 >> PWSH));
-#endif
- if (signdy < 0)
- nlwidth = -nlwidth;
- e = e-e1; /* to make looping easier */
-
- leftbit = cfbmask[0];
-#if PSZ == 24
- rightbit = cfbmask[(PPW-1)<<1];
- bit = cfbmask[(x1 & 3)<<1];
-#else
- rightbit = cfbmask[PPW-1];
- bit = cfbmask[x1 & PIM];
-#endif
-
- if (axis == X_AXIS)
- {
- if (signdx > 0)
- {
- while (len--)
- {
- *addrl = DoMaskRRop (*addrl, and, xor, bit);
- bit = SCRRIGHT(bit,1);
- e += e1;
- if (e >= 0)
- {
- addrl += nlwidth;
- e += e3;
- }
- if (!bit)
- {
- bit = leftbit;
- addrl++;
- }
- }
- }
- else
- {
- while (len--)
- {
- *addrl = DoMaskRRop (*addrl, and, xor, bit);
- e += e1;
- bit = SCRLEFT(bit,1);
- if (e >= 0)
- {
- addrl += nlwidth;
- e += e3;
- }
- if (!bit)
- {
- bit = rightbit;
- addrl--;
- }
- }
- }
- } /* if X_AXIS */
- else
- {
- if (signdx > 0)
- {
- while(len--)
- {
- *addrl = DoMaskRRop (*addrl, and, xor, bit);
- e += e1;
- if (e >= 0)
- {
- bit = SCRRIGHT(bit,1);
- if (!bit)
- {
- bit = leftbit;
- addrl++;
- }
- e += e3;
- }
- addrl += nlwidth;
- }
- }
- else
- {
- while(len--)
- {
- *addrl = DoMaskRRop (*addrl, and, xor, bit);
- e += e1;
- if (e >= 0)
- {
- bit = SCRLEFT(bit,1);
- if (!bit)
- {
- bit = rightbit;
- addrl--;
- }
- e += e3;
- }
- addrl += nlwidth;
- }
- }
- } /* else Y_AXIS */
-#endif
-}
diff --git a/cfb/cfbbresd.c b/cfb/cfbbresd.c
deleted file mode 100644
index ee48a74ec..000000000
--- a/cfb/cfbbresd.c
+++ /dev/null
@@ -1,404 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include "misc.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "miline.h"
-
-/* Dashed bresenham line */
-
-void
-cfbBresD(rrops,
- pdashIndex, pDash, numInDashList, pdashOffset, isDoubleDash,
- addrl, nlwidth,
- signdx, signdy, axis, x1, y1, e, e1, e2, len)
- cfbRRopPtr rrops;
- int *pdashIndex; /* current dash */
- unsigned char *pDash; /* dash list */
- int numInDashList; /* total length of dash list */
- int *pdashOffset; /* offset into current dash */
- int isDoubleDash;
- CfbBits *addrl; /* pointer to base of bitmap */
- int nlwidth; /* width in longwords of bitmap */
- int signdx, signdy; /* signs of directions */
- int axis; /* major axis (Y_AXIS or X_AXIS) */
- int x1, y1; /* initial point */
- register int e; /* error accumulator */
- register int e1; /* bresenham increments */
- int e2;
- int len; /* length of line */
-{
-#ifdef PIXEL_ADDR
- register PixelType *addrp;
-#endif
- register int e3 = e2-e1;
- int dashIndex;
- int dashOffset;
- int dashRemaining;
- CfbBits xorFg, andFg, xorBg, andBg;
- Bool isCopy;
- int thisDash;
-#if PSZ == 24
- CfbBits xorPiQxlFg[3], andPiQxlFg[3], xorPiQxlBg[3], andPiQxlBg[3];
- char *addrb;
- int signdx3, signdy3;
-#endif
-
- dashOffset = *pdashOffset;
- dashIndex = *pdashIndex;
- isCopy = (rrops[0].rop == GXcopy && rrops[1].rop == GXcopy);
-#if PSZ == 24
- xorFg = rrops[0].xor & 0xffffff;
- andFg = rrops[0].and & 0xffffff;
- xorBg = rrops[1].xor & 0xffffff;
- andBg = rrops[1].and & 0xffffff;
- xorPiQxlFg[0] = xorFg | (xorFg << 24);
- xorPiQxlFg[1] = (xorFg >> 8) | (xorFg << 16);
- xorPiQxlFg[2] = (xorFg >> 16) | (xorFg << 8);
- andPiQxlFg[0] = andFg | (andFg << 24);
- andPiQxlFg[1] = (andFg >> 8) | (andFg << 16);
- andPiQxlFg[2] = (andFg >> 16) | (andFg << 8);
- xorPiQxlBg[0] = xorBg | (xorBg << 24);
- xorPiQxlBg[1] = (xorBg >> 8) | (xorBg << 16);
- xorPiQxlBg[2] = (xorBg >> 16) | (xorBg << 8);
- andPiQxlBg[0] = andBg | (andBg << 24);
- andPiQxlBg[1] = (andBg >> 8) | (andBg << 16);
- andPiQxlBg[2] = (andFg >> 16) | (andBg << 8);
-#else
- xorFg = rrops[0].xor;
- andFg = rrops[0].and;
- xorBg = rrops[1].xor;
- andBg = rrops[1].and;
-#endif
- dashRemaining = pDash[dashIndex] - dashOffset;
- if ((thisDash = dashRemaining) >= len)
- {
- thisDash = len;
- dashRemaining -= len;
- }
- e = e-e1; /* to make looping easier */
-
-#define BresStep(minor,major) {if ((e += e1) >= 0) { e += e3; minor; } major;}
-
-#define NextDash {\
- dashIndex++; \
- if (dashIndex == numInDashList) \
- dashIndex = 0; \
- dashRemaining = pDash[dashIndex]; \
- if ((thisDash = dashRemaining) >= len) \
- { \
- dashRemaining -= len; \
- thisDash = len; \
- } \
-}
-
-#ifdef PIXEL_ADDR
-
-#if PSZ == 24
-#define Loop(store) while (thisDash--) {\
- store; \
- BresStep(addrb+=signdy3,addrb+=signdx3) \
- }
- /* point to first point */
- nlwidth <<= PWSH;
- addrp = (PixelType *)(addrl) + (y1 * nlwidth);
- addrb = (char *)addrp + x1 * 3;
-
-#else
-#define Loop(store) while (thisDash--) {\
- store; \
- BresStep(addrp+=signdy,addrp+=signdx) \
- }
- /* point to first point */
- nlwidth <<= PWSH;
- addrp = (PixelType *)(addrl) + (y1 * nlwidth) + x1;
-#endif
- signdy *= nlwidth;
-#if PSZ == 24
- signdx3 = signdx * 3;
- signdy3 = signdy * sizeof (CfbBits);
-#endif
- if (axis == Y_AXIS)
- {
- int t;
-
- t = signdx;
- signdx = signdy;
- signdy = t;
-#if PSZ == 24
- t = signdx3;
- signdx3 = signdy3;
- signdy3 = t;
-#endif
- }
-
- if (isCopy)
- {
-#if PSZ == 24
-#define body_copy(pix) { \
- addrp = (PixelType *)((unsigned long)addrb & ~0x03); \
- switch((unsigned long)addrb & 3){ \
- case 0: \
- *addrp = (*addrp & 0xFF000000)|((pix)[0] & 0xFFFFFF); \
- break; \
- case 1: \
- *addrp = (*addrp & 0xFF)|((pix)[2] & 0xFFFFFF00); \
- break; \
- case 3: \
- *addrp = (*addrp & 0xFFFFFF)|((pix)[0] & 0xFF000000); \
- *(addrp+1) = (*(addrp+1) & 0xFFFF0000)|((pix)[1] & 0xFFFF); \
- break; \
- case 2: \
- *addrp = (*addrp & 0xFFFF)|((pix)[1] & 0xFFFF0000); \
- *(addrp+1) = (*(addrp+1) & 0xFFFFFF00)|((pix)[2] & 0xFF); \
- break; \
- } \
-}
-#endif /* PSZ == 24 */
-
- for (;;)
- {
- len -= thisDash;
- if (dashIndex & 1) {
- if (isDoubleDash) {
-#if PSZ == 24
- Loop(body_copy(xorPiQxlBg))
-#else
- Loop(*addrp = xorBg)
-#endif
- } else {
- Loop(;)
- }
- } else {
-#if PSZ == 24
- Loop(body_copy(xorPiQxlFg))
-#else
- Loop(*addrp = xorFg)
-#endif
- }
- if (!len)
- break;
- NextDash
- }
-#undef body_copy
- }
- else
- {
-#define body_set(and, xor) { \
- addrp = (PixelType *)((unsigned long)addrb & ~0x03); \
- switch((unsigned long)addrb & 3){ \
- case 0: \
- *addrp = (*addrp & ((and)[0]|0xFF000000)) ^ ((xor)[0] & 0xFFFFFF); \
- break; \
- case 1: \
- *addrp = (*addrp & ((and)[2]|0xFF)) ^ ((xor)[2] & 0xFFFFFF00); \
- break; \
- case 3: \
- *addrp = (*addrp & ((and)[0]|0xFFFFFF)) ^ ((xor)[0] & 0xFF000000); \
- *(addrp+1)=(*(addrp+1)&((and)[1]|0xFFFF0000)) ^ ((xor)[1]&0xFFFF); \
- break; \
- case 2: \
- *addrp = (*addrp & ((and)[1]|0xFFFF)) ^ ((xor)[1] & 0xFFFF0000); \
- *(addrp+1)=(*(addrp+1)&((and)[2]|0xFFFFFF00)) ^ ((xor)[2] & 0xFF); \
- break; \
- } \
-}
-
- for (;;)
- {
- len -= thisDash;
- if (dashIndex & 1) {
- if (isDoubleDash) {
-#if PSZ == 24
- Loop(body_set(andPiQxlBg, xorPiQxlBg))
-#else
- Loop(*addrp = DoRRop(*addrp,andBg, xorBg))
-#endif
- } else {
- Loop(;)
- }
- } else {
-#if PSZ == 24
- Loop(body_set(andPiQxlFg, xorPiQxlFg))
-#else
- Loop(*addrp = DoRRop(*addrp,andFg, xorFg))
-#endif
- }
- if (!len)
- break;
- NextDash
- }
-#undef body_set
- }
-#else /* !PIXEL_ADDR */
- {
- register CfbBits tmp;
- CfbBits startbit, bit;
-
- /* point to longword containing first point */
-#if PSZ == 24
- addrl = (addrl + (y1 * nlwidth) + ((x1*3) >> 2);
-#else
- addrl = (addrl + (y1 * nlwidth) + (x1 >> PWSH));
-#endif
- signdy = signdy * nlwidth;
-
- if (signdx > 0)
- startbit = cfbmask[0];
- else
-#if PSZ == 24
- startbit = cfbmask[(PPW-1)<<1];
- bit = cfbmask[(x1 & 3)<<1];
-#else
- startbit = cfbmask[PPW-1];
- bit = cfbmask[x1 & PIM];
-#endif
-
-#if PSZ == 24
-#define X_Loop(store) while(thisDash--) {\
- store; \
- BresStep(addrl += signdy, \
- if (signdx > 0) \
- bit = SCRRIGHT(bit,1); \
- else \
- bit = SCRLEFT(bit,1); \
- if (!bit) \
- { \
- bit = startbit; \
- addrl += signdx; \
- }) \
- }
-#define Y_Loop(store) while(thisDash--) {\
- store; \
- BresStep(if (signdx > 0) \
- bit = SCRRIGHT(bit,1); \
- else \
- bit = SCRLEFT(bit,1); \
- if (!bit) \
- { \
- bit = startbit; \
- addrl += signdx; \
- }, \
- addrl += signdy) \
- }
-#else
-#define X_Loop(store) while(thisDash--) {\
- store; \
- BresStep(addrl += signdy, \
- if (signdx > 0) \
- bit = SCRRIGHT(bit,1); \
- else \
- bit = SCRLEFT(bit,1); \
- if (!bit) \
- { \
- bit = startbit; \
- addrl += signdx; \
- }) \
- }
-#define Y_Loop(store) while(thisDash--) {\
- store; \
- BresStep(if (signdx > 0) \
- bit = SCRRIGHT(bit,1); \
- else \
- bit = SCRLEFT(bit,1); \
- if (!bit) \
- { \
- bit = startbit; \
- addrl += signdx; \
- }, \
- addrl += signdy) \
- }
-#endif
-
- if (axis == X_AXIS)
- {
- for (;;)
- {
- len -= thisDash;
- if (dashIndex & 1) {
- if (isDoubleDash) {
- X_Loop(*addrl = DoMaskRRop(*addrl, andBg, xorBg, bit));
- } else {
- X_Loop(;)
- }
- } else {
- X_Loop(*addrl = DoMaskRRop(*addrl, andFg, xorFg, bit));
- }
- if (!len)
- break;
- NextDash
- }
- } /* if X_AXIS */
- else
- {
- for (;;)
- {
- len -= thisDash;
- if (dashIndex & 1) {
- if (isDoubleDash) {
- Y_Loop(*addrl = DoMaskRRop(*addrl, andBg, xorBg, bit));
- } else {
- Y_Loop(;)
- }
- } else {
- Y_Loop(*addrl = DoMaskRRop(*addrl, andFg, xorFg, bit));
- }
- if (!len)
- break;
- NextDash
- }
- } /* else Y_AXIS */
- }
-#endif
- *pdashIndex = dashIndex;
- *pdashOffset = pDash[dashIndex] - dashRemaining;
-}
diff --git a/cfb/cfbcmap.c b/cfb/cfbcmap.c
deleted file mode 100644
index b96f67170..000000000
--- a/cfb/cfbcmap.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/************************************************************
-Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this
-software and its documentation for any purpose and without
-fee is hereby granted, provided that the above copyright no-
-tice appear in all copies and that both that copyright no-
-tice and this permission notice appear in supporting docu-
-mentation, and that the names of Sun or The Open Group
-not be used in advertising or publicity pertaining to
-distribution of the software without specific prior
-written permission. Sun and The Open Group make no
-representations about the suitability of this software for
-any purpose. It is provided "as is" without any express or
-implied warranty.
-
-SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
-NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-
-ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
-THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include "scrnintstr.h"
-#include "colormapst.h"
-#include "resource.h"
-#include "micmap.h"
-#include "cfb.h"
-
-int
-cfbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
-{
- return miListInstalledColormaps(pScreen, pmaps);
-}
-
-void
-cfbInstallColormap(ColormapPtr pmap)
-{
- miInstallColormap(pmap);
-}
-
-void
-cfbUninstallColormap(ColormapPtr pmap)
-{
- miUninstallColormap(pmap);
-}
-
-void
-cfbResolveColor(unsigned short *pred,
- unsigned short *pgreen,
- unsigned short *pblue,
- VisualPtr pVisual)
-{
- miResolveColor(pred, pgreen, pblue, pVisual);
-}
-
-Bool
-cfbInitializeColormap(ColormapPtr pmap)
-{
- return miInitializeColormap(pmap);
-}
-
-int
-cfbExpandDirectColors (ColormapPtr pmap, int ndef,
- xColorItem *indefs, xColorItem *outdefs)
-{
- return miExpandDirectColors(pmap, ndef, indefs, outdefs);
-}
-
-Bool
-cfbCreateDefColormap(ScreenPtr pScreen)
-{
- return miCreateDefColormap(pScreen);
-}
-
-void
-cfbClearVisualTypes(void)
-{
- miClearVisualTypes();
-}
-
-Bool
-cfbSetVisualTypes (int depth, int visuals, int bitsPerRGB)
-{
- return miSetVisualTypes(depth, visuals, bitsPerRGB, -1);
-}
-
-/*
- * Given a list of formats for a screen, create a list
- * of visuals and depths for the screen which coorespond to
- * the set which can be used with this version of cfb.
- */
-
-Bool
-cfbInitVisuals (VisualPtr *visualp,
- DepthPtr *depthp,
- int *nvisualp,
- int *ndepthp,
- int *rootDepthp,
- VisualID *defaultVisp,
- unsigned long sizes,
- int bitsPerRGB)
-{
- return miInitVisuals(visualp, depthp, nvisualp, ndepthp, rootDepthp,
- defaultVisp, sizes, bitsPerRGB, -1);
-}
diff --git a/cfb/cfbcppl.c b/cfb/cfbcppl.c
deleted file mode 100644
index 00714cbc4..000000000
--- a/cfb/cfbcppl.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <string.h>
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "gcstruct.h"
-#include "window.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
-#include "cfb.h"
-#if PSZ == 8
-#undef PSZ /* for maskbits.h */
-#include "maskbits.h"
-#define PSZ 8
-#include "mergerop.h"
-#endif
-
-
-void
-cfbCopyImagePlane(
- DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- int rop,
- RegionPtr prgnDst,
- DDXPointPtr pptSrc,
- unsigned long planemask)
-{
- /* note: there must be some sort of trick behind,
- passing a planemask value with all bits set
- whilst using the current planemask for the bitPlane value. */
-#if PSZ == 8
- cfbCopyPlane8to1 (pSrcDrawable, pDstDrawable, rop, prgnDst, pptSrc,
- (unsigned long) ~0L, planemask);
-#endif
-#if PSZ == 16
- cfbCopyPlane16to1 (pSrcDrawable, pDstDrawable, rop, prgnDst, pptSrc,
- (unsigned long) ~0L, planemask);
-#endif
-#if PSZ == 24
- cfbCopyPlane24to1 (pSrcDrawable, pDstDrawable, rop, prgnDst, pptSrc,
- (unsigned long) ~0L, planemask);
-#endif
-#if PSZ == 32
- cfbCopyPlane32to1 (pSrcDrawable, pDstDrawable, rop, prgnDst, pptSrc,
- (unsigned long) ~0L, planemask);
-#endif
-}
-
-#if PSZ == 8
-
-#if BITMAP_BIT_ORDER == MSBFirst
-#define LeftMost (MFB_PPW-1)
-#define StepBit(bit, inc) ((bit) -= (inc))
-#else
-#define LeftMost 0
-#define StepBit(bit, inc) ((bit) += (inc))
-#endif
-
-#define GetBits(psrc, nBits, curBit, bitPos, bits) {\
- bits = 0; \
- while (nBits--) \
- { \
- bits |= (PixelType)(((*psrc++ >> bitPos) & 1)) << curBit; \
- StepBit (curBit, 1); \
- } \
-}
-
-void
-cfbCopyPlane8to1(
- DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- int rop,
- RegionPtr prgnDst,
- DDXPointPtr pptSrc,
- unsigned long planemask,
- unsigned long bitPlane)
-{
- int srcx, srcy, dstx, dsty, width, height;
- unsigned char *psrcBase;
- PixelType *pdstBase;
- int widthSrc, widthDst;
- unsigned char *psrcLine;
- PixelType *pdstLine;
- register unsigned char *psrc;
- register int i;
- register int curBit;
- register int bitPos;
- register CfbBits bits;
- register PixelType *pdst;
- PixelType startmask, endmask;
- int niStart = 0, niEnd = 0;
- int bitStart = 0, bitEnd = 0;
- int nl, nlMiddle;
- int nbox;
- BoxPtr pbox;
- MROP_DECLARE()
-
- if (!(planemask & 1))
- return;
-
- if (rop != GXcopy)
- MROP_INITIALIZE (rop, planemask);
-
- cfbGetByteWidthAndPointer (pSrcDrawable, widthSrc, psrcBase)
-
- mfbGetPixelWidthAndPointer (pDstDrawable, widthDst, pdstBase)
-
- bitPos = ffs (bitPlane) - 1;
-
- nbox = REGION_NUM_RECTS(prgnDst);
- pbox = REGION_RECTS(prgnDst);
- while (nbox--)
- {
- dstx = pbox->x1;
- dsty = pbox->y1;
- srcx = pptSrc->x;
- srcy = pptSrc->y;
- width = pbox->x2 - pbox->x1;
- height = pbox->y2 - pbox->y1;
- pbox++;
- pptSrc++;
- psrcLine = psrcBase + srcy * widthSrc + srcx;
- pdstLine = mfbScanline(pdstBase, dstx, dsty, widthDst);
- dstx &= MFB_PIM;
- if (dstx + width <= MFB_PPW)
- {
- maskpartialbits(dstx, width, startmask);
- nlMiddle = 0;
- endmask = 0;
- }
- else
- {
- maskbits (dstx, width, startmask, endmask, nlMiddle);
- }
- if (startmask)
- {
- niStart = min(MFB_PPW - dstx, width);
- bitStart = LeftMost;
- StepBit (bitStart, dstx);
- }
- if (endmask)
- {
- niEnd = (dstx + width) & MFB_PIM;
- bitEnd = LeftMost;
- }
- if (rop == GXcopy)
- {
- while (height--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- psrcLine += widthSrc;
- mfbScanlineInc(pdstLine, widthDst);
- if (startmask)
- {
- i = niStart;
- curBit = bitStart;
- GetBits (psrc, i, curBit, bitPos, bits);
- *pdst = (*pdst & ~startmask) | bits;
- pdst++;
- }
- nl = nlMiddle;
- while (nl--)
- {
- i = MFB_PPW;
- curBit = LeftMost;
- GetBits (psrc, i, curBit, bitPos, bits);
- *pdst++ = bits;
- }
- if (endmask)
- {
- i = niEnd;
- curBit = bitEnd;
- GetBits (psrc, i, curBit, bitPos, bits);
- *pdst = (*pdst & ~endmask) | bits;
- }
- }
- }
- else
- {
- while (height--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- psrcLine += widthSrc;
- mfbScanlineInc(pdstLine, widthDst);
- if (startmask)
- {
- i = niStart;
- curBit = bitStart;
- GetBits (psrc, i, curBit, bitPos, bits);
- *pdst = MROP_MASK(bits, *pdst, startmask);
- pdst++;
- }
- nl = nlMiddle;
- while (nl--)
- {
- i = MFB_PPW;
- curBit = LeftMost;
- GetBits (psrc, i, curBit, bitPos, bits);
- *pdst = MROP_SOLID(bits, *pdst);
- pdst++;
- }
- if (endmask)
- {
- i = niEnd;
- curBit = bitEnd;
- GetBits (psrc, i, curBit, bitPos, bits);
- *pdst = MROP_MASK (bits, *pdst, endmask);
- }
- }
- }
- }
-}
-
-#else /* PSZ == 8 */
-
-#define mfbmaskbits(x, w, startmask, endmask, nlw) \
- startmask = mfbGetstarttab((x)&0x1f); \
- endmask = mfbGetendtab(((x)+(w)) & 0x1f); \
- if (startmask) \
- nlw = (((w) - (32 - ((x)&0x1f))) >> 5); \
- else \
- nlw = (w) >> 5;
-
-#define mfbmaskpartialbits(x, w, mask) \
- mask = mfbGetpartmasks((x)&0x1f,(w)&0x1f);
-
-#define LeftMost 0
-#define StepBit(bit, inc) ((bit) += (inc))
-
-
-#if PSZ == 24
-#define GetBits(psrc, nBits, curBit, bitPos, bits) {\
- bits = 0; \
- while (nBits--) \
- { \
- if (bitPos < 8) \
- { \
- bits |= ((*psrc++ >> bitPos) & 1) << curBit; \
- psrc += 2; \
- } \
- else if (bitPos < 16) \
- { \
- psrc++; \
- bits |= ((*psrc++ >> (bitPos - 8)) & 1) << curBit; \
- psrc++; \
- } \
- else \
- { \
- psrc += 2; \
- bits |= ((*psrc++ >> (bitPos - 16)) & 1) << curBit; \
- } \
- StepBit (curBit, 1); \
- } \
-}
-#else
-#define GetBits(psrc, nBits, curBit, bitPos, bits) {\
- bits = 0; \
- while (nBits--) \
- { \
- bits |= ((*psrc++ >> bitPos) & 1) << curBit; \
- StepBit (curBit, 1); \
- } \
-}
-#endif
-
-void
-#if PSZ == 16
-cfbCopyPlane16to1
-#endif
-#if PSZ == 24
-cfbCopyPlane24to1
-#endif
-#if PSZ == 32
-cfbCopyPlane32to1
-#endif
-(
- DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- int rop,
- RegionPtr prgnDst,
- DDXPointPtr pptSrc,
- unsigned long planemask,
- unsigned long bitPlane)
-{
- int srcx, srcy, dstx, dsty, width, height;
- CfbBits *psrcBase;
- CfbBits *pdstBase;
- int widthSrc, widthDst;
-#if PSZ == 16
- unsigned short *psrcLine;
- register unsigned short *psrc;
-#endif
-#if PSZ == 24
- unsigned char *psrcLine;
- register unsigned char *psrc;
-#endif
-#if PSZ == 32
- unsigned int *psrcLine;
- register unsigned int *psrc;
-#endif
- unsigned int *pdstLine;
- register unsigned int *pdst;
- register int i;
- register int curBit;
- register int bitPos;
- register unsigned int bits;
- unsigned int startmask = 0, endmask = 0;
- int niStart = 0, niEnd = 0;
- int bitStart = 0, bitEnd = 0;
- int nl, nlMiddle;
- int nbox;
- BoxPtr pbox;
- int result;
-
-
- if (!(planemask & 1))
- return;
-
- /* must explicitly ask for "int" widths, as code below expects it */
- /* on some machines (Alpha), "long" and "int" are not the same size */
- cfbGetTypedWidthAndPointer (pSrcDrawable, widthSrc, psrcBase, int, CfbBits)
- cfbGetTypedWidthAndPointer (pDstDrawable, widthDst, pdstBase, int, CfbBits)
-
-#if PSZ == 16
- widthSrc <<= 1;
-#endif
-#if PSZ == 24
- widthSrc <<= 2;
-#endif
-
- bitPos = ffs (bitPlane) - 1;
-
- nbox = REGION_NUM_RECTS(prgnDst);
- pbox = REGION_RECTS(prgnDst);
- while (nbox--)
- {
- dstx = pbox->x1;
- dsty = pbox->y1;
- srcx = pptSrc->x;
- srcy = pptSrc->y;
- width = pbox->x2 - pbox->x1;
- height = pbox->y2 - pbox->y1;
- pbox++;
- pptSrc++;
-#if PSZ == 16
- psrcLine = (unsigned short *)psrcBase + srcy * widthSrc + srcx;
-#endif
-#if PSZ == 24
- psrcLine = (unsigned char *)psrcBase + srcy * widthSrc + srcx * 3;
-#endif
-#if PSZ == 32
- psrcLine = (unsigned int *)psrcBase + srcy * widthSrc + srcx;
-#endif
- pdstLine = (unsigned int *)pdstBase + dsty * widthDst + (dstx >> 5);
- if (dstx + width <= 32)
- {
- mfbmaskpartialbits(dstx, width, startmask);
- nlMiddle = 0;
- endmask = 0;
- }
- else
- {
- mfbmaskbits (dstx, width, startmask, endmask, nlMiddle);
- }
- if (startmask)
- {
- niStart = 32 - (dstx & 0x1f);
- bitStart = LeftMost;
- StepBit (bitStart, (dstx & 0x1f));
- }
- if (endmask)
- {
- niEnd = (dstx + width) & 0x1f;
- bitEnd = LeftMost;
- }
- if (rop == GXcopy)
- {
- while (height--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- psrcLine += widthSrc;
- pdstLine += widthDst;
- if (startmask)
- {
- i = niStart;
- curBit = bitStart;
- GetBits (psrc, i, curBit, bitPos, bits);
-
- *pdst = (*pdst & ~startmask) | bits;
- pdst++;
- }
- nl = nlMiddle;
- while (nl--)
- {
- i = 32;
- curBit = LeftMost;
- GetBits (psrc, i, curBit, bitPos, bits);
- *pdst++ = bits;
- }
- if (endmask)
- {
- i = niEnd;
- curBit = bitEnd;
- GetBits (psrc, i, curBit, bitPos, bits);
-
- *pdst = (*pdst & ~endmask) | bits;
- }
- }
- }
- else
- {
- while (height--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- psrcLine += widthSrc;
- pdstLine += widthDst;
- if (startmask)
- {
- i = niStart;
- curBit = bitStart;
- GetBits (psrc, i, curBit, bitPos, bits);
- DoRop (result, rop, bits, *pdst);
-
- *pdst = (*pdst & ~startmask) |
- (result & startmask);
- pdst++;
- }
- nl = nlMiddle;
- while (nl--)
- {
- i = 32;
- curBit = LeftMost;
- GetBits (psrc, i, curBit, bitPos, bits);
- DoRop (result, rop, bits, *pdst);
- *pdst = result;
- ++pdst;
- }
- if (endmask)
- {
- i = niEnd;
- curBit = bitEnd;
- GetBits (psrc, i, curBit, bitPos, bits);
- DoRop (result, rop, bits, *pdst);
-
- *pdst = (*pdst & ~endmask) |
- (result & endmask);
- }
- }
- }
- }
-}
-
-#endif /* PSZ == 8 */
diff --git a/cfb/cfbfillarc.c b/cfb/cfbfillarc.c
deleted file mode 100644
index 0eb5ff469..000000000
--- a/cfb/cfbfillarc.c
+++ /dev/null
@@ -1,374 +0,0 @@
-/************************************************************
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-********************************************************/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <limits.h>
-
-#include <X11/X.h>
-#include <X11/Xprotostr.h>
-#include "regionstr.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "mifillarc.h"
-#include "cfbrrop.h"
-#include "mi.h"
-
-/* gcc 1.35 is stupid */
-#if defined(__GNUC__) && __GNUC__ < 2 && defined(mc68020)
-#define STUPID volatile
-#else
-#define STUPID
-#endif
-
-static void
-RROP_NAME(cfbFillEllipseSolid)(
- DrawablePtr pDraw,
- GCPtr pGC,
- xArc *arc)
-{
- STUPID int x, y, e;
- STUPID int yk, xk, ym, xm, dx, dy, xorg, yorg;
- miFillArcRec info;
-#if PSZ == 24
- unsigned char *addrlt, *addrlb;
-#else
- CfbBits *addrlt, *addrlb;
-#endif
- register CfbBits *addrl;
- register int n;
- int nlwidth;
- RROP_DECLARE
- register int xpos;
- register int slw;
- CfbBits startmask, endmask;
- int nlmiddle;
-#if PSZ == 24
- register int pidx;
- int xpos3;
-#endif
-
-#if PSZ == 24
- cfbGetByteWidthAndPointer (pDraw, nlwidth, addrlt)
-#else
- cfbGetLongWidthAndPointer (pDraw, nlwidth, addrlt)
-#endif
-
- RROP_FETCH_GC(pGC);
- miFillArcSetup(arc, &info);
- MIFILLARCSETUP();
- xorg += pDraw->x;
- yorg += pDraw->y;
- addrlb = addrlt;
- addrlt += nlwidth * (yorg - y);
- addrlb += nlwidth * (yorg + y + dy);
- while (y)
- {
- addrlt += nlwidth;
- addrlb -= nlwidth;
- MIFILLARCSTEP(slw);
- if (!slw)
- continue;
- xpos = xorg - x;
-#if PSZ == 24
- xpos3 = (xpos * 3) & ~0x03;
- addrl = (CfbBits *)((char *)addrlt + xpos3);
- if (slw == 1){
- RROP_SOLID24(addrl, xpos);
- if (miFillArcLower(slw)){
- addrl = (CfbBits *)((char *)addrlb + xpos3);
- RROP_SOLID24(addrl, xpos);
- }
- continue;
- }
- maskbits(xpos, slw, startmask, endmask, nlmiddle);
- xpos &= 3;
- pidx = xpos;
- if (startmask){
- RROP_SOLID_MASK(addrl, startmask, pidx-1);
- addrl++;
- if (pidx == 3)
- pidx = 0;
- }
- n = nlmiddle;
- while (--n >= 0){
- RROP_SOLID(addrl, pidx);
- addrl++;
- if (++pidx == 3)
- pidx = 0;
- }
- if (endmask)
- RROP_SOLID_MASK(addrl, endmask, pidx);
- if (!miFillArcLower(slw))
- continue;
- addrl = (CfbBits *)((char *)addrlb + xpos3);
- pidx = xpos;
- if (startmask){
- RROP_SOLID_MASK(addrl, startmask, pidx-1);
- addrl++;
- if (pidx == 3)
- pidx = 0;
- }
- n = nlmiddle;
- while (--n >= 0){
- RROP_SOLID(addrl, pidx);
- addrl++;
- if (++pidx == 3)
- pidx = 0;
- }
- if (endmask)
- RROP_SOLID_MASK(addrl, endmask, pidx);
-#else /* PSZ == 24 */
- addrl = addrlt + (xpos >> PWSH);
- if (((xpos & PIM) + slw) <= PPW)
- {
- maskpartialbits(xpos, slw, startmask);
- RROP_SOLID_MASK(addrl,startmask);
- if (miFillArcLower(slw))
- {
- addrl = addrlb + (xpos >> PWSH);
- RROP_SOLID_MASK(addrl, startmask);
- }
- continue;
- }
- maskbits(xpos, slw, startmask, endmask, nlmiddle);
- if (startmask)
- {
- RROP_SOLID_MASK(addrl, startmask);
- addrl++;
- }
- n = nlmiddle;
- RROP_SPAN(addrl,n)
-
- if (endmask)
- RROP_SOLID_MASK(addrl, endmask);
- if (!miFillArcLower(slw))
- continue;
- addrl = addrlb + (xpos >> PWSH);
- if (startmask)
- {
- RROP_SOLID_MASK(addrl, startmask);
- addrl++;
- }
- n = nlmiddle;
- RROP_SPAN(addrl, n);
- if (endmask)
- RROP_SOLID_MASK(addrl, endmask);
-#endif /* PSZ == 24 */
- }
- RROP_UNDECLARE
-}
-
-#if PSZ == 24
-#define FILLSPAN(xl,xr,addr) \
- if (xr >= xl){ \
- n = xr - xl + 1; \
- addrl = (CfbBits *)((char *)addr + ((xl * 3) & ~0x03)); \
- if (n <= 1){ \
- if (n) \
- RROP_SOLID24(addrl, xl); \
- } else { \
- maskbits(xl, n, startmask, endmask, n); \
- pidx = xl & 3; \
- if (startmask){ \
- RROP_SOLID_MASK(addrl, startmask, pidx-1); \
- addrl++; \
- if (pidx == 3) \
- pidx = 0; \
- } \
- while (--n >= 0){ \
- RROP_SOLID(addrl, pidx); \
- addrl++; \
- if (++pidx == 3) \
- pidx = 0; \
- } \
- if (endmask) \
- RROP_SOLID_MASK(addrl, endmask, pidx); \
- } \
- }
-#else /* PSZ == 24 */
-#define FILLSPAN(xl,xr,addr) \
- if (xr >= xl) \
- { \
- n = xr - xl + 1; \
- addrl = addr + (xl >> PWSH); \
- if (((xl & PIM) + n) <= PPW) \
- { \
- maskpartialbits(xl, n, startmask); \
- RROP_SOLID_MASK(addrl, startmask); \
- } \
- else \
- { \
- maskbits(xl, n, startmask, endmask, n); \
- if (startmask) \
- { \
- RROP_SOLID_MASK(addrl, startmask); \
- addrl++; \
- } \
- while (n--) \
- { \
- RROP_SOLID(addrl); \
- ++addrl; \
- } \
- if (endmask) \
- RROP_SOLID_MASK(addrl, endmask); \
- } \
- }
-#endif /* PSZ == 24 */
-
-#define FILLSLICESPANS(flip,addr) \
- if (!flip) \
- { \
- FILLSPAN(xl, xr, addr); \
- } \
- else \
- { \
- xc = xorg - x; \
- FILLSPAN(xc, xr, addr); \
- xc += slw - 1; \
- FILLSPAN(xl, xc, addr); \
- }
-
-static void
-RROP_NAME(cfbFillArcSliceSolid)(
- DrawablePtr pDraw,
- GCPtr pGC,
- xArc *arc)
-{
- int yk, xk, ym, xm, dx, dy, xorg, yorg, slw;
- register int x, y, e;
- miFillArcRec info;
- miArcSliceRec slice;
- int xl, xr, xc;
-#if PSZ == 24
- unsigned char *addrlt, *addrlb;
-#else
- CfbBits *addrlt, *addrlb;
-#endif
- register CfbBits *addrl;
- register int n;
- int nlwidth;
- RROP_DECLARE
- CfbBits startmask, endmask;
-#if PSZ == 24
- register int pidx;
-#endif /* PSZ == 24 */
-
-#if PSZ == 24
- cfbGetByteWidthAndPointer (pDraw, nlwidth, addrlt)
-#else
- cfbGetLongWidthAndPointer (pDraw, nlwidth, addrlt)
-#endif
-
- RROP_FETCH_GC(pGC);
- miFillArcSetup(arc, &info);
- miFillArcSliceSetup(arc, &slice, pGC);
- MIFILLARCSETUP();
- xorg += pDraw->x;
- yorg += pDraw->y;
- addrlb = addrlt;
- addrlt += nlwidth * (yorg - y);
- addrlb += nlwidth * (yorg + y + dy);
- slice.edge1.x += pDraw->x;
- slice.edge2.x += pDraw->x;
- while (y > 0)
- {
- addrlt += nlwidth;
- addrlb -= nlwidth;
- MIFILLARCSTEP(slw);
- MIARCSLICESTEP(slice.edge1);
- MIARCSLICESTEP(slice.edge2);
- if (miFillSliceUpper(slice))
- {
- MIARCSLICEUPPER(xl, xr, slice, slw);
- FILLSLICESPANS(slice.flip_top, addrlt);
- }
- if (miFillSliceLower(slice))
- {
- MIARCSLICELOWER(xl, xr, slice, slw);
- FILLSLICESPANS(slice.flip_bot, addrlb);
- }
- }
- RROP_UNDECLARE
-}
-
-void
-RROP_NAME(cfbPolyFillArcSolid) (pDraw, pGC, narcs, parcs)
- DrawablePtr pDraw;
- GCPtr pGC;
- int narcs;
- xArc *parcs;
-{
- register xArc *arc;
- register int i;
- int x2, y2;
- BoxRec box;
- RegionPtr cclip;
-
- cclip = cfbGetCompositeClip(pGC);
- for (arc = parcs, i = narcs; --i >= 0; arc++)
- {
- if (miFillArcEmpty(arc))
- continue;
- if (miCanFillArc(arc))
- {
- box.x1 = arc->x + pDraw->x;
- box.y1 = arc->y + pDraw->y;
- /*
- * Because box.x2 and box.y2 get truncated to 16 bits, and the
- * RECT_IN_REGION test treats the resulting number as a signed
- * integer, the RECT_IN_REGION test alone can go the wrong way.
- * This can result in a server crash because the rendering
- * routines in this file deal directly with cpu addresses
- * of pixels to be stored, and do not clip or otherwise check
- * that all such addresses are within their respective pixmaps.
- * So we only allow the RECT_IN_REGION test to be used for
- * values that can be expressed correctly in a signed short.
- */
- x2 = box.x1 + (int)arc->width + 1;
- box.x2 = x2;
- y2 = box.y1 + (int)arc->height + 1;
- box.y2 = y2;
- if ( (x2 <= SHRT_MAX) && (y2 <= SHRT_MAX) &&
- (RECT_IN_REGION(pDraw->pScreen, cclip, &box) == rgnIN) )
- {
- if ((arc->angle2 >= FULLCIRCLE) ||
- (arc->angle2 <= -FULLCIRCLE))
- RROP_NAME(cfbFillEllipseSolid)(pDraw, pGC, arc);
- else
- RROP_NAME(cfbFillArcSliceSolid)(pDraw, pGC, arc);
- continue;
- }
- }
- miPolyFillArc(pDraw, pGC, 1, arc);
- }
-}
diff --git a/cfb/cfbfillrct.c b/cfb/cfbfillrct.c
deleted file mode 100644
index fc2d31bdc..000000000
--- a/cfb/cfbfillrct.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Fill rectangles.
- */
-
-/*
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-*/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-#include "gcstruct.h"
-#include "window.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
-#include "mi.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "mergerop.h"
-
-
-void
-cfbFillBoxTileOdd (pDrawable, n, rects, tile, xrot, yrot)
- DrawablePtr pDrawable;
- int n;
- BoxPtr rects;
- PixmapPtr tile;
- int xrot, yrot;
-{
-#if PSZ == 24
- if (tile->drawable.width & 3)
-#else
- if (tile->drawable.width & PIM)
-#endif
- cfbFillBoxTileOddCopy (pDrawable, n, rects, tile, xrot, yrot, GXcopy, ~0L);
- else
- cfbFillBoxTile32sCopy (pDrawable, n, rects, tile, xrot, yrot, GXcopy, ~0L);
-}
-
-void
-cfbFillRectTileOdd (pDrawable, pGC, nBox, pBox)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nBox;
- BoxPtr pBox;
-{
- int xrot, yrot;
- void (*fill)(DrawablePtr, int, BoxPtr, PixmapPtr, int, int, int, unsigned long);
-
- xrot = pDrawable->x + pGC->patOrg.x;
- yrot = pDrawable->y + pGC->patOrg.y;
-#if PSZ == 24
- if (pGC->tile.pixmap->drawable.width & 3)
-#else
- if (pGC->tile.pixmap->drawable.width & PIM)
-#endif
- {
- fill = cfbFillBoxTileOddGeneral;
- if ((pGC->planemask & PMSK) == PMSK)
- {
- if (pGC->alu == GXcopy)
- fill = cfbFillBoxTileOddCopy;
- }
- }
- else
- {
- fill = cfbFillBoxTile32sGeneral;
- if ((pGC->planemask & PMSK) == PMSK)
- {
- if (pGC->alu == GXcopy)
- fill = cfbFillBoxTile32sCopy;
- }
- }
- (*fill) (pDrawable, nBox, pBox, pGC->tile.pixmap, xrot, yrot, pGC->alu, pGC->planemask);
-}
-
-#define NUM_STACK_RECTS 1024
-
-void
-cfbPolyFillRect(pDrawable, pGC, nrectFill, prectInit)
- DrawablePtr pDrawable;
- register GCPtr pGC;
- int nrectFill; /* number of rectangles to fill */
- xRectangle *prectInit; /* Pointer to first rectangle to fill */
-{
- xRectangle *prect;
- RegionPtr prgnClip;
- register BoxPtr pbox;
- register BoxPtr pboxClipped;
- BoxPtr pboxClippedBase;
- BoxPtr pextent;
- BoxRec stackRects[NUM_STACK_RECTS];
- cfbPrivGC *priv;
- int numRects;
- void (*BoxFill)(DrawablePtr, GCPtr, int, BoxPtr);
- int n;
- int xorg, yorg;
-
-#if PSZ != 8
- if ((pGC->fillStyle == FillStippled) ||
- (pGC->fillStyle == FillOpaqueStippled)) {
- miPolyFillRect(pDrawable, pGC, nrectFill, prectInit);
- return;
- }
-#endif
-
- priv = cfbGetGCPrivate(pGC);
- prgnClip = pGC->pCompositeClip;
-
- BoxFill = 0;
- switch (pGC->fillStyle)
- {
- case FillSolid:
- switch (priv->rop) {
- case GXcopy:
- BoxFill = cfbFillRectSolidCopy;
- break;
- case GXxor:
- BoxFill = cfbFillRectSolidXor;
- break;
- default:
- BoxFill = cfbFillRectSolidGeneral;
- break;
- }
- break;
- case FillTiled:
- if (!pGC->pRotatedPixmap)
- BoxFill = cfbFillRectTileOdd;
- else
- {
- if (pGC->alu == GXcopy && (pGC->planemask & PMSK) == PMSK)
- BoxFill = cfbFillRectTile32Copy;
- else
- BoxFill = cfbFillRectTile32General;
- }
- break;
-#if PSZ == 8
- case FillStippled:
- if (!pGC->pRotatedPixmap)
- BoxFill = cfb8FillRectStippledUnnatural;
- else
- BoxFill = cfb8FillRectTransparentStippled32;
- break;
- case FillOpaqueStippled:
- if (!pGC->pRotatedPixmap)
- BoxFill = cfb8FillRectStippledUnnatural;
- else
- BoxFill = cfb8FillRectOpaqueStippled32;
- break;
-#endif
- }
- prect = prectInit;
- xorg = pDrawable->x;
- yorg = pDrawable->y;
- if (xorg || yorg)
- {
- prect = prectInit;
- n = nrectFill;
- while(n--)
- {
- prect->x += xorg;
- prect->y += yorg;
- prect++;
- }
- }
-
- prect = prectInit;
-
- numRects = REGION_NUM_RECTS(prgnClip) * nrectFill;
- if (numRects > NUM_STACK_RECTS)
- {
- pboxClippedBase = (BoxPtr)xalloc(numRects * sizeof(BoxRec));
- if (!pboxClippedBase)
- return;
- }
- else
- pboxClippedBase = stackRects;
-
- pboxClipped = pboxClippedBase;
-
- if (REGION_NUM_RECTS(prgnClip) == 1)
- {
- int x1, y1, x2, y2, bx2, by2;
-
- pextent = REGION_RECTS(prgnClip);
- x1 = pextent->x1;
- y1 = pextent->y1;
- x2 = pextent->x2;
- y2 = pextent->y2;
- while (nrectFill--)
- {
- if ((pboxClipped->x1 = prect->x) < x1)
- pboxClipped->x1 = x1;
-
- if ((pboxClipped->y1 = prect->y) < y1)
- pboxClipped->y1 = y1;
-
- bx2 = (int) prect->x + (int) prect->width;
- if (bx2 > x2)
- bx2 = x2;
- pboxClipped->x2 = bx2;
-
- by2 = (int) prect->y + (int) prect->height;
- if (by2 > y2)
- by2 = y2;
- pboxClipped->y2 = by2;
-
- prect++;
- if ((pboxClipped->x1 < pboxClipped->x2) &&
- (pboxClipped->y1 < pboxClipped->y2))
- {
- pboxClipped++;
- }
- }
- }
- else
- {
- int x1, y1, x2, y2, bx2, by2;
-
- pextent = REGION_EXTENTS(pGC->pScreen, prgnClip);
- x1 = pextent->x1;
- y1 = pextent->y1;
- x2 = pextent->x2;
- y2 = pextent->y2;
- while (nrectFill--)
- {
- BoxRec box;
-
- if ((box.x1 = prect->x) < x1)
- box.x1 = x1;
-
- if ((box.y1 = prect->y) < y1)
- box.y1 = y1;
-
- bx2 = (int) prect->x + (int) prect->width;
- if (bx2 > x2)
- bx2 = x2;
- box.x2 = bx2;
-
- by2 = (int) prect->y + (int) prect->height;
- if (by2 > y2)
- by2 = y2;
- box.y2 = by2;
-
- prect++;
-
- if ((box.x1 >= box.x2) || (box.y1 >= box.y2))
- continue;
-
- n = REGION_NUM_RECTS (prgnClip);
- pbox = REGION_RECTS(prgnClip);
-
- /* clip the rectangle to each box in the clip region
- this is logically equivalent to calling Intersect()
- */
- while(n--)
- {
- pboxClipped->x1 = max(box.x1, pbox->x1);
- pboxClipped->y1 = max(box.y1, pbox->y1);
- pboxClipped->x2 = min(box.x2, pbox->x2);
- pboxClipped->y2 = min(box.y2, pbox->y2);
- pbox++;
-
- /* see if clipping left anything */
- if(pboxClipped->x1 < pboxClipped->x2 &&
- pboxClipped->y1 < pboxClipped->y2)
- {
- pboxClipped++;
- }
- }
- }
- }
- if (pboxClipped != pboxClippedBase)
- (*BoxFill) (pDrawable, pGC,
- pboxClipped-pboxClippedBase, pboxClippedBase);
- if (pboxClippedBase != stackRects)
- xfree(pboxClippedBase);
-}
diff --git a/cfb/cfbfillsp.c b/cfb/cfbfillsp.c
deleted file mode 100644
index 36710b612..000000000
--- a/cfb/cfbfillsp.c
+++ /dev/null
@@ -1,1004 +0,0 @@
-/************************************************************
-Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this
-software and its documentation for any purpose and without
-fee is hereby granted, provided that the above copyright no-
-tice appear in all copies and that both that copyright no-
-tice and this permission notice appear in supporting docu-
-mentation, and that the names of Sun or The Open Group
-not be used in advertising or publicity pertaining to
-distribution of the software without specific prior
-written permission. Sun and The Open Group make no
-representations about the suitability of this software for
-any purpose. It is provided "as is" without any express or
-implied warranty.
-
-SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
-NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-
-ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
-THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-#include "gcstruct.h"
-#include "window.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
-
-#include "cfb.h"
-#include "cfbmskbits.h"
-
-#include "mergerop.h"
-
-#if PSZ == 8
-#include "cfb8bit.h"
-#endif
-
-#define MFB_CONSTS_ONLY
-#include "maskbits.h"
-
-#include "mi.h"
-#include "mispans.h"
-
-/* scanline filling for color frame buffer
- written by drewry, oct 1986 modified by smarks
- changes for compatibility with Little-endian systems Jul 1987; MIT:yba.
-
- these routines all clip. they assume that anything that has called
-them has already translated the points (i.e. pGC->miTranslate is
-non-zero, which is howit gets set in cfbCreateGC().)
-
- the number of new scnalines created by clipping ==
-MaxRectsPerBand * nSpans.
-
- FillSolid is overloaded to be used for OpaqueStipple as well,
-if fgPixel == bgPixel.
-Note that for solids, PrivGC.rop == PrivGC.ropOpStip
-
-
- FillTiled is overloaded to be used for OpaqueStipple, if
-fgPixel != bgPixel. based on the fill style, it uses
-{RotatedTile, gc.alu} or {RotatedStipple, PrivGC.ropOpStip}
-*/
-
-#ifdef notdef
-#include <stdio.h>
-static
-dumpspans(n, ppt, pwidth)
- int n;
- DDXPointPtr ppt;
- int *pwidth;
-{
- fprintf(stderr,"%d spans\n", n);
- while (n--) {
- fprintf(stderr, "[%d,%d] %d\n", ppt->x, ppt->y, *pwidth);
- ppt++;
- pwidth++;
- }
- fprintf(stderr, "\n");
-}
-#endif
-
-/* Fill spans with tiles that aren't 32 bits wide */
-void
-cfbUnnaturalTileFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)
-DrawablePtr pDrawable;
-GC *pGC;
-int nInit; /* number of spans to fill */
-DDXPointPtr pptInit; /* pointer to list of start points */
-int *pwidthInit; /* pointer to list of n widths */
-int fSorted;
-{
- int n; /* number of spans to fill */
- register DDXPointPtr ppt; /* pointer to list of start points */
- register int *pwidth; /* pointer to list of n widths */
- void (*fill)(DrawablePtr, int, DDXPointPtr, int *, PixmapPtr, int, int, int, unsigned long);
- int xrot, yrot;
-
- if (!(pGC->planemask))
- return;
-
-#if PSZ == 24
- if (pGC->tile.pixmap->drawable.width & 3)
-#else
- if (pGC->tile.pixmap->drawable.width & PIM)
-#endif
- {
- fill = cfbFillSpanTileOddGeneral;
- if ((pGC->planemask & PMSK) == PMSK)
- {
- if (pGC->alu == GXcopy)
- fill = cfbFillSpanTileOddCopy;
- }
- }
- else
- {
- fill = cfbFillSpanTile32sGeneral;
- if ((pGC->planemask & PMSK) == PMSK)
- {
- if (pGC->alu == GXcopy)
- fill = cfbFillSpanTile32sCopy;
- }
- }
- n = nInit * miFindMaxBand( cfbGetCompositeClip(pGC) );
- if ( n == 0 )
- return;
- pwidth = (int *)xalloc(n * sizeof(int));
- ppt = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec));
- if(!ppt || !pwidth)
- {
- if (ppt) xfree(ppt);
- if (pwidth) xfree(pwidth);
- return;
- }
- n = miClipSpans( cfbGetCompositeClip(pGC),
- pptInit, pwidthInit, nInit,
- ppt, pwidth, fSorted);
-
- xrot = pDrawable->x + pGC->patOrg.x;
- yrot = pDrawable->y + pGC->patOrg.y;
-
- (*fill) (pDrawable, n, ppt, pwidth, pGC->tile.pixmap, xrot, yrot, pGC->alu, pGC->planemask);
-
- xfree(ppt);
- xfree(pwidth);
-}
-
-#if PSZ == 8
-
-void
-cfbUnnaturalStippleFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)
-DrawablePtr pDrawable;
-GC *pGC;
-int nInit; /* number of spans to fill */
-DDXPointPtr pptInit; /* pointer to list of start points */
-int *pwidthInit; /* pointer to list of n widths */
-int fSorted;
-{
- /* next three parameters are post-clip */
- int n; /* number of spans to fill */
- DDXPointPtr ppt; /* pointer to list of start points */
- int *pwidth; /* pointer to list of n widths */
- int *pwidthFree;/* copies of the pointers to free */
- DDXPointPtr pptFree;
- CfbBits *pdstBase; /* pointer to start of bitmap */
- int nlwDst; /* width in longwords of bitmap */
- register CfbBits *pdst; /* pointer to current word in bitmap */
- PixmapPtr pStipple; /* pointer to stipple we want to fill with */
- int nlw;
- int x, y, w, xrem, xSrc, ySrc;
- int stwidth, stippleWidth;
- int stippleHeight;
- register CfbBits bits, inputBits;
- register int partBitsLeft;
- int nextPartBits;
- int bitsLeft, bitsWhole;
- CfbBits *srcTemp, *srcStart;
- CfbBits *psrcBase;
- CfbBits startmask, endmask;
-
- if (pGC->fillStyle == FillStippled)
- cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask);
- else
- cfb8CheckOpaqueStipple (pGC->alu, pGC->fgPixel, pGC->bgPixel, pGC->planemask);
-
- if (cfb8StippleRRop == GXnoop)
- return;
-
- n = nInit * miFindMaxBand( cfbGetCompositeClip(pGC) );
- if ( n == 0 )
- return;
- pwidthFree = (int *)xalloc(n * sizeof(int));
- pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec));
- if(!pptFree || !pwidthFree)
- {
- if (pptFree) xfree(pptFree);
- if (pwidthFree) xfree(pwidthFree);
- return;
- }
-
- pwidth = pwidthFree;
- ppt = pptFree;
- n = miClipSpans( cfbGetCompositeClip(pGC),
- pptInit, pwidthInit, nInit,
- ppt, pwidth, fSorted);
-
- /*
- * OK, so what's going on here? We have two Drawables:
- *
- * The Stipple:
- * Depth = 1
- * Width = stippleWidth
- * Words per scanline = stwidth
- * Pointer to pixels = pStipple->devPrivate.ptr
- */
-
- pStipple = pGC->stipple;
-
- stwidth = pStipple->devKind >> PWSH;
- stippleWidth = pStipple->drawable.width;
- stippleHeight = pStipple->drawable.height;
- psrcBase = (CfbBits *) pStipple->devPrivate.ptr;
-
- /*
- * The Target:
- * Depth = PSZ
- * Width = determined from *pwidth
- * Words per scanline = nlwDst
- * Pointer to pixels = addrlBase
- */
-
- cfbGetLongWidthAndPointer (pDrawable, nlwDst, pdstBase)
-
- /* this replaces rotating the stipple. Instead we just adjust the offset
- * at which we start grabbing bits from the stipple.
- * Ensure that ppt->x - xSrc >= 0 and ppt->y - ySrc >= 0,
- * so that iline and xrem always stay within the stipple bounds.
- */
-
- modulus (pGC->patOrg.x, stippleWidth, xSrc);
- xSrc += pDrawable->x - stippleWidth;
- modulus (pGC->patOrg.y, stippleHeight, ySrc);
- ySrc += pDrawable->y - stippleHeight;
-
- bitsWhole = stippleWidth;
-
- while (n--)
- {
- x = ppt->x;
- y = ppt->y;
- ppt++;
- w = *pwidth++;
- pdst = pdstBase + y * nlwDst + (x >> PWSH);
- y = (y - ySrc) % stippleHeight;
- srcStart = psrcBase + y * stwidth;
- xrem = ((x & ~(PGSZB-1)) - xSrc) % stippleWidth;
- srcTemp = srcStart + (xrem >> MFB_PWSH);
- bitsLeft = stippleWidth - (xrem & ~MFB_PIM);
- xrem &= MFB_PIM;
- NextUnnaturalStippleWord
- if (partBitsLeft < xrem)
- FatalError ("cfbUnnaturalStippleFS bad partBitsLeft %d xrem %d",
- partBitsLeft, xrem);
- NextSomeBits (inputBits, xrem);
- partBitsLeft -= xrem;
- if (((x & PIM) + w) <= PPW)
- {
- maskpartialbits (x, w, startmask)
- NextUnnaturalStippleBits
- *pdst = MaskRRopPixels(*pdst,bits,startmask);
- }
- else
- {
- maskbits (x, w, startmask, endmask, nlw);
- nextPartBits = (x & (PGSZB-1)) + w;
- if (nextPartBits < partBitsLeft)
- {
- if (startmask)
- {
- MaskRRopBitGroup(pdst,GetBitGroup(inputBits),startmask)
- pdst++;
- NextBitGroup (inputBits);
- }
- while (nlw--)
- {
- RRopBitGroup (pdst, GetBitGroup (inputBits));
- pdst++;
- NextBitGroup (inputBits);
- }
- if (endmask)
- {
- MaskRRopBitGroup(pdst,GetBitGroup(inputBits),endmask)
- }
- }
- else if (bitsLeft != bitsWhole && nextPartBits < partBitsLeft + bitsLeft)
- {
- NextUnnaturalStippleBitsFast
- if (startmask)
- {
- *pdst = MaskRRopPixels(*pdst,bits,startmask);
- pdst++;
- NextUnnaturalStippleBitsFast
- }
- while (nlw--)
- {
- *pdst = RRopPixels(*pdst,bits);
- pdst++;
- NextUnnaturalStippleBitsFast
- }
- if (endmask)
- *pdst = MaskRRopPixels (*pdst,bits,endmask);
- }
- else
- {
- NextUnnaturalStippleBits
- if (startmask)
- {
- *pdst = MaskRRopPixels(*pdst,bits,startmask);
- pdst++;
- NextUnnaturalStippleBits
- }
- while (nlw--)
- {
- *pdst = RRopPixels(*pdst,bits);
- pdst++;
- NextUnnaturalStippleBits
- }
- if (endmask)
- *pdst = MaskRRopPixels(*pdst,bits,endmask);
- }
- }
- }
- xfree(pptFree);
- xfree(pwidthFree);
-}
-
-#else /* PSZ != 8 */
-
-/* Fill spans with stipples that aren't 32 bits wide */
-void
-cfbUnnaturalStippleFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)
-DrawablePtr pDrawable;
-GC *pGC;
-int nInit; /* number of spans to fill */
-DDXPointPtr pptInit; /* pointer to list of start points */
-int *pwidthInit; /* pointer to list of n widths */
-int fSorted;
-{
- /* next three parameters are post-clip */
- int n; /* number of spans to fill */
- register DDXPointPtr ppt; /* pointer to list of start points */
- register int *pwidth; /* pointer to list of n widths */
- int iline; /* first line of tile to use */
- CfbBits *addrlBase; /* pointer to start of bitmap */
- int nlwidth; /* width in longwords of bitmap */
- register CfbBits *pdst; /* pointer to current word in bitmap */
- PixmapPtr pStipple; /* pointer to stipple we want to fill with */
- register int w;
- int width, x, xrem, xSrc, ySrc;
- CfbBits tmpSrc, tmpDst1, tmpDst2;
- int stwidth, stippleWidth;
- CfbBits *psrcS;
- int rop, stiprop = 0;
- int stippleHeight;
- int *pwidthFree; /* copies of the pointers to free */
- DDXPointPtr pptFree;
- CfbBits fgfill, bgfill;
-
- if (!(pGC->planemask))
- return;
-
- n = nInit * miFindMaxBand( cfbGetCompositeClip(pGC) );
- if ( n == 0 )
- return;
- pwidthFree = (int *)xalloc(n * sizeof(int));
- pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec));
- if(!pptFree || !pwidthFree)
- {
- if (pptFree) xfree(pptFree);
- if (pwidthFree) xfree(pwidthFree);
- return;
- }
- pwidth = pwidthFree;
- ppt = pptFree;
- n = miClipSpans( cfbGetCompositeClip(pGC),
- pptInit, pwidthInit, nInit,
- ppt, pwidth, fSorted);
- rop = pGC->alu;
- if (pGC->fillStyle == FillStippled) {
- switch (rop) {
- case GXand:
- case GXcopy:
- case GXnoop:
- case GXor:
- stiprop = rop;
- break;
- default:
- stiprop = rop;
- rop = GXcopy;
- }
- }
- fgfill = PFILL(pGC->fgPixel);
- bgfill = PFILL(pGC->bgPixel);
-
- /*
- * OK, so what's going on here? We have two Drawables:
- *
- * The Stipple:
- * Depth = 1
- * Width = stippleWidth
- * Words per scanline = stwidth
- * Pointer to pixels = pStipple->devPrivate.ptr
- */
- pStipple = pGC->stipple;
-
- stwidth = pStipple->devKind / PGSZB;
- stippleWidth = pStipple->drawable.width;
- stippleHeight = pStipple->drawable.height;
-
- /*
- * The Target:
- * Depth = PSZ
- * Width = determined from *pwidth
- * Words per scanline = nlwidth
- * Pointer to pixels = addrlBase
- */
-
- cfbGetLongWidthAndPointer (pDrawable, nlwidth, addrlBase)
-
- /* this replaces rotating the stipple. Instead we just adjust the offset
- * at which we start grabbing bits from the stipple.
- * Ensure that ppt->x - xSrc >= 0 and ppt->y - ySrc >= 0,
- * so that iline and xrem always stay within the stipple bounds.
- */
- modulus (pGC->patOrg.x, stippleWidth, xSrc);
- xSrc += pDrawable->x - stippleWidth;
- modulus (pGC->patOrg.y, stippleHeight, ySrc);
- ySrc += pDrawable->y - stippleHeight;
-
- while (n--)
- {
- iline = (ppt->y - ySrc) % stippleHeight;
- x = ppt->x;
- pdst = addrlBase + (ppt->y * nlwidth);
- psrcS = (CfbBits *) pStipple->devPrivate.ptr + (iline * stwidth);
-
- if (*pwidth)
- {
- width = *pwidth;
- while(width > 0)
- {
- int xtemp;
-#if PSZ != 32 || PPW != 1
- int tmpx;
-#endif
- register CfbBits *ptemp;
- register CfbBits *pdsttmp;
- /*
- * Do a stripe through the stipple & destination w pixels
- * wide. w is not more than:
- * - the width of the destination
- * - the width of the stipple
- * - the distance between x and the next word
- * boundary in the destination
- * - the distance between x and the next word
- * boundary in the stipple
- */
-
- /* width of dest/stipple */
- xrem = (x - xSrc) % stippleWidth;
-#if PSZ == 24
- w = 1;
-#else
- w = min((stippleWidth - xrem), width);
- /* dist to word bound in dest */
- w = min(w, PPW - (x & PIM));
- /* dist to word bound in stip */
- w = min(w, MFB_PPW - (x & MFB_PIM));
-#endif
-
- xtemp = (xrem & MFB_PIM);
- ptemp = (CfbBits *)(psrcS + (xrem >> MFB_PWSH));
-#if PSZ == 24
- tmpx = x & 3;
- pdsttmp = pdst + ((x * 3)>>2);
-#else
-#if PSZ != 32 || PPW != 1
- tmpx = x & PIM;
-#endif
- pdsttmp = pdst + (x>>PWSH);
-#endif
- switch ( pGC->fillStyle ) {
- case FillOpaqueStippled:
-#if PSZ == 24
- getstipplepixels24(ptemp, xtemp, 0, &bgfill, &tmpDst1, xrem);
- getstipplepixels24(ptemp, xtemp, 1, &fgfill, &tmpDst2, xrem);
-#else
- getstipplepixels(ptemp, xtemp, w, 0, &bgfill, &tmpDst1);
- getstipplepixels(ptemp, xtemp, w, 1, &fgfill, &tmpDst2);
-#endif
- break;
- case FillStippled:
- /* Fill tmpSrc with the source pixels */
-#if PSZ == 24
- getbits24(pdsttmp, tmpSrc, x);
- getstipplepixels24(ptemp, xtemp, 0, &tmpSrc, &tmpDst1, xrem);
-#else
- getbits(pdsttmp, tmpx, w, tmpSrc);
- getstipplepixels(ptemp, xtemp, w, 0, &tmpSrc, &tmpDst1);
-#endif
- if (rop != stiprop) {
-#if PSZ == 24
- putbitsrop24(fgfill, 0, &tmpSrc, pGC->planemask, stiprop);
-#else
- putbitsrop(fgfill, 0, w, &tmpSrc, pGC->planemask, stiprop);
-#endif
- } else {
- tmpSrc = fgfill;
- }
-#if PSZ == 24
- getstipplepixels24(ptemp, xtemp, 1, &tmpSrc, &tmpDst2, xrem);
-#else
- getstipplepixels(ptemp, xtemp, w, 1, &tmpSrc, &tmpDst2);
-#endif
- break;
- }
- tmpDst2 |= tmpDst1;
-#if PSZ == 24
- putbitsrop24(tmpDst2, tmpx, pdsttmp, pGC->planemask, rop);
-#else
- putbitsrop(tmpDst2, tmpx, w, pdsttmp, pGC->planemask, rop);
-#endif
- x += w;
- width -= w;
- }
- }
- ppt++;
- pwidth++;
- }
- xfree(pptFree);
- xfree(pwidthFree);
-}
-
-#endif /* PSZ == 8 */
-
-#if PSZ == 8
-
-void
-cfb8Stipple32FS (pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nInit; /* number of spans to fill */
- DDXPointPtr pptInit; /* pointer to list of start points */
- int *pwidthInit; /* pointer to list of n widths */
- int fSorted;
-{
- /* next three parameters are post-clip */
- int n; /* number of spans to fill */
- DDXPointPtr ppt; /* pointer to list of start points */
- int *pwidth; /* pointer to list of n widths */
- CfbBits *src; /* pointer to bits in stipple, if needed */
- int stippleHeight; /* height of the stipple */
- PixmapPtr stipple;
-
- int nlwDst; /* width in longwords of the dest pixmap */
- int x,y,w; /* current span */
- CfbBits startmask;
- CfbBits endmask;
- register CfbBits *dst; /* pointer to bits we're writing */
- register int nlw;
- CfbBits *dstTmp;
- int nlwTmp;
-
- CfbBits *pbits; /* pointer to start of pixmap */
- register CfbBits xor;
- register CfbBits mask;
- register CfbBits bits; /* bits from stipple */
- int wEnd;
-
- int *pwidthFree; /* copies of the pointers to free */
- DDXPointPtr pptFree;
- cfbPrivGCPtr devPriv;
-
- devPriv = cfbGetGCPrivate(pGC);
- cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask);
- n = nInit * miFindMaxBand(pGC->pCompositeClip);
- if ( n == 0 )
- return;
- pwidthFree = (int *)xalloc(n * sizeof(int));
- pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec));
- if(!pptFree || !pwidthFree)
- {
- if (pptFree) xfree(pptFree);
- if (pwidthFree) xfree(pwidthFree);
- return;
- }
- pwidth = pwidthFree;
- ppt = pptFree;
- n = miClipSpans(pGC->pCompositeClip, pptInit, pwidthInit, nInit,
- ppt, pwidth, fSorted);
-
- stipple = pGC->pRotatedPixmap;
- src = (CfbBits *)stipple->devPrivate.ptr;
- stippleHeight = stipple->drawable.height;
-
- cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits)
-
- while (n--)
- {
- w = *pwidth++;
- x = ppt->x;
- y = ppt->y;
- ppt++;
- dst = pbits + (y * nlwDst) + (x >> PWSH);
- if (((x & PIM) + w) <= PPW)
- {
- maskpartialbits(x, w, startmask);
- endmask = 0;
- nlw = 0;
- }
- else
- {
- maskbits (x, w, startmask, endmask, nlw);
- }
- bits = src[y % stippleHeight];
- RotBitsLeft (bits, (x & ((PGSZ-1) & ~PIM)));
-#if PPW == 4
- if (cfb8StippleRRop == GXcopy)
- {
- xor = devPriv->xor;
- if (w < (PGSZ*2))
- {
- if (startmask)
- {
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- *dst = (*dst & ~(mask & startmask)) |
- (xor & (mask & startmask));
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- while (nlw--)
- {
- WriteBitGroup (dst,xor,GetBitGroup(bits))
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- if (endmask)
- {
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- *dst = (*dst & ~(mask & endmask)) |
- (xor & (mask & endmask));
- }
- }
- else
- { /* XXX constants probably not OK here */
- wEnd = 7 - (nlw & 7);
- nlw = (nlw >> 3) + 1;
- dstTmp = dst;
- nlwTmp = nlw;
- if (startmask)
- {
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- *dstTmp = (*dstTmp & ~(mask & startmask)) |
- (xor & (mask & startmask));
- dstTmp++;
- RotBitsLeft (bits, PGSZB);
- }
- w = 7 - wEnd;
- while (w--)
- {
- dst = dstTmp;
- dstTmp++;
- nlw = nlwTmp;
-#if defined(__GNUC__) && defined(mc68020)
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- xor = xor & mask;
- mask = ~mask;
- while (nlw--)
- {
- *dst = (*dst & mask) | xor;
- dst += 8;
- }
- xor = devPriv->xor;
-#else
-#define SwitchBitsLoop(body) \
- while (nlw--) \
- { \
- body \
- dst += 8; \
- }
- SwitchBitGroup(dst, xor, GetBitGroup(bits));
-#undef SwitchBitsLoop
-#endif
- NextBitGroup (bits);
- }
- nlwTmp--;
- w = wEnd + 1;
- if (endmask)
- {
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- dst = dstTmp + (nlwTmp << 3);
- *dst = (*dst & ~(mask & endmask)) |
- (xor & (mask & endmask));
- }
- while (w--)
- {
- nlw = nlwTmp;
- dst = dstTmp;
- dstTmp++;
-#if defined(__GNUC__) && defined(mc68020)
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- xor = xor & mask;
- mask = ~mask;
- while (nlw--)
- {
- *dst = (*dst & mask) | xor;
- dst += 8;
- }
- xor = devPriv->xor;
-#else
-#define SwitchBitsLoop(body) \
- while (nlw--) \
- { \
- body \
- dst += 8; \
- }
- SwitchBitGroup(dst, xor, GetBitGroup(bits));
-#undef SwitchBitsLoop
-#endif
- NextBitGroup (bits);
- }
- }
- }
- else
-#endif /* PPW == 4 */
- {
- if (startmask)
- {
- xor = GetBitGroup(bits);
- *dst = MaskRRopPixels(*dst, xor, startmask);
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- while (nlw--)
- {
- RRopBitGroup(dst, GetBitGroup(bits));
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- if (endmask)
- {
- xor = GetBitGroup(bits);
- *dst = MaskRRopPixels(*dst, xor, endmask);
- }
- }
- }
- xfree(pptFree);
- xfree(pwidthFree);
-}
-
-void
-cfb8OpaqueStipple32FS (pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nInit; /* number of spans to fill */
- DDXPointPtr pptInit; /* pointer to list of start points */
- int *pwidthInit; /* pointer to list of n widths */
- int fSorted;
-{
- /* next three parameters are post-clip */
- int n; /* number of spans to fill */
- DDXPointPtr ppt; /* pointer to list of start points */
- int *pwidth; /* pointer to list of n widths */
- CfbBits *src; /* pointer to bits in stipple, if needed */
- int stippleHeight; /* height of the stipple */
- PixmapPtr stipple;
-
- int nlwDst; /* width in longwords of the dest pixmap */
- int x,y,w; /* current span */
- CfbBits startmask;
- CfbBits endmask;
- register CfbBits *dst; /* pointer to bits we're writing */
- register int nlw;
- CfbBits *dstTmp;
- int nlwTmp;
-
- CfbBits *pbits; /* pointer to start of pixmap */
- register CfbBits xor;
- register CfbBits bits; /* bits from stipple */
- int wEnd;
-
- int *pwidthFree; /* copies of the pointers to free */
- DDXPointPtr pptFree;
- cfbPrivGCPtr devPriv;
-
- devPriv = cfbGetGCPrivate(pGC);
-
- cfb8CheckOpaqueStipple(pGC->alu, pGC->fgPixel, pGC->bgPixel, pGC->planemask);
-
- n = nInit * miFindMaxBand(pGC->pCompositeClip);
- if ( n == 0 )
- return;
- pwidthFree = (int *)xalloc(n * sizeof(int));
- pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec));
- if(!pptFree || !pwidthFree)
- {
- if (pptFree) xfree(pptFree);
- if (pwidthFree) xfree(pwidthFree);
- return;
- }
- pwidth = pwidthFree;
- ppt = pptFree;
- n = miClipSpans(pGC->pCompositeClip, pptInit, pwidthInit, nInit,
- ppt, pwidth, fSorted);
-
- stipple = pGC->pRotatedPixmap;
- src = (CfbBits *)stipple->devPrivate.ptr;
- stippleHeight = stipple->drawable.height;
-
- cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits)
-
- while (n--)
- {
- w = *pwidth++;
- x = ppt->x;
- y = ppt->y;
- ppt++;
- dst = pbits + (y * nlwDst) + (x >> PWSH);
- if (((x & PIM) + w) <= PPW)
- {
- maskpartialbits(x, w, startmask);
- endmask = 0;
- nlw = 0;
- }
- else
- {
- maskbits (x, w, startmask, endmask, nlw);
- }
- bits = src[y % stippleHeight];
- RotBitsLeft (bits, (x & ((PGSZ-1) & ~PIM)));
-#if PPW == 4
- if (cfb8StippleRRop == GXcopy)
- {
- xor = devPriv->xor;
- if (w < PGSZ*2)
- {
- if (startmask)
- {
- *dst = (*dst & ~startmask) |
- (GetPixelGroup (bits) & startmask);
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- while (nlw--)
- {
- *dst++ = GetPixelGroup(bits);
- RotBitsLeft (bits, PGSZB);
- }
- if (endmask)
- {
- *dst = (*dst & ~endmask) |
- (GetPixelGroup (bits) & endmask);
- }
- }
- else
- { /* XXX consts probably not OK here */
- wEnd = 7 - (nlw & 7);
- nlw = (nlw >> 3) + 1;
- dstTmp = dst;
- nlwTmp = nlw;
- if (startmask)
- {
- *dstTmp = (*dstTmp & ~startmask) |
- (GetPixelGroup (bits) & startmask);
- dstTmp++;
- RotBitsLeft (bits, PGSZB);
- }
- w = 7 - wEnd;
- while (w--)
- {
- nlw = nlwTmp;
- dst = dstTmp;
- dstTmp++;
- xor = GetPixelGroup (bits);
- while (nlw--)
- {
- *dst = xor;
- dst += 8;
- }
- NextBitGroup (bits);
- }
- nlwTmp--;
- w = wEnd + 1;
- if (endmask)
- {
- dst = dstTmp + (nlwTmp << 3);
- *dst = (*dst & ~endmask) |
- (GetPixelGroup (bits) & endmask);
- }
- while (w--)
- {
- nlw = nlwTmp;
- dst = dstTmp;
- dstTmp++;
- xor = GetPixelGroup (bits);
- while (nlw--)
- {
- *dst = xor;
- dst += 8;
- }
- NextBitGroup (bits);
- }
- }
- }
- else
-#endif /* PPW == 4 */
- {
- if (startmask)
- {
- xor = GetBitGroup(bits);
- *dst = MaskRRopPixels(*dst, xor, startmask);
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- while (nlw--)
- {
- RRopBitGroup(dst, GetBitGroup(bits));
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- if (endmask)
- {
- xor = GetBitGroup(bits);
- *dst = MaskRRopPixels(*dst, xor, endmask);
- }
- }
- }
- xfree(pptFree);
- xfree(pwidthFree);
-}
-
-#endif /* PSZ == 8 */
diff --git a/cfb/cfbgc.c b/cfb/cfbgc.c
deleted file mode 100644
index a74c28c15..000000000
--- a/cfb/cfbgc.c
+++ /dev/null
@@ -1,799 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <stdlib.h>
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <X11/Xproto.h>
-#include "cfb.h"
-#include <X11/fonts/fontstruct.h>
-#include "dixfontstr.h"
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "region.h"
-
-#include "mistruct.h"
-#include "mibstore.h"
-#include "migc.h"
-
-#include "cfbmskbits.h"
-#include "cfb8bit.h"
-
-#if PSZ == 8
-# define useTEGlyphBlt cfbTEGlyphBlt8
-#else
-# ifdef WriteBitGroup
-# define useTEGlyphBlt cfbImageGlyphBlt8
-# else
-# define useTEGlyphBlt cfbTEGlyphBlt
-# endif
-#endif
-
-#ifdef WriteBitGroup
-# define useImageGlyphBlt cfbImageGlyphBlt8
-# define usePolyGlyphBlt cfbPolyGlyphBlt8
-#else
-# define useImageGlyphBlt miImageGlyphBlt
-# define usePolyGlyphBlt miPolyGlyphBlt
-#endif
-
-static void cfbUnPushPixels (GCPtr, PixmapPtr, DrawablePtr, int, int, int, int);
-
-#ifdef FOUR_BIT_CODE
-# define usePushPixels cfbPushPixels8
-#else
-# define usePushPixels cfbUnPushPixels
-#endif
-
-#ifdef PIXEL_ADDR
-# define ZeroPolyArc cfbZeroPolyArcSS8Copy
-#else
-# define ZeroPolyArc miZeroPolyArc
-#endif
-
-GCFuncs cfbGCFuncs = {
- cfbValidateGC,
- miChangeGC,
- miCopyGC,
- miDestroyGC,
- miChangeClip,
- miDestroyClip,
- miCopyClip,
-};
-
-GCOps cfbTEOps1Rect = {
- cfbSolidSpansCopy,
- cfbSetSpans,
- cfbPutImage,
- cfbCopyArea,
- cfbCopyPlane,
- cfbPolyPoint,
-#ifdef PIXEL_ADDR
- cfb8LineSS1Rect,
- cfb8SegmentSS1Rect,
-#else
- cfbLineSS,
- cfbSegmentSS,
-#endif
- miPolyRectangle,
- ZeroPolyArc,
- cfbFillPoly1RectCopy,
- cfbPolyFillRect,
- cfbPolyFillArcSolidCopy,
- miPolyText8,
- miPolyText16,
- miImageText8,
- miImageText16,
- useTEGlyphBlt,
- usePolyGlyphBlt,
- usePushPixels
-};
-
-GCOps cfbNonTEOps1Rect = {
- cfbSolidSpansCopy,
- cfbSetSpans,
- cfbPutImage,
- cfbCopyArea,
- cfbCopyPlane,
- cfbPolyPoint,
-#ifdef PIXEL_ADDR
- cfb8LineSS1Rect,
- cfb8SegmentSS1Rect,
-#else
- cfbLineSS,
- cfbSegmentSS,
-#endif
- miPolyRectangle,
- ZeroPolyArc,
- cfbFillPoly1RectCopy,
- cfbPolyFillRect,
- cfbPolyFillArcSolidCopy,
- miPolyText8,
- miPolyText16,
- miImageText8,
- miImageText16,
- useImageGlyphBlt,
- usePolyGlyphBlt,
- usePushPixels
-};
-
-GCOps cfbTEOps = {
- cfbSolidSpansCopy,
- cfbSetSpans,
- cfbPutImage,
- cfbCopyArea,
- cfbCopyPlane,
- cfbPolyPoint,
- cfbLineSS,
- cfbSegmentSS,
- miPolyRectangle,
- ZeroPolyArc,
- miFillPolygon,
- cfbPolyFillRect,
- cfbPolyFillArcSolidCopy,
- miPolyText8,
- miPolyText16,
- miImageText8,
- miImageText16,
- useTEGlyphBlt,
- usePolyGlyphBlt,
- usePushPixels
-};
-
-GCOps cfbNonTEOps = {
- cfbSolidSpansCopy,
- cfbSetSpans,
- cfbPutImage,
- cfbCopyArea,
- cfbCopyPlane,
- cfbPolyPoint,
- cfbLineSS,
- cfbSegmentSS,
- miPolyRectangle,
-#ifdef PIXEL_ADDR
- cfbZeroPolyArcSS8Copy,
-#else
- miZeroPolyArc,
-#endif
- miFillPolygon,
- cfbPolyFillRect,
- cfbPolyFillArcSolidCopy,
- miPolyText8,
- miPolyText16,
- miImageText8,
- miImageText16,
- useImageGlyphBlt,
- usePolyGlyphBlt,
- usePushPixels
-};
-
-GCOps *
-cfbMatchCommon (pGC, devPriv)
- GCPtr pGC;
- cfbPrivGCPtr devPriv;
-{
- if (pGC->lineWidth != 0)
- return 0;
- if (pGC->lineStyle != LineSolid)
- return 0;
- if (pGC->fillStyle != FillSolid)
- return 0;
- if (devPriv->rop != GXcopy)
- return 0;
- if (pGC->font &&
- FONTMAXBOUNDS(pGC->font,rightSideBearing) -
- FONTMINBOUNDS(pGC->font,leftSideBearing) <= 32 &&
- FONTMINBOUNDS(pGC->font,characterWidth) >= 0)
- {
- if (TERMINALFONT(pGC->font)
-#ifdef FOUR_BIT_CODE
- && FONTMAXBOUNDS(pGC->font,characterWidth) >= PGSZB
-#endif
- )
-#ifdef NO_ONE_RECT
- return &cfbTEOps1Rect;
-#else
- if (devPriv->oneRect)
- return &cfbTEOps1Rect;
- else
- return &cfbTEOps;
-#endif
- else
-#ifdef NO_ONE_RECT
- return &cfbNonTEOps1Rect;
-#else
- if (devPriv->oneRect)
- return &cfbNonTEOps1Rect;
- else
- return &cfbNonTEOps;
-#endif
- }
- return 0;
-}
-
-Bool
-cfbCreateGC(pGC)
- register GCPtr pGC;
-{
- cfbPrivGC *pPriv;
-
- if (PixmapWidthPaddingInfo[pGC->depth].padPixelsLog2 == LOG2_BITMAP_PAD)
- return (mfbCreateGC(pGC));
- pGC->clientClip = NULL;
- pGC->clientClipType = CT_NONE;
-
- if (cfbNonTEOps.PushPixels == cfbUnPushPixels)
- {
- cfbTEOps1Rect.PushPixels = mfbPushPixelsWeak();
- cfbNonTEOps1Rect.PushPixels = mfbPushPixelsWeak();
- cfbTEOps.PushPixels = mfbPushPixelsWeak();
- cfbNonTEOps.PushPixels = mfbPushPixelsWeak();
- }
-
- /*
- * some of the output primitives aren't really necessary, since they
- * will be filled in ValidateGC because of dix/CreateGC() setting all
- * the change bits. Others are necessary because although they depend
- * on being a color frame buffer, they don't change
- */
-
- pGC->ops = &cfbNonTEOps;
- pGC->funcs = &cfbGCFuncs;
-
- /* cfb wants to translate before scan conversion */
- pGC->miTranslate = 1;
-
- pPriv = cfbGetGCPrivate(pGC);
- pPriv->rop = pGC->alu;
- pPriv->oneRect = FALSE;
- pGC->fExpose = TRUE;
- pGC->freeCompClip = FALSE;
- pGC->pRotatedPixmap = (PixmapPtr) NULL;
- return TRUE;
-}
-
-/* Clipping conventions
- if the drawable is a window
- CT_REGION ==> pCompositeClip really is the composite
- CT_other ==> pCompositeClip is the window clip region
- if the drawable is a pixmap
- CT_REGION ==> pCompositeClip is the translated client region
- clipped to the pixmap boundary
- CT_other ==> pCompositeClip is the pixmap bounding box
-*/
-
-void
-cfbValidateGC(pGC, changes, pDrawable)
- register GCPtr pGC;
- unsigned long changes;
- DrawablePtr pDrawable;
-{
- int mask; /* stateChanges */
- int index; /* used for stepping through bitfields */
- int new_rrop;
- int new_line, new_text, new_fillspans, new_fillarea;
- int new_rotate;
- int xrot, yrot;
- /* flags for changing the proc vector */
- cfbPrivGCPtr devPriv;
- int oneRect;
-
- new_rotate = pGC->lastWinOrg.x != pDrawable->x ||
- pGC->lastWinOrg.y != pDrawable->y;
-
- pGC->lastWinOrg.x = pDrawable->x;
- pGC->lastWinOrg.y = pDrawable->y;
- devPriv = cfbGetGCPrivate(pGC);
-
- new_rrop = FALSE;
- new_line = FALSE;
- new_text = FALSE;
- new_fillspans = FALSE;
- new_fillarea = FALSE;
-
- /*
- * if the client clip is different or moved OR the subwindowMode has
- * changed OR the window's clip has changed since the last validation
- * we need to recompute the composite clip
- */
-
- if ((changes & (GCClipXOrigin|GCClipYOrigin|GCClipMask|GCSubwindowMode)) ||
- (pDrawable->serialNumber != (pGC->serialNumber & DRAWABLE_SERIAL_BITS))
- )
- {
- miComputeCompositeClip (pGC, pDrawable);
-#ifdef NO_ONE_RECT
- devPriv->oneRect = FALSE;
-#else
- oneRect = REGION_NUM_RECTS(pGC->pCompositeClip) == 1;
- if (oneRect != devPriv->oneRect)
- new_line = TRUE;
- devPriv->oneRect = oneRect;
-#endif
- }
-
- mask = changes;
- while (mask) {
- index = lowbit (mask);
- mask &= ~index;
-
- /*
- * this switch acculmulates a list of which procedures might have
- * to change due to changes in the GC. in some cases (e.g.
- * changing one 16 bit tile for another) we might not really need
- * a change, but the code is being paranoid. this sort of batching
- * wins if, for example, the alu and the font have been changed,
- * or any other pair of items that both change the same thing.
- */
- switch (index) {
- case GCFunction:
- case GCForeground:
- new_rrop = TRUE;
- break;
- case GCPlaneMask:
- new_rrop = TRUE;
- new_text = TRUE;
- break;
- case GCBackground:
- break;
- case GCLineStyle:
- case GCLineWidth:
- new_line = TRUE;
- break;
- case GCJoinStyle:
- case GCCapStyle:
- break;
- case GCFillStyle:
- new_text = TRUE;
- new_fillspans = TRUE;
- new_line = TRUE;
- new_fillarea = TRUE;
- break;
- case GCFillRule:
- break;
- case GCTile:
- new_fillspans = TRUE;
- new_fillarea = TRUE;
- break;
-
- case GCStipple:
- if (pGC->stipple)
- {
- int width = pGC->stipple->drawable.width;
- PixmapPtr nstipple;
-
- if ((width <= PGSZ) && !(width & (width - 1)) &&
- (nstipple = cfbCopyPixmap(pGC->stipple)))
- {
- cfbPadPixmap(nstipple);
- (*pGC->pScreen->DestroyPixmap)(pGC->stipple);
- pGC->stipple = nstipple;
- }
- }
- new_fillspans = TRUE;
- new_fillarea = TRUE;
- break;
-
- case GCTileStipXOrigin:
- new_rotate = TRUE;
- break;
-
- case GCTileStipYOrigin:
- new_rotate = TRUE;
- break;
-
- case GCFont:
- new_text = TRUE;
- break;
- case GCSubwindowMode:
- break;
- case GCGraphicsExposures:
- break;
- case GCClipXOrigin:
- break;
- case GCClipYOrigin:
- break;
- case GCClipMask:
- break;
- case GCDashOffset:
- break;
- case GCDashList:
- break;
- case GCArcMode:
- break;
- default:
- break;
- }
- }
-
- /*
- * If the drawable has changed, ensure suitable
- * entries are in the proc vector.
- */
- if (pDrawable->serialNumber != (pGC->serialNumber & (DRAWABLE_SERIAL_BITS))) {
- new_fillspans = TRUE; /* deal with FillSpans later */
- }
-
- if (new_rotate || new_fillspans)
- {
- Bool new_pix = FALSE;
-
- xrot = pGC->patOrg.x + pDrawable->x;
- yrot = pGC->patOrg.y + pDrawable->y;
-
- switch (pGC->fillStyle)
- {
- case FillTiled:
- if (!pGC->tileIsPixel)
- {
- int width = pGC->tile.pixmap->drawable.width * PSZ;
-
- if ((width <= PGSZ) && !(width & (width - 1)))
- {
- cfbCopyRotatePixmap(pGC->tile.pixmap, &pGC->pRotatedPixmap,
- xrot, yrot);
- new_pix = TRUE;
- }
- }
- break;
-#ifdef FOUR_BIT_CODE
- case FillStippled:
- case FillOpaqueStippled:
- {
- int width = pGC->stipple->drawable.width;
-
- if ((width <= PGSZ) && !(width & (width - 1)))
- {
- mfbCopyRotatePixmap(pGC->stipple, &pGC->pRotatedPixmap,
- xrot, yrot);
- new_pix = TRUE;
- }
- }
- break;
-#endif
- }
- if (!new_pix && pGC->pRotatedPixmap)
- {
- (*pGC->pScreen->DestroyPixmap)(pGC->pRotatedPixmap);
- pGC->pRotatedPixmap = (PixmapPtr) NULL;
- }
- }
-
- if (new_rrop)
- {
- int old_rrop;
-
- old_rrop = devPriv->rop;
- devPriv->rop = cfbReduceRasterOp (pGC->alu, pGC->fgPixel,
- pGC->planemask,
- &devPriv->and, &devPriv->xor);
- if (old_rrop == devPriv->rop)
- new_rrop = FALSE;
- else
- {
-#ifdef PIXEL_ADDR
- new_line = TRUE;
-#endif
-#ifdef WriteBitGroup
- new_text = TRUE;
-#endif
- new_fillspans = TRUE;
- new_fillarea = TRUE;
- }
- }
-
- if (new_rrop || new_fillspans || new_text || new_fillarea || new_line)
- {
- GCOps *newops;
-
- if ((newops = cfbMatchCommon (pGC, devPriv)))
- {
- if (pGC->ops->devPrivate.val)
- miDestroyGCOps (pGC->ops);
- pGC->ops = newops;
- new_rrop = new_line = new_fillspans = new_text = new_fillarea = 0;
- }
- else
- {
- if (!pGC->ops->devPrivate.val)
- {
- pGC->ops = miCreateGCOps (pGC->ops);
- pGC->ops->devPrivate.val = 1;
- }
- }
- }
-
- /* deal with the changes we've collected */
- if (new_line)
- {
- pGC->ops->FillPolygon = miFillPolygon;
-#ifdef NO_ONE_RECT
- if (pGC->fillStyle == FillSolid)
- {
- switch (devPriv->rop) {
- case GXcopy:
- pGC->ops->FillPolygon = cfbFillPoly1RectCopy;
- break;
- default:
- pGC->ops->FillPolygon = cfbFillPoly1RectGeneral;
- break;
- }
- }
-#else
- if (devPriv->oneRect && pGC->fillStyle == FillSolid)
- {
- switch (devPriv->rop) {
- case GXcopy:
- pGC->ops->FillPolygon = cfbFillPoly1RectCopy;
- break;
- default:
- pGC->ops->FillPolygon = cfbFillPoly1RectGeneral;
- break;
- }
- }
-#endif
- if (pGC->lineWidth == 0)
- {
-#ifdef PIXEL_ADDR
- if ((pGC->lineStyle == LineSolid) && (pGC->fillStyle == FillSolid))
- {
- switch (devPriv->rop)
- {
- case GXxor:
- pGC->ops->PolyArc = cfbZeroPolyArcSS8Xor;
- break;
- case GXcopy:
- pGC->ops->PolyArc = cfbZeroPolyArcSS8Copy;
- break;
- default:
- pGC->ops->PolyArc = cfbZeroPolyArcSS8General;
- break;
- }
- }
- else
-#endif
- pGC->ops->PolyArc = miZeroPolyArc;
- }
- else
- pGC->ops->PolyArc = miPolyArc;
- pGC->ops->PolySegment = miPolySegment;
- switch (pGC->lineStyle)
- {
- case LineSolid:
- if(pGC->lineWidth == 0)
- {
- if (pGC->fillStyle == FillSolid)
- {
-#if defined(PIXEL_ADDR) && !defined(NO_ONE_RECT)
- if (devPriv->oneRect &&
- ((pDrawable->x >= pGC->pScreen->width - 32768) &&
- (pDrawable->y >= pGC->pScreen->height - 32768)))
- {
- pGC->ops->Polylines = cfb8LineSS1Rect;
- pGC->ops->PolySegment = cfb8SegmentSS1Rect;
- } else
-#endif
-#ifdef NO_ONE_RECT
- {
- pGC->ops->Polylines = cfb8LineSS1Rect;
- pGC->ops->PolySegment = cfb8SegmentSS1Rect;
- }
-#else
- {
- pGC->ops->Polylines = cfbLineSS;
- pGC->ops->PolySegment = cfbSegmentSS;
- }
-#endif
- }
- else
- pGC->ops->Polylines = miZeroLine;
- }
- else
- pGC->ops->Polylines = miWideLine;
- break;
- case LineOnOffDash:
- case LineDoubleDash:
- if (pGC->lineWidth == 0 && pGC->fillStyle == FillSolid)
- {
- pGC->ops->Polylines = cfbLineSD;
- pGC->ops->PolySegment = cfbSegmentSD;
- } else
- pGC->ops->Polylines = miWideDash;
- break;
- }
- }
-
- if (new_text && (pGC->font))
- {
- if (FONTMAXBOUNDS(pGC->font,rightSideBearing) -
- FONTMINBOUNDS(pGC->font,leftSideBearing) > 32 ||
- FONTMINBOUNDS(pGC->font,characterWidth) < 0)
- {
- pGC->ops->PolyGlyphBlt = miPolyGlyphBlt;
- pGC->ops->ImageGlyphBlt = miImageGlyphBlt;
- }
- else
- {
-#ifdef WriteBitGroup
- if (pGC->fillStyle == FillSolid)
- {
- if (devPriv->rop == GXcopy)
- pGC->ops->PolyGlyphBlt = cfbPolyGlyphBlt8;
- else
-#ifdef FOUR_BIT_CODE
- pGC->ops->PolyGlyphBlt = cfbPolyGlyphRop8;
-#else
- pGC->ops->PolyGlyphBlt = miPolyGlyphBlt;
-#endif
- }
- else
-#endif
- pGC->ops->PolyGlyphBlt = miPolyGlyphBlt;
- /* special case ImageGlyphBlt for terminal emulator fonts */
-#if !defined(WriteBitGroup) || PSZ == 8
- if (TERMINALFONT(pGC->font) &&
- (pGC->planemask & PMSK) == PMSK
-#ifdef FOUR_BIT_CODE
- && FONTMAXBOUNDS(pGC->font,characterWidth) >= PGSZB
-#endif
- )
- {
- pGC->ops->ImageGlyphBlt = useTEGlyphBlt;
- }
- else
-#endif
- {
-#ifdef WriteBitGroup
- if (devPriv->rop == GXcopy &&
- pGC->fillStyle == FillSolid &&
- (pGC->planemask & PMSK) == PMSK)
- pGC->ops->ImageGlyphBlt = cfbImageGlyphBlt8;
- else
-#endif
- pGC->ops->ImageGlyphBlt = miImageGlyphBlt;
- }
- }
- }
-
-
- if (new_fillspans) {
- switch (pGC->fillStyle) {
- case FillSolid:
- switch (devPriv->rop) {
- case GXcopy:
- pGC->ops->FillSpans = cfbSolidSpansCopy;
- break;
- case GXxor:
- pGC->ops->FillSpans = cfbSolidSpansXor;
- break;
- default:
- pGC->ops->FillSpans = cfbSolidSpansGeneral;
- break;
- }
- break;
- case FillTiled:
- if (pGC->pRotatedPixmap)
- {
- if (pGC->alu == GXcopy && (pGC->planemask & PMSK) == PMSK)
- pGC->ops->FillSpans = cfbTile32FSCopy;
- else
- pGC->ops->FillSpans = cfbTile32FSGeneral;
- }
- else
- pGC->ops->FillSpans = cfbUnnaturalTileFS;
- break;
- case FillStippled:
-#ifdef FOUR_BIT_CODE
- if (pGC->pRotatedPixmap)
- pGC->ops->FillSpans = cfb8Stipple32FS;
- else
-#endif
- pGC->ops->FillSpans = cfbUnnaturalStippleFS;
- break;
- case FillOpaqueStippled:
-#ifdef FOUR_BIT_CODE
- if (pGC->pRotatedPixmap)
- pGC->ops->FillSpans = cfb8OpaqueStipple32FS;
- else
-#endif
- pGC->ops->FillSpans = cfbUnnaturalStippleFS;
- break;
- default:
- FatalError("cfbValidateGC: illegal fillStyle\n");
- }
- } /* end of new_fillspans */
-
- if (new_fillarea) {
-#ifndef FOUR_BIT_CODE
- pGC->ops->PolyFillRect = miPolyFillRect;
- if (pGC->fillStyle == FillSolid || pGC->fillStyle == FillTiled)
- {
- pGC->ops->PolyFillRect = cfbPolyFillRect;
- }
-#endif
-#ifdef FOUR_BIT_CODE
- pGC->ops->PushPixels = mfbPushPixelsWeak();
- if (pGC->fillStyle == FillSolid && devPriv->rop == GXcopy)
- pGC->ops->PushPixels = cfbPushPixels8;
-#endif
- pGC->ops->PolyFillArc = miPolyFillArc;
- if (pGC->fillStyle == FillSolid)
- {
- switch (devPriv->rop)
- {
- case GXcopy:
- pGC->ops->PolyFillArc = cfbPolyFillArcSolidCopy;
- break;
- default:
- pGC->ops->PolyFillArc = cfbPolyFillArcSolidGeneral;
- break;
- }
- }
- }
-}
-
-/*
- * this is never called, it just exists to have its address
- * taken in mfbCreateGC.
- */
-static void
-cfbUnPushPixels (pGC, pBitmap, pDrawable, dx, dy, xOrg, yOrg)
- GCPtr pGC;
- PixmapPtr pBitmap;
- DrawablePtr pDrawable;
- int dx, dy, xOrg, yOrg;
-{
- return;
-}
diff --git a/cfb/cfbgetsp.c b/cfb/cfbgetsp.c
deleted file mode 100644
index 672196a6c..000000000
--- a/cfb/cfbgetsp.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-
-#include "misc.h"
-#include "region.h"
-#include "gc.h"
-#include "windowstr.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-
-#include "cfb.h"
-#include "cfbmskbits.h"
-
-/* GetSpans -- for each span, gets bits from drawable starting at ppt[i]
- * and continuing for pwidth[i] bits
- * Each scanline returned will be server scanline padded, i.e., it will come
- * out to an integral number of words.
- */
-void
-cfbGetSpans(pDrawable, wMax, ppt, pwidth, nspans, pchardstStart)
- DrawablePtr pDrawable; /* drawable from which to get bits */
- int wMax; /* largest value of all *pwidths */
- register DDXPointPtr ppt; /* points to start copying from */
- int *pwidth; /* list of number of bits to copy */
- int nspans; /* number of scanlines to copy */
- char *pchardstStart; /* where to put the bits */
-{
- PixelGroup *pdstStart = (PixelGroup *)pchardstStart;
- register PixelGroup *pdst; /* where to put the bits */
- register PixelGroup *psrc; /* where to get the bits */
- register PixelGroup tmpSrc; /* scratch buffer for bits */
- PixelGroup *psrcBase; /* start of src bitmap */
- int widthSrc; /* width of pixmap in bytes */
- register DDXPointPtr pptLast; /* one past last point to get */
- int xEnd; /* last pixel to copy from */
- int nl, srcBit;
- int w;
- PixelGroup *pdstNext;
-#if PSZ == 24
- register char *psrcb, *pdstb;
- register int xIndex = 0;
-#else
- register int nstart;
-#if PSZ != 32 || PPW != 1
- int nend;
-#endif
- PixelGroup startmask, endmask;
- int nlMiddle;
-#endif
-
- switch (pDrawable->bitsPerPixel) {
- case 1:
- mfbGetSpans(pDrawable, wMax, ppt, pwidth, nspans, pchardstStart);
- return;
- case PSZ:
- break;
- default:
- FatalError("cfbGetSpans: invalid depth\n");
- }
-
- /*
- * XFree86 DDX empties the root borderClip when the VT is
- * switched away; this checks for that case
- */
- if (!cfbDrawableEnabled(pDrawable))
- return;
-
- cfbGetLongWidthAndPointer (pDrawable, widthSrc, psrcBase)
-
-#ifdef PIXEL_ADDR
-# if PSZ != 24
- if ((nspans == 1) && (*pwidth == 1))
- {
- tmpSrc = *((PixelType *)(psrcBase + (ppt->y * widthSrc))
- + ppt->x);
-#if BITMAP_BIT_ORDER == MSBFirst
- tmpSrc <<= (sizeof (CfbBits) - sizeof (PixelType)) * 8;
-#endif
- *pdstStart = tmpSrc;
- return;
- }
-# endif /* PSZ != 24 */
-#endif
- pdst = pdstStart;
- pptLast = ppt + nspans;
- while(ppt < pptLast)
- {
-#if PSZ == 24
- xEnd = min(ppt->x + *pwidth, widthSrc * sizeof(CfbBits) / 3);
- w = xEnd - ppt->x;
- psrc = psrcBase + ppt->y * widthSrc;
- srcBit = ppt->x;
- psrcb = (char *)psrc + (ppt->x * 3);
- xIndex = 0;
- pdstb = (char *)pdst;
- pdstNext = pdst + ((w * 3 + 3) >> 2);
-#else
- xEnd = min(ppt->x + *pwidth, widthSrc << PWSH);
- w = xEnd - ppt->x;
- psrc = psrcBase + ppt->y * widthSrc + (ppt->x >> PWSH);
- srcBit = ppt->x & PIM;
- pdstNext = pdst + ((w + PPW - 1) >> PWSH);
-#endif
-
-#if PSZ == 24
- if (w < 0)
- FatalError("cfb24GetSpans: Internal error (w < 0)\n");
- nl = w;
- while (nl--){
- psrc = (PixelGroup *)((unsigned long)psrcb & ~0x03);
- getbits24(psrc, tmpSrc, srcBit);
- pdst = (PixelGroup *)((unsigned long)pdstb & ~0x03);
- putbits24(tmpSrc, PPW, pdst, ~((CfbBits)0), xIndex);
- srcBit++;
- psrcb += 3;
- xIndex++;
- pdstb += 3;
- }
- pdst = pdstNext;
-#else /* PSZ == 24 */
- if (srcBit + w <= PPW)
- {
- getbits(psrc, srcBit, w, tmpSrc);
- putbits(tmpSrc, 0, w, pdst, ~((CfbBits)0));
- pdst++;
- }
- else
- {
- maskbits(ppt->x, w, startmask, endmask, nlMiddle);
- nstart = 0;
- if (startmask)
- {
- nstart = PPW - srcBit;
- getbits(psrc, srcBit, nstart, tmpSrc);
- putbits(tmpSrc, 0, nstart, pdst, ~((CfbBits)0));
- if(srcBit + nstart >= PPW)
- psrc++;
- }
- nl = nlMiddle;
- while (nl--)
- {
- tmpSrc = *psrc;
- putbits(tmpSrc, nstart, PPW, pdst, ~((CfbBits)0));
- psrc++;
- pdst++;
- }
- if (endmask)
- {
-#if PSZ != 32 || PPW != 1
- nend = xEnd & PIM;
-#endif
- getbits(psrc, 0, nend, tmpSrc);
- putbits(tmpSrc, nstart, nend, pdst, ~((CfbBits)0));
- }
- pdst = pdstNext;
- }
-#endif /* PSZ == 24 */
- ppt++;
- pwidth++;
- }
-}
diff --git a/cfb/cfbglblt8.c b/cfb/cfbglblt8.c
deleted file mode 100644
index 4d964b35d..000000000
--- a/cfb/cfbglblt8.c
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-*/
-
-/*
- * Poly glyph blt. Accepts an arbitrary font <= 32 bits wide, in Copy mode
- * only.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <X11/Xproto.h>
-#include "cfb.h"
-#include <X11/fonts/fontstruct.h>
-#include "dixfontstr.h"
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "cfbmskbits.h"
-#include "cfb8bit.h"
-
-#define BOX_OVERLAP(box1, box2, xoffset, yoffset) \
- ((box1)->x1 <= ((int) (box2)->x2 + (xoffset)) && \
- ((int) (box2)->x1 + (xoffset)) <= (box1)->x2 && \
- (box1)->y1 <= ((int) (box2)->y2 + (yoffset)) && \
- ((int) (box2)->y1 + (yoffset)) <= (box1)->y2)
-
-#define BOX_CONTAINS(box1, box2, xoffset, yoffset) \
- ((box1)->x1 <= ((int) (box2)->x1 + (xoffset)) && \
- ((int) (box2)->x2 + (xoffset)) <= (box1)->x2 && \
- (box1)->y1 <= ((int) (box2)->y1 + (yoffset)) && \
- ((int) (box2)->y2 + (yoffset)) <= (box1)->y2)
-
-#if defined(FOUR_BIT_CODE) || defined(WriteBitGroup) && !defined(GLYPHROP)
-
-#if GLYPHPADBYTES != 4
-#define USE_LEFTBITS
-#endif
-
-#ifdef USE_LEFTBITS
-typedef unsigned char *glyphPointer;
-
-#define GlyphBits(bits,width,dst) getleftbits(bits,width,dst); \
- (dst) &= widthMask; \
- (bits) += widthGlyph;
-#define GlyphBitsS(bits,width,dst,off) GlyphBits(bits,width,dst); \
- dst = BitRight (dst, off);
-#else
-typedef CARD32 *glyphPointer;
-
-#define GlyphBits(bits,width,dst) dst = *bits++;
-#define GlyphBitsS(bits,width,dst,off) dst = BitRight(*bits++, off);
-#endif
-
-#ifdef GLYPHROP
-#define cfbPolyGlyphBlt8 cfbPolyGlyphRop8
-#define cfbPolyGlyphBlt8Clipped cfbPolyGlyphRop8Clipped
-
-#undef WriteBitGroup
-#define WriteBitGroup(dst,pixel,bits) RRopBitGroup(dst,bits)
-
-#endif
-
-static void cfbPolyGlyphBlt8Clipped(
- DrawablePtr pDrawable,
- GCPtr pGC,
- int x,
- int y,
- unsigned int nglyph,
- CharInfoPtr *ppci, /* array of character info */
- unsigned char *pglyphBase); /* start of array of glyphs */
-
-#if defined(HAS_STIPPLE_CODE) && !defined(GLYPHROP) && !defined(USE_LEFTBITS)
-#define USE_STIPPLE_CODE
-#endif
-
-#if defined(__GNUC__) && !defined(GLYPHROP) && (defined(mc68020) || defined(mc68000) || defined(__mc68000__)) && PSZ == 8 && !defined(USE_LEFTBITS)
-#ifdef USE_STIPPLE_CODE
-#undef USE_STIPPLE_CODE
-#endif
-#include "stip68kgnu.h"
-#endif
-
-#if PSZ == 24
-#define DST_INC 3
-#else
-#define DST_INC (PGSZB >> PWSH)
-#endif
-
-/* cfbStippleStack/cfbStippleStackTE are coded in assembly language.
- * They are only provided on some architecures.
- */
-#ifdef USE_STIPPLE_CODE
-extern void cfbStippleStack (), cfbStippleStackTE ();
-#endif
-
-void
-cfbPolyGlyphBlt8 (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int x, y;
- unsigned int nglyph;
- CharInfoPtr *ppci; /* array of character info */
- pointer pglyphBase; /* start of array of glyphs */
-{
-#ifndef GLYPHROP
- register CfbBits pixel;
-#endif
-#if !defined(STIPPLE) && !defined(USE_STIPPLE_CODE)
- register CfbBits c;
- register CfbBits *dst;
-#endif
- register glyphPointer glyphBits;
- register int xoff;
-
- FontPtr pfont = pGC->font;
- CharInfoPtr pci;
- CfbBits *dstLine;
- CfbBits *pdstBase;
- int hTmp;
- int bwidthDst;
- int widthDst;
- int h;
- BoxRec bbox; /* for clipping */
- int w;
- RegionPtr clip;
- BoxPtr extents;
-#ifdef USE_LEFTBITS
- int widthGlyph;
- CfbBits widthMask;
-#endif
-#ifndef STIPPLE
-#ifdef USE_STIPPLE_CODE
- void (*stipple)();
-
- stipple = cfbStippleStack;
- if (FONTCONSTMETRICS(pfont))
- stipple = cfbStippleStackTE;
-#endif
-#endif
-
- x += pDrawable->x;
- y += pDrawable->y;
-
- /* compute an approximate (but covering) bounding box */
- bbox.x1 = 0;
- if ((ppci[0]->metrics.leftSideBearing < 0))
- bbox.x1 = ppci[0]->metrics.leftSideBearing;
- h = nglyph - 1;
- w = ppci[h]->metrics.rightSideBearing;
- while (--h >= 0)
- w += ppci[h]->metrics.characterWidth;
- bbox.x2 = w;
- bbox.y1 = -FONTMAXBOUNDS(pfont,ascent);
- bbox.y2 = FONTMAXBOUNDS(pfont,descent);
-
- clip = cfbGetCompositeClip(pGC);
- extents = &clip->extents;
-
- if (!clip->data)
- {
- if (!BOX_CONTAINS(extents, &bbox, x, y))
- {
- if (BOX_OVERLAP (extents, &bbox, x, y))
- cfbPolyGlyphBlt8Clipped(pDrawable, pGC, x, y,
- nglyph, ppci, pglyphBase);
- return;
- }
- }
- else
- {
- /* check to make sure some of the text appears on the screen */
- if (!BOX_OVERLAP (extents, &bbox, x, y))
- return;
-
- bbox.x1 += x;
- bbox.x2 += x;
- bbox.y1 += y;
- bbox.y2 += y;
-
- switch (RECT_IN_REGION(pGC->pScreen, clip, &bbox))
- {
- case rgnPART:
- cfbPolyGlyphBlt8Clipped(pDrawable, pGC, x, y,
- nglyph, ppci, pglyphBase);
- case rgnOUT:
- return;
- }
- }
-
-#ifdef GLYPHROP
- cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask);
-#else
- pixel = cfbGetGCPrivate(pGC)->xor;
-#endif
-
- cfbGetTypedWidthAndPointer (pDrawable, bwidthDst, pdstBase, char, CfbBits)
-
- widthDst = bwidthDst / PGSZB;
- while (nglyph--)
- {
- pci = *ppci++;
- glyphBits = (glyphPointer) FONTGLYPHBITS(pglyphBase,pci);
- xoff = x + pci->metrics.leftSideBearing;
-#if PSZ == 24
- dstLine = pdstBase + (y - pci->metrics.ascent) * widthDst +((xoff>> 2)*3);
-#else
- dstLine = pdstBase +
- (y - pci->metrics.ascent) * widthDst + (xoff >> PWSH);
-#endif
- x += pci->metrics.characterWidth;
- if ((hTmp = pci->metrics.descent + pci->metrics.ascent))
- {
-#if PSZ == 24
- xoff &= 0x03;
-#else
- xoff &= PIM;
-#endif /* PSZ == 24 */
-#ifdef STIPPLE
- STIPPLE(dstLine,glyphBits,pixel,bwidthDst,hTmp,xoff);
-#else
-#ifdef USE_STIPPLE_CODE
- (*stipple)(dstLine,glyphBits,pixel,bwidthDst,hTmp,xoff);
-#else
-#ifdef USE_LEFTBITS
- w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing;
- widthGlyph = PADGLYPHWIDTHBYTES(w);
- widthMask = mfbGetendtab(w);
-#endif
- do {
- dst = dstLine;
- dstLine = (CfbBits *) (((char *) dstLine) + bwidthDst);
- GlyphBits(glyphBits, w, c)
- WriteBitGroup(dst, pixel, GetBitGroup(BitRight(c,xoff)));
- dst += DST_INC;
- c = BitLeft(c,PGSZB - xoff);
- while (c)
- {
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst += DST_INC;
- }
- } while (--hTmp);
-#endif /* USE_STIPPLE_CODE else */
-#endif /* STIPPLE else */
- }
- }
-}
-
-static void
-cfbPolyGlyphBlt8Clipped(
- DrawablePtr pDrawable,
- GCPtr pGC,
- int x,
- int y,
- unsigned int nglyph,
- CharInfoPtr *ppci, /* array of character info */
- unsigned char *pglyphBase) /* start of array of glyphs */
-{
-#ifndef GLYPHROP
- register CfbBits pixel;
-#endif
-#if !defined(STIPPLE) && !defined(USE_STIPPLE_CODE)
- register CfbBits c;
-#endif
- register glyphPointer glyphBits;
- register int xoff;
-#if defined(USE_LEFTBITS) || (!defined(STIPPLE) && !defined(USE_STIPPLE_CODE))
- register CfbBits *dst;
-#endif
-
- CharInfoPtr pci;
- FontPtr pfont = pGC->font;
- CfbBits *dstLine;
- CfbBits *pdstBase;
-#ifdef USE_LEFTBITS
- CARD32 *cTmp;
-#endif
- CARD32 *clips;
- int maxAscent, maxDescent;
- int minLeftBearing;
- int hTmp;
- int widthDst;
- int bwidthDst;
- int xG, yG;
- BoxPtr pBox;
- int numRects;
- int w;
- RegionPtr pRegion;
- int yBand;
-#ifdef GLYPHROP
- CfbBits bits;
-#endif
-#ifdef USE_LEFTBITS
- int widthGlyph;
- CfbBits widthMask;
-#endif
-
-#ifdef GLYPHROP
- cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask);
-#else
- pixel = cfbGetGCPrivate(pGC)->xor;
-#endif
-
- cfbGetTypedWidthAndPointer (pDrawable, bwidthDst, pdstBase, char, CfbBits)
-
- widthDst = bwidthDst / PGSZB;
- maxAscent = FONTMAXBOUNDS(pfont,ascent);
- maxDescent = FONTMAXBOUNDS(pfont,descent);
- minLeftBearing = FONTMINBOUNDS(pfont,leftSideBearing);
-
- pRegion = cfbGetCompositeClip(pGC);
-
- pBox = REGION_RECTS(pRegion);
- numRects = REGION_NUM_RECTS (pRegion);
- while (numRects && pBox->y2 <= y - maxAscent)
- {
- ++pBox;
- --numRects;
- }
- if (!numRects || pBox->y1 >= y + maxDescent)
- return;
- yBand = pBox->y1;
- while (numRects && pBox->y1 == yBand && pBox->x2 <= x + minLeftBearing)
- {
- ++pBox;
- --numRects;
- }
- if (!numRects)
- return;
- clips = (CARD32 *)xalloc ((maxAscent + maxDescent) *
- sizeof (CARD32));
- while (nglyph--)
- {
- pci = *ppci++;
- glyphBits = (glyphPointer) FONTGLYPHBITS(pglyphBase,pci);
- w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing;
- xG = x + pci->metrics.leftSideBearing;
- yG = y - pci->metrics.ascent;
- x += pci->metrics.characterWidth;
- if ((hTmp = pci->metrics.descent + pci->metrics.ascent))
- {
-#if PSZ == 24
- dstLine = pdstBase + yG * widthDst + ((xG>> 2)*3);
- /* never use (xG*3)>>2 */
-#else
- dstLine = pdstBase + yG * widthDst + (xG >> PWSH);
-#endif
-#if PSZ == 24
- xoff = xG & 3;
-#else
- xoff = xG & PIM;
-#endif
-#ifdef USE_LEFTBITS
- w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing;
- widthGlyph = PADGLYPHWIDTHBYTES(w);
- widthMask = mfbGetendtab(w);
-#endif
- switch (cfb8ComputeClipMasks32 (pBox, numRects, xG, yG, w, hTmp, clips))
- {
- case rgnPART:
-#ifdef USE_LEFTBITS
- cTmp = clips;
- do {
- dst = dstLine;
- dstLine = (CfbBits *) (((char *) dstLine) + bwidthDst);
- GlyphBits(glyphBits, w, c)
- c &= *cTmp++;
- if (c)
- {
- WriteBitGroup(dst, pixel, GetBitGroup(BitRight(c,xoff)));
- c = BitLeft(c,PGSZB - xoff);
- dst += DST_INC;
- while (c)
- {
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst += DST_INC;
- }
- }
- } while (--hTmp);
- break;
-#else /* !USE_LEFTBITS */
- {
- int h;
-
- h = hTmp;
- do
- {
- --h;
- clips[h] = clips[h] & glyphBits[h];
- } while (h);
- }
- glyphBits = clips;
- /* fall through */
-#endif /* USE_LEFTBITS */
- case rgnIN:
-#ifdef STIPPLE
- STIPPLE(dstLine,glyphBits,pixel,bwidthDst,hTmp,xoff);
-#else
-#ifdef USE_STIPPLE_CODE
- cfbStippleStackTE(dstLine,glyphBits,pixel,bwidthDst,hTmp,xoff);
-#else
- do {
- dst = dstLine;
- dstLine = (CfbBits *) (((char *) dstLine) + bwidthDst);
- GlyphBits(glyphBits, w, c)
- if (c)
- {
- /* This code originally could read memory locations
- * that were not mapped. Hence we have to check the
- * trailing bits to see whether they are zero and if
- * then skip them correctly. This is no problem for
- * the GXcopy case, since there only the pixels that
- * are non-zero are written ...
- */
-#ifndef GLYPHROP
- WriteBitGroup(dst, pixel, GetBitGroup(BitRight(c,xoff)));
- c = BitLeft(c,PGSZB - xoff);
- dst += DST_INC;
-#else /* GLYPHROP */
- if ((bits = GetBitGroup(BitRight(c,xoff))))
- WriteBitGroup(dst, pixel, bits);
- c = BitLeft(c,PGSZB - xoff);
- dst += DST_INC;
-
- while (c && ((bits = GetBitGroup(c)) == 0))
- {
- NextBitGroup(c);
- dst += DST_INC;
- }
-#endif /* GLYPHROP */
- while (c)
- {
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst += DST_INC;
- }
- }
- } while (--hTmp);
-#endif /* USE_STIPPLE_CODE else */
-#endif /* STIPPLE else */
- break;
- }
- }
- }
- xfree (clips);
-}
-
-#endif /* FOUR_BIT_CODE */
diff --git a/cfb/cfbhrzvert.c b/cfb/cfbhrzvert.c
deleted file mode 100644
index a6a793055..000000000
--- a/cfb/cfbhrzvert.c
+++ /dev/null
@@ -1,554 +0,0 @@
-/***********************************************************
-
-Copyright 1987,1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-
-#include "gc.h"
-#include "window.h"
-#include "pixmap.h"
-#include "region.h"
-
-#include "cfb.h"
-#include "cfbmskbits.h"
-
-/* horizontal solid line
- abs(len) > 1
-*/
-void
-cfbHorzS(rop, and, xor, addrl, nlwidth, x1, y1, len)
-register int rop;
-register CfbBits and;
-register CfbBits xor;
-register CfbBits *addrl; /* pointer to base of bitmap */
-int nlwidth; /* width in longwords of bitmap */
-int x1; /* initial point */
-int y1;
-int len; /* length of line */
-{
- register int nlmiddle;
-
-#if PSZ == 24
-
- int leftIndex, rightIndex;
- CfbBits piQxelAnd[3], piQxelXor[3];
- piQxelAnd[0] = (and & 0xFFFFFF) | ((and<<24) & 0xFF000000);
- piQxelAnd[1] = ((and>>8) & 0xFFFF)| ((and<<16) & 0xFFFF0000);
- piQxelAnd[2] = ((and<<8) & 0xFFFFFF00) | ((and>>16) & 0xFF);
-
- piQxelXor[0] = (xor & 0xFFFFFF) | ((xor<<24) & 0xFF000000);
- piQxelXor[1] = ((xor>>8) & 0xFFFF)| ((xor<<16) & 0xFFFF0000);
- piQxelXor[2] = ((xor<<8) & 0xFFFFFF00) | ((xor>>16) & 0xFF);
-
- leftIndex = x1 & 3;
- rightIndex = ((x1 + len) < 5)?0:(x1 + len)&3;
- nlmiddle = len;
- if(leftIndex){
- nlmiddle -= (4 - leftIndex);
- }
- if(rightIndex){
- nlmiddle -= rightIndex;
- }
- if (nlmiddle < 0)
- nlmiddle = 0;
-
- nlmiddle >>= 2;
-
- addrl += (y1 * nlwidth) + (x1 >> 2)*3 + (leftIndex?leftIndex-1:0);
-
- switch(leftIndex+len){
- case 4:
- switch(leftIndex){
- case 0:
- *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]);
- break;
- case 1:
- *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFF000000);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]);
- break;
- case 2:
- *addrl = DoMaskRRop (*addrl, piQxelAnd[1], piQxelXor[1], 0xFFFF0000);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]);
- break;
- case 3:
- *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFFFFFF00);
- break;
- }
- break;
- case 3:
- switch(leftIndex){
- case 0:
- *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]);
- addrl++;
- *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFF);
- break;
- case 1:
- *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFF000000);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]);
- addrl++;
- *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFF);
- break;
- case 2:
- *addrl = DoMaskRRop (*addrl, piQxelAnd[1], piQxelXor[1], 0xFFFF0000);
- addrl++;
- *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFF);
- break;
- }
- break;
- case 2:
- if(leftIndex){
- *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFF000000);
- addrl++;
- }
- else{
- *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]);
- addrl++;
- }
- *addrl = DoMaskRRop (*addrl, piQxelAnd[1], piQxelXor[1], 0xFFFF);
- break;
- case 1: /*only if leftIndex = 0 and w = 1*/
- *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFFFFFF);
- break;
- case 0: /*never*/
- break;
- default:
- {
- if (rop == GXcopy){
- switch(leftIndex){
- case 0:
- break;
- case 1:
- *addrl = ((*addrl) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- addrl++;
- *addrl++ = piQxelXor[1];
- *addrl++ = piQxelXor[2];
- break;
- case 2:
- *addrl = ((*addrl) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000);
- addrl++;
- *addrl++ = piQxelXor[2];
- break;
- case 3:
- *addrl = ((*addrl) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00);
- addrl++;
- break;
- }
- while(nlmiddle--){
- *addrl++ = piQxelXor[0];
- *addrl++ = piQxelXor[1];
- *addrl++ = piQxelXor[2];
- }
- switch(rightIndex){
- case 0:
- break;
- case 1:
- *addrl = ((*addrl) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF);
- break;
- case 2:
- *addrl++ = piQxelXor[0];
- *addrl = ((*addrl) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);
- break;
- case 3:
- *addrl++ = piQxelXor[0];
- *addrl++ = piQxelXor[1];
- *addrl = ((*addrl) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- break;
- }
- }
- else{
- if(rop == GXxor){
- switch(leftIndex){
- case 0:
- break;
- case 1:
- *addrl++ ^= (piQxelXor[0]&0xFF000000);
- *addrl++ ^= piQxelXor[1];
- *addrl++ ^= piQxelXor[2];
- break;
- case 2:
- *addrl++ ^= (piQxelXor[1]& 0xFFFF0000);
- *addrl++ ^= piQxelXor[2];
- break;
- case 3:
- *addrl++ ^= (piQxelXor[2]& 0xFFFFFF00);
- break;
- }
- while(nlmiddle--){
- *addrl++ ^= piQxelXor[0];
- *addrl++ ^= piQxelXor[1];
- *addrl++ ^= piQxelXor[2];
- }
- switch(rightIndex){
- case 0:
- break;
- case 1:
- *addrl ^= (piQxelXor[0]& 0xFFFFFF);
- break;
- case 2:
- *addrl++ ^= piQxelXor[0];
- *addrl ^= (piQxelXor[1]&0xFFFF);
- break;
- case 3:
- *addrl++ ^= piQxelXor[0];
- *addrl++ ^= piQxelXor[1];
- *addrl ^= (piQxelXor[2]&0xFF);
- break;
- }
- }
- else{
- switch(leftIndex){
- case 0:
- break;
- case 1:
- *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFF000000);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]);
- addrl++;
- break;
- case 2:
- *addrl = DoMaskRRop (*addrl, piQxelAnd[1], piQxelXor[1], 0xFFFF0000);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]);
- addrl++;
- break;
- case 3:
- *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFFFFFF00);
- addrl++;
- break;
- }
- while(nlmiddle--){
- *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]);
- addrl++;
- }
- switch(rightIndex){
- case 0:
- break;
- case 1:
- *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFFFFFF);
- addrl++;
- break;
- case 2:
- *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]);
- addrl++;
- *addrl = DoMaskRRop (*addrl, piQxelAnd[1], piQxelXor[1], 0xFFFF);
- break;
- case 3:
- *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]);
- addrl++;
- *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]);
- addrl++;
- *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFF);
- break;
- }
-
- }
- }
- }
- }
-#else
- register CfbBits startmask;
- register CfbBits endmask;
-
- addrl = addrl + (y1 * nlwidth) + (x1 >> PWSH);
-
- /* all bits inside same longword */
- if ( ((x1 & PIM) + len) < PPW)
- {
- maskpartialbits(x1, len, startmask);
- *addrl = DoMaskRRop (*addrl, and, xor, startmask);
- }
- else
- {
- maskbits(x1, len, startmask, endmask, nlmiddle);
- if (rop == GXcopy)
- {
- if (startmask)
- {
- *addrl = (*addrl & ~startmask) | (xor & startmask);
- addrl++;
- }
- while (nlmiddle--)
- *addrl++ = xor;
- if (endmask)
- *addrl = (*addrl & ~endmask) | (xor & endmask);
- }
- else
- {
- if (startmask)
- {
- *addrl = DoMaskRRop (*addrl, and, xor, startmask);
- addrl++;
- }
- if (rop == GXxor)
- {
- while (nlmiddle--)
- *addrl++ ^= xor;
- }
- else
- {
- while (nlmiddle--)
- {
- *addrl = DoRRop (*addrl, and, xor);
- addrl++;
- }
- }
- if (endmask)
- *addrl = DoMaskRRop (*addrl, and, xor, endmask);
- }
- }
-#endif
-}
-
-/* vertical solid line */
-
-void
-cfbVertS(rop, and, xor, addrl, nlwidth, x1, y1, len)
-int rop;
-register CfbBits and, xor;
-register CfbBits *addrl; /* pointer to base of bitmap */
-register int nlwidth; /* width in longwords of bitmap */
-int x1, y1; /* initial point */
-register int len; /* length of line */
-{
-#if PSZ == 24
- int xIdx;
- CfbBits and2 = 0, xor2 = 0, mask = 0, mask2;
-#endif
-#ifdef PIXEL_ADDR
- register PixelType *bits = (PixelType *) addrl;
-
-#if PSZ == 24
- nlwidth <<= PWSH;
- xIdx = x1 & 3;
- bits = (PixelType *)(addrl + (y1 * nlwidth) + ((x1*3) >> 2));
-#else
- nlwidth <<= PWSH;
- bits = bits + (y1 * nlwidth) + x1;
-#endif
-#if PSZ == 24
- mask2 = 0;
- switch(xIdx){
- case 0:
- mask = 0xFF000000;
- xor &= 0xFFFFFF;
- and |= 0xFF000000;
- break;
- case 3:
- mask = 0xFF;
- xor &= 0xFFFFFF;
- xor <<= 8;
- and <<= 8;
- and |= 0xFF;
- break;
- case 1:
- mask = 0xFFFFFF;
- mask2 = 0xFFFF0000;
- xor2 = (xor>>8) & 0xFFFF;
- xor &= 0xFF;
- xor <<= 24;
- and2 = (and >> 8 ) | 0xFFFF0000;
- and <<= 24;
- and |= 0xFFFFFF;
- break;
- case 2:
- mask = 0x0000FFFF;
- mask2 = 0xFFFFFF00;
- xor2 = (xor >> 16) & 0xFF;
- xor <<= 16;
- xor &= 0xFFFF0000;
- and2 = (and >> 16) | 0xFFFFFF00;
- and <<= 16;
- and |= 0xFFFF;
- break;
- }
-#endif
-
- /*
- * special case copy and xor to avoid a test per pixel
- */
- if (rop == GXcopy)
- {
-#if PSZ == 24
- switch(xIdx){
- case 0:
- case 3:
- while (len--){
- *bits = (*bits & mask)| xor;
- bits += nlwidth;
- }
- break;
- case 1:
- case 2:
- while (len--){
- *bits = (*bits & mask)| xor;
- bits++;
- *bits = (*bits & mask2)| xor2;
- bits--;
- bits += nlwidth;
- }
- break;
- }
-#else
- while (len--)
- {
- *bits = xor;
- bits += nlwidth;
- }
-#endif
- }
- else if (rop == GXxor)
- {
-#if PSZ == 24
- switch(xIdx){
- case 0:
- case 3:
- while (len--){
- *bits ^= xor;
- bits += nlwidth;
- }
- break;
- case 1:
- case 2:
- while (len--){
- *bits ^= xor;
- bits++;
- *bits ^= xor2;
- bits--;
- bits += nlwidth;
- }
- break;
- }
-#else
- while (len--)
- {
- *bits ^= xor;
- bits += nlwidth;
- }
-#endif
- }
- else
- {
-#if PSZ == 24
- switch(xIdx){
- case 0:
- while (len--){
- *bits = DoMaskRRop(*bits, and, xor, 0x00FFFFFF);
- bits += nlwidth;
- }
- break;
- case 3:
- while (len--){
- *bits = DoMaskRRop(*bits, and, xor, 0xFFFFFF00);
- bits += nlwidth;
- }
- break;
- case 1:
- while (len--){
- *bits = DoMaskRRop(*bits, and, xor, 0xFF000000);
- bits++;
- *bits = DoMaskRRop(*bits, and2, xor2, 0x0000FFFF);
- bits--;
- bits += nlwidth;
- }
- break;
- case 2:
- while (len--){
- *bits = DoMaskRRop(*bits, and, xor, 0xFFFF0000);
- bits++;
- *bits = DoMaskRRop(*bits, and2, xor2, 0x000000FF);
- bits--;
- bits += nlwidth;
- }
- break;
- }
-#else
- while (len--)
- {
- *bits = DoRRop(*bits, and, xor);
- bits += nlwidth;
- }
-#endif
- }
-#else /* !PIXEL_ADDR */
-#if PSZ == 24
- addrl = addrl + (y1 * nlwidth) + ((x1*3) >>2);
-
- and |= ~cfbmask[(x1 & 3)<<1];
- xor &= cfbmask[(x1 & 3)<<1];
-#else
- addrl = addrl + (y1 * nlwidth) + (x1 >> PWSH);
-
- and |= ~cfbmask[x1 & PIM];
- xor &= cfbmask[x1 & PIM];
-#endif
-
- while (len--)
- {
- *addrl = DoRRop (*addrl, and, xor);
- addrl += nlwidth;
- }
-#endif
-}
diff --git a/cfb/cfbigblt8.c b/cfb/cfbigblt8.c
deleted file mode 100644
index 1f1ce6f37..000000000
--- a/cfb/cfbigblt8.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- *
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <X11/Xproto.h>
-#include "mi.h"
-#include "cfb.h"
-#include <X11/fonts/fontstruct.h>
-#include "dixfontstr.h"
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "cfbmskbits.h"
-#include "cfb8bit.h"
-
-void
-cfbImageGlyphBlt8 (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int x, y;
- unsigned int nglyph;
- CharInfoPtr *ppci;
- pointer pglyphBase;
-{
- ExtentInfoRec info; /* used by QueryGlyphExtents() */
- xRectangle backrect;
- int fgPixel;
- cfbPrivGC *priv;
-
- /*
- * We can't avoid GC validations if calling mi functions.
- */
- if ((pGC->ops->PolyFillRect == miPolyFillRect) ||
- (pGC->ops->PolyGlyphBlt == miPolyGlyphBlt))
- {
- miImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
- return;
- }
-
- QueryGlyphExtents(pGC->font, ppci, (unsigned long)nglyph, &info);
-
- if (info.overallWidth >= 0)
- {
- backrect.x = x;
- backrect.width = info.overallWidth;
- }
- else
- {
- backrect.x = x + info.overallWidth;
- backrect.width = -info.overallWidth;
- }
- backrect.y = y - FONTASCENT(pGC->font);
- backrect.height = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font);
-
- priv = cfbGetGCPrivate(pGC);
-
- /* this code cheats by knowing that ValidateGC isn't
- * necessary for PolyFillRect
- */
-
- fgPixel = pGC->fgPixel;
-
- pGC->fgPixel = pGC->bgPixel;
- priv->xor = PFILL(pGC->bgPixel);
-
- (*pGC->ops->PolyFillRect) (pDrawable, pGC, 1, &backrect);
-
- pGC->fgPixel = fgPixel;
-
- priv->xor = PFILL(pGC->fgPixel);
-
- (*pGC->ops->PolyGlyphBlt) (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
-
-}
diff --git a/cfb/cfbimage.c b/cfb/cfbimage.c
deleted file mode 100644
index 396e1fcb2..000000000
--- a/cfb/cfbimage.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <string.h>
-
-#include <X11/X.h>
-#include "windowstr.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "gcstruct.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "servermd.h"
-#include "mi.h"
-
-void
-cfbPutImage(pDraw, pGC, depth, x, y, w, h, leftPad, format, pImage)
- DrawablePtr pDraw;
- GCPtr pGC;
- int depth, x, y, w, h;
- int leftPad;
- int format;
- char *pImage;
-{
- PixmapPtr pPixmap;
-
- if ((w == 0) || (h == 0))
- return;
-
- if (format != XYPixmap)
- {
- pPixmap = GetScratchPixmapHeader(pDraw->pScreen, w+leftPad, h, depth,
- BitsPerPixel(depth), PixmapBytePad(w+leftPad, depth),
- (pointer)pImage);
- if (!pPixmap)
- return;
-
- pGC->fExpose = FALSE;
- if (format == ZPixmap)
- (void)(*pGC->ops->CopyArea)((DrawablePtr)pPixmap, pDraw, pGC,
- leftPad, 0, w, h, x, y);
- else
- (void)(*pGC->ops->CopyPlane)((DrawablePtr)pPixmap, pDraw, pGC,
- leftPad, 0, w, h, x, y, 1);
- pGC->fExpose = TRUE;
- FreeScratchPixmapHeader(pPixmap);
- }
- else
- {
- CfbBits oldFg, oldBg;
- XID gcv[3];
- CfbBits oldPlanemask;
- unsigned long i;
- long bytesPer;
-
- depth = pGC->depth;
- oldPlanemask = pGC->planemask;
- oldFg = pGC->fgPixel;
- oldBg = pGC->bgPixel;
- gcv[0] = ~0L;
- gcv[1] = 0;
- DoChangeGC(pGC, GCForeground | GCBackground, gcv, 0);
- bytesPer = (long)h * BitmapBytePad(w + leftPad);
-
- for (i = 1 << (depth-1); i != 0; i >>= 1, pImage += bytesPer)
- {
- if (i & oldPlanemask)
- {
- gcv[0] = i;
- DoChangeGC(pGC, GCPlaneMask, gcv, 0);
- ValidateGC(pDraw, pGC);
- (*pGC->ops->PutImage)(pDraw, pGC, 1, x, y, w, h, leftPad,
- XYBitmap, pImage);
- }
- }
- gcv[0] = oldPlanemask;
- gcv[1] = oldFg;
- gcv[2] = oldBg;
- DoChangeGC(pGC, GCPlaneMask | GCForeground | GCBackground, gcv, 0);
- ValidateGC(pDraw, pGC);
- }
-}
-
-void
-cfbGetImage(pDrawable, sx, sy, w, h, format, planeMask, pdstLine)
- DrawablePtr pDrawable;
- int sx, sy, w, h;
- unsigned int format;
- unsigned long planeMask;
- char *pdstLine;
-{
- BoxRec box;
- DDXPointRec ptSrc;
- RegionRec rgnDst;
- ScreenPtr pScreen;
- PixmapPtr pPixmap;
-
- if ((w == 0) || (h == 0))
- return;
- if (pDrawable->bitsPerPixel == 1)
- {
- mfbGetImage(pDrawable, sx, sy, w, h, format, planeMask, pdstLine);
- return;
- }
- pScreen = pDrawable->pScreen;
- /*
- * XFree86 DDX empties the root borderClip when the VT is
- * switched away; this checks for that case
- */
- if (!cfbDrawableEnabled (pDrawable))
- return;
- if (format == ZPixmap)
- {
- pPixmap = GetScratchPixmapHeader(pScreen, w, h,
- pDrawable->depth, pDrawable->bitsPerPixel,
- PixmapBytePad(w,pDrawable->depth), (pointer)pdstLine);
- if (!pPixmap)
- return;
- if ((planeMask & PMSK) != PMSK)
- bzero((char *)pdstLine, pPixmap->devKind * h);
- ptSrc.x = sx + pDrawable->x;
- ptSrc.y = sy + pDrawable->y;
- box.x1 = 0;
- box.y1 = 0;
- box.x2 = w;
- box.y2 = h;
- REGION_INIT(pScreen, &rgnDst, &box, 1);
- cfbDoBitblt(pDrawable, (DrawablePtr)pPixmap, GXcopy, &rgnDst,
- &ptSrc, planeMask);
- REGION_UNINIT(pScreen, &rgnDst);
- FreeScratchPixmapHeader(pPixmap);
- }
- else
- {
-
-#if IMAGE_BYTE_ORDER == LSBFirst
-
- pPixmap = GetScratchPixmapHeader(pScreen, w, h, /*depth*/ 1,
- /*bpp*/ 1, BitmapBytePad(w), (pointer)pdstLine);
- if (!pPixmap)
- return;
-
- ptSrc.x = sx + pDrawable->x;
- ptSrc.y = sy + pDrawable->y;
- box.x1 = 0;
- box.y1 = 0;
- box.x2 = w;
- box.y2 = h;
- REGION_INIT(pScreen, &rgnDst, &box, 1);
- cfbCopyImagePlane (pDrawable, (DrawablePtr)pPixmap, GXcopy, &rgnDst,
- &ptSrc, planeMask);
- REGION_UNINIT(pScreen, &rgnDst);
- FreeScratchPixmapHeader(pPixmap);
-#else
- miGetImage (pDrawable, sx, sy, w, h, format, planeMask, pdstLine);
-#endif
- }
-}
diff --git a/cfb/cfbline.c b/cfb/cfbline.c
deleted file mode 100644
index 84c089a73..000000000
--- a/cfb/cfbline.c
+++ /dev/null
@@ -1,756 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <stdlib.h>
-#include <X11/X.h>
-
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "scrnintstr.h"
-#include "mistruct.h"
-
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "miline.h"
-
-/* single-pixel lines on a color frame buffer
-
- NON-SLOPED LINES
- horizontal lines are always drawn left to right; we have to
-move the endpoints right by one after they're swapped.
- horizontal lines will be confined to a single band of a
-region. the code finds that band (giving up if the lower
-bound of the band is above the line we're drawing); then it
-finds the first box in that band that contains part of the
-line. we clip the line to subsequent boxes in that band.
- vertical lines are always drawn top to bottom (y-increasing.)
-this requires adding one to the y-coordinate of each endpoint
-after swapping.
-
- SLOPED LINES
- when clipping a sloped line, we bring the second point inside
-the clipping box, rather than one beyond it, and then add 1 to
-the length of the line before drawing it. this lets us use
-the same box for finding the outcodes for both endpoints. since
-the equation for clipping the second endpoint to an edge gives us
-1 beyond the edge, we then have to move the point towards the
-first point by one step on the major axis.
- eventually, there will be a diagram here to explain what's going
-on. the method uses Cohen-Sutherland outcodes to determine
-outsideness, and a method similar to Pike's layers for doing the
-actual clipping.
-
-*/
-
-void
-#ifdef POLYSEGMENT
-cfbSegmentSS (pDrawable, pGC, nseg, pSeg)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nseg;
- register xSegment *pSeg;
-#else
-cfbLineSS (pDrawable, pGC, mode, npt, pptInit)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int mode; /* Origin or Previous */
- int npt; /* number of points */
- DDXPointPtr pptInit;
-#endif
-{
- int nboxInit;
- register int nbox;
- BoxPtr pboxInit;
- register BoxPtr pbox;
-#ifndef POLYSEGMENT
- register DDXPointPtr ppt; /* pointer to list of translated points */
-#endif
-
- unsigned int oc1; /* outcode of point 1 */
- unsigned int oc2; /* outcode of point 2 */
-
- CfbBits *addrl; /* address of destination pixmap */
- int nlwidth; /* width in longwords of destination pixmap */
- int xorg, yorg; /* origin of window */
-
- int adx; /* abs values of dx and dy */
- int ady;
- int signdx; /* sign of dx and dy */
- int signdy;
- int e, e1, e2; /* bresenham error and increments */
- int len; /* length of segment */
- int axis; /* major axis */
- int octant;
- unsigned int bias = miGetZeroLineBias(pDrawable->pScreen);
-
- /* a bunch of temporaries */
- int tmp;
- register int y1, y2;
- register int x1, x2;
- RegionPtr cclip;
- cfbPrivGCPtr devPriv;
- CfbBits xor, and;
- int alu;
-
- devPriv = cfbGetGCPrivate(pGC);
- cclip = pGC->pCompositeClip;
- pboxInit = REGION_RECTS(cclip);
- nboxInit = REGION_NUM_RECTS(cclip);
-
- cfbGetLongWidthAndPointer (pDrawable, nlwidth, addrl)
-
- alu = devPriv->rop;
- xor = devPriv->xor;
- and = devPriv->and;
- xorg = pDrawable->x;
- yorg = pDrawable->y;
-#ifdef POLYSEGMENT
- while (nseg--)
-#else
- ppt = pptInit;
- x2 = ppt->x + xorg;
- y2 = ppt->y + yorg;
- while(--npt)
-#endif
- {
- nbox = nboxInit;
- pbox = pboxInit;
-
-#ifdef POLYSEGMENT
- x1 = pSeg->x1 + xorg;
- y1 = pSeg->y1 + yorg;
- x2 = pSeg->x2 + xorg;
- y2 = pSeg->y2 + yorg;
- pSeg++;
-#else
- x1 = x2;
- y1 = y2;
- ++ppt;
- if (mode == CoordModePrevious)
- {
- xorg = x1;
- yorg = y1;
- }
- x2 = ppt->x + xorg;
- y2 = ppt->y + yorg;
-#endif
-
- if (x1 == x2) /* vertical line */
- {
- /* make the line go top to bottom of screen, keeping
- endpoint semantics
- */
- if (y1 > y2)
- {
- register int tmp;
-
- tmp = y2;
- y2 = y1 + 1;
- y1 = tmp + 1;
-#ifdef POLYSEGMENT
- if (pGC->capStyle != CapNotLast)
- y1--;
-#endif
- }
-#ifdef POLYSEGMENT
- else if (pGC->capStyle != CapNotLast)
- y2++;
-#endif
- /* get to first band that might contain part of line */
- while ((nbox) && (pbox->y2 <= y1))
- {
- pbox++;
- nbox--;
- }
-
- if (nbox)
- {
- /* stop when lower edge of box is beyond end of line */
- while((nbox) && (y2 >= pbox->y1))
- {
- if ((x1 >= pbox->x1) && (x1 < pbox->x2))
- {
- int y1t, y2t;
- /* this box has part of the line in it */
- y1t = max(y1, pbox->y1);
- y2t = min(y2, pbox->y2);
- if (y1t != y2t)
- {
- cfbVertS (alu, and, xor,
- addrl, nlwidth,
- x1, y1t, y2t-y1t);
- }
- }
- nbox--;
- pbox++;
- }
- }
-#ifndef POLYSEGMENT
- y2 = ppt->y + yorg;
-#endif
- }
- else if (y1 == y2) /* horizontal line */
- {
- /* force line from left to right, keeping
- endpoint semantics
- */
- if (x1 > x2)
- {
- register int tmp;
-
- tmp = x2;
- x2 = x1 + 1;
- x1 = tmp + 1;
-#ifdef POLYSEGMENT
- if (pGC->capStyle != CapNotLast)
- x1--;
-#endif
- }
-#ifdef POLYSEGMENT
- else if (pGC->capStyle != CapNotLast)
- x2++;
-#endif
-
- /* find the correct band */
- while( (nbox) && (pbox->y2 <= y1))
- {
- pbox++;
- nbox--;
- }
-
- /* try to draw the line, if we haven't gone beyond it */
- if ((nbox) && (pbox->y1 <= y1))
- {
- /* when we leave this band, we're done */
- tmp = pbox->y1;
- while((nbox) && (pbox->y1 == tmp))
- {
- int x1t, x2t;
-
- if (pbox->x2 <= x1)
- {
- /* skip boxes until one might contain start point */
- nbox--;
- pbox++;
- continue;
- }
-
- /* stop if left of box is beyond right of line */
- if (pbox->x1 >= x2)
- {
- nbox = 0;
- break;
- }
-
- x1t = max(x1, pbox->x1);
- x2t = min(x2, pbox->x2);
- if (x1t != x2t)
- {
- cfbHorzS (alu, and, xor,
- addrl, nlwidth,
- x1t, y1, x2t-x1t);
- }
- nbox--;
- pbox++;
- }
- }
-#ifndef POLYSEGMENT
- x2 = ppt->x + xorg;
-#endif
- }
- else /* sloped line */
- {
- CalcLineDeltas(x1, y1, x2, y2, adx, ady, signdx, signdy,
- 1, 1, octant);
-
- if (adx > ady)
- {
- axis = X_AXIS;
- e1 = ady << 1;
- e2 = e1 - (adx << 1);
- e = e1 - adx;
- }
- else
- {
- axis = Y_AXIS;
- e1 = adx << 1;
- e2 = e1 - (ady << 1);
- e = e1 - ady;
- SetYMajorOctant(octant);
- }
-
- FIXUP_ERROR(e, octant, bias);
-
- /* we have bresenham parameters and two points.
- all we have to do now is clip and draw.
- */
-
- while(nbox--)
- {
- oc1 = 0;
- oc2 = 0;
- OUTCODES(oc1, x1, y1, pbox);
- OUTCODES(oc2, x2, y2, pbox);
- if ((oc1 | oc2) == 0)
- {
- if (axis == X_AXIS)
- len = adx;
- else
- len = ady;
-#ifdef POLYSEGMENT
- if (pGC->capStyle != CapNotLast)
- len++;
-#endif
- cfbBresS (alu, and, xor,
- addrl, nlwidth,
- signdx, signdy, axis, x1, y1,
- e, e1, e2, len);
- break;
- }
- else if (oc1 & oc2)
- {
- pbox++;
- }
- else
- {
- int new_x1 = x1, new_y1 = y1, new_x2 = x2, new_y2 = y2;
- int clip1 = 0, clip2 = 0;
- int clipdx, clipdy;
- int err;
-
- if (miZeroClipLine(pbox->x1, pbox->y1, pbox->x2-1,
- pbox->y2-1,
- &new_x1, &new_y1, &new_x2, &new_y2,
- adx, ady, &clip1, &clip2,
- octant, bias, oc1, oc2) == -1)
- {
- pbox++;
- continue;
- }
-
- if (axis == X_AXIS)
- len = abs(new_x2 - new_x1);
- else
- len = abs(new_y2 - new_y1);
-#ifdef POLYSEGMENT
- if (clip2 != 0 || pGC->capStyle != CapNotLast)
- len++;
-#else
- len += (clip2 != 0);
-#endif
- if (len)
- {
- /* unwind bresenham error term to first point */
- if (clip1)
- {
- clipdx = abs(new_x1 - x1);
- clipdy = abs(new_y1 - y1);
- if (axis == X_AXIS)
- err = e+((clipdy*e2) + ((clipdx-clipdy)*e1));
- else
- err = e+((clipdx*e2) + ((clipdy-clipdx)*e1));
- }
- else
- err = e;
- cfbBresS(alu, and, xor,
- addrl, nlwidth,
- signdx, signdy, axis, new_x1, new_y1,
- err, e1, e2, len);
- }
- pbox++;
- }
- } /* while (nbox--) */
- } /* sloped line */
- } /* while (nline--) */
-
-#ifndef POLYSEGMENT
- /* paint the last point if the end style isn't CapNotLast.
- (Assume that a projecting, butt, or round cap that is one
- pixel wide is the same as the single pixel of the endpoint.)
- */
-
- if ((pGC->capStyle != CapNotLast) &&
- ((ppt->x + xorg != pptInit->x + pDrawable->x) ||
- (ppt->y + yorg != pptInit->y + pDrawable->y) ||
- (ppt == pptInit + 1)))
- {
- nbox = nboxInit;
- pbox = pboxInit;
- while (nbox--)
- {
- if ((x2 >= pbox->x1) &&
- (y2 >= pbox->y1) &&
- (x2 < pbox->x2) &&
- (y2 < pbox->y2))
- {
- CfbBits mask;
- CfbBits scrbits;
-
-#if PSZ == 24
- mask = cfbmask[(x2 & 3)<<1];
- addrl += (y2 * nlwidth) + ((x2*3) >> 2);
-#else
- mask = cfbmask[x2 & PIM];
- addrl += (y2 * nlwidth) + (x2 >> PWSH);
-#endif
- scrbits = *addrl;
- *addrl = (scrbits & ~mask) |
- (DoRRop (scrbits, and, xor) & mask);
- break;
- }
- else
- pbox++;
- }
- }
-#endif
-}
-
-/*
- * Draw dashed 1-pixel lines.
- */
-
-void
-#ifdef POLYSEGMENT
-cfbSegmentSD (pDrawable, pGC, nseg, pSeg)
- DrawablePtr pDrawable;
- register GCPtr pGC;
- int nseg;
- register xSegment *pSeg;
-#else
-cfbLineSD( pDrawable, pGC, mode, npt, pptInit)
- DrawablePtr pDrawable;
- register GCPtr pGC;
- int mode; /* Origin or Previous */
- int npt; /* number of points */
- DDXPointPtr pptInit;
-#endif
-{
- int nboxInit;
- register int nbox;
- BoxPtr pboxInit;
- register BoxPtr pbox;
-#ifndef POLYSEGMENT
- register DDXPointPtr ppt; /* pointer to list of translated points */
-#endif
-
- register unsigned int oc1; /* outcode of point 1 */
- register unsigned int oc2; /* outcode of point 2 */
-
- CfbBits *addrl; /* address of destination pixmap */
- int nlwidth; /* width in longwords of destination pixmap */
- int xorg, yorg; /* origin of window */
-
- int adx; /* abs values of dx and dy */
- int ady;
- int signdx; /* sign of dx and dy */
- int signdy;
- int e, e1, e2; /* bresenham error and increments */
- int len; /* length of segment */
- int axis; /* major axis */
- int octant;
- unsigned int bias = miGetZeroLineBias(pDrawable->pScreen);
- int x1, x2, y1, y2;
- RegionPtr cclip;
- cfbRRopRec rrops[2];
- unsigned char *pDash;
- int dashOffset;
- int numInDashList;
- int dashIndex;
- int isDoubleDash;
- int dashIndexTmp, dashOffsetTmp;
- int unclippedlen;
- cfbPrivGCPtr devPriv;
-
- devPriv = cfbGetGCPrivate(pGC);
- cclip = pGC->pCompositeClip;
- rrops[0].rop = devPriv->rop;
- rrops[0].and = devPriv->and;
- rrops[0].xor = devPriv->xor;
- if (pGC->alu == GXcopy)
- {
- rrops[1].rop = GXcopy;
- rrops[1].and = 0;
- rrops[1].xor = PFILL (pGC->bgPixel);
- }
- else
- {
- rrops[1].rop = cfbReduceRasterOp (pGC->alu,
- pGC->bgPixel, pGC->planemask,
- &rrops[1].and, &rrops[1].xor);
- }
- pboxInit = REGION_RECTS(cclip);
- nboxInit = REGION_NUM_RECTS(cclip);
-
- cfbGetLongWidthAndPointer (pDrawable, nlwidth, addrl)
-
- /* compute initial dash values */
-
- pDash = (unsigned char *) pGC->dash;
- numInDashList = pGC->numInDashList;
- isDoubleDash = (pGC->lineStyle == LineDoubleDash);
- dashIndex = 0;
- dashOffset = 0;
- miStepDash ((int)pGC->dashOffset, &dashIndex, pDash,
- numInDashList, &dashOffset);
-
- xorg = pDrawable->x;
- yorg = pDrawable->y;
-#ifdef POLYSEGMENT
- while (nseg--)
-#else
- ppt = pptInit;
- x2 = ppt->x + xorg;
- y2 = ppt->y + yorg;
- while(--npt)
-#endif
- {
- nbox = nboxInit;
- pbox = pboxInit;
-
-#ifdef POLYSEGMENT
- x1 = pSeg->x1 + xorg;
- y1 = pSeg->y1 + yorg;
- x2 = pSeg->x2 + xorg;
- y2 = pSeg->y2 + yorg;
- pSeg++;
-#else
- x1 = x2;
- y1 = y2;
- ++ppt;
- if (mode == CoordModePrevious)
- {
- xorg = x1;
- yorg = y1;
- }
- x2 = ppt->x + xorg;
- y2 = ppt->y + yorg;
-#endif
-
- CalcLineDeltas(x1, y1, x2, y2, adx, ady, signdx, signdy, 1, 1, octant);
-
- if (adx > ady)
- {
- axis = X_AXIS;
- e1 = ady << 1;
- e2 = e1 - (adx << 1);
- e = e1 - adx;
- unclippedlen = adx;
- }
- else
- {
- axis = Y_AXIS;
- e1 = adx << 1;
- e2 = e1 - (ady << 1);
- e = e1 - ady;
- unclippedlen = ady;
- SetYMajorOctant(octant);
- }
-
- FIXUP_ERROR(e, octant, bias);
-
- /* we have bresenham parameters and two points.
- all we have to do now is clip and draw.
- */
-
- while(nbox--)
- {
- oc1 = 0;
- oc2 = 0;
- OUTCODES(oc1, x1, y1, pbox);
- OUTCODES(oc2, x2, y2, pbox);
- if ((oc1 | oc2) == 0)
- {
-#ifdef POLYSEGMENT
- if (pGC->capStyle != CapNotLast)
- unclippedlen++;
- dashIndexTmp = dashIndex;
- dashOffsetTmp = dashOffset;
- cfbBresD (rrops,
- &dashIndexTmp, pDash, numInDashList,
- &dashOffsetTmp, isDoubleDash,
- addrl, nlwidth,
- signdx, signdy, axis, x1, y1,
- e, e1, e2, unclippedlen);
- break;
-#else
- cfbBresD (rrops,
- &dashIndex, pDash, numInDashList,
- &dashOffset, isDoubleDash,
- addrl, nlwidth,
- signdx, signdy, axis, x1, y1,
- e, e1, e2, unclippedlen);
- goto dontStep;
-#endif
- }
- else if (oc1 & oc2)
- {
- pbox++;
- }
- else /* have to clip */
- {
- int new_x1 = x1, new_y1 = y1, new_x2 = x2, new_y2 = y2;
- int clip1 = 0, clip2 = 0;
- int clipdx, clipdy;
- int err;
-
- if (miZeroClipLine(pbox->x1, pbox->y1, pbox->x2-1,
- pbox->y2-1,
- &new_x1, &new_y1, &new_x2, &new_y2,
- adx, ady, &clip1, &clip2,
- octant, bias, oc1, oc2) == -1)
- {
- pbox++;
- continue;
- }
-
- dashIndexTmp = dashIndex;
- dashOffsetTmp = dashOffset;
-
- if (clip1)
- {
- int dlen;
-
- if (axis == X_AXIS)
- dlen = abs(new_x1 - x1);
- else
- dlen = abs(new_y1 - y1);
- miStepDash (dlen, &dashIndexTmp, pDash,
- numInDashList, &dashOffsetTmp);
- }
-
- if (axis == X_AXIS)
- len = abs(new_x2 - new_x1);
- else
- len = abs(new_y2 - new_y1);
-#ifdef POLYSEGMENT
- if (clip2 != 0 || pGC->capStyle != CapNotLast)
- len++;
-#else
- len += (clip2 != 0);
-#endif
- if (len)
- {
- /* unwind bresenham error term to first point */
- if (clip1)
- {
- clipdx = abs(new_x1 - x1);
- clipdy = abs(new_y1 - y1);
- if (axis == X_AXIS)
- err = e+((clipdy*e2) + ((clipdx-clipdy)*e1));
- else
- err = e+((clipdx*e2) + ((clipdy-clipdx)*e1));
- }
- else
- err = e;
- cfbBresD (rrops,
- &dashIndexTmp, pDash, numInDashList,
- &dashOffsetTmp, isDoubleDash,
- addrl, nlwidth,
- signdx, signdy, axis, new_x1, new_y1,
- err, e1, e2, len);
- }
- pbox++;
- }
- } /* while (nbox--) */
-#ifndef POLYSEGMENT
- /*
- * walk the dash list around to the next line
- */
- miStepDash (unclippedlen, &dashIndex, pDash,
- numInDashList, &dashOffset);
-dontStep: ;
-#endif
- } /* while (nline--) */
-
-#ifndef POLYSEGMENT
- /* paint the last point if the end style isn't CapNotLast.
- (Assume that a projecting, butt, or round cap that is one
- pixel wide is the same as the single pixel of the endpoint.)
- */
-
- if ((pGC->capStyle != CapNotLast) &&
- ((dashIndex & 1) == 0 || isDoubleDash) &&
- ((ppt->x + xorg != pptInit->x + pDrawable->x) ||
- (ppt->y + yorg != pptInit->y + pDrawable->y) ||
- (ppt == pptInit + 1)))
- {
- nbox = nboxInit;
- pbox = pboxInit;
- while (nbox--)
- {
- if ((x2 >= pbox->x1) &&
- (y2 >= pbox->y1) &&
- (x2 < pbox->x2) &&
- (y2 < pbox->y2))
- {
- CfbBits mask;
- int pix;
-
- pix = 0;
- if (dashIndex & 1)
- pix = 1;
-#if PSZ == 24
- mask = cfbmask[(x2 & 3)<<1];
- addrl += (y2 * nlwidth) + ((x2 *3)>> 2);
-#else
- mask = cfbmask[x2 & PIM];
- addrl += (y2 * nlwidth) + (x2 >> PWSH);
-#endif
- *addrl = DoMaskRRop (*addrl, rrops[pix].and, rrops[pix].xor, mask);
- break;
- }
- else
- pbox++;
- }
- }
-#endif
-}
diff --git a/cfb/cfbmap.h b/cfb/cfbmap.h
deleted file mode 100644
index 16e4afc3c..000000000
--- a/cfb/cfbmap.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- *
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-
-
-/*
- * Map names around so that multiple depths can be supported simultaneously
- */
-
-/* a losing vendor cpp dumps core if we define CFBNAME in terms of CATNAME */
-
-#if PSZ != 8
-
-#if PSZ == 32
-#if !defined(UNIXCPP) || defined(ANSICPP)
-#define CFBNAME(subname) cfb32##subname
-#else
-#define CFBNAME(subname) cfb32/**/subname
-#endif
-#endif
-
-#if PSZ == 24
-#if !defined(UNIXCPP) || defined(ANSICPP)
-#define CFBNAME(subname) cfb24##subname
-#else
-#define CFBNAME(subname) cfb24/**/subname
-#endif
-#endif
-
-#if PSZ == 16
-#if !defined(UNIXCPP) || defined(ANSICPP)
-#define CFBNAME(subname) cfb16##subname
-#else
-#define CFBNAME(subname) cfb16/**/subname
-#endif
-#endif
-
-#if PSZ == 4
-#if !defined(UNIXCPP) || defined(ANSICPP)
-#define CFBNAME(subname) cfb4##subname
-#else
-#define CFBNAME(subname) cfb4/**/subname
-#endif
-#endif
-
-#ifndef CFBNAME
-cfb can not hack PSZ yet
-#endif
-
-#undef CATNAME
-
-#if !defined(UNIXCPP) || defined(ANSICPP)
-#define CATNAME(prefix,subname) prefix##subname
-#else
-#define CATNAME(prefix,subname) prefix/**/subname
-#endif
-
-#define QuartetBitsTable CFBNAME(QuartetBitsTable)
-#define QuartetPixelMaskTable CFBNAME(QuartetPixelMaskTable)
-#define cfb8ClippedLineCopy CFBNAME(ClippedLineCopy)
-#define cfb8ClippedLineGeneral CFBNAME(ClippedLineGeneral )
-#define cfb8ClippedLineXor CFBNAME(ClippedLineXor)
-#define cfb8LineSS1Rect CFBNAME(LineSS1Rect)
-#define cfb8LineSS1RectCopy CFBNAME(LineSS1RectCopy)
-#define cfb8LineSS1RectGeneral CFBNAME(LineSS1RectGeneral )
-#define cfb8LineSS1RectPreviousCopy CFBNAME(LineSS1RectPreviousCopy)
-#define cfb8LineSS1RectXor CFBNAME(LineSS1RectXor)
-#define cfb8SegmentSS1Rect CFBNAME(SegmentSS1Rect)
-#define cfb8SegmentSS1RectCopy CFBNAME(SegmentSS1RectCopy)
-#define cfb8SegmentSS1RectGeneral CFBNAME(SegmentSS1RectGeneral )
-#define cfb8SegmentSS1RectShiftCopy CFBNAME(SegmentSS1RectShiftCopy)
-#define cfb8SegmentSS1RectXor CFBNAME(SegmentSS1RectXor)
-#define cfbAllocatePrivates CFBNAME(AllocatePrivates)
-#define cfbBSFuncRec CFBNAME(BSFuncRec)
-#define cfbBitBlt CFBNAME(BitBlt)
-#define cfbBresD CFBNAME(BresD)
-#define cfbBresS CFBNAME(BresS)
-#define cfbChangeWindowAttributes CFBNAME(ChangeWindowAttributes)
-#define cfbClearVisualTypes CFBNAME(cfbClearVisualTypes)
-#define cfbCloseScreen CFBNAME(CloseScreen)
-#define cfbCreateDefColormap CFBNAME (cfbCreateDefColormap)
-#define cfbCopyArea CFBNAME(CopyArea)
-#define cfbCopyImagePlane CFBNAME(CopyImagePlane)
-#define cfbCopyPixmap CFBNAME(CopyPixmap)
-#define cfbCopyPlane CFBNAME(CopyPlane)
-#define cfbCopyPlaneReduce CFBNAME(CopyPlaneReduce)
-#define cfbCopyRotatePixmap CFBNAME(CopyRotatePixmap)
-#define cfbCopyWindow CFBNAME(CopyWindow)
-#define cfbCreateGC CFBNAME(CreateGC)
-#define cfbCreatePixmap CFBNAME(CreatePixmap)
-#define cfbCreateScreenResources CFBNAME(CreateScreenResources)
-#define cfbCreateWindow CFBNAME(CreateWindow)
-#define cfbDestroyPixmap CFBNAME(DestroyPixmap)
-#define cfbDestroyWindow CFBNAME(DestroyWindow)
-#define cfbDoBitblt CFBNAME(DoBitblt)
-#define cfbDoBitbltCopy CFBNAME(DoBitbltCopy)
-#define cfbDoBitbltGeneral CFBNAME(DoBitbltGeneral)
-#define cfbDoBitbltOr CFBNAME(DoBitbltOr)
-#define cfbDoBitbltXor CFBNAME(DoBitbltXor)
-#define cfbExpandDirectColors CFBNAME(cfbExpandDirectColors)
-#define cfbFillBoxTile32sCopy CFBNAME(FillBoxTile32sCopy)
-#define cfbFillBoxTile32sGeneral CFBNAME(FillBoxTile32sGeneral)
-#define cfbFillBoxTileOdd CFBNAME(FillBoxTileOdd)
-#define cfbFillBoxTileOddCopy CFBNAME(FillBoxTileOddCopy)
-#define cfbFillBoxTileOddGeneral CFBNAME(FillBoxTileOddGeneral)
-#define cfbFillPoly1RectCopy CFBNAME(FillPoly1RectCopy)
-#define cfbFillPoly1RectGeneral CFBNAME(FillPoly1RectGeneral)
-#define cfbFillRectSolidCopy CFBNAME(FillRectSolidCopy)
-#define cfbFillRectSolidGeneral CFBNAME(FillRectSolidGeneral)
-#define cfbFillRectSolidXor CFBNAME(FillRectSolidXor)
-#define cfbFillRectTile32Copy CFBNAME(FillRectTile32Copy)
-#define cfbFillRectTile32General CFBNAME(FillRectTile32General)
-#define cfbFillRectTileOdd CFBNAME(FillRectTileOdd)
-#define cfbFillSpanTile32sCopy CFBNAME(FillSpanTile32sCopy)
-#define cfbFillSpanTile32sGeneral CFBNAME(FillSpanTile32sGeneral)
-#define cfbFillSpanTileOddCopy CFBNAME(FillSpanTileOddCopy)
-#define cfbFillSpanTileOddGeneral CFBNAME(FillSpanTileOddGeneral)
-#define cfbFinishScreenInit CFBNAME(FinishScreenInit)
-#define cfbGCFuncs CFBNAME(GCFuncs)
-#define cfbGCPrivateKey CFBNAME(GCPrivateKey)
-#define cfbGetImage CFBNAME(GetImage)
-#define cfbGetScreenPixmap CFBNAME(GetScreenPixmap)
-#define cfbGetSpans CFBNAME(GetSpans)
-#define cfbHorzS CFBNAME(HorzS)
-#define cfbImageGlyphBlt8 CFBNAME(ImageGlyphBlt8)
-#define cfbInitializeColormap CFBNAME(InitializeColormap)
-#define cfbInitVisuals CFBNAME(cfbInitVisuals)
-#define cfbInstallColormap CFBNAME(InstallColormap)
-#define cfbLineSD CFBNAME(LineSD)
-#define cfbLineSS CFBNAME(LineSS)
-#define cfbListInstalledColormaps CFBNAME(ListInstalledColormaps)
-#define cfbMapWindow CFBNAME(MapWindow)
-#define cfbMatchCommon CFBNAME(MatchCommon)
-#define cfbNonTEOps CFBNAME(NonTEOps)
-#define cfbNonTEOps1Rect CFBNAME(NonTEOps1Rect)
-#define cfbPadPixmap CFBNAME(PadPixmap)
-#define cfbPolyFillArcSolidCopy CFBNAME(PolyFillArcSolidCopy)
-#define cfbPolyFillArcSolidGeneral CFBNAME(PolyFillArcSolidGeneral)
-#define cfbPolyFillRect CFBNAME(PolyFillRect)
-#define cfbPolyGlyphBlt8 CFBNAME(PolyGlyphBlt8)
-#define cfbPolyGlyphRop8 CFBNAME(PolyGlyphRop8)
-#define cfbPolyPoint CFBNAME(PolyPoint)
-#define cfbPositionWindow CFBNAME(PositionWindow)
-#define cfbPutImage CFBNAME(PutImage)
-#define cfbReduceRasterOp CFBNAME(ReduceRasterOp)
-#define cfbResolveColor CFBNAME(ResolveColor)
-#define cfbRestoreAreas CFBNAME(RestoreAreas)
-#define cfbSaveAreas CFBNAME(SaveAreas)
-#define cfbScreenInit CFBNAME(ScreenInit)
-#define cfbScreenPrivateKey CFBNAME(ScreenPrivateKey)
-#define cfbSegmentSD CFBNAME(SegmentSD)
-#define cfbSegmentSS CFBNAME(SegmentSS)
-#define cfbSetScanline CFBNAME(SetScanline)
-#define cfbSetScreenPixmap CFBNAME(SetScreenPixmap)
-#define cfbSetSpans CFBNAME(SetSpans)
-#define cfbSetVisualTypes CFBNAME(cfbSetVisualTypes)
-#define cfbSetupScreen CFBNAME(SetupScreen)
-#define cfbSolidSpansCopy CFBNAME(SolidSpansCopy)
-#define cfbSolidSpansGeneral CFBNAME(SolidSpansGeneral)
-#define cfbSolidSpansXor CFBNAME(SolidSpansXor)
-#define cfbStippleStack CFBNAME(StippleStack)
-#define cfbStippleStackTE CFBNAME(StippleStackTE)
-#define cfbTEGlyphBlt CFBNAME(TEGlyphBlt)
-#define cfbTEOps CFBNAME(TEOps)
-#define cfbTEOps1Rect CFBNAME(TEOps1Rect)
-#define cfbTile32FSCopy CFBNAME(Tile32FSCopy)
-#define cfbTile32FSGeneral CFBNAME(Tile32FSGeneral)
-#define cfbUninstallColormap CFBNAME(UninstallColormap)
-#define cfbUnmapWindow CFBNAME(UnmapWindow)
-#define cfbUnnaturalStippleFS CFBNAME(UnnaturalStippleFS)
-#define cfbUnnaturalTileFS CFBNAME(UnnaturalTileFS)
-#define cfbValidateGC CFBNAME(ValidateGC)
-#define cfbVertS CFBNAME(VertS)
-#define cfbWindowPrivateKey CFBNAME(WindowPrivateKey)
-#define cfbXRotatePixmap CFBNAME(XRotatePixmap)
-#define cfbYRotatePixmap CFBNAME(YRotatePixmap)
-#define cfbZeroPolyArcSS8Copy CFBNAME(ZeroPolyArcSSCopy)
-#define cfbZeroPolyArcSS8General CFBNAME(ZeroPolyArcSSGeneral)
-#define cfbZeroPolyArcSS8Xor CFBNAME(ZeroPolyArcSSXor)
-#define cfbendpartial CFBNAME(endpartial)
-#define cfbendtab CFBNAME(endtab)
-#define cfbmask CFBNAME(mask)
-#define cfbrmask CFBNAME(rmask)
-#define cfbstartpartial CFBNAME(startpartial)
-#define cfbstarttab CFBNAME(starttab)
-
-#endif /* PSZ != 8 */
diff --git a/cfb/cfbmskbits.c b/cfb/cfbmskbits.c
deleted file mode 100644
index 915ea35c1..000000000
--- a/cfb/cfbmskbits.c
+++ /dev/null
@@ -1,1400 +0,0 @@
-/************************************************************
-Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this
-software and its documentation for any purpose and without
-fee is hereby granted, provided that the above copyright no-
-tice appear in all copies and that both that copyright no-
-tice and this permission notice appear in supporting docu-
-mentation, and that the names of Sun or The Open Group
-not be used in advertising or publicity pertaining to
-distribution of the software without specific prior
-written permission. Sun and The Open Group make no
-representations about the suitability of this software for
-any purpose. It is provided "as is" without any express or
-implied warranty.
-
-SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
-NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-
-ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
-THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-
-/*
- * ==========================================================================
- * Converted to Color Frame Buffer by smarks@sun, April-May 1987. The "bit
- * numbering" in the doc below really means "byte numbering" now.
- * ==========================================================================
- */
-
-/*
- these tables are used by several macros in the cfb code.
-
- the vax numbers everything left to right, so bit indices on the
-screen match bit indices in longwords. the pc-rt and Sun number
-bits on the screen the way they would be written on paper,
-(i.e. msb to the left), and so a bit index n on the screen is
-bit index 32-n in a longword
-
- see also cfbmskbits.h
-*/
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <servermd.h>
-#include "cfb.h"
-#include "cfbmskbits.h"
-
-#define _cfbBits(a) (PixelGroup)(a)
-
-#if (BITMAP_BIT_ORDER == MSBFirst)
-#define cfbBits(v) _cfbBits(v)
-#else /* BITMAP_BIT_ORDER == LSBFirst */
-#define cfbFlip2(a) ((((a) & 0x1) << 1) | (((a) & 0x2) >> 1))
-#define cfbFlip4(a) ((cfbFlip2(a) << 2) | cfbFlip2(a >> 2))
-#define cfbFlip8(a) ((cfbFlip4(a) << 4) | cfbFlip4(a >> 4))
-#define cfbFlip16(a) ((cfbFlip8(a) << 8) | cfbFlip8(a >> 8))
-#define cfbFlip32(a) ((cfbFlip16(a) << 16) | cfbFlip16(a >> 16))
-#if PGSZ == 32
-#define cfbBits(a) cfbFlip32(_cfbBits(a))
-#else /* PGSZ == 64 */
-#define cfbFlip64(a) ((cfbFlip32(a) << 32) | cfbFlip32(a >> 32))
-#define cfbBits(a) cfbFlip64(_cfbBits(a))
-#endif /* PGSZ */
-#endif /* BITMAP_BIT_ORDER */
-
-/* NOTE:
-the first element in starttab could be 0xffffffff. making it 0
-lets us deal with a full first word in the middle loop, rather
-than having to do the multiple reads and masks that we'd
-have to do if we thought it was partial.
-*/
-#if PSZ == 4
-#if PGSZ == 32
-PixelGroup cfbstarttab[] =
- {
- cfbBits(0x00000000),
- cfbBits(0x0FFFFFFF),
- cfbBits(0x00FFFFFF),
- cfbBits(0x000FFFFF),
- cfbBits(0x0000FFFF),
- cfbBits(0x00000FFF),
- cfbBits(0x000000FF),
- cfbBits(0x0000000F)
- };
-PixelGroup cfbendtab[] =
- {
- cfbBits(0x00000000),
- cfbBits(0xF0000000),
- cfbBits(0xFF000000),
- cfbBits(0xFFF00000),
- cfbBits(0xFFFF0000),
- cfbBits(0xFFFFF000),
- cfbBits(0xFFFFFF00),
- cfbBits(0xFFFFFFF0)
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbstarttab[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0x0FFFFFFFFFFFFFFF),
- cfbBits(0x00FFFFFFFFFFFFFF),
- cfbBits(0x000FFFFFFFFFFFFF),
- cfbBits(0x0000FFFFFFFFFFFF),
- cfbBits(0x00000FFFFFFFFFFF),
- cfbBits(0x000000FFFFFFFFFF),
- cfbBits(0x0000000FFFFFFFFF),
- cfbBits(0x00000000FFFFFFFF),
- cfbBits(0x000000000FFFFFFF),
- cfbBits(0x0000000000FFFFFF),
- cfbBits(0x00000000000FFFFF),
- cfbBits(0x000000000000FFFF),
- cfbBits(0x0000000000000FFF),
- cfbBits(0x00000000000000FF),
- cfbBits(0x000000000000000F),
- };
-PixelGroup cfbendtab[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0xF000000000000000),
- cfbBits(0xFF00000000000000),
- cfbBits(0xFFF0000000000000),
- cfbBits(0xFFFF000000000000),
- cfbBits(0xFFFFF00000000000),
- cfbBits(0xFFFFFF0000000000),
- cfbBits(0xFFFFFFF000000000),
- cfbBits(0xFFFFFFFF00000000),
- cfbBits(0xFFFFFFFFF0000000),
- cfbBits(0xFFFFFFFFFF000000),
- cfbBits(0xFFFFFFFFFFF00000),
- cfbBits(0xFFFFFFFFFFFF0000),
- cfbBits(0xFFFFFFFFFFFFF000),
- cfbBits(0xFFFFFFFFFFFFFF00),
- cfbBits(0xFFFFFFFFFFFFFFF0),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 4 */
-
-#if PSZ == 8
-#if PGSZ == 32
-PixelGroup cfbstarttab[] =
- {
- cfbBits(0x00000000),
- cfbBits(0x00FFFFFF),
- cfbBits(0x0000FFFF),
- cfbBits(0x000000FF)
- };
-PixelGroup cfbendtab[] =
- {
- cfbBits(0x00000000),
- cfbBits(0xFF000000),
- cfbBits(0xFFFF0000),
- cfbBits(0xFFFFFF00)
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbstarttab[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0x00FFFFFFFFFFFFFF),
- cfbBits(0x0000FFFFFFFFFFFF),
- cfbBits(0x000000FFFFFFFFFF),
- cfbBits(0x00000000FFFFFFFF),
- cfbBits(0x0000000000FFFFFF),
- cfbBits(0x000000000000FFFF),
- cfbBits(0x00000000000000FF)
- };
-PixelGroup cfbendtab[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0xFF00000000000000),
- cfbBits(0xFFFF000000000000),
- cfbBits(0xFFFFFF0000000000),
- cfbBits(0xFFFFFFFF00000000),
- cfbBits(0xFFFFFFFFFF000000),
- cfbBits(0xFFFFFFFFFFFF0000),
- cfbBits(0xFFFFFFFFFFFFFF00)
- };
-#endif /* PGSZ */
-#endif /* PSZ == 8 */
-
-#if PSZ == 16
-#if PGSZ == 32
-PixelGroup cfbstarttab[] =
- {
- cfbBits(0x00000000),
- cfbBits(0x0000FFFF),
- };
-PixelGroup cfbendtab[] =
- {
- cfbBits(0x00000000),
- cfbBits(0xFFFF0000),
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbstarttab[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0x0000FFFFFFFFFFFF),
- cfbBits(0x00000000FFFFFFFF),
- cfbBits(0x000000000000FFFF),
- };
-PixelGroup cfbendtab[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0xFFFF000000000000),
- cfbBits(0xFFFFFFFF00000000),
- cfbBits(0xFFFFFFFFFFFF0000),
- };
-#endif /* PGSZ */
-#endif
-
-#if PSZ == 24
-#if PGSZ == 32
-PixelGroup cfbstarttab[] =
- {
- cfbBits(0x00000000),
- cfbBits(0x000000FF),
- cfbBits(0x0000FFFF),
- cfbBits(0x00FFFFFF),
- };
-PixelGroup cfbendtab[] =
- {
- cfbBits(0x00000000),
- cfbBits(0xFFFFFF00),
- cfbBits(0xFFFF0000),
- cfbBits(0xFF000000),
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbstarttab[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0x000000FFFFFFFFFF),
- cfbBits(0x000000000000FFFF),
- };
-PixelGroup cfbendtab[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0xFFFFFFFFFF000000),
- cfbBits(0xFFFF000000000000),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 24 */
-
-#if PSZ == 32
-#if PGSZ == 32
-PixelGroup cfbstarttab[] =
- {
- cfbBits(0x00000000),
- };
-PixelGroup cfbendtab[] =
- {
- cfbBits(0x00000000),
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbstarttab[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0x00000000FFFFFFFF),
- };
-PixelGroup cfbendtab[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0xFFFFFFFF00000000),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 32 */
-
-/* a hack, for now, since the entries for 0 need to be all
- 1 bits, not all zeros.
- this means the code DOES NOT WORK for segments of length
- 0 (which is only a problem in the horizontal line code.)
-*/
-#if PSZ == 4
-#if PGSZ == 32
-PixelGroup cfbstartpartial[] =
- {
- cfbBits(0xFFFFFFFF),
- cfbBits(0x0FFFFFFF),
- cfbBits(0x00FFFFFF),
- cfbBits(0x000FFFFF),
- cfbBits(0x0000FFFF),
- cfbBits(0x00000FFF),
- cfbBits(0x000000FF),
- cfbBits(0x0000000F)
- };
-
-PixelGroup cfbendpartial[] =
- {
- cfbBits(0xFFFFFFFF),
- cfbBits(0xF0000000),
- cfbBits(0xFF000000),
- cfbBits(0xFFF00000),
- cfbBits(0xFFFF0000),
- cfbBits(0xFFFFF000),
- cfbBits(0xFFFFFF00),
- cfbBits(0xFFFFFFF0)
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbstartpartial[] =
- {
- cfbBits(0xFFFFFFFFFFFFFFFF),
- cfbBits(0x0FFFFFFFFFFFFFFF),
- cfbBits(0x00FFFFFFFFFFFFFF),
- cfbBits(0x000FFFFFFFFFFFFF),
- cfbBits(0x0000FFFFFFFFFFFF),
- cfbBits(0x00000FFFFFFFFFFF),
- cfbBits(0x000000FFFFFFFFFF),
- cfbBits(0x0000000FFFFFFFFF),
- cfbBits(0x00000000FFFFFFFF),
- cfbBits(0x000000000FFFFFFF),
- cfbBits(0x0000000000FFFFFF),
- cfbBits(0x00000000000FFFFF),
- cfbBits(0x000000000000FFFF),
- cfbBits(0x0000000000000FFF),
- cfbBits(0x00000000000000FF),
- cfbBits(0x000000000000000F),
- };
-
-PixelGroup cfbendpartial[] =
- {
- cfbBits(0xFFFFFFFFFFFFFFFF),
- cfbBits(0xF000000000000000),
- cfbBits(0xFF00000000000000),
- cfbBits(0xFFF0000000000000),
- cfbBits(0xFFFF000000000000),
- cfbBits(0xFFFFF00000000000),
- cfbBits(0xFFFFFF0000000000),
- cfbBits(0xFFFFFFF000000000),
- cfbBits(0xFFFFFFFF00000000),
- cfbBits(0xFFFFFFFFF0000000),
- cfbBits(0xFFFFFFFFFF000000),
- cfbBits(0xFFFFFFFFFFF00000),
- cfbBits(0xFFFFFFFFFFFF0000),
- cfbBits(0xFFFFFFFFFFFFF000),
- cfbBits(0xFFFFFFFFFFFFFF00),
- cfbBits(0xFFFFFFFFFFFFFFF0),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 4 */
-
-#if PSZ == 8
-#if PGSZ == 32
-PixelGroup cfbstartpartial[] =
- {
- cfbBits(0xFFFFFFFF),
- cfbBits(0x00FFFFFF),
- cfbBits(0x0000FFFF),
- cfbBits(0x000000FF)
- };
-
-PixelGroup cfbendpartial[] =
- {
- cfbBits(0xFFFFFFFF),
- cfbBits(0xFF000000),
- cfbBits(0xFFFF0000),
- cfbBits(0xFFFFFF00)
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbstartpartial[] =
- {
- cfbBits(0xFFFFFFFFFFFFFFFF),
- cfbBits(0x00FFFFFFFFFFFFFF),
- cfbBits(0x0000FFFFFFFFFFFF),
- cfbBits(0x000000FFFFFFFFFF),
- cfbBits(0x00000000FFFFFFFF),
- cfbBits(0x0000000000FFFFFF),
- cfbBits(0x000000000000FFFF),
- cfbBits(0x00000000000000FF),
- };
-
-PixelGroup cfbendpartial[] =
- {
- cfbBits(0xFFFFFFFFFFFFFFFF),
- cfbBits(0xFF00000000000000),
- cfbBits(0xFFFF000000000000),
- cfbBits(0xFFFFFF0000000000),
- cfbBits(0xFFFFFFFF00000000),
- cfbBits(0xFFFFFFFFFF000000),
- cfbBits(0xFFFFFFFFFFFF0000),
- cfbBits(0xFFFFFFFFFFFFFF00),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 8 */
-
-#if PSZ == 16
-#if PGSZ == 32
-PixelGroup cfbstartpartial[] =
- {
- cfbBits(0xFFFFFFFF),
- cfbBits(0x0000FFFF),
- };
-
-PixelGroup cfbendpartial[] =
- {
- cfbBits(0xFFFFFFFF),
- cfbBits(0xFFFF0000),
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbstartpartial[] =
- {
- cfbBits(0xFFFFFFFFFFFFFFFF),
- cfbBits(0x0000FFFFFFFFFFFF),
- cfbBits(0x00000000FFFFFFFF),
- cfbBits(0x000000000000FFFF),
- };
-
-PixelGroup cfbendpartial[] =
- {
- cfbBits(0xFFFFFFFFFFFFFFFF),
- cfbBits(0xFFFF000000000000),
- cfbBits(0xFFFFFFFF00000000),
- cfbBits(0xFFFFFFFFFFFF0000),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 16 */
-
-#if PSZ == 24
-#if PGSZ == 32
-PixelGroup cfbstartpartial[] =
- {
- cfbBits(0xFFFFFFFF),
- cfbBits(0x000000FF),
- cfbBits(0x0000FFFF),
- cfbBits(0x00FFFFFF),
- };
-
-PixelGroup cfbendpartial[] =
- {
- cfbBits(0xFFFFFFFF),
- cfbBits(0xFFFFFF00),
- cfbBits(0xFFFF0000),
- cfbBits(0xFF000000),
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbstartpartial[] =
- {
- cfbBits(0xFFFFFFFFFFFFFFFF),
- cfbBits(0x0000FFFFFFFFFFFF),
- cfbBits(0x000000FFFFFFFFFF),
- cfbBits(0x00000000FFFFFFFF),
- cfbBits(0x0000000000FFFFFF),
- cfbBits(0x000000000000FFFF),
- cfbBits(0x00000000000000FF),
- };
-
-PixelGroup cfbendpartial[] =
- {
- cfbBits(0xFFFFFFFFFFFFFFFF),
- cfbBits(0xFFFFFFFFFFFF0000),
- cfbBits(0xFFFFFFFFFF000000),
- cfbBits(0xFFFFFFFF00000000),
- cfbBits(0xFFFFFF0000000000),
- cfbBits(0xFFFF000000000000),
- cfbBits(0xFF00000000000000),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 24 */
-
-#if PSZ == 32
-#if PGSZ == 32
-PixelGroup cfbstartpartial[] =
- {
- cfbBits(0xFFFFFFFF),
- };
-
-PixelGroup cfbendpartial[] =
- {
- cfbBits(0xFFFFFFFF),
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbstartpartial[] =
- {
- cfbBits(0xFFFFFFFFFFFFFFFF),
- cfbBits(0x00000000FFFFFFFF),
- };
-
-PixelGroup cfbendpartial[] =
- {
- cfbBits(0xFFFFFFFFFFFFFFFF),
- cfbBits(0xFFFFFFFF00000000),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 32 */
-
-/* used for masking bits in bresenham lines
- mask[n] is used to mask out all but bit n in a longword (n is a
-screen position).
- rmask[n] is used to mask out the single bit at position n (n
-is a screen posiotion.)
-*/
-
-#if PSZ == 4
-#if PGSZ == 32
-PixelGroup cfbmask[] =
- {
- cfbBits(0xF0000000),
- cfbBits(0x0F000000),
- cfbBits(0x00F00000),
- cfbBits(0x000F0000),
- cfbBits(0x0000F000),
- cfbBits(0x00000F00),
- cfbBits(0x000000F0),
- cfbBits(0x0000000F)
- };
-PixelGroup cfbrmask[] =
- {
- cfbBits(0x0FFFFFFF),
- cfbBits(0xF0FFFFFF),
- cfbBits(0xFF0FFFFF),
- cfbBits(0xFFF0FFFF),
- cfbBits(0xFFFF0FFF),
- cfbBits(0xFFFFF0FF),
- cfbBits(0xFFFFFF0F),
- cfbBits(0xFFFFFFF0)
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbmask[] =
- {
- cfbBits(0xF000000000000000),
- cfbBits(0x0F00000000000000),
- cfbBits(0x00F0000000000000),
- cfbBits(0x000F000000000000),
- cfbBits(0x0000F00000000000),
- cfbBits(0x00000F0000000000),
- cfbBits(0x000000F000000000),
- cfbBits(0x0000000F00000000),
- cfbBits(0x00000000F0000000),
- cfbBits(0x000000000F000000),
- cfbBits(0x0000000000F00000),
- cfbBits(0x00000000000F0000),
- cfbBits(0x000000000000F000),
- cfbBits(0x0000000000000F00),
- cfbBits(0x00000000000000F0),
- cfbBits(0x000000000000000F),
- };
-PixelGroup cfbrmask[] =
- {
- cfbBits(0x0FFFFFFFFFFFFFFF),
- cfbBits(0xF0FFFFFFFFFFFFFF),
- cfbBits(0xFF0FFFFFFFFFFFFF),
- cfbBits(0xFFF0FFFFFFFFFFFF),
- cfbBits(0xFFFF0FFFFFFFFFFF),
- cfbBits(0xFFFFF0FFFFFFFFFF),
- cfbBits(0xFFFFFF0FFFFFFFFF),
- cfbBits(0xFFFFFFF0FFFFFFFF),
- cfbBits(0xFFFFFFFF0FFFFFFF),
- cfbBits(0xFFFFFFFFF0FFFFFF),
- cfbBits(0xFFFFFFFFFF0FFFFF),
- cfbBits(0xFFFFFFFFFFF0FFFF),
- cfbBits(0xFFFFFFFFFFFF0FFF),
- cfbBits(0xFFFFFFFFFFFFF0FF),
- cfbBits(0xFFFFFFFFFFFFFF0F),
- cfbBits(0xFFFFFFFFFFFFFFF0),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 4 */
-
-#if PSZ == 8
-#if PGSZ == 32
-PixelGroup cfbmask[] =
- {
- cfbBits(0xFF000000),
- cfbBits(0x00FF0000),
- cfbBits(0x0000FF00),
- cfbBits(0x000000FF)
- };
-PixelGroup cfbrmask[] =
- {
- cfbBits(0x00FFFFFF),
- cfbBits(0xFF00FFFF),
- cfbBits(0xFFFF00FF),
- cfbBits(0xFFFFFF00)
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbmask[] =
- {
- cfbBits(0xFF00000000000000),
- cfbBits(0x00FF000000000000),
- cfbBits(0x0000FF0000000000),
- cfbBits(0x000000FF00000000),
- cfbBits(0x00000000FF000000),
- cfbBits(0x0000000000FF0000),
- cfbBits(0x000000000000FF00),
- cfbBits(0x00000000000000FF),
- };
-PixelGroup cfbrmask[] =
- {
- cfbBits(0x00FFFFFFFFFFFFFF),
- cfbBits(0xFF00FFFFFFFFFFFF),
- cfbBits(0xFFFF00FFFFFFFFFF),
- cfbBits(0xFFFFFF00FFFFFFFF),
- cfbBits(0xFFFFFFFF00FFFFFF),
- cfbBits(0xFFFFFFFFFF00FFFF),
- cfbBits(0xFFFFFFFFFFFF00FF),
- cfbBits(0xFFFFFFFFFFFFFF00),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 8 */
-
-#if PSZ == 16
-#if PGSZ == 32
-PixelGroup cfbmask[] =
- {
- cfbBits(0xFFFF0000),
- cfbBits(0x0000FFFF),
- };
-PixelGroup cfbrmask[] =
- {
- cfbBits(0x0000FFFF),
- cfbBits(0xFFFF0000),
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbmask[] =
- {
- cfbBits(0xFFFF000000000000),
- cfbBits(0x0000FFFF00000000),
- cfbBits(0x00000000FFFF0000),
- cfbBits(0x000000000000FFFF),
- };
-PixelGroup cfbrmask[] =
- {
- cfbBits(0x0000FFFFFFFFFFFF),
- cfbBits(0xFFFF0000FFFFFFFF),
- cfbBits(0xFFFFFFFF0000FFFF),
- cfbBits(0xFFFFFFFFFFFF0000),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 16 */
-
-#if PSZ == 24
-#if PGSZ == 32
-PixelGroup cfbmask[] =
- {
- cfbBits(0xFFFFFF00),
- cfbBits(0x00000000),
- cfbBits(0x000000FF),
- cfbBits(0xFFFF0000),
- cfbBits(0x0000FFFF),
- cfbBits(0xFF000000),
- cfbBits(0x00FFFFFF),
- cfbBits(0x00000000),
- };
-PixelGroup cfbrmask[] =
- {
- cfbBits(0x000000FF),
- cfbBits(0xFFFFFFFF),
- cfbBits(0xFFFFFF00),
- cfbBits(0x0000FFFF),
- cfbBits(0xFFFF0000),
- cfbBits(0x00FFFFFF),
- cfbBits(0xFF000000),
- cfbBits(0xFFFFFFFF),
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbmask[] =
- {
- cfbBits(0xFFFFFF0000000000),
- cfbBits(0x000000FFFFFF0000),
- cfbBits(0x000000000000FFFF),
- };
-PixelGroup cfbmask2[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0x0000000000000000),
- cfbBits(0xFF00000000000000),
- };
-PixelGroup cfbrmask[] =
- {
- cfbBits(0x000000FFFFFFFFFF),
- cfbBits(0xFFFFFF000000FFFF),
- cfbBits(0xFFFFFFFFFFFF0000),
- };
-PixelGroup cfbrmask2[] =
- {
- cfbBits(0x0000000000000000),
- cfbBits(0x0000000000000000),
- cfbBits(0x00FFFFFFFFFFFFFF),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 24 */
-
-#if PSZ == 32
-#if PGSZ == 32
-PixelGroup cfbmask[] =
- {
- cfbBits(0xFFFFFFFF),
- };
-PixelGroup cfbrmask[] =
- {
- cfbBits(0xFFFFFFFF),
- };
-#else /* PGSZ == 64 */
-PixelGroup cfbmask[] =
- {
- cfbBits(0xFFFFFFFF00000000),
- cfbBits(0x00000000FFFFFFFF),
- };
-PixelGroup cfbrmask[] =
- {
- cfbBits(0x00000000FFFFFFFF),
- cfbBits(0xFFFFFFFF00000000),
- };
-#endif /* PGSZ */
-#endif /* PSZ == 32 */
-
-/*
- * QuartetBitsTable contains PPW+1 masks whose binary values are masks in the
- * low order quartet that contain the number of bits specified in the
- * index. This table is used by getstipplepixels.
- */
-#if PSZ == 4
-PixelGroup QuartetBitsTable[] = {
-#if PGSZ == 32
-#if (BITMAP_BIT_ORDER == MSBFirst)
- 0x00000000, /* 0 - 00000000 */
- 0x00000080, /* 1 - 10000000 */
- 0x000000C0, /* 2 - 11000000 */
- 0x000000E0, /* 3 - 11100000 */
- 0x000000F0, /* 4 - 11110000 */
- 0x000000F8, /* 5 - 11111000 */
- 0x000000FC, /* 6 - 11111100 */
- 0x000000FE, /* 7 - 11111110 */
- 0x000000FF /* 8 - 11111111 */
-#else /* (BITMAP_BIT_ORDER == LSBFirst */
- 0x00000000, /* 0 - 00000000 */
- 0x00000001, /* 1 - 00000001 */
- 0x00000003, /* 2 - 00000011 */
- 0x00000007, /* 3 - 00000111 */
- 0x0000000F, /* 4 - 00001111 */
- 0x0000001F, /* 5 - 00011111 */
- 0x0000003F, /* 6 - 00111111 */
- 0x0000007F, /* 7 - 01111111 */
- 0x000000FF /* 8 - 11111111 */
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-#else /* PGSZ == 64 */
-#if (BITMAP_BIT_ORDER == MSBFirst)
- 0x00000000, /* 0 - 0000000000000000 */
- 0x00008000, /* 1 - 1000000000000000 */
- 0x0000C000, /* 2 - 1100000000000000 */
- 0x0000E000, /* 3 - 1110000000000000 */
- 0x0000F000, /* 4 - 1111000000000000 */
- 0x0000F800, /* 5 - 1111100000000000 */
- 0x0000FC00, /* 6 - 1111110000000000 */
- 0x0000FE00, /* 7 - 1111111000000000 */
- 0x0000FF00, /* 8 - 1111111100000000 */
- 0x0000FF80, /* 9 - 1111111110000000 */
- 0x0000FFC0, /* 10- 1111111111000000 */
- 0x0000FFE0, /* 11- 1111111111100000 */
- 0x0000FFF0, /* 12- 1111111111110000 */
- 0x0000FFF8, /* 13- 1111111111111000 */
- 0x0000FFFC, /* 14- 1111111111111100 */
- 0x0000FFFE, /* 15- 1111111111111110 */
- 0x0000FFFF, /* 16- 1111111111111111 */
-#else /* (BITMAP_BIT_ORDER == LSBFirst */
- 0x00000000, /* 0 - 0000000000000000 */
- 0x00000001, /* 1 - 0000000000000001 */
- 0x00000003, /* 2 - 0000000000000011 */
- 0x00000007, /* 3 - 0000000000000111 */
- 0x0000000F, /* 4 - 0000000000001111 */
- 0x0000001F, /* 5 - 0000000000011111 */
- 0x0000003F, /* 6 - 0000000000111111 */
- 0x0000007F, /* 7 - 0000000001111111 */
- 0x000000FF, /* 8 - 0000000011111111 */
- 0x000001FF, /* 9 - 0000000111111111 */
- 0x000003FF, /* 10- 0000001111111111 */
- 0x000007FF, /* 11- 0000011111111111 */
- 0x00000FFF, /* 12- 0000111111111111 */
- 0x00001FFF, /* 13- 0001111111111111 */
- 0x00003FFF, /* 14- 0011111111111111 */
- 0x00007FFF, /* 15- 0111111111111111 */
- 0x0000FFFF, /* 16- 1111111111111111 */
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-#endif /* PGSZ */
-};
-#endif /* PSZ == 4 */
-
-#if PSZ == 8
-PixelGroup QuartetBitsTable[] = {
-#if PGSZ == 32
-#if (BITMAP_BIT_ORDER == MSBFirst)
- 0x00000000, /* 0 - 0000 */
- 0x00000008, /* 1 - 1000 */
- 0x0000000C, /* 2 - 1100 */
- 0x0000000E, /* 3 - 1110 */
- 0x0000000F /* 4 - 1111 */
-#else /* (BITMAP_BIT_ORDER == LSBFirst */
- 0x00000000, /* 0 - 0000 */
- 0x00000001, /* 1 - 0001 */
- 0x00000003, /* 2 - 0011 */
- 0x00000007, /* 3 - 0111 */
- 0x0000000F /* 4 - 1111 */
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-#else /* PGSZ == 64 */
-#if (BITMAP_BIT_ORDER == MSBFirst)
- 0x00000000, /* 0 - 00000000 */
- 0x00000080, /* 1 - 10000000 */
- 0x000000C0, /* 2 - 11000000 */
- 0x000000E0, /* 3 - 11100000 */
- 0x000000F0, /* 4 - 11110000 */
- 0x000000F8, /* 5 - 11111000 */
- 0x000000FC, /* 6 - 11111100 */
- 0x000000FE, /* 7 - 11111110 */
- 0x000000FF /* 8 - 11111111 */
-#else /* (BITMAP_BIT_ORDER == LSBFirst */
- 0x00000000, /* 0 - 00000000 */
- 0x00000001, /* 1 - 00000001 */
- 0x00000003, /* 2 - 00000011 */
- 0x00000007, /* 3 - 00000111 */
- 0x0000000F, /* 4 - 10000111 */
- 0x0000001F, /* 5 - 00011111 */
- 0x0000003F, /* 6 - 00111111 */
- 0x0000007F, /* 7 - 01111111 */
- 0x000000FF /* 8 - 11111111 */
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-#endif /* PGSZ */
-};
-#endif /* PSZ == 8 */
-
-#if PSZ == 16
-PixelGroup QuartetBitsTable[] = {
-#if PGSZ == 32
-#if (BITMAP_BIT_ORDER == MSBFirst)
- 0x00000000, /* 0 - 00 */
- 0x00000002, /* 1 - 10 */
- 0x00000003, /* 2 - 11 */
-#else /* (BITMAP_BIT_ORDER == LSBFirst */
- 0x00000000, /* 0 - 00 */
- 0x00000001, /* 1 - 01 */
- 0x00000003, /* 2 - 11 */
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-#else /* PGSZ == 64 */
-#if (BITMAP_BIT_ORDER == MSBFirst)
- 0x00000000, /* 0 - 0000 */
- 0x00000008, /* 1 - 1000 */
- 0x0000000C, /* 2 - 1100 */
- 0x0000000E, /* 3 - 1110 */
- 0x0000000F, /* 4 - 1111 */
-#else /* (BITMAP_BIT_ORDER == LSBFirst */
- 0x00000000, /* 0 - 0000 */
- 0x00000001, /* 1 - 0001 */
- 0x00000003, /* 2 - 0011 */
- 0x00000007, /* 3 - 0111 */
- 0x0000000F, /* 4 - 1111 */
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-#endif /* PGSZ */
-};
-#endif /* PSZ == 16 */
-
-#if PSZ == 24
-PixelGroup QuartetBitsTable[] = {
-#if PGSZ == 32
-#if (BITMAP_BIT_ORDER == MSBFirst)
- 0x00000000, /* 0 - 0 */
- 0x00000001, /* 1 - 1 */
-#else /* (BITMAP_BIT_ORDER == LSBFirst */
- 0x00000000, /* 0 - 0 */
- 0x00000001, /* 1 - 1 */
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-#else /* PGSZ == 64 */
-#if (BITMAP_BIT_ORDER == MSBFirst)
- 0x00000000, /* 0 - 00 */
- 0x00000002, /* 1 - 10 */
- 0x00000003, /* 2 - 11*/
-#else /* (BITMAP_BIT_ORDER == LSBFirst */
- 0x00000000, /* 0 - 00 */
- 0x00000001, /* 1 - 01 */
- 0x00000003, /* 2 - 11 */
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-#endif /* PGSZ */
-};
-#endif /* PSZ == 24 */
-
-#if PSZ == 32
-PixelGroup QuartetBitsTable[] = {
-#if PGSZ == 32
-#if (BITMAP_BIT_ORDER == MSBFirst)
- 0x00000000, /* 0 - 0 */
- 0x00000001, /* 1 - 1 */
-#else /* (BITMAP_BIT_ORDER == LSBFirst */
- 0x00000000, /* 0 - 0 */
- 0x00000001, /* 1 - 1 */
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-#else /* PGSZ == 64 */
-#if (BITMAP_BIT_ORDER == MSBFirst)
- 0x00000000, /* 0 - 00 */
- 0x00000002, /* 1 - 10 */
- 0x00000003, /* 2 - 11*/
-#else /* (BITMAP_BIT_ORDER == LSBFirst */
- 0x00000000, /* 0 - 00 */
- 0x00000001, /* 1 - 01 */
- 0x00000003, /* 2 - 11 */
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-#endif /* PGSZ */
-};
-#endif /* PSZ == 32 */
-
-/*
- * QuartetPixelMaskTable is used by getstipplepixels to get a pixel mask
- * corresponding to a quartet of bits. Note: the bit/byte order dependency
- * is handled by QuartetBitsTable above.
- */
-#if PSZ == 4
-#if PGSZ == 32
-PixelGroup QuartetPixelMaskTable[] = {
- 0x00000000,
- 0x0000000F,
- 0x000000F0,
- 0x000000FF,
- 0x00000F00,
- 0x00000F0F,
- 0x00000FF0,
- 0x00000FFF,
- 0x0000F000,
- 0x0000F00F,
- 0x0000F0F0,
- 0x0000F0FF,
- 0x0000FF00,
- 0x0000FF0F,
- 0x0000FFF0,
- 0x0000FFFF,
- 0x000F0000,
- 0x000F000F,
- 0x000F00F0,
- 0x000F00FF,
- 0x000F0F00,
- 0x000F0F0F,
- 0x000F0FF0,
- 0x000F0FFF,
- 0x000FF000,
- 0x000FF00F,
- 0x000FF0F0,
- 0x000FF0FF,
- 0x000FFF00,
- 0x000FFF0F,
- 0x000FFFF0,
- 0x000FFFFF,
- 0x00F00000,
- 0x00F0000F,
- 0x00F000F0,
- 0x00F000FF,
- 0x00F00F00,
- 0x00F00F0F,
- 0x00F00FF0,
- 0x00F00FFF,
- 0x00F0F000,
- 0x00F0F00F,
- 0x00F0F0F0,
- 0x00F0F0FF,
- 0x00F0FF00,
- 0x00F0FF0F,
- 0x00F0FFF0,
- 0x00F0FFFF,
- 0x00FF0000,
- 0x00FF000F,
- 0x00FF00F0,
- 0x00FF00FF,
- 0x00FF0F00,
- 0x00FF0F0F,
- 0x00FF0FF0,
- 0x00FF0FFF,
- 0x00FFF000,
- 0x00FFF00F,
- 0x00FFF0F0,
- 0x00FFF0FF,
- 0x00FFFF00,
- 0x00FFFF0F,
- 0x00FFFFF0,
- 0x00FFFFFF,
- 0x0F000000,
- 0x0F00000F,
- 0x0F0000F0,
- 0x0F0000FF,
- 0x0F000F00,
- 0x0F000F0F,
- 0x0F000FF0,
- 0x0F000FFF,
- 0x0F00F000,
- 0x0F00F00F,
- 0x0F00F0F0,
- 0x0F00F0FF,
- 0x0F00FF00,
- 0x0F00FF0F,
- 0x0F00FFF0,
- 0x0F00FFFF,
- 0x0F0F0000,
- 0x0F0F000F,
- 0x0F0F00F0,
- 0x0F0F00FF,
- 0x0F0F0F00,
- 0x0F0F0F0F,
- 0x0F0F0FF0,
- 0x0F0F0FFF,
- 0x0F0FF000,
- 0x0F0FF00F,
- 0x0F0FF0F0,
- 0x0F0FF0FF,
- 0x0F0FFF00,
- 0x0F0FFF0F,
- 0x0F0FFFF0,
- 0x0F0FFFFF,
- 0x0FF00000,
- 0x0FF0000F,
- 0x0FF000F0,
- 0x0FF000FF,
- 0x0FF00F00,
- 0x0FF00F0F,
- 0x0FF00FF0,
- 0x0FF00FFF,
- 0x0FF0F000,
- 0x0FF0F00F,
- 0x0FF0F0F0,
- 0x0FF0F0FF,
- 0x0FF0FF00,
- 0x0FF0FF0F,
- 0x0FF0FFF0,
- 0x0FF0FFFF,
- 0x0FFF0000,
- 0x0FFF000F,
- 0x0FFF00F0,
- 0x0FFF00FF,
- 0x0FFF0F00,
- 0x0FFF0F0F,
- 0x0FFF0FF0,
- 0x0FFF0FFF,
- 0x0FFFF000,
- 0x0FFFF00F,
- 0x0FFFF0F0,
- 0x0FFFF0FF,
- 0x0FFFFF00,
- 0x0FFFFF0F,
- 0x0FFFFFF0,
- 0x0FFFFFFF,
- 0xF0000000,
- 0xF000000F,
- 0xF00000F0,
- 0xF00000FF,
- 0xF0000F00,
- 0xF0000F0F,
- 0xF0000FF0,
- 0xF0000FFF,
- 0xF000F000,
- 0xF000F00F,
- 0xF000F0F0,
- 0xF000F0FF,
- 0xF000FF00,
- 0xF000FF0F,
- 0xF000FFF0,
- 0xF000FFFF,
- 0xF00F0000,
- 0xF00F000F,
- 0xF00F00F0,
- 0xF00F00FF,
- 0xF00F0F00,
- 0xF00F0F0F,
- 0xF00F0FF0,
- 0xF00F0FFF,
- 0xF00FF000,
- 0xF00FF00F,
- 0xF00FF0F0,
- 0xF00FF0FF,
- 0xF00FFF00,
- 0xF00FFF0F,
- 0xF00FFFF0,
- 0xF00FFFFF,
- 0xF0F00000,
- 0xF0F0000F,
- 0xF0F000F0,
- 0xF0F000FF,
- 0xF0F00F00,
- 0xF0F00F0F,
- 0xF0F00FF0,
- 0xF0F00FFF,
- 0xF0F0F000,
- 0xF0F0F00F,
- 0xF0F0F0F0,
- 0xF0F0F0FF,
- 0xF0F0FF00,
- 0xF0F0FF0F,
- 0xF0F0FFF0,
- 0xF0F0FFFF,
- 0xF0FF0000,
- 0xF0FF000F,
- 0xF0FF00F0,
- 0xF0FF00FF,
- 0xF0FF0F00,
- 0xF0FF0F0F,
- 0xF0FF0FF0,
- 0xF0FF0FFF,
- 0xF0FFF000,
- 0xF0FFF00F,
- 0xF0FFF0F0,
- 0xF0FFF0FF,
- 0xF0FFFF00,
- 0xF0FFFF0F,
- 0xF0FFFFF0,
- 0xF0FFFFFF,
- 0xFF000000,
- 0xFF00000F,
- 0xFF0000F0,
- 0xFF0000FF,
- 0xFF000F00,
- 0xFF000F0F,
- 0xFF000FF0,
- 0xFF000FFF,
- 0xFF00F000,
- 0xFF00F00F,
- 0xFF00F0F0,
- 0xFF00F0FF,
- 0xFF00FF00,
- 0xFF00FF0F,
- 0xFF00FFF0,
- 0xFF00FFFF,
- 0xFF0F0000,
- 0xFF0F000F,
- 0xFF0F00F0,
- 0xFF0F00FF,
- 0xFF0F0F00,
- 0xFF0F0F0F,
- 0xFF0F0FF0,
- 0xFF0F0FFF,
- 0xFF0FF000,
- 0xFF0FF00F,
- 0xFF0FF0F0,
- 0xFF0FF0FF,
- 0xFF0FFF00,
- 0xFF0FFF0F,
- 0xFF0FFFF0,
- 0xFF0FFFFF,
- 0xFFF00000,
- 0xFFF0000F,
- 0xFFF000F0,
- 0xFFF000FF,
- 0xFFF00F00,
- 0xFFF00F0F,
- 0xFFF00FF0,
- 0xFFF00FFF,
- 0xFFF0F000,
- 0xFFF0F00F,
- 0xFFF0F0F0,
- 0xFFF0F0FF,
- 0xFFF0FF00,
- 0xFFF0FF0F,
- 0xFFF0FFF0,
- 0xFFF0FFFF,
- 0xFFFF0000,
- 0xFFFF000F,
- 0xFFFF00F0,
- 0xFFFF00FF,
- 0xFFFF0F00,
- 0xFFFF0F0F,
- 0xFFFF0FF0,
- 0xFFFF0FFF,
- 0xFFFFF000,
- 0xFFFFF00F,
- 0xFFFFF0F0,
- 0xFFFFF0FF,
- 0xFFFFFF00,
- 0xFFFFFF0F,
- 0xFFFFFFF0,
- 0xFFFFFFFF,
-};
-#else /* PGSZ == 64 */
-No QuartetPixelMaskTable for psz=PSZ
-this would be a 64K entry table, a bit much I think.
-Try breaking things in two:
-mask = table[index&0xff00]<<32 | table[index&0xff]
-#endif /* PGSZ */
-#endif /* PSZ == 4 */
-
-#if PSZ == 8
-PixelGroup QuartetPixelMaskTable[] = {
-#if PGSZ == 32
- 0x00000000,
- 0x000000FF,
- 0x0000FF00,
- 0x0000FFFF,
- 0x00FF0000,
- 0x00FF00FF,
- 0x00FFFF00,
- 0x00FFFFFF,
- 0xFF000000,
- 0xFF0000FF,
- 0xFF00FF00,
- 0xFF00FFFF,
- 0xFFFF0000,
- 0xFFFF00FF,
- 0xFFFFFF00,
- 0xFFFFFFFF
-#else /* PGSZ == 64 */
- 0x0000000000000000, 0x00000000000000FF,
- 0x000000000000FF00, 0x000000000000FFFF,
- 0x0000000000FF0000, 0x0000000000FF00FF,
- 0x0000000000FFFF00, 0x0000000000FFFFFF,
- 0x00000000FF000000, 0x00000000FF0000FF,
- 0x00000000FF00FF00, 0x00000000FF00FFFF,
- 0x00000000FFFF0000, 0x00000000FFFF00FF,
- 0x00000000FFFFFF00, 0x00000000FFFFFFFF,
- 0x000000FF00000000, 0x000000FF000000FF,
- 0x000000FF0000FF00, 0x000000FF0000FFFF,
- 0x000000FF00FF0000, 0x000000FF00FF00FF,
- 0x000000FF00FFFF00, 0x000000FF00FFFFFF,
- 0x000000FFFF000000, 0x000000FFFF0000FF,
- 0x000000FFFF00FF00, 0x000000FFFF00FFFF,
- 0x000000FFFFFF0000, 0x000000FFFFFF00FF,
- 0x000000FFFFFFFF00, 0x000000FFFFFFFFFF,
- 0x0000FF0000000000, 0x0000FF00000000FF,
- 0x0000FF000000FF00, 0x0000FF000000FFFF,
- 0x0000FF0000FF0000, 0x0000FF0000FF00FF,
- 0x0000FF0000FFFF00, 0x0000FF0000FFFFFF,
- 0x0000FF00FF000000, 0x0000FF00FF0000FF,
- 0x0000FF00FF00FF00, 0x0000FF00FF00FFFF,
- 0x0000FF00FFFF0000, 0x0000FF00FFFF00FF,
- 0x0000FF00FFFFFF00, 0x0000FF00FFFFFFFF,
- 0x0000FFFF00000000, 0x0000FFFF000000FF,
- 0x0000FFFF0000FF00, 0x0000FFFF0000FFFF,
- 0x0000FFFF00FF0000, 0x0000FFFF00FF00FF,
- 0x0000FFFF00FFFF00, 0x0000FFFF00FFFFFF,
- 0x0000FFFFFF000000, 0x0000FFFFFF0000FF,
- 0x0000FFFFFF00FF00, 0x0000FFFFFF00FFFF,
- 0x0000FFFFFFFF0000, 0x0000FFFFFFFF00FF,
- 0x0000FFFFFFFFFF00, 0x0000FFFFFFFFFFFF,
- 0x00FF000000000000, 0x00FF0000000000FF,
- 0x00FF00000000FF00, 0x00FF00000000FFFF,
- 0x00FF000000FF0000, 0x00FF000000FF00FF,
- 0x00FF000000FFFF00, 0x00FF000000FFFFFF,
- 0x00FF0000FF000000, 0x00FF0000FF0000FF,
- 0x00FF0000FF00FF00, 0x00FF0000FF00FFFF,
- 0x00FF0000FFFF0000, 0x00FF0000FFFF00FF,
- 0x00FF0000FFFFFF00, 0x00FF0000FFFFFFFF,
- 0x00FF00FF00000000, 0x00FF00FF000000FF,
- 0x00FF00FF0000FF00, 0x00FF00FF0000FFFF,
- 0x00FF00FF00FF0000, 0x00FF00FF00FF00FF,
- 0x00FF00FF00FFFF00, 0x00FF00FF00FFFFFF,
- 0x00FF00FFFF000000, 0x00FF00FFFF0000FF,
- 0x00FF00FFFF00FF00, 0x00FF00FFFF00FFFF,
- 0x00FF00FFFFFF0000, 0x00FF00FFFFFF00FF,
- 0x00FF00FFFFFFFF00, 0x00FF00FFFFFFFFFF,
- 0x00FFFF0000000000, 0x00FFFF00000000FF,
- 0x00FFFF000000FF00, 0x00FFFF000000FFFF,
- 0x00FFFF0000FF0000, 0x00FFFF0000FF00FF,
- 0x00FFFF0000FFFF00, 0x00FFFF0000FFFFFF,
- 0x00FFFF00FF000000, 0x00FFFF00FF0000FF,
- 0x00FFFF00FF00FF00, 0x00FFFF00FF00FFFF,
- 0x00FFFF00FFFF0000, 0x00FFFF00FFFF00FF,
- 0x00FFFF00FFFFFF00, 0x00FFFF00FFFFFFFF,
- 0x00FFFFFF00000000, 0x00FFFFFF000000FF,
- 0x00FFFFFF0000FF00, 0x00FFFFFF0000FFFF,
- 0x00FFFFFF00FF0000, 0x00FFFFFF00FF00FF,
- 0x00FFFFFF00FFFF00, 0x00FFFFFF00FFFFFF,
- 0x00FFFFFFFF000000, 0x00FFFFFFFF0000FF,
- 0x00FFFFFFFF00FF00, 0x00FFFFFFFF00FFFF,
- 0x00FFFFFFFFFF0000, 0x00FFFFFFFFFF00FF,
- 0x00FFFFFFFFFFFF00, 0x00FFFFFFFFFFFFFF,
- 0xFF00000000000000, 0xFF000000000000FF,
- 0xFF0000000000FF00, 0xFF0000000000FFFF,
- 0xFF00000000FF0000, 0xFF00000000FF00FF,
- 0xFF00000000FFFF00, 0xFF00000000FFFFFF,
- 0xFF000000FF000000, 0xFF000000FF0000FF,
- 0xFF000000FF00FF00, 0xFF000000FF00FFFF,
- 0xFF000000FFFF0000, 0xFF000000FFFF00FF,
- 0xFF000000FFFFFF00, 0xFF000000FFFFFFFF,
- 0xFF0000FF00000000, 0xFF0000FF000000FF,
- 0xFF0000FF0000FF00, 0xFF0000FF0000FFFF,
- 0xFF0000FF00FF0000, 0xFF0000FF00FF00FF,
- 0xFF0000FF00FFFF00, 0xFF0000FF00FFFFFF,
- 0xFF0000FFFF000000, 0xFF0000FFFF0000FF,
- 0xFF0000FFFF00FF00, 0xFF0000FFFF00FFFF,
- 0xFF0000FFFFFF0000, 0xFF0000FFFFFF00FF,
- 0xFF0000FFFFFFFF00, 0xFF0000FFFFFFFFFF,
- 0xFF00FF0000000000, 0xFF00FF00000000FF,
- 0xFF00FF000000FF00, 0xFF00FF000000FFFF,
- 0xFF00FF0000FF0000, 0xFF00FF0000FF00FF,
- 0xFF00FF0000FFFF00, 0xFF00FF0000FFFFFF,
- 0xFF00FF00FF000000, 0xFF00FF00FF0000FF,
- 0xFF00FF00FF00FF00, 0xFF00FF00FF00FFFF,
- 0xFF00FF00FFFF0000, 0xFF00FF00FFFF00FF,
- 0xFF00FF00FFFFFF00, 0xFF00FF00FFFFFFFF,
- 0xFF00FFFF00000000, 0xFF00FFFF000000FF,
- 0xFF00FFFF0000FF00, 0xFF00FFFF0000FFFF,
- 0xFF00FFFF00FF0000, 0xFF00FFFF00FF00FF,
- 0xFF00FFFF00FFFF00, 0xFF00FFFF00FFFFFF,
- 0xFF00FFFFFF000000, 0xFF00FFFFFF0000FF,
- 0xFF00FFFFFF00FF00, 0xFF00FFFFFF00FFFF,
- 0xFF00FFFFFFFF0000, 0xFF00FFFFFFFF00FF,
- 0xFF00FFFFFFFFFF00, 0xFF00FFFFFFFFFFFF,
- 0xFFFF000000000000, 0xFFFF0000000000FF,
- 0xFFFF00000000FF00, 0xFFFF00000000FFFF,
- 0xFFFF000000FF0000, 0xFFFF000000FF00FF,
- 0xFFFF000000FFFF00, 0xFFFF000000FFFFFF,
- 0xFFFF0000FF000000, 0xFFFF0000FF0000FF,
- 0xFFFF0000FF00FF00, 0xFFFF0000FF00FFFF,
- 0xFFFF0000FFFF0000, 0xFFFF0000FFFF00FF,
- 0xFFFF0000FFFFFF00, 0xFFFF0000FFFFFFFF,
- 0xFFFF00FF00000000, 0xFFFF00FF000000FF,
- 0xFFFF00FF0000FF00, 0xFFFF00FF0000FFFF,
- 0xFFFF00FF00FF0000, 0xFFFF00FF00FF00FF,
- 0xFFFF00FF00FFFF00, 0xFFFF00FF00FFFFFF,
- 0xFFFF00FFFF000000, 0xFFFF00FFFF0000FF,
- 0xFFFF00FFFF00FF00, 0xFFFF00FFFF00FFFF,
- 0xFFFF00FFFFFF0000, 0xFFFF00FFFFFF00FF,
- 0xFFFF00FFFFFFFF00, 0xFFFF00FFFFFFFFFF,
- 0xFFFFFF0000000000, 0xFFFFFF00000000FF,
- 0xFFFFFF000000FF00, 0xFFFFFF000000FFFF,
- 0xFFFFFF0000FF0000, 0xFFFFFF0000FF00FF,
- 0xFFFFFF0000FFFF00, 0xFFFFFF0000FFFFFF,
- 0xFFFFFF00FF000000, 0xFFFFFF00FF0000FF,
- 0xFFFFFF00FF00FF00, 0xFFFFFF00FF00FFFF,
- 0xFFFFFF00FFFF0000, 0xFFFFFF00FFFF00FF,
- 0xFFFFFF00FFFFFF00, 0xFFFFFF00FFFFFFFF,
- 0xFFFFFFFF00000000, 0xFFFFFFFF000000FF,
- 0xFFFFFFFF0000FF00, 0xFFFFFFFF0000FFFF,
- 0xFFFFFFFF00FF0000, 0xFFFFFFFF00FF00FF,
- 0xFFFFFFFF00FFFF00, 0xFFFFFFFF00FFFFFF,
- 0xFFFFFFFFFF000000, 0xFFFFFFFFFF0000FF,
- 0xFFFFFFFFFF00FF00, 0xFFFFFFFFFF00FFFF,
- 0xFFFFFFFFFFFF0000, 0xFFFFFFFFFFFF00FF,
- 0xFFFFFFFFFFFFFF00, 0xFFFFFFFFFFFFFFFF,
-#endif /* PGSZ */
-};
-#endif /* PSZ == 8 */
-
-#if PSZ == 16
-PixelGroup QuartetPixelMaskTable[] = {
-#if PGSZ == 32
- 0x00000000,
- 0x0000FFFF,
- 0xFFFF0000,
- 0xFFFFFFFF,
-#else /* PGSZ == 64 */
- 0x0000000000000000, 0x000000000000FFFF,
- 0x00000000FFFF0000, 0x00000000FFFFFFFF,
- 0x0000FFFF00000000, 0x0000FFFF0000FFFF,
- 0x0000FFFFFFFF0000, 0x0000FFFFFFFFFFFF,
- 0xFFFF000000000000, 0xFFFF00000000FFFF,
- 0xFFFF0000FFFF0000, 0xFFFF0000FFFFFFFF,
- 0xFFFFFFFF00000000, 0xFFFFFFFF0000FFFF,
- 0xFFFFFFFFFFFF0000, 0xFFFFFFFFFFFFFFFF,
-#endif /* PGSZ */
-};
-#endif /* PSZ == 16 */
-
-#if PSZ == 24
-PixelGroup QuartetPixelMaskTable[] = {
-#if PGSZ == 32
-/* Four pixels consist three pixel groups....*/
- 0x00000000, 0x00FFFFFF, /*0x00000000, *//*0*/
-/* 0x00000000, 0x00000000, 0x00000000,*/ /*0*/
-/* 0x00FFFFFF, 0x00000000, 0x00000000,*/ /*1*/
-/* 0xFF000000, 0x0000FFFF, 0x00000000,*/ /*2*/
-/* 0xFFFFFFFF, 0x0000FFFF, 0x00000000,*/ /*3*/
-/* 0x00000000, 0xFFFF0000, 0x000000FF,*/ /*4*/
-/* 0x00FFFFFF, 0xFFFF0000, 0x000000FF,*/ /*5*/
-/* 0xFF000000, 0xFFFFFFFF, 0x000000FF,*/ /*6*/
-/* 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF,*/ /*7*/
-/* 0x00000000, 0x00000000, 0xFFFFFF00,*/ /*8*/
-/* 0x00FFFFFF, 0x00000000, 0xFFFFFF00,*/ /*9*/
-/* 0xFF000000, 0x0000FFFF, 0xFFFFFF00,*/ /*10*/
-/* 0xFFFFFFFF, 0x0000FFFF, 0xFFFFFF00,*/ /*11*/
-/* 0x00000000, 0xFFFF0000, 0xFFFFFFFF,*/ /*12*/
-/* 0x00FFFFFF, 0xFFFF0000, 0xFFFFFFFF,*/ /*13*/
-/* 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF,*/ /*14*/
-/* 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,*/ /*15*/
-#else /* PGSZ == 64 */
- 0x0000000000000000, 0x0000000000FFFFFF,
- 0x0000FFFFFF000000, 0xFFFFFFFFFFFFFFFF
-#endif /* PGSZ */
-};
-#endif /* PSZ == 24 */
-
-#if PSZ == 32
-PixelGroup QuartetPixelMaskTable[] = {
-#if PGSZ == 32
- 0x00000000,
- 0xFFFFFFFF,
-#else /* PGSZ == 64 */
- 0x0000000000000000,
- 0x00000000FFFFFFFF,
- 0xFFFFFFFF00000000,
- 0xFFFFFFFFFFFFFFFF
-#endif /* PGSZ */
-};
-#endif /* PSZ == 32 */
-
-#if PSZ == 24
-int cfb24Shift[] =
-#if (BITMAP_BIT_ORDER == MSBFirst)
-{8,0,16,16,8,24,0,0};
-#else /* (BITMAP_BIT_ORDER == LSBFirst) */
-{0,0,24,8,16,16,8,0};
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-#endif
diff --git a/cfb/cfbmskbits.h b/cfb/cfbmskbits.h
deleted file mode 100644
index 5ee9125dd..000000000
--- a/cfb/cfbmskbits.h
+++ /dev/null
@@ -1,854 +0,0 @@
-/************************************************************
-Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this
-software and its documentation for any purpose and without
-fee is hereby granted, provided that the above copyright no-
-tice appear in all copies and that both that copyright no-
-tice and this permission notice appear in supporting docu-
-mentation, and that the names of Sun or The Open Group
-not be used in advertising or publicity pertaining to
-distribution of the software without specific prior
-written permission. Sun and The Open Group make no
-representations about the suitability of this software for
-any purpose. It is provided "as is" without any express or
-implied warranty.
-
-SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
-NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-
-ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
-THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-/* Optimizations for PSZ == 32 added by Kyle Marvin (marvin@vitec.com) */
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-#include "compiler.h"
-
-/*
- * ==========================================================================
- * Converted from mfb to support memory-mapped color framebuffer by smarks@sun,
- * April-May 1987.
- *
- * The way I did the conversion was to consider each longword as an
- * array of four bytes instead of an array of 32 one-bit pixels. So
- * getbits() and putbits() retain much the same calling sequence, but
- * they move bytes around instead of bits. Of course, this entails the
- * removal of all of the one-bit-pixel dependencies from the other
- * files, but the major bit-hacking stuff should be covered here.
- *
- * I've created some new macros that make it easier to understand what's
- * going on in the pixel calculations, and that make it easier to change the
- * pixel size.
- *
- * name explanation
- * ---- -----------
- * PSZ pixel size (in bits)
- * PGSZ pixel group size (in bits)
- * PGSZB pixel group size (in bytes)
- * PGSZBMSK mask with lowest PGSZB bits set to 1
- * PPW pixels per word (pixels per pixel group)
- * PPWMSK mask with lowest PPW bits set to 1
- * PLST index of last pixel in a word (should be PPW-1)
- * PIM pixel index mask (index within a pixel group)
- * PWSH pixel-to-word shift (should be log2(PPW))
- * PMSK mask with lowest PSZ bits set to 1
- *
- *
- * Here are some sample values. In the notation cfbA,B: A is PSZ, and
- * B is PGSZB. All the other values are derived from these
- * two. This table does not show all combinations!
- *
- * name cfb8,4 cfb24,4 cfb32,4 cfb8,8 cfb24,8 cfb32,8
- * ---- ------ ------- ------ ------ ------ -------
- * PSZ 8 24 32 8 24 32
- * PGSZ 32 32 32 64 64 64
- * PGSZB 4 4 4 8 8 8
- * PGSZBMSK 0xF 0xF? 0xF 0xFF 0xFF 0xFF
- * PPW 4 1 1 8 2 2
- * PPWMSK 0xF 0x1 0x1 0xFF 0x3? 0x3
- * PLST 3 0 0 7 1 1
- * PIM 0x3 0x0 0x0 0x7 0x1? 0x1
- * PWSH 2 0 0 3 1 1
- * PMSK 0xFF 0xFFFFFF 0xFFFFFFFF 0xFF 0xFFFFFF 0xFFFFFFFF
- *
- *
- * I have also added a new macro, PFILL, that takes one pixel and
- * replicates it throughout a word. This macro definition is dependent
- * upon pixel and word size; it doesn't use macros like PPW and so
- * forth. Examples: for monochrome, PFILL(1) => 0xffffffff, PFILL(0) =>
- * 0x00000000. For 8-bit color, PFILL(0x5d) => 0x5d5d5d5d. This macro
- * is used primarily for replicating a plane mask into a word.
- *
- * Color framebuffers operations also support the notion of a plane
- * mask. This mask determines which planes of the framebuffer can be
- * altered; the others are left unchanged. I have added another
- * parameter to the putbits and putbitsrop macros that is the plane
- * mask.
- * ==========================================================================
- *
- * Keith Packard (keithp@suse.com)
- * 64bit code is no longer supported; it requires DIX support
- * for repadding images which significantly impacts performance
- */
-
-/*
- * PSZ needs to be defined before we get here. Usually it comes from a
- * -DPSZ=foo on the compilation command line.
- */
-
-#ifndef PSZ
-#define PSZ 8
-#endif
-
-/*
- * PixelGroup is the data type used to operate on groups of pixels.
- * We typedef it here to CARD32 with the assumption that you
- * want to manipulate 32 bits worth of pixels at a time as you can. If CARD32
- * is not appropriate for your server, define it to something else
- * before including this file. In this case you will also have to define
- * PGSZB to the size in bytes of PixelGroup.
- */
-#ifndef PixelGroup
-#define PixelGroup CARD32
-#define PGSZB 4
-#endif /* PixelGroup */
-
-#ifndef CfbBits
-#define CfbBits CARD32
-#endif
-
-#define PGSZ (PGSZB << 3)
-#define PPW (PGSZ/PSZ)
-#define PLST (PPW-1)
-#define PIM PLST
-#define PMSK (((PixelGroup)1 << PSZ) - 1)
-#define PPWMSK (((PixelGroup)1 << PPW) - 1) /* instead of BITMSK */
-#define PGSZBMSK (((PixelGroup)1 << PGSZB) - 1)
-
-/* set PWSH = log2(PPW) using brute force */
-
-#if PPW == 1
-#define PWSH 0
-#else
-#if PPW == 2
-#define PWSH 1
-#else
-#if PPW == 4
-#define PWSH 2
-#else
-#if PPW == 8
-#define PWSH 3
-#else
-#if PPW == 16
-#define PWSH 4
-#endif /* PPW == 16 */
-#endif /* PPW == 8 */
-#endif /* PPW == 4 */
-#endif /* PPW == 2 */
-#endif /* PPW == 1 */
-
-/* Defining PIXEL_ADDR means that individual pixels are addressable by this
- * machine (as type PixelType). A possible CFB architecture which supported
- * 8-bits-per-pixel on a non byte-addressable machine would not have this
- * defined.
- *
- * Defining FOUR_BIT_CODE means that cfb knows how to stipple on this machine;
- * eventually, stippling code for 16 and 32 bit devices should be written
- * which would allow them to also use FOUR_BIT_CODE. There isn't that
- * much to do in those cases, but it would make them quite a bit faster.
- */
-
-#if PSZ == 8
-#define PIXEL_ADDR
-typedef CARD8 PixelType;
-#define FOUR_BIT_CODE
-#endif
-
-#if PSZ == 16
-#define PIXEL_ADDR
-typedef CARD16 PixelType;
-#endif
-
-#if PSZ == 24
-#undef PMSK
-#define PMSK 0xFFFFFF
-/*#undef PIM
-#define PIM 3*/
-#define PIXEL_ADDR
-typedef CARD32 PixelType;
-#endif
-
-#if PSZ == 32
-#undef PMSK
-#define PMSK 0xFFFFFFFF
-#define PIXEL_ADDR
-typedef CARD32 PixelType;
-#endif
-
-
-/* the following notes use the following conventions:
-SCREEN LEFT SCREEN RIGHT
-in this file and maskbits.c, left and right refer to screen coordinates,
-NOT bit numbering in registers.
-
-cfbstarttab[n]
- pixels[0,n-1] = 0's pixels[n,PPW-1] = 1's
-cfbendtab[n] =
- pixels[0,n-1] = 1's pixels[n,PPW-1] = 0's
-
-cfbstartpartial[], cfbendpartial[]
- these are used as accelerators for doing putbits and masking out
-bits that are all contained between longword boudaries. the extra
-256 bytes of data seems a small price to pay -- code is smaller,
-and narrow things (e.g. window borders) go faster.
-
-the names may seem misleading; they are derived not from which end
-of the word the bits are turned on, but at which end of a scanline
-the table tends to be used.
-
-look at the tables and macros to understand boundary conditions.
-(careful readers will note that starttab[n] = ~endtab[n] for n != 0)
-
------------------------------------------------------------------------
-these two macros depend on the screen's bit ordering.
-in both of them x is a screen position. they are used to
-combine bits collected from multiple longwords into a
-single destination longword, and to unpack a single
-source longword into multiple destinations.
-
-SCRLEFT(dst, x)
- takes dst[x, PPW] and moves them to dst[0, PPW-x]
- the contents of the rest of dst are 0 ONLY IF
- dst is UNSIGNED.
- is cast as an unsigned.
- this is a right shift on the VAX, left shift on
- Sun and pc-rt.
-
-SCRRIGHT(dst, x)
- takes dst[0,x] and moves them to dst[PPW-x, PPW]
- the contents of the rest of dst are 0 ONLY IF
- dst is UNSIGNED.
- this is a left shift on the VAX, right shift on
- Sun and pc-rt.
-
-
-the remaining macros are cpu-independent; all bit order dependencies
-are built into the tables and the two macros above.
-
-maskbits(x, w, startmask, endmask, nlw)
- for a span of width w starting at position x, returns
-a mask for ragged pixels at start, mask for ragged pixels at end,
-and the number of whole longwords between the ends.
-
-maskpartialbits(x, w, mask)
- works like maskbits(), except all the pixels are in the
- same longword (i.e. (x&0xPIM + w) <= PPW)
-
-mask32bits(x, w, startmask, endmask, nlw)
- as maskbits, but does not calculate nlw. it is used by
- cfbGlyphBlt to put down glyphs <= PPW bits wide.
-
-getbits(psrc, x, w, dst)
- starting at position x in psrc (x < PPW), collect w
- pixels and put them in the screen left portion of dst.
- psrc is a longword pointer. this may span longword boundaries.
- it special-cases fetching all w bits from one longword.
-
- +--------+--------+ +--------+
- | | m |n| | ==> | m |n| |
- +--------+--------+ +--------+
- x x+w 0 w
- psrc psrc+1 dst
- m = PPW - x
- n = w - m
-
- implementation:
- get m pixels, move to screen-left of dst, zeroing rest of dst;
- get n pixels from next word, move screen-right by m, zeroing
- lower m pixels of word.
- OR the two things together.
-
-putbits(src, x, w, pdst, planemask)
- starting at position x in pdst, put down the screen-leftmost
- w bits of src. pdst is a longword pointer. this may
- span longword boundaries.
- it special-cases putting all w bits into the same longword.
-
- +--------+ +--------+--------+
- | m |n| | ==> | | m |n| |
- +--------+ +--------+--------+
- 0 w x x+w
- dst pdst pdst+1
- m = PPW - x
- n = w - m
-
- implementation:
- get m pixels, shift screen-right by x, zero screen-leftmost x
- pixels; zero rightmost m bits of *pdst and OR in stuff
- from before the semicolon.
- shift src screen-left by m, zero bits n-32;
- zero leftmost n pixels of *(pdst+1) and OR in the
- stuff from before the semicolon.
-
-putbitsrop(src, x, w, pdst, planemask, ROP)
- like putbits but calls DoRop with the rasterop ROP (see cfb.h for
- DoRop)
-
-getleftbits(psrc, w, dst)
- get the leftmost w (w<=PPW) bits from *psrc and put them
- in dst. this is used by the cfbGlyphBlt code for glyphs
- <=PPW bits wide.
-*/
-
-#if (BITMAP_BIT_ORDER == MSBFirst)
-#define BitRight(lw,n) ((lw) >> (n))
-#define BitLeft(lw,n) ((lw) << (n))
-#else /* (BITMAP_BIT_ORDER == LSBFirst) */
-#define BitRight(lw,n) ((lw) << (n))
-#define BitLeft(lw,n) ((lw) >> (n))
-#endif /* (BITMAP_BIT_ORDER == MSBFirst) */
-
-#define SCRLEFT(lw, n) BitLeft (lw, (n) * PSZ)
-#define SCRRIGHT(lw, n) BitRight(lw, (n) * PSZ)
-
-/*
- * Note that the shift direction is independent of the byte ordering of the
- * machine. The following is portable code.
- */
-#if PPW == 16
-#define PFILL(p) ( ((p)&PMSK) | \
- ((p)&PMSK) << PSZ | \
- ((p)&PMSK) << 2*PSZ | \
- ((p)&PMSK) << 3*PSZ | \
- ((p)&PMSK) << 4*PSZ | \
- ((p)&PMSK) << 5*PSZ | \
- ((p)&PMSK) << 6*PSZ | \
- ((p)&PMSK) << 7*PSZ | \
- ((p)&PMSK) << 8*PSZ | \
- ((p)&PMSK) << 9*PSZ | \
- ((p)&PMSK) << 10*PSZ | \
- ((p)&PMSK) << 11*PSZ | \
- ((p)&PMSK) << 12*PSZ | \
- ((p)&PMSK) << 13*PSZ | \
- ((p)&PMSK) << 14*PSZ | \
- ((p)&PMSK) << 15*PSZ )
-#define PFILL2(p, pf) { \
- pf = (p) & PMSK; \
- pf |= (pf << PSZ); \
- pf |= (pf << 2*PSZ); \
- pf |= (pf << 4*PSZ); \
- pf |= (pf << 8*PSZ); \
-}
-#endif /* PPW == 16 */
-#if PPW == 8
-#define PFILL(p) ( ((p)&PMSK) | \
- ((p)&PMSK) << PSZ | \
- ((p)&PMSK) << 2*PSZ | \
- ((p)&PMSK) << 3*PSZ | \
- ((p)&PMSK) << 4*PSZ | \
- ((p)&PMSK) << 5*PSZ | \
- ((p)&PMSK) << 6*PSZ | \
- ((p)&PMSK) << 7*PSZ )
-#define PFILL2(p, pf) { \
- pf = (p) & PMSK; \
- pf |= (pf << PSZ); \
- pf |= (pf << 2*PSZ); \
- pf |= (pf << 4*PSZ); \
-}
-#endif
-#if PPW == 4
-#define PFILL(p) ( ((p)&PMSK) | \
- ((p)&PMSK) << PSZ | \
- ((p)&PMSK) << 2*PSZ | \
- ((p)&PMSK) << 3*PSZ )
-#define PFILL2(p, pf) { \
- pf = (p) & PMSK; \
- pf |= (pf << PSZ); \
- pf |= (pf << 2*PSZ); \
-}
-#endif
-#if PPW == 2
-#define PFILL(p) ( ((p)&PMSK) | \
- ((p)&PMSK) << PSZ )
-#define PFILL2(p, pf) { \
- pf = (p) & PMSK; \
- pf |= (pf << PSZ); \
-}
-#endif
-#if PPW == 1
-#define PFILL(p) (p)
-#define PFILL2(p,pf) (pf = (p))
-#endif
-
-/*
- * Reduced raster op - using precomputed values, perform the above
- * in three instructions
- */
-
-#define DoRRop(dst, and, xor) (((dst) & (and)) ^ (xor))
-
-#define DoMaskRRop(dst, and, xor, mask) \
- (((dst) & ((and) | ~(mask))) ^ (xor & mask))
-
-#if PSZ != 32 || PPW != 1
-
-# if (PSZ == 24 && PPW == 1)
-#define maskbits(x, w, startmask, endmask, nlw) {\
- startmask = cfbstarttab[(x)&3]; \
- endmask = cfbendtab[((x)+(w)) & 3]; \
- nlw = ((((x)+(w))*3)>>2) - (((x)*3 +3)>>2); \
-}
-
-#define mask32bits(x, w, startmask, endmask) \
- startmask = cfbstarttab[(x)&3]; \
- endmask = cfbendtab[((x)+(w)) & 3];
-
-#define maskpartialbits(x, w, mask) \
- mask = cfbstartpartial[(x) & 3] & cfbendpartial[((x)+(w)) & 3];
-
-#define maskbits24(x, w, startmask, endmask, nlw) \
- startmask = cfbstarttab24[(x) & 3]; \
- endmask = cfbendtab24[((x)+(w)) & 3]; \
- if (startmask){ \
- nlw = (((w) - (4 - ((x) & 3))) >> 2); \
- } else { \
- nlw = (w) >> 2; \
- }
-
-#define getbits24(psrc, dst, index) {\
- register int idx; \
- switch(idx = ((index)&3)<<1){ \
- case 0: \
- dst = (*(psrc) &cfbmask[idx]); \
- break; \
- case 6: \
- dst = BitLeft((*(psrc) &cfbmask[idx]), cfb24Shift[idx]); \
- break; \
- default: \
- dst = BitLeft((*(psrc) &cfbmask[idx]), cfb24Shift[idx]) | \
- BitRight(((*((psrc)+1)) &cfbmask[idx+1]), cfb24Shift[idx+1]); \
- }; \
-}
-
-#define putbits24(src, w, pdst, planemask, index) {\
- register PixelGroup dstpixel; \
- register unsigned int idx; \
- switch(idx = ((index)&3)<<1){ \
- case 0: \
- dstpixel = (*(pdst) &cfbmask[idx]); \
- break; \
- case 6: \
- dstpixel = BitLeft((*(pdst) &cfbmask[idx]), cfb24Shift[idx]); \
- break; \
- default: \
- dstpixel = BitLeft((*(pdst) &cfbmask[idx]), cfb24Shift[idx])| \
- BitRight(((*((pdst)+1)) &cfbmask[idx+1]), cfb24Shift[idx+1]); \
- }; \
- dstpixel &= ~(planemask); \
- dstpixel |= (src & planemask); \
- *(pdst) &= cfbrmask[idx]; \
- switch(idx){ \
- case 0: \
- *(pdst) |= (dstpixel & cfbmask[idx]); \
- break; \
- case 2: \
- case 4: \
- pdst++;idx++; \
- *(pdst) = ((*(pdst)) & cfbrmask[idx]) | \
- (BitLeft(dstpixel, cfb24Shift[idx]) & cfbmask[idx]); \
- pdst--;idx--; \
- case 6: \
- *(pdst) |= (BitRight(dstpixel, cfb24Shift[idx]) & cfbmask[idx]); \
- break; \
- }; \
-}
-
-#define putbitsrop24(src, x, pdst, planemask, rop) \
-{ \
- register PixelGroup t1, dstpixel; \
- register unsigned int idx; \
- switch(idx = (x)<<1){ \
- case 0: \
- dstpixel = (*(pdst) &cfbmask[idx]); \
- break; \
- case 6: \
- dstpixel = BitLeft((*(pdst) &cfbmask[idx]), cfb24Shift[idx]); \
- break; \
- default: \
- dstpixel = BitLeft((*(pdst) &cfbmask[idx]), cfb24Shift[idx])| \
- BitRight(((*((pdst)+1)) &cfbmask[idx+1]), cfb24Shift[idx+1]); \
- }; \
- DoRop(t1, rop, (src), dstpixel); \
- dstpixel &= ~planemask; \
- dstpixel |= (t1 & planemask); \
- *(pdst) &= cfbrmask[idx]; \
- switch(idx){ \
- case 0: \
- *(pdst) |= (dstpixel & cfbmask[idx]); \
- break; \
- case 2: \
- case 4: \
- *((pdst)+1) = ((*((pdst)+1)) & cfbrmask[idx+1]) | \
- (BitLeft(dstpixel, cfb24Shift[idx+1]) & (cfbmask[idx+1])); \
- case 6: \
- *(pdst) |= (BitRight(dstpixel, cfb24Shift[idx]) & cfbmask[idx]); \
- }; \
-}
-# else /* PSZ == 24 && PPW == 1 */
-#define maskbits(x, w, startmask, endmask, nlw) \
- startmask = cfbstarttab[(x)&PIM]; \
- endmask = cfbendtab[((x)+(w)) & PIM]; \
- if (startmask) \
- nlw = (((w) - (PPW - ((x)&PIM))) >> PWSH); \
- else \
- nlw = (w) >> PWSH;
-
-#define maskpartialbits(x, w, mask) \
- mask = cfbstartpartial[(x) & PIM] & cfbendpartial[((x) + (w)) & PIM];
-
-#define mask32bits(x, w, startmask, endmask) \
- startmask = cfbstarttab[(x)&PIM]; \
- endmask = cfbendtab[((x)+(w)) & PIM];
-
-/* FIXME */
-#define maskbits24(x, w, startmask, endmask, nlw) \
- abort()
-#define getbits24(psrc, dst, index) \
- abort()
-#define putbits24(src, w, pdst, planemask, index) \
- abort()
-#define putbitsrop24(src, x, pdst, planemask, rop) \
- abort()
-
-#endif /* PSZ == 24 && PPW == 1 */
-
-#define getbits(psrc, x, w, dst) \
-if ( ((x) + (w)) <= PPW) \
-{ \
- dst = SCRLEFT(*(psrc), (x)); \
-} \
-else \
-{ \
- int m; \
- m = PPW-(x); \
- dst = (SCRLEFT(*(psrc), (x)) & cfbendtab[m]) | \
- (SCRRIGHT(*((psrc)+1), m) & cfbstarttab[m]); \
-}
-
-
-#define putbits(src, x, w, pdst, planemask) \
-if ( ((x)+(w)) <= PPW) \
-{ \
- PixelGroup tmpmask; \
- maskpartialbits((x), (w), tmpmask); \
- tmpmask &= PFILL(planemask); \
- *(pdst) = (*(pdst) & ~tmpmask) | (SCRRIGHT(src, x) & tmpmask); \
-} \
-else \
-{ \
- unsigned int m; \
- unsigned int n; \
- PixelGroup pm = PFILL(planemask); \
- m = PPW-(x); \
- n = (w) - m; \
- *(pdst) = (*(pdst) & (cfbendtab[x] | ~pm)) | \
- (SCRRIGHT(src, x) & (cfbstarttab[x] & pm)); \
- *((pdst)+1) = (*((pdst)+1) & (cfbstarttab[n] | ~pm)) | \
- (SCRLEFT(src, m) & (cfbendtab[n] & pm)); \
-}
-#if defined(__GNUC__) && defined(mc68020)
-#undef getbits
-#define FASTGETBITS(psrc, x, w, dst) \
- asm ("bfextu %3{%1:%2},%0" \
- : "=d" (dst) : "di" (x), "di" (w), "o" (*(char *)(psrc)))
-
-#define getbits(psrc,x,w,dst) \
-{ \
- FASTGETBITS(psrc, (x) * PSZ, (w) * PSZ, dst); \
- dst = SCRLEFT(dst,PPW-(w)); \
-}
-
-#define FASTPUTBITS(src, x, w, pdst) \
- asm ("bfins %3,%0{%1:%2}" \
- : "=o" (*(char *)(pdst)) \
- : "di" (x), "di" (w), "d" (src), "0" (*(char *) (pdst)))
-
-#undef putbits
-#define putbits(src, x, w, pdst, planemask) \
-{ \
- if (planemask != PMSK) { \
- PixelGroup _m, _pm; \
- FASTGETBITS(pdst, (x) * PSZ , (w) * PSZ, _m); \
- PFILL2(planemask, _pm); \
- _m &= (~_pm); \
- _m |= (SCRRIGHT(src, PPW-(w)) & _pm); \
- FASTPUTBITS(_m, (x) * PSZ, (w) * PSZ, pdst); \
- } else { \
- FASTPUTBITS(SCRRIGHT(src, PPW-(w)), (x) * PSZ, (w) * PSZ, pdst); \
- } \
-}
-
-
-#endif /* mc68020 */
-
-#define putbitsrop(src, x, w, pdst, planemask, rop) \
-if ( ((x)+(w)) <= PPW) \
-{ \
- PixelGroup tmpmask; \
- PixelGroup t1, t2; \
- maskpartialbits((x), (w), tmpmask); \
- PFILL2(planemask, t1); \
- tmpmask &= t1; \
- t1 = SCRRIGHT((src), (x)); \
- DoRop(t2, rop, t1, *(pdst)); \
- *(pdst) = (*(pdst) & ~tmpmask) | (t2 & tmpmask); \
-} \
-else \
-{ \
- CfbBits m; \
- CfbBits n; \
- PixelGroup t1, t2; \
- PixelGroup pm; \
- PFILL2(planemask, pm); \
- m = PPW-(x); \
- n = (w) - m; \
- t1 = SCRRIGHT((src), (x)); \
- DoRop(t2, rop, t1, *(pdst)); \
- *(pdst) = (*(pdst) & (cfbendtab[x] | ~pm)) | (t2 & (cfbstarttab[x] & pm));\
- t1 = SCRLEFT((src), m); \
- DoRop(t2, rop, t1, *((pdst) + 1)); \
- *((pdst)+1) = (*((pdst)+1) & (cfbstarttab[n] | ~pm)) | \
- (t2 & (cfbendtab[n] & pm)); \
-}
-
-#else /* PSZ == 32 && PPW == 1*/
-
-/*
- * These macros can be optimized for 32-bit pixels since there is no
- * need to worry about left/right edge masking. These macros were
- * derived from the above using the following reductions:
- *
- * - x & PIW = 0 [since PIW = 0]
- * - all masking tables are only indexed by 0 [ due to above ]
- * - cfbstartab[0] and cfbendtab[0] = 0 [ no left/right edge masks]
- * - cfbstartpartial[0] and cfbendpartial[0] = ~0 [no partial pixel mask]
- *
- * Macro reduction based upon constants cannot be performed automatically
- * by the compiler since it does not know the contents of the masking
- * arrays in cfbmskbits.c.
- */
-#define maskbits(x, w, startmask, endmask, nlw) \
- startmask = endmask = 0; \
- nlw = (w);
-
-#define maskpartialbits(x, w, mask) \
- mask = 0xFFFFFFFF;
-
-#define mask32bits(x, w, startmask, endmask) \
- startmask = endmask = 0;
-
-/*
- * For 32-bit operations, getbits(), putbits(), and putbitsrop()
- * will only be invoked with x = 0 and w = PPW (1). The getbits()
- * macro is only called within left/right edge logic, which doesn't
- * happen for 32-bit pixels.
- */
-#define getbits(psrc, x, w, dst) (dst) = *(psrc)
-
-#define putbits(src, x, w, pdst, planemask) \
- *(pdst) = (*(pdst) & ~planemask) | (src & planemask);
-
-#define putbitsrop(src, x, w, pdst, planemask, rop) \
-{ \
- PixelGroup t1; \
- DoRop(t1, rop, (src), *(pdst)); \
- *(pdst) = (*(pdst) & ~planemask) | (t1 & planemask); \
-}
-
-#endif /* PSZ != 32 */
-
-/*
- * Use these macros only when you're using the MergeRop stuff
- * in ../mfb/mergerop.h
- */
-
-/* useful only when not spanning destination longwords */
-#if PSZ == 24
-#define putbitsmropshort24(src,x,w,pdst,index) {\
- PixelGroup _tmpmask; \
- PixelGroup _t1; \
- maskpartialbits ((x), (w), _tmpmask); \
- _t1 = SCRRIGHT((src), (x)); \
- DoMaskMergeRop24(_t1, pdst, _tmpmask, index); \
-}
-#endif
-#define putbitsmropshort(src,x,w,pdst) {\
- PixelGroup _tmpmask; \
- PixelGroup _t1; \
- maskpartialbits ((x), (w), _tmpmask); \
- _t1 = SCRRIGHT((src), (x)); \
- *pdst = DoMaskMergeRop(_t1, *pdst, _tmpmask); \
-}
-
-/* useful only when spanning destination longwords */
-#define putbitsmroplong(src,x,w,pdst) { \
- PixelGroup _startmask, _endmask; \
- int _m; \
- PixelGroup _t1; \
- _m = PPW - (x); \
- _startmask = cfbstarttab[x]; \
- _endmask = cfbendtab[(w) - _m]; \
- _t1 = SCRRIGHT((src), (x)); \
- pdst[0] = DoMaskMergeRop(_t1,pdst[0],_startmask); \
- _t1 = SCRLEFT ((src),_m); \
- pdst[1] = DoMaskMergeRop(_t1,pdst[1],_endmask); \
-}
-
-#define putbitsmrop(src,x,w,pdst) \
-if ((x) + (w) <= PPW) {\
- putbitsmropshort(src,x,w,pdst); \
-} else { \
- putbitsmroplong(src,x,w,pdst); \
-}
-
-#if GETLEFTBITS_ALIGNMENT == 1
-#define getleftbits(psrc, w, dst) dst = *((unsigned int *) psrc)
-#define getleftbits24(psrc, w, dst, idx){ \
- regiseter int index; \
- switch(index = ((idx)&3)<<1){ \
- case 0: \
- dst = (*((unsigned int *) psrc))&cfbmask[index]; \
- break; \
- case 2: \
- case 4: \
- dst = BitLeft(((*((unsigned int *) psrc))&cfbmask[index]), cfb24Shift[index]); \
- dst |= BitRight(((*((unsigned int *) psrc)+1)&cfbmask[index]), cfb4Shift[index]); \
- break; \
- case 6: \
- dst = BitLeft((*((unsigned int *) psrc)),cfb24Shift[index]); \
- break; \
- }; \
-}
-#endif /* GETLEFTBITS_ALIGNMENT == 1 */
-
-#define getglyphbits(psrc, x, w, dst) \
-{ \
- dst = BitLeft((unsigned) *(psrc), (x)); \
- if ( ((x) + (w)) > 32) \
- dst |= (BitRight((unsigned) *((psrc)+1), 32-(x))); \
-}
-#if GETLEFTBITS_ALIGNMENT == 2
-#define getleftbits(psrc, w, dst) \
- { \
- if ( ((int)(psrc)) & 0x01 ) \
- getglyphbits( ((unsigned int *)(((char *)(psrc))-1)), 8, (w), (dst) ); \
- else \
- dst = *((unsigned int *) psrc); \
- }
-#endif /* GETLEFTBITS_ALIGNMENT == 2 */
-
-#if GETLEFTBITS_ALIGNMENT == 4
-#define getleftbits(psrc, w, dst) \
- { \
- int off, off_b; \
- off_b = (off = ( ((int)(psrc)) & 0x03)) << 3; \
- getglyphbits( \
- (unsigned int *)( ((char *)(psrc)) - off), \
- (off_b), (w), (dst) \
- ); \
- }
-#endif /* GETLEFTBITS_ALIGNMENT == 4 */
-
-/*
- * getstipplepixels( psrcstip, x, w, ones, psrcpix, destpix )
- *
- * Converts bits to pixels in a reasonable way. Takes w (1 <= w <= PPW)
- * bits from *psrcstip, starting at bit x; call this a quartet of bits.
- * Then, takes the pixels from *psrcpix corresponding to the one-bits (if
- * ones is TRUE) or the zero-bits (if ones is FALSE) of the quartet
- * and puts these pixels into destpix.
- *
- * Example:
- *
- * getstipplepixels( &(0x08192A3B), 17, 4, 1, &(0x4C5D6E7F), dest )
- *
- * 0x08192A3B = 0000 1000 0001 1001 0010 1010 0011 1011
- *
- * This will take 4 bits starting at bit 17, so the quartet is 0x5 = 0101.
- * It will take pixels from 0x4C5D6E7F corresponding to the one-bits in this
- * quartet, so dest = 0x005D007F.
- *
- * XXX Works with both byte order.
- * XXX This works for all values of x and w within a doubleword.
- */
-#if (BITMAP_BIT_ORDER == MSBFirst)
-#define getstipplepixels( psrcstip, x, w, ones, psrcpix, destpix ) \
-{ \
- PixelGroup q; \
- int m; \
- if ((m = ((x) - ((PPW*PSZ)-PPW))) > 0) { \
- q = (*(psrcstip)) << m; \
- if ( (x)+(w) > (PPW*PSZ) ) \
- q |= *((psrcstip)+1) >> ((PPW*PSZ)-m); \
- } \
- else \
- q = (*(psrcstip)) >> -m; \
- q = QuartetBitsTable[(w)] & ((ones) ? q : ~q); \
- *(destpix) = (*(psrcpix)) & QuartetPixelMaskTable[q]; \
-}
-/* I just copied this to get the linker satisfied on PowerPC,
- * so this may not be correct at all.
- */
-#define getstipplepixels24(psrcstip,xt,ones,psrcpix,destpix,stipindex) \
-{ \
- PixelGroup q; \
- q = *(psrcstip) >> (xt); \
- q = ((ones) ? q : ~q) & 1; \
- *(destpix) = (*(psrcpix)) & QuartetPixelMaskTable[q]; \
-}
-#else /* BITMAP_BIT_ORDER == LSB */
-
-/* this must load 32 bits worth; for most machines, thats an int */
-#define CfbFetchUnaligned(x) ldl_u(x)
-
-#define getstipplepixels( psrcstip, xt, w, ones, psrcpix, destpix ) \
-{ \
- PixelGroup q; \
- q = CfbFetchUnaligned(psrcstip) >> (xt); \
- if ( ((xt)+(w)) > (PPW*PSZ) ) \
- q |= (CfbFetchUnaligned((psrcstip)+1)) << ((PPW*PSZ)-(xt)); \
- q = QuartetBitsTable[(w)] & ((ones) ? q : ~q); \
- *(destpix) = (*(psrcpix)) & QuartetPixelMaskTable[q]; \
-}
-#if PSZ == 24
-#define getstipplepixels24(psrcstip,xt,ones,psrcpix,destpix,stipindex) \
-{ \
- PixelGroup q; \
- q = *(psrcstip) >> (xt); \
- q = ((ones) ? q : ~q) & 1; \
- *(destpix) = (*(psrcpix)) & QuartetPixelMaskTable[q]; \
-}
-#endif /* PSZ == 24 */
-#endif
-
-extern PixelGroup cfbstarttab[];
-extern PixelGroup cfbendtab[];
-extern PixelGroup cfbstartpartial[];
-extern PixelGroup cfbendpartial[];
-extern PixelGroup cfbrmask[];
-extern PixelGroup cfbmask[];
-extern PixelGroup QuartetBitsTable[];
-extern PixelGroup QuartetPixelMaskTable[];
-#if PSZ == 24
-extern int cfb24Shift[];
-#endif
diff --git a/cfb/cfbpixmap.c b/cfb/cfbpixmap.c
deleted file mode 100644
index 1166f90b7..000000000
--- a/cfb/cfbpixmap.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-/* pixmap management
- written by drewry, september 1986
-
- on a monchrome device, a pixmap is a bitmap.
-*/
-
-#include <string.h>
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/Xmd.h>
-#include "servermd.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "mi.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-
-PixmapPtr
-cfbCreatePixmap (pScreen, width, height, depth, usage_hint)
- ScreenPtr pScreen;
- int width;
- int height;
- int depth;
- unsigned usage_hint;
-{
- PixmapPtr pPixmap;
- size_t datasize;
- size_t paddedWidth;
-
- paddedWidth = PixmapBytePad(width, depth);
-
- if (paddedWidth / 4 > 32767 || height > 32767)
- return NullPixmap;
- datasize = height * paddedWidth;
- pPixmap = AllocatePixmap(pScreen, datasize);
- if (!pPixmap)
- return NullPixmap;
- pPixmap->drawable.type = DRAWABLE_PIXMAP;
- pPixmap->drawable.class = 0;
- pPixmap->drawable.pScreen = pScreen;
- pPixmap->drawable.depth = depth;
- pPixmap->drawable.bitsPerPixel = BitsPerPixel(depth);
- pPixmap->drawable.id = 0;
- pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
- pPixmap->drawable.x = 0;
- pPixmap->drawable.y = 0;
- pPixmap->drawable.width = width;
- pPixmap->drawable.height = height;
- pPixmap->devKind = paddedWidth;
- pPixmap->refcnt = 1;
- pPixmap->devPrivate.ptr = datasize ?
- (pointer)((char *)pPixmap + pScreen->totalPixmapSize) : NULL;
- pPixmap->usage_hint = usage_hint;
- return pPixmap;
-}
-
-Bool
-cfbDestroyPixmap(pPixmap)
- PixmapPtr pPixmap;
-{
- if(--pPixmap->refcnt)
- return TRUE;
- dixFreePrivates(pPixmap->devPrivates);
- xfree(pPixmap);
- return TRUE;
-}
-
-PixmapPtr
-cfbCopyPixmap(pSrc)
- register PixmapPtr pSrc;
-{
- register PixmapPtr pDst;
- int size;
- ScreenPtr pScreen;
-
- size = pSrc->drawable.height * pSrc->devKind;
- pScreen = pSrc->drawable.pScreen;
- pDst = (*pScreen->CreatePixmap) (pScreen, pSrc->drawable.width,
- pSrc->drawable.height, pSrc->drawable.depth, 0);
- if (!pDst)
- return NullPixmap;
- memmove((char *)pDst->devPrivate.ptr, (char *)pSrc->devPrivate.ptr, size);
- return pDst;
-}
-
-
-/* replicates a pattern to be a full 32 bits wide.
- relies on the fact that each scnaline is longword padded.
- doesn't do anything if pixmap is not a factor of 32 wide.
- changes width field of pixmap if successful, so that the fast
- cfbXRotatePixmap code gets used if we rotate the pixmap later.
- cfbYRotatePixmap code gets used if we rotate the pixmap later.
-
- calculate number of times to repeat
- for each scanline of pattern
- zero out area to be filled with replicate
- left shift and or in original as many times as needed
-*/
-void
-cfbPadPixmap(pPixmap)
- PixmapPtr pPixmap;
-{
- register int width = (pPixmap->drawable.width) * (pPixmap->drawable.bitsPerPixel);
- register int h;
- register CfbBits mask;
- register CfbBits *p;
- register CfbBits bits; /* real pattern bits */
- register int i;
- int rep; /* repeat count for pattern */
-
- if (width >= PGSZ)
- return;
-
- rep = PGSZ/width;
- if (rep*width != PGSZ)
- return;
-
- mask = mfbGetendtab(width);
-
- p = (CfbBits *)(pPixmap->devPrivate.ptr);
- for (h=0; h < pPixmap->drawable.height; h++)
- {
- *p &= mask;
- bits = *p;
- for(i=1; i<rep; i++)
- {
-#if (BITMAP_BIT_ORDER == MSBFirst)
- bits >>= width;
-#else
- bits <<= width;
-#endif
- *p |= bits;
- }
- p++;
- }
- pPixmap->drawable.width = PGSZ/(pPixmap->drawable.bitsPerPixel);
-}
-
-
-#ifdef notdef
-/*
- * cfb debugging routine -- assumes pixmap is 1 byte deep
- */
-static cfbdumppixmap(pPix)
- PixmapPtr pPix;
-{
- unsigned int *pw;
- char *psrc, *pdst;
- int i, j;
- char line[66];
-
- ErrorF( "pPixmap: 0x%x\n", pPix);
- ErrorF( "%d wide %d high\n", pPix->drawable.width, pPix->drawable.height);
- if (pPix->drawable.width > 64)
- {
- ErrorF( "too wide to see\n");
- return;
- }
-
- pw = (unsigned int *) pPix->devPrivate.ptr;
- psrc = (char *) pw;
-
-/*
- for ( i=0; i<pPix->drawable.height; ++i )
- ErrorF( "0x%x\n", pw[i] );
-*/
-
- for ( i = 0; i < pPix->drawable.height; ++i ) {
- pdst = line;
- for(j = 0; j < pPix->drawable.width; j++) {
- *pdst++ = *psrc++ ? 'X' : ' ' ;
- }
- *pdst++ = '\n';
- *pdst++ = '\0';
- ErrorF( "%s", line);
- }
-}
-#endif /* notdef */
-
-/* Rotates pixmap pPix by w pixels to the right on the screen. Assumes that
- * words are PGSZ bits wide, and that the least significant bit appears on the
- * left.
- */
-void
-cfbXRotatePixmap(pPix, rw)
- PixmapPtr pPix;
- register int rw;
-{
- register CfbBits *pw, *pwFinal;
- register CfbBits t;
- int rot;
-
- if (pPix == NullPixmap)
- return;
-
- switch (((DrawablePtr) pPix)->bitsPerPixel) {
- case PSZ:
- break;
- case 1:
- mfbXRotatePixmap(pPix, rw);
- return;
- default:
- ErrorF("cfbXRotatePixmap: unsupported bitsPerPixel %d\n", ((DrawablePtr) pPix)->bitsPerPixel);
- return;
- }
- pw = (CfbBits *)pPix->devPrivate.ptr;
- modulus (rw, (int) pPix->drawable.width, rot);
- if(pPix->drawable.width == PPW)
- {
- pwFinal = pw + pPix->drawable.height;
- while(pw < pwFinal)
- {
- t = *pw;
- *pw++ = SCRRIGHT(t, rot) |
- (SCRLEFT(t, (PPW-rot)) & cfbendtab[rot]);
- }
- }
- else
- {
- ErrorF("cfb internal error: trying to rotate odd-sized pixmap.\n");
-#ifdef notdef
- register CfbBits *pwTmp;
- int size, tsize;
-
- tsize = PixmapBytePad(pPix->drawable.width - rot, pPix->drawable.depth);
- pwTmp = (CfbBits *) xalloc(pPix->drawable.height * tsize);
- if (!pwTmp)
- return;
- /* divide pw (the pixmap) in two vertically at (w - rot) and swap */
- tsize >>= 2;
- size = pPix->devKind >> SIZE0F(PixelGroup);
- cfbQuickBlt((CfbBits *)pw, (CfbBits *)pwTmp,
- 0, 0, 0, 0,
- (int)pPix->drawable.width - rot, (int)pPix->drawable.height,
- size, tsize);
- cfbQuickBlt((CfbBits *)pw, (CfbBits *)pw,
- (int)pPix->drawable.width - rot, 0, 0, 0,
- rot, (int)pPix->drawable.height,
- size, size);
- cfbQuickBlt((CfbBits *)pwTmp, (CfbBits *)pw,
- 0, 0, rot, 0,
- (int)pPix->drawable.width - rot, (int)pPix->drawable.height,
- tsize, size);
- xfree(pwTmp);
-#endif
- }
-}
-
-/* Rotates pixmap pPix by h lines. Assumes that h is always less than
- pPix->drawable.height
- works on any width.
- */
-void
-cfbYRotatePixmap(pPix, rh)
- register PixmapPtr pPix;
- int rh;
-{
- int nbyDown; /* bytes to move down to row 0; also offset of
- row rh */
- int nbyUp; /* bytes to move up to line rh; also
- offset of first line moved down to 0 */
- char *pbase;
- char *ptmp;
- int rot;
-
- if (pPix == NullPixmap)
- return;
- switch (((DrawablePtr) pPix)->bitsPerPixel) {
- case PSZ:
- break;
- case 1:
- mfbYRotatePixmap(pPix, rh);
- return;
- default:
- ErrorF("cfbYRotatePixmap: unsupported bitsPerPixel %d\n", ((DrawablePtr) pPix)->bitsPerPixel);
- return;
- }
-
- modulus (rh, (int) pPix->drawable.height, rot);
- pbase = (char *)pPix->devPrivate.ptr;
-
- nbyDown = rot * pPix->devKind;
- nbyUp = (pPix->devKind * pPix->drawable.height) - nbyDown;
- if(!(ptmp = (char *)xalloc(nbyUp)))
- return;
-
- memmove(ptmp, pbase, nbyUp); /* save the low rows */
- memmove(pbase, pbase+nbyUp, nbyDown); /* slide the top rows down */
- memmove(pbase+nbyDown, ptmp, nbyUp); /* move lower rows up to row rot */
- xfree(ptmp);
-}
-
-void
-cfbCopyRotatePixmap(psrcPix, ppdstPix, xrot, yrot)
- register PixmapPtr psrcPix, *ppdstPix;
- int xrot, yrot;
-{
- register PixmapPtr pdstPix;
-
- if ((pdstPix = *ppdstPix) &&
- (pdstPix->devKind == psrcPix->devKind) &&
- (pdstPix->drawable.height == psrcPix->drawable.height))
- {
- memmove((char *)pdstPix->devPrivate.ptr,
- (char *)psrcPix->devPrivate.ptr,
- psrcPix->drawable.height * psrcPix->devKind);
- pdstPix->drawable.width = psrcPix->drawable.width;
- pdstPix->drawable.depth = psrcPix->drawable.depth;
- pdstPix->drawable.bitsPerPixel = psrcPix->drawable.bitsPerPixel;
- pdstPix->drawable.serialNumber = NEXT_SERIAL_NUMBER;
- }
- else
- {
- if (pdstPix)
- /* FIX XBUG 6168 */
- (*pdstPix->drawable.pScreen->DestroyPixmap)(pdstPix);
- *ppdstPix = pdstPix = cfbCopyPixmap(psrcPix);
- if (!pdstPix)
- return;
- }
- cfbPadPixmap(pdstPix);
- if (xrot)
- cfbXRotatePixmap(pdstPix, xrot);
- if (yrot)
- cfbYRotatePixmap(pdstPix, yrot);
-}
diff --git a/cfb/cfbply1rct.c b/cfb/cfbply1rct.c
deleted file mode 100644
index ce0bcb203..000000000
--- a/cfb/cfbply1rct.c
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- *
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <stdlib.h>
-
-#include <X11/X.h>
-
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "scrnintstr.h"
-#include "mistruct.h"
-
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "cfbrrop.h"
-
-void
-RROP_NAME(cfbFillPoly1Rect) (pDrawable, pGC, shape, mode, count, ptsIn)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int shape;
- int mode;
- int count;
- DDXPointPtr ptsIn;
-{
- cfbPrivGCPtr devPriv;
- int nwidth;
- CfbBits *addrl, *addr;
-#if PSZ == 24
- CfbBits startmask, endmask;
- register int pidx;
-#else
-#if PPW > 1
- CfbBits mask, bits = ~((CfbBits)0);
-#endif
-#endif
- int maxy;
- int origin;
- register int vertex1, vertex2;
- int c = 0;
- BoxPtr extents;
- int clip;
- int y;
- int *vertex1p = NULL, *vertex2p;
- int *endp;
- int x1 = 0, x2 = 0;
- int dx1 = 0, dx2 = 0;
- int dy1 = 0, dy2 = 0;
- int e1 = 0, e2 = 0;
- int step1 = 0, step2 = 0;
- int sign1 = 0, sign2 = 0;
- int h;
- int l;
-#if PSZ != 24 && PPW > 1
- int r;
-#endif
- int nmiddle;
- RROP_DECLARE
-
- if (mode == CoordModePrevious)
- {
- miFillPolygon (pDrawable, pGC, shape, mode, count, ptsIn);
- return;
- }
-
- devPriv = cfbGetGCPrivate(pGC);
-#ifdef NO_ONE_RECT
- if (REGION_NUM_RECTS(pGC->pCompositeClip) != 1)
- {
- miFillPolygon (pDrawable, pGC, shape, mode, count, ptsIn);
- return;
- }
-#endif
- origin = *((int *) &pDrawable->x);
- vertex2 = origin - ((origin & 0x8000) << 1);
- extents = &pGC->pCompositeClip->extents;
- RROP_FETCH_GCPRIV(devPriv);
- vertex1 = *((int *) &extents->x1) - vertex2;
- vertex2 = *((int *) &extents->x2) - vertex2 - 0x00010001;
- clip = 0;
- y = 32767;
- maxy = 0;
- vertex2p = (int *) ptsIn;
- endp = vertex2p + count;
- if (shape == Convex)
- {
- while (count--)
- {
- c = *vertex2p;
- clip |= (c - vertex1) | (vertex2 - c);
- c = intToY(c);
- if (c < y)
- {
- y = c;
- vertex1p = vertex2p;
- }
- vertex2p++;
- if (c > maxy)
- maxy = c;
- }
- }
- else
- {
- int yFlip = 0;
- dx1 = 1;
- x2 = -1;
- x1 = -1;
- while (count--)
- {
- c = *vertex2p;
- clip |= (c - vertex1) | (vertex2 - c);
- c = intToY(c);
- if (c < y)
- {
- y = c;
- vertex1p = vertex2p;
- }
- vertex2p++;
- if (c > maxy)
- maxy = c;
- if (c == x1)
- continue;
- if (dx1 > 0)
- {
- if (x2 < 0)
- x2 = c;
- else
- dx2 = dx1 = (c - x1) >> 31;
- }
- else
- if ((c - x1) >> 31 != dx1)
- {
- dx1 = ~dx1;
- yFlip++;
- }
- x1 = c;
- }
- x1 = (x2 - c) >> 31;
- if (x1 != dx1)
- yFlip++;
- if (x1 != dx2)
- yFlip++;
- if (yFlip != 2)
- clip = 0x8000;
- }
- if (y == maxy)
- return;
-
- if (clip & 0x80008000)
- {
- miFillPolygon (pDrawable, pGC, shape, mode, vertex2p - (int *) ptsIn, ptsIn);
- return;
- }
-
-#define AddrYPlus(a,y) (CfbBits *) (((unsigned char *) (a)) + (y) * nwidth)
-
- cfbGetTypedWidthAndPointer(pDrawable, nwidth, addrl, unsigned char, CfbBits);
- addrl = AddrYPlus(addrl,y + pDrawable->y);
- origin = intToX(origin);
- vertex2p = vertex1p;
- vertex2 = vertex1 = *vertex2p++;
- if (vertex2p == endp)
- vertex2p = (int *) ptsIn;
-#define Setup(c,x,vertex,dx,dy,e,sign,step) {\
- x = intToX(vertex); \
- if ((dy = intToY(c) - y)) { \
- dx = intToX(c) - x; \
- step = 0; \
- if (dx >= 0) \
- { \
- e = 0; \
- sign = 1; \
- if (dx >= dy) {\
- step = dx / dy; \
- dx = dx % dy; \
- } \
- } \
- else \
- { \
- e = 1 - dy; \
- sign = -1; \
- dx = -dx; \
- if (dx >= dy) { \
- step = - (dx / dy); \
- dx = dx % dy; \
- } \
- } \
- } \
- x += origin; \
- vertex = c; \
-}
-
-#define Step(x,dx,dy,e,sign,step) {\
- x += step; \
- if ((e += dx) > 0) \
- { \
- x += sign; \
- e -= dy; \
- } \
-}
- for (;;)
- {
- if (y == intToY(vertex1))
- {
- do
- {
- if (vertex1p == (int *) ptsIn)
- vertex1p = endp;
- c = *--vertex1p;
- Setup (c,x1,vertex1,dx1,dy1,e1,sign1,step1)
- } while (y >= intToY(vertex1));
- h = dy1;
- }
- else
- {
- Step(x1,dx1,dy1,e1,sign1,step1)
- h = intToY(vertex1) - y;
- }
- if (y == intToY(vertex2))
- {
- do
- {
- c = *vertex2p++;
- if (vertex2p == endp)
- vertex2p = (int *) ptsIn;
- Setup (c,x2,vertex2,dx2,dy2,e2,sign2,step2)
- } while (y >= intToY(vertex2));
- if (dy2 < h)
- h = dy2;
- }
- else
- {
- Step(x2,dx2,dy2,e2,sign2,step2)
- if ((c = (intToY(vertex2) - y)) < h)
- h = c;
- }
- /* fill spans for this segment */
- y += h;
- for (;;)
- {
- l = x1;
-#if PSZ != 24 && PPW > 1
- r = x2;
-#endif
- nmiddle = x2 - x1;
- if (nmiddle < 0)
- {
- nmiddle = -nmiddle;
- l = x2;
-#if PSZ != 24 && PPW > 1
- r = x1;
-#endif
- }
-#if PPW > 1
- c = l & PIM;
- l -= c;
-#endif
-
-#if PGSZ == 32
-#define LWRD_SHIFT 2
-#else /* PGSZ == 64 */
-#define LWRD_SHIFT 3
-#endif /* PGSZ */
-
-#if PSZ == 24
- addr = (CfbBits *)((char *)addrl + ((l * 3) & ~0x03));
- if (nmiddle <= 1){
- if (nmiddle)
- RROP_SOLID24(addr, l);
- } else {
- maskbits(l, nmiddle, startmask, endmask, nmiddle);
- pidx = l & 3;
- if (startmask){
- RROP_SOLID_MASK(addr, startmask, pidx-1);
- addr++;
- if (pidx == 3)
- pidx = 0;
- }
- while (--nmiddle >= 0){
- RROP_SOLID(addr, pidx);
- addr++;
- if (++pidx == 3)
- pidx = 0;
- }
- if (endmask)
- RROP_SOLID_MASK(addr, endmask, pidx);
- }
-#else /* PSZ == 24 */
-#if PWSH > LWRD_SHIFT
- l = l >> (PWSH - LWRD_SHIFT);
-#endif
-#if PWSH < LWRD_SHIFT
- l = l << (LWRD_SHIFT - PWSH);
-#endif
- addr = (CfbBits *) (((char *) addrl) + l);
-#if PPW > 1
- if (c + nmiddle < PPW)
- {
- mask = SCRRIGHT (bits,c) ^ SCRRIGHT (bits,c+nmiddle);
- RROP_SOLID_MASK(addr,mask);
- }
- else
- {
- if (c)
- {
- mask = SCRRIGHT(bits, c);
- RROP_SOLID_MASK(addr,mask);
- nmiddle += c - PPW;
- addr++;
- }
-#endif
- nmiddle >>= PWSH;
- while (--nmiddle >= 0) {
- RROP_SOLID(addr); addr++;
- }
-#if PPW > 1
- if ((mask = ~SCRRIGHT(bits, r & PIM)))
- RROP_SOLID_MASK(addr,mask);
- }
-#endif
-#endif /* PSZ == 24 */
- if (!--h)
- break;
- addrl = AddrYPlus (addrl, 1);
- Step(x1,dx1,dy1,e1,sign1,step1)
- Step(x2,dx2,dy2,e2,sign2,step2)
- }
- if (y == maxy)
- break;
- addrl = AddrYPlus (addrl, 1);
- }
- RROP_UNDECLARE
-}
diff --git a/cfb/cfbpolypnt.c b/cfb/cfbpolypnt.c
deleted file mode 100644
index 06a768e8d..000000000
--- a/cfb/cfbpolypnt.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/************************************************************
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-********************************************************/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "scrnintstr.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-
-#define isClipped(c,ul,lr) ((((c) - (ul)) | ((lr) - (c))) & ClipMask)
-
-/* WARNING: pbox contains two shorts. This code assumes they are packed
- * and can be referenced together as an INT32.
- */
-
-#define PointLoop(fill) { \
- for (nbox = REGION_NUM_RECTS(cclip), pbox = REGION_RECTS(cclip); \
- --nbox >= 0; \
- pbox++) \
- { \
- c1 = *((INT32 *) &pbox->x1) - off; \
- c2 = *((INT32 *) &pbox->x2) - off - 0x00010001; \
- for (ppt = (INT32 *) pptInit, i = npt; --i >= 0;) \
- { \
- pt = *ppt++; \
- if (!isClipped(pt,c1,c2)) { \
- fill \
- } \
- } \
- } \
-}
-
-#if PSZ == 24
-# include "cfbrrop24.h"
-#endif
-
-void
-cfbPolyPoint(pDrawable, pGC, mode, npt, pptInit)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int mode;
- int npt;
- xPoint *pptInit;
-{
- register INT32 pt;
- register INT32 c1, c2;
- register CARD32 ClipMask = 0x80008000;
- register CfbBits xor;
-#ifdef PIXEL_ADDR
- register PixelType *addrp;
- register int npwidth;
-#if PSZ != 24
- PixelType *addrpt;
-#endif
-#else
- register CfbBits *addrl;
- register int nlwidth;
- register int xoffset;
- CfbBits *addrlt;
-#endif
-#if PSZ == 24
- RROP_DECLARE
- register int xtmp;
- register PixelType *p;
-#endif
- register INT32 *ppt;
- RegionPtr cclip;
- int nbox;
- register int i;
- register BoxPtr pbox;
- CfbBits and;
- int rop = pGC->alu;
- int off;
- cfbPrivGCPtr devPriv;
- xPoint *pptPrev;
-
- devPriv =cfbGetGCPrivate(pGC);
- rop = devPriv->rop;
- if (rop == GXnoop)
- return;
- cclip = pGC->pCompositeClip;
- xor = devPriv->xor;
- if ((mode == CoordModePrevious) && (npt > 1))
- {
- for (pptPrev = pptInit + 1, i = npt - 1; --i >= 0; pptPrev++)
- {
- pptPrev->x += (pptPrev-1)->x;
- pptPrev->y += (pptPrev-1)->y;
- }
- }
- off = *((int *) &pDrawable->x);
- off -= (off & 0x8000) << 1;
-#ifdef PIXEL_ADDR
- cfbGetPixelWidthAndPointer(pDrawable, npwidth, addrp);
-#if PSZ == 24
- addrp = addrp + pDrawable->y * npwidth;
-#else
- addrp = addrp + pDrawable->y * npwidth + pDrawable->x;
-#endif
- if (rop == GXcopy)
- {
-#if PSZ == 24
- RROP_COPY_SETUP(xor)
-#endif
- if (!(npwidth & (npwidth - 1)))
- {
- npwidth = ffs(npwidth) - 1;
-#if PSZ == 24
- PointLoop(
- xtmp = pDrawable->x + intToX(pt);
- p = addrp + (intToY(pt) << npwidth) + ((xtmp * 3) >>2);
- RROP_SOLID24_COPY(p, xtmp))
-#else
- PointLoop(*(addrp + (intToY(pt) << npwidth) + intToX(pt)) = xor;)
-#endif
- }
-#ifdef sun
- else if (npwidth == 1152)
- {
- register int y;
- PointLoop(y = intToY(pt); *(addrp + (y << 10) + (y << 7) + intToX(pt)) = xor;)
- }
-#endif
- else
- {
-#if PSZ == 24
- PointLoop(
- xtmp = pDrawable->x + intToX(pt);
- p = addrp + intToY(pt) * npwidth + ((xtmp * 3) >> 2);
- RROP_SOLID24_COPY(p, xtmp))
-#else
- PointLoop(*(addrp + intToY(pt) * npwidth + intToX(pt)) = xor;)
-#endif
- }
- }
- else
- {
- and = devPriv->and;
-#if PSZ == 24
- RROP_SET_SETUP(xor, and)
- PointLoop(
- xtmp = pDrawable->x + intToX(pt);
- p = addrp + intToY(pt) * npwidth + ((xtmp * 3) >> 2);
- RROP_SOLID24_SET(p, xtmp))
-#else
- PointLoop( addrpt = addrp + intToY(pt) * npwidth + intToX(pt);
- *addrpt = DoRRop (*addrpt, and, xor);)
-#endif
- }
-#else /* !PIXEL_ADDR */
- cfbGetLongWidthAndPointer(pDrawable, nlwidth, addrl);
- addrl = addrl + pDrawable->y * nlwidth + (pDrawable->x >> PWSH);
- xoffset = pDrawable->x & PIM;
- and = devPriv->and;
-#if PSZ == 24
- PointLoop( addrlt = addrl + intToY(pt) * nlwidth
- + ((intToX(pt) + xoffset) >> PWSH);
- *addrlt = DoRRop (*addrlt,
- and | ~cfbmask[(intToX(pt) + xoffset) & PIM],
- xor & cfbmask[(intToX(pt) + xoffset) & PIM]);
- )
-#else
- PointLoop( addrlt = addrl + intToY(pt) * nlwidth
- + ((intToX(pt) + xoffset) >> PWSH);
- *addrlt = DoRRop (*addrlt,
- and | ~cfbmask[((intToX(pt) + xoffset) & 3)<<1],
- xor & cfbmask[((intToX(pt) + xoffset) & 3)<<1]);
- )
-#endif
-#endif /* PIXEL_ADDR */
-}
diff --git a/cfb/cfbpush8.c b/cfb/cfbpush8.c
deleted file mode 100644
index 857ec94a6..000000000
--- a/cfb/cfbpush8.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Push Pixels for 8 bit displays.
- */
-
-
-/*
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-*/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#if PSZ == 8
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <X11/Xproto.h>
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "cfb8bit.h"
-#define MFB_CONSTS_ONLY
-#include "maskbits.h"
-
-void
-cfbPushPixels8 (pGC, pBitmap, pDrawable, dx, dy, xOrg, yOrg)
- GCPtr pGC;
- PixmapPtr pBitmap;
- DrawablePtr pDrawable;
- int dx, dy, xOrg, yOrg;
-{
- register CfbBits *src, *dst;
- register CfbBits pixel;
- register CfbBits c, bits;
- CfbBits *pdstLine, *psrcLine;
- CfbBits *pdstBase;
- int srcWidth;
- int dstWidth;
- int xoff;
- int nBitmapLongs, nPixmapLongs;
- int nBitmapTmp, nPixmapTmp;
- CfbBits rightMask;
- BoxRec bbox;
- cfbPrivGCPtr devPriv;
-
- bbox.x1 = xOrg;
- bbox.y1 = yOrg;
- bbox.x2 = bbox.x1 + dx;
- bbox.y2 = bbox.y1 + dy;
- devPriv = cfbGetGCPrivate(pGC);
-
- switch (RECT_IN_REGION(pGC->pScreen, pGC->pCompositeClip, &bbox))
- {
- case rgnPART:
- mfbPushPixels(pGC, pBitmap, pDrawable, dx, dy, xOrg, yOrg);
- case rgnOUT:
- return;
- }
-
- cfbGetLongWidthAndPointer (pDrawable, dstWidth, pdstBase)
-
- psrcLine = (CfbBits *) pBitmap->devPrivate.ptr;
- srcWidth = (int) pBitmap->devKind >> PWSH;
-
- pixel = devPriv->xor;
- xoff = xOrg & PIM;
- nBitmapLongs = (dx + xoff) >> MFB_PWSH;
- nPixmapLongs = (dx + PGSZB + xoff) >> PWSH;
-
- rightMask = ~cfb8BitLenMasks[((dx + xoff) & MFB_PIM)];
-
- pdstLine = pdstBase + (yOrg * dstWidth) + (xOrg >> PWSH);
-
- while (dy--)
- {
- c = 0;
- nPixmapTmp = nPixmapLongs;
- nBitmapTmp = nBitmapLongs;
- src = psrcLine;
- dst = pdstLine;
- while (nBitmapTmp--)
- {
- bits = *src++;
- c |= BitRight (bits, xoff);
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- nPixmapTmp -= 8;
- c = 0;
- if (xoff)
- c = BitLeft (bits, PGSZ - xoff);
- }
- if (BitLeft (rightMask, xoff))
- c |= BitRight (*src, xoff);
- c &= rightMask;
- switch (nPixmapTmp) {
- case 8:
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- case 7:
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- case 6:
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- case 5:
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- case 4:
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- case 3:
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- case 2:
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- case 1:
- WriteBitGroup(dst, pixel, GetBitGroup(c));
- NextBitGroup(c);
- dst++;
- case 0:
- break;
- }
- pdstLine += dstWidth;
- psrcLine += srcWidth;
- }
-}
-
-#endif
diff --git a/cfb/cfbrctstp8.c b/cfb/cfbrctstp8.c
deleted file mode 100644
index 485d40998..000000000
--- a/cfb/cfbrctstp8.c
+++ /dev/null
@@ -1,593 +0,0 @@
-/*
- * Fill 32 bit stippled rectangles for 8 bit frame buffers
- */
-/*
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-Author: Keith Packard, MIT X Consortium
-
-*/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#if PSZ == 8
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-#include "gcstruct.h"
-#include "window.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
-
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "cfb8bit.h"
-
-#define MFB_CONSTS_ONLY
-#include "maskbits.h"
-
-void
-cfb8FillRectOpaqueStippled32 (pDrawable, pGC, nBox, pBox)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nBox; /* number of boxes to fill */
- register BoxPtr pBox; /* pointer to list of boxes to fill */
-{
- CfbBits *src;
- int stippleHeight;
-
- int nlwDst; /* width in longwords of the dest pixmap */
- int w; /* width of current box */
- register int h; /* height of current box */
- CfbBits startmask;
- CfbBits endmask; /* masks for reggedy bits at either end of line */
- int nlwMiddle; /* number of longwords between sides of boxes */
- register int nlw; /* loop version of nlwMiddle */
- CfbBits *dstLine;
- register CfbBits *dst; /* pointer to bits we're writing */
- CfbBits *dstTmp;
- int y; /* current scan line */
-
- CfbBits *pbits;/* pointer to start of pixmap */
- register CfbBits bits; /* bits from stipple */
- int rot;
- register CfbBits xor;
- PixmapPtr stipple;
- int wEnd;
-
- stipple = pGC->pRotatedPixmap;
-
- cfb8CheckOpaqueStipple(pGC->alu, pGC->fgPixel, pGC->bgPixel, pGC->planemask);
-
- stippleHeight = stipple->drawable.height;
- src = (CfbBits *)stipple->devPrivate.ptr;
-
- cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits)
-
- while (nBox--)
- {
- w = pBox->x2 - pBox->x1;
- h = pBox->y2 - pBox->y1;
- y = pBox->y1;
- dstLine = pbits + (pBox->y1 * nlwDst) + ((pBox->x1 & ~PIM) >> PWSH);
- if (((pBox->x1 & PIM) + w) <= PPW)
- {
- maskpartialbits(pBox->x1, w, startmask);
- nlwMiddle = 0;
- endmask = 0;
- }
- else
- {
- maskbits (pBox->x1, w, startmask, endmask, nlwMiddle);
- }
- rot = (pBox->x1 & ((PGSZ-1) & ~PIM));
- pBox++;
- y = y % stippleHeight;
-#if PPW == 4
- if (cfb8StippleRRop == GXcopy)
- {
- if (w < PGSZ*2)
- {
- while (h--)
- {
- bits = src[y];
- y++;
- if (y == stippleHeight)
- y = 0;
- if (rot)
- RotBitsLeft(bits,rot);
- dst = dstLine;
- dstLine += nlwDst;
- if (startmask)
- {
- *dst = (*dst & ~startmask) |
- (GetPixelGroup (bits) & startmask);
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- nlw = nlwMiddle;
- while (nlw--)
- {
- *dst++ = GetPixelGroup(bits);
- RotBitsLeft (bits, PGSZB);
- }
- if (endmask)
- {
- *dst = (*dst & ~endmask) |
- (GetPixelGroup (bits) & endmask);
- }
- }
- }
- else
- {
- wEnd = 7 - (nlwMiddle & 7);
- nlwMiddle = (nlwMiddle >> 3) + 1;
- while (h--)
- {
- bits = src[y];
- y++;
- if (y == stippleHeight)
- y = 0;
- if (rot != 0)
- RotBitsLeft (bits, rot);
- dstTmp = dstLine;
- dstLine += nlwDst;
- if (startmask)
- {
- *dstTmp = (*dstTmp & ~startmask) |
- (GetPixelGroup (bits) & startmask);
- dstTmp++;
- RotBitsLeft (bits, PGSZB);
- }
- w = 7 - wEnd;
- while (w--)
- {
- nlw = nlwMiddle;
- dst = dstTmp;
- dstTmp++;
- xor = GetPixelGroup (bits);
- while (nlw--)
- {
- *dst = xor;
- dst += 8;
- }
- NextBitGroup (bits);
- }
- nlwMiddle--;
- w = wEnd + 1;
- if (endmask)
- {
- dst = dstTmp + (nlwMiddle << 3);
- *dst = (*dst & ~endmask) |
- (GetPixelGroup(bits) & endmask);
- }
- while (w--)
- {
- nlw = nlwMiddle;
- dst = dstTmp;
- dstTmp++;
- xor = GetPixelGroup (bits);
- while (nlw--)
- {
- *dst = xor;
- dst += 8;
- }
- NextBitGroup (bits);
- }
- nlwMiddle++;
- }
- }
- }
- else
-#endif /* PPW == 4 */
- {
- while (h--)
- {
- bits = src[y];
- y++;
- if (y == stippleHeight)
- y = 0;
- if (rot)
- RotBitsLeft(bits,rot);
- dst = dstLine;
- dstLine += nlwDst;
- if (startmask)
- {
- xor = GetBitGroup(bits);
- *dst = MaskRRopPixels(*dst, xor, startmask);
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- nlw = nlwMiddle;
- while (nlw--)
- {
- RRopBitGroup(dst, GetBitGroup(bits));
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- if (endmask)
- {
- xor = GetBitGroup(bits);
- *dst = MaskRRopPixels(*dst, xor, endmask);
- }
- }
- }
- }
-}
-
-void
-cfb8FillRectTransparentStippled32 (pDrawable, pGC, nBox, pBox)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nBox; /* number of boxes to fill */
- BoxPtr pBox; /* pointer to list of boxes to fill */
-{
- int x, y, w, h;
- int nlwMiddle, nlwDst;
- CfbBits startmask, endmask;
- register CfbBits *dst;
- CfbBits *dstLine, *pbits, *dstTmp;
- CfbBits *src;
- register CfbBits xor;
- register CfbBits bits, mask;
- int rot;
- int wEnd;
- cfbPrivGCPtr devPriv;
- PixmapPtr stipple;
- int stippleHeight;
- register int nlw;
-
- devPriv = cfbGetGCPrivate(pGC);
- stipple = pGC->pRotatedPixmap;
- src = (CfbBits *)stipple->devPrivate.ptr;
- stippleHeight = stipple->drawable.height;
-
- cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask);
-
- cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits)
-
- while (nBox--)
- {
- x = pBox->x1;
- w = pBox->x2 - x;
- if (((x & PIM) + w) <= PPW)
- {
- maskpartialbits(x, w, startmask);
- endmask = 0;
- nlwMiddle = 0;
- }
- else
- {
- maskbits (x, w, startmask, endmask, nlwMiddle);
- }
- rot = (x & ((PGSZ-1) & ~PIM));
- y = pBox->y1;
- dstLine = pbits + (y * nlwDst) + (x >> PWSH);
- h = pBox->y2 - y;
- pBox++;
- y %= stippleHeight;
-#if PPW == 4
- if (cfb8StippleRRop == GXcopy)
- {
- xor = devPriv->xor;
- if (w < PGSZ*2)
- {
- while (h--)
- {
- bits = src[y];
- y++;
- if (y == stippleHeight)
- y = 0;
- if (rot != 0)
- RotBitsLeft (bits, rot);
- dst = dstLine;
- dstLine += nlwDst;
- if (startmask)
- {
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- *dst = (*dst & ~(mask & startmask)) |
- (xor & (mask & startmask));
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- nlw = nlwMiddle;
- while (nlw--)
- {
- WriteBitGroup (dst,xor,GetBitGroup(bits))
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- if (endmask)
- {
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- *dst = (*dst & ~(mask & endmask)) |
- (xor & (mask & endmask));
- }
- }
- }
- else
- {
- wEnd = 7 - (nlwMiddle & 7);
- nlwMiddle = (nlwMiddle >> 3) + 1;
- while (h--)
- {
- bits = src[y];
- y++;
- if (y == stippleHeight)
- y = 0;
- if (rot != 0)
- RotBitsLeft (bits, rot);
- dstTmp = dstLine;
- dstLine += nlwDst;
- if (startmask)
- {
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- *dstTmp = (*dstTmp & ~(mask & startmask)) |
- (xor & (mask & startmask));
- dstTmp++;
- RotBitsLeft (bits, PGSZB);
- }
- w = 7 - wEnd;
- while (w--)
- {
- nlw = nlwMiddle;
- dst = dstTmp;
- dstTmp++;
-#if defined(__GNUC__) && defined(mc68020)
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- xor = xor & mask;
- mask = ~mask;
- while (nlw--)
- {
- *dst = (*dst & mask) | xor;
- dst += 8;
- }
- xor = devPriv->xor;
-#else
-#define SwitchBitsLoop(body) \
- while (nlw--) \
- { \
- body \
- dst += 8; \
- }
- SwitchBitGroup(dst, xor, GetBitGroup(bits));
-#undef SwitchBitsLoop
-#endif
- NextBitGroup (bits);
- }
- nlwMiddle--;
- w = wEnd + 1;
- if (endmask)
- {
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- dst = dstTmp + (nlwMiddle << 3);
- *dst = (*dst & ~(mask & endmask)) |
- (xor & (mask & endmask));
- }
- while (w--)
- {
- nlw = nlwMiddle;
- dst = dstTmp;
- dstTmp++;
-#if defined(__GNUC__) && defined(mc68020)
- mask = cfb8PixelMasks[GetBitGroup(bits)];
- xor = xor & mask;
- mask = ~mask;
- while (nlw--)
- {
- *dst = (*dst & mask) | xor;
- dst += 8;
- }
- xor = devPriv->xor;
-#else
-#define SwitchBitsLoop(body) \
- while (nlw--) \
- { \
- body \
- dst += 8; \
- }
- SwitchBitGroup(dst, xor, GetBitGroup(bits));
-#undef SwitchBitsLoop
-#endif
- NextBitGroup (bits);
- }
- nlwMiddle++;
- }
- }
- }
- else
-#endif /* PPW == 4 */
- {
- while (h--)
- {
- bits = src[y];
- y++;
- if (y == stippleHeight)
- y = 0;
- if (rot != 0)
- RotBitsLeft (bits, rot);
- dst = dstLine;
- dstLine += nlwDst;
- if (startmask)
- {
- xor = GetBitGroup(bits);
- *dst = MaskRRopPixels(*dst, xor, startmask);
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- nlw = nlwMiddle;
- while (nlw--)
- {
- RRopBitGroup(dst, GetBitGroup(bits));
- dst++;
- RotBitsLeft (bits, PGSZB);
- }
- if (endmask)
- {
- xor = GetBitGroup(bits);
- *dst = MaskRRopPixels(*dst, xor, endmask);
- }
- }
- }
- }
-}
-
-
-void
-cfb8FillRectStippledUnnatural (pDrawable, pGC, nBox, pBox)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nBox;
- register BoxPtr pBox;
-{
- CfbBits *pdstBase; /* pointer to start of bitmap */
- CfbBits *pdstLine; /* current destination line */
- int nlwDst; /* width in longwords of bitmap */
- PixmapPtr pStipple; /* pointer to stipple we want to fill with */
- int nlwMiddle;
- register int nlw;
- int x, y, w, h, xrem, xSrc, ySrc;
- int stwidth, stippleWidth;
- int stippleHeight;
- register CfbBits bits, inputBits;
- register int partBitsLeft;
- int nextPartBits;
- int bitsLeft, bitsWhole;
- register CfbBits *pdst; /* pointer to current word in bitmap */
- CfbBits *srcTemp, *srcStart;
- CfbBits *psrcBase;
- CfbBits startmask, endmask;
-
- if (pGC->fillStyle == FillStippled)
- cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask);
- else
- cfb8CheckOpaqueStipple (pGC->alu, pGC->fgPixel, pGC->bgPixel, pGC->planemask);
-
- if (cfb8StippleRRop == GXnoop)
- return;
-
- /*
- * OK, so what's going on here? We have two Drawables:
- *
- * The Stipple:
- * Depth = 1
- * Width = stippleWidth
- * Words per scanline = stwidth
- * Pointer to pixels = pStipple->devPrivate.ptr
- */
-
- pStipple = pGC->stipple;
-
- stwidth = pStipple->devKind >> PWSH;
- stippleWidth = pStipple->drawable.width;
- stippleHeight = pStipple->drawable.height;
- psrcBase = (CfbBits *) pStipple->devPrivate.ptr;
-
- /*
- * The Target:
- * Depth = PSZ
- * Width = determined from *pwidth
- * Words per scanline = nlwDst
- * Pointer to pixels = addrlBase
- */
-
- xSrc = pDrawable->x;
- ySrc = pDrawable->y;
-
- cfbGetLongWidthAndPointer (pDrawable, nlwDst, pdstBase)
-
- /* this replaces rotating the stipple. Instead we just adjust the offset
- * at which we start grabbing bits from the stipple.
- * Ensure that ppt->x - xSrc >= 0 and ppt->y - ySrc >= 0,
- * so that iline and xrem always stay within the stipple bounds.
- */
-
- xSrc += (pGC->patOrg.x % stippleWidth) - stippleWidth;
- ySrc += (pGC->patOrg.y % stippleHeight) - stippleHeight;
-
- bitsWhole = stippleWidth;
-
- while (nBox--)
- {
- x = pBox->x1;
- y = pBox->y1;
- w = pBox->x2 - x;
- h = pBox->y2 - y;
- pBox++;
- pdstLine = pdstBase + y * nlwDst + (x >> PWSH);
- y = (y - ySrc) % stippleHeight;
- srcStart = psrcBase + y * stwidth;
- xrem = ((x & ~PIM) - xSrc) % stippleWidth;
- if (((x & PIM) + w) < PPW)
- {
- maskpartialbits (x, w, startmask);
- nlwMiddle = 0;
- endmask = 0;
- }
- else
- {
- maskbits (x, w, startmask, endmask, nlwMiddle);
- }
- while (h--)
- {
- srcTemp = srcStart + (xrem >> MFB_PWSH);
- bitsLeft = stippleWidth - (xrem & ~MFB_PIM);
- NextUnnaturalStippleWord
- NextSomeBits (inputBits, (xrem & MFB_PIM));
- partBitsLeft -= (xrem & MFB_PIM);
- NextUnnaturalStippleBits
- nlw = nlwMiddle;
- pdst = pdstLine;
- if (startmask)
- {
- *pdst = MaskRRopPixels(*pdst,bits,startmask);
- pdst++;
- NextUnnaturalStippleBits
- }
- while (nlw--)
- {
- *pdst = RRopPixels(*pdst,bits);
- pdst++;
- NextUnnaturalStippleBits
- }
- if (endmask)
- *pdst = MaskRRopPixels(*pdst,bits,endmask);
- pdstLine += nlwDst;
- y++;
- srcStart += stwidth;
- if (y == stippleHeight)
- {
- y = 0;
- srcStart = psrcBase;
- }
- }
- }
-}
-
-#endif /* PSZ == 8 */
diff --git a/cfb/cfbrrop.c b/cfb/cfbrrop.c
deleted file mode 100644
index ffd813853..000000000
--- a/cfb/cfbrrop.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- *
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-
-/* cfb reduced rasterop computations */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <X11/Xproto.h>
-#include "cfb.h"
-#include "cfbmskbits.h"
-
-/* A description:
- *
- * There are four possible operations on each bit in the destination word,
- *
- * 1 2 3 4
- *
- * 0 0 0 1 1
- * 1 0 1 0 1
- *
- * On examination of the reduced rop equation (dst = (dst & and) ^ xor),
- * these four fall to reduced rops as follows:
- *
- * and 0 1 1 0
- * xor 0 0 1 1
- *
- * or, (if 'and' is expensive) (dst = (dst | or) ^ xor)
- *
- * or 1 0 0 1
- * xor 1 0 1 0
- *
- * The trouble with using this later equation is that trivial
- * rasterop reduction is more difficult; some common rasterops
- * use complicated expressions of xor/and instead of the simple
- * ones while other common rasterops are not made any simpler:
- *
- * GXcopy: *dst = ~xor instead of *dst = xor
- * GXand: *dst = *dst & ~or instead of *dst = *dst & and
- * GXor: *dst = *dst | or instead of *dst = *dst | xor
- * GXxor: *dst = *dst ^ xor instead of *dst = *dst ^ xor
- *
- * If you're really set on using this second mechanism, the changes
- * are pretty simple.
- *
- * All that remains is to provide a mechanism for computing and/xor values
- * based on the raster op and foreground value.
- *
- * The 16 rops fall as follows, with the associated reduced
- * rop and/xor and or/xor values. The values in parenthesis following the
- * reduced values gives an equation using the source value for
- * the reduced value, and is one of {0, src, ~src, 1} as appropriate.
- *
- * clear and andReverse copy
- * src 0 1 0 1 0 1 0 1
- * dst 0 0 0 0 0 0 0 0 1 0 0 1
- * 1 0 0 1 0 1 1 0 0 1 0 1
- *
- * and 0 0 (0) 0 1 (src) 0 1 (src) 0 0 (0)
- * xor 0 0 (0) 0 0 (0) 0 1 (src) 0 1 (src)
- *
- * or 1 1 (1) 1 0 (~src) 1 0 (~src) 1 1 (1)
- * xor 1 1 (1) 1 0 (~src) 1 1 (1) 1 0 (~src)
- *
- * andInverted noop xor or
- * src 0 1 0 1 0 1 0 1
- * dst 0 0 0 0 0 0 0 0 1 0 0 1
- * 1 1 0 1 1 1 1 1 0 1 1 1
- *
- * and 1 0 (~src) 1 1 (1) 1 1 (1) 1 0 (~src)
- * xor 0 0 (0) 0 0 (0) 0 1 (src) 0 1 (src)
- *
- * or 0 1 (src) 0 0 (0) 0 0 (0) 0 1 (src)
- * xor 0 1 (src) 0 0 (0) 0 1 (src) 0 0 (0)
- *
- * nor equiv invert orReverse
- * src 0 1 0 1 0 1 0 1
- * dst 0 1 0 0 1 0 0 1 1 0 1 1
- * 1 0 0 1 0 1 1 0 0 1 0 1
- *
- * and 1 0 (~src) 1 1 (1) 1 1 (1) 1 0 (~src)
- * xor 1 0 (~src) 1 0 (~src) 1 1 (1) 1 1 (1)
- *
- * or 0 1 (src) 0 0 (0) 0 0 (0) 0 1 (src)
- * xor 1 1 (1) 1 0 (~src) 1 1 (1) 1 0 (~src)
- *
- * copyInverted orInverted nand set
- * src 0 1 0 1 0 1 0 1
- * dst 0 1 0 0 1 0 0 1 1 0 1 1
- * 1 1 0 1 1 1 1 1 0 1 1 1
- *
- * and 0 0 (0) 0 1 (src) 0 1 (src) 0 0 (0)
- * xor 1 0 (~src) 1 0 (~src) 1 1 (1) 1 1 (1)
- *
- * or 1 1 (1) 1 0 (~src) 1 0 (~src) 1 1 (1)
- * xor 0 1 (src) 0 0 (0) 0 1 (src) 0 0 (0)
- */
-
-int
-cfbReduceRasterOp (rop, fg, pm, andp, xorp)
- int rop;
- CfbBits fg, pm;
- CfbBits *andp, *xorp;
-{
- CfbBits and, xor;
- int rrop;
-
- fg = PFILL (fg);
- pm = PFILL (pm);
- switch (rop)
- {
- case GXclear:
- and = 0;
- xor = 0;
- break;
- case GXand:
- and = fg;
- xor = 0;
- break;
- case GXandReverse:
- and = fg;
- xor = fg;
- break;
- case GXcopy:
- and = 0;
- xor = fg;
- break;
- case GXandInverted:
- and = ~fg;
- xor = 0;
- break;
- case GXnoop:
- and = ~0;
- xor = 0;
- break;
- case GXxor:
- and = ~0;
- xor = fg;
- break;
- case GXor:
- and = ~fg;
- xor = fg;
- break;
- case GXnor:
- and = ~fg;
- xor = ~fg;
- break;
- case GXequiv:
- and = ~0;
- xor = ~fg;
- break;
- case GXinvert:
- and = ~0;
- xor = ~0;
- break;
- case GXorReverse:
- and = ~fg;
- xor = ~0;
- break;
- case GXcopyInverted:
- and = 0;
- xor = ~fg;
- break;
- case GXorInverted:
- and = fg;
- xor = ~fg;
- break;
- case GXnand:
- and = fg;
- xor = ~0;
- break;
- case GXset:
- and = 0;
- xor = ~0;
- break;
- default:
- and = xor = 0;
- break;
- }
- and |= ~pm;
- xor &= pm;
- *andp = and;
- *xorp = xor;
- /* check for some special cases to reduce computation */
- if (and == 0)
- rrop = GXcopy;
- /* nothing checks for GXnoop
- else if (and == ~0 && xor == 0)
- rrop = GXnoop;
- */
- else if (and == ~0)
- rrop = GXxor;
- else if (xor == 0)
- rrop = GXand;
- else if ( (and ^ xor) == ~0) /* fix XBUG 6541 */
- rrop = GXor;
- else
- rrop = GXset; /* rop not reduced */
- return rrop;
-}
diff --git a/cfb/cfbrrop.h b/cfb/cfbrrop.h
deleted file mode 100644
index e9ca881be..000000000
--- a/cfb/cfbrrop.h
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- *
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#ifndef GXcopy
-#include <X11/X.h>
-#endif
-
-#define RROP_FETCH_GC(gc) \
- RROP_FETCH_GCPRIV((cfbPrivGCPtr)dixLookupPrivate(&(gc)->devPrivates, \
- cfbGCPrivateKey))
-
-#ifndef RROP
-#define RROP GXset
-#endif
-
-#if RROP == GXcopy
-#if PSZ == 24
-#define RROP_DECLARE register CfbBits rrop_xor; \
- CfbBits piQxelXor[3], spiQxelXor[8];
-#define RROP_FETCH_GCPRIV(devPriv) rrop_xor = (devPriv)->xor; \
- spiQxelXor[0] = rrop_xor & 0xFFFFFF; \
- spiQxelXor[2] = rrop_xor << 24; \
- spiQxelXor[3] = (rrop_xor & 0xFFFF00)>> 8; \
- spiQxelXor[4] = rrop_xor << 16; \
- spiQxelXor[5] = (rrop_xor & 0xFF0000)>> 16; \
- spiQxelXor[6] = rrop_xor << 8; \
- spiQxelXor[1] = spiQxelXor[7] = 0; \
- piQxelXor[0] = (rrop_xor & 0xFFFFFF)|(rrop_xor << 24); \
- piQxelXor[1] = (rrop_xor << 16)|((rrop_xor & 0xFFFF00)>> 8); \
- piQxelXor[2] = (rrop_xor << 8)|((rrop_xor & 0xFF0000)>> 16);
-#define RROP_SOLID24(dst,index) {\
- register int idx = ((index) & 3)<< 1; \
- *(dst) = (*(dst) & cfbrmask[idx])|spiQxelXor[idx]; \
- if (idx == 2 || idx == 4){ \
- idx++; \
- *((dst)+1) = (*((dst)+1) & cfbrmask[idx])|spiQxelXor[idx]; \
- } \
- }
-#define RROP_SOLID(dst, idx) \
- (*(dst) = piQxelXor[(idx)])
-#define RROP_SOLID_MASK(dst,mask,idx) \
- (*(dst) = (*(dst) & ~(mask))|(piQxelXor[(idx)] & (mask)))
-#define RROP_UNDECLARE (void)piQxelXor; (void)spiQxelXor;
-#else
-#define RROP_FETCH_GCPRIV(devPriv) rrop_xor = (devPriv)->xor;
-#define RROP_DECLARE register CfbBits rrop_xor;
-#define RROP_SOLID(dst) (*(dst) = (rrop_xor))
-#define RROP_SOLID_MASK(dst,mask) (*(dst) = (*(dst) & ~(mask)) | ((rrop_xor) & (mask)))
-#define RROP_UNDECLARE
-#endif
-#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,Copy)
-#endif /* GXcopy */
-
-#if RROP == GXxor
-#if PSZ == 24
-#define RROP_DECLARE register CfbBits rrop_xor; \
- CfbBits piQxelXor[3], spiQxelXor[8];
-#define RROP_FETCH_GCPRIV(devPriv) rrop_xor = (devPriv)->xor; \
- spiQxelXor[0] = rrop_xor & 0xFFFFFF; \
- spiQxelXor[2] = rrop_xor << 24; \
- spiQxelXor[3] = (rrop_xor & 0xFFFF00)>> 8; \
- spiQxelXor[4] = rrop_xor << 16; \
- spiQxelXor[5] = (rrop_xor & 0xFF0000)>> 16; \
- spiQxelXor[6] = rrop_xor << 8; \
- spiQxelXor[1] = spiQxelXor[7] = 0; \
- piQxelXor[0] = (rrop_xor & 0xFFFFFF)|(rrop_xor << 24); \
- piQxelXor[1] = (rrop_xor << 16)|((rrop_xor & 0xFFFF00)>> 8); \
- piQxelXor[2] = (rrop_xor << 8)|((rrop_xor & 0xFF0000)>> 16);
-#define RROP_SOLID24(dst,index) {\
- register int idx = ((index) & 3)<< 1; \
- *(dst) ^= spiQxelXor[idx]; \
- if (idx == 2 || idx == 4) \
- *((dst)+1) ^= spiQxelXor[idx+1]; \
- }
-#define RROP_SOLID(dst,idx) \
- (*(dst) ^= piQxelXor[(idx)])
-#define RROP_SOLID_MASK(dst,mask,idx) \
- (*(dst) ^= (piQxelXor[(idx)] & (mask)))
-#define RROP_UNDECLARE (void)piQxelXor; (void)spiQxelXor;
-#else
-#define RROP_DECLARE register CfbBits rrop_xor;
-#define RROP_FETCH_GCPRIV(devPriv) rrop_xor = (devPriv)->xor;
-#define RROP_SOLID(dst) (*(dst) ^= (rrop_xor))
-#define RROP_SOLID_MASK(dst,mask) (*(dst) ^= ((rrop_xor) & (mask)))
-#define RROP_UNDECLARE
-#endif
-#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,Xor)
-#endif /* GXxor */
-
-#if RROP == GXand
-#if PSZ == 24
-#define RROP_DECLARE register CfbBits rrop_and; \
- CfbBits piQxelAnd[3], spiQxelAnd[6];
-#define RROP_FETCH_GCPRIV(devPriv) rrop_and = (devPriv)->and; \
- spiQxelAnd[0] = (rrop_and & 0xFFFFFF) | 0xFF000000; \
- spiQxelAnd[2] = (rrop_and << 24) | 0xFFFFFF; \
- spiQxelAnd[3] = ((rrop_and & 0xFFFF00)>> 8) | 0xFFFF0000; \
- spiQxelAnd[4] = (rrop_and << 16) | 0xFFFF; \
- spiQxelAnd[5] = ((rrop_and & 0xFF0000)>> 16) | 0xFFFFFF00; \
- spiQxelAnd[1] = (rrop_and << 8) | 0xFF; \
- piQxelAnd[0] = (rrop_and & 0xFFFFFF)|(rrop_and << 24); \
- piQxelAnd[1] = (rrop_and << 16)|((rrop_and & 0xFFFF00)>> 8); \
- piQxelAnd[2] = (rrop_and << 8)|((rrop_and & 0xFF0000)>> 16);
-#define RROP_SOLID24(dst,index) {\
- switch((index) & 3){ \
- case 0: \
- *(dst) &= spiQxelAnd[0]; \
- break; \
- case 3: \
- *(dst) &= spiQxelAnd[1]; \
- break; \
- case 1: \
- *(dst) &= spiQxelAnd[2]; \
- *((dst)+1) &= spiQxelAnd[3]; \
- break; \
- case 2: \
- *(dst) &= spiQxelAnd[4]; \
- *((dst)+1) &= spiQxelAnd[5]; \
- break; \
- } \
- }
-#define RROP_SOLID(dst,idx) \
- (*(dst) &= piQxelAnd[(idx)])
-#define RROP_SOLID_MASK(dst,mask,idx) \
- (*(dst) &= (piQxelAnd[(idx)] | ~(mask)))
-#define RROP_UNDECLARE (void)piQxelAnd; (void)spiQxelAnd;
-#else
-#define RROP_DECLARE register CfbBits rrop_and;
-#define RROP_FETCH_GCPRIV(devPriv) rrop_and = (devPriv)->and;
-#define RROP_SOLID(dst) (*(dst) &= (rrop_and))
-#define RROP_SOLID_MASK(dst,mask) (*(dst) &= ((rrop_and) | ~(mask)))
-#define RROP_UNDECLARE
-#endif
-#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,And)
-#endif /* GXand */
-
-#if RROP == GXor
-#if PSZ == 24
-#define RROP_DECLARE register CfbBits rrop_or; \
- CfbBits piQxelOr[3], spiQxelOr[6];
-#define RROP_FETCH_GCPRIV(devPriv) rrop_or = (devPriv)->xor; \
- spiQxelOr[0] = rrop_or & 0xFFFFFF; \
- spiQxelOr[1] = rrop_or << 24; \
- spiQxelOr[2] = rrop_or << 16; \
- spiQxelOr[3] = rrop_or << 8; \
- spiQxelOr[4] = (rrop_or & 0xFFFF00)>> 8; \
- spiQxelOr[5] = (rrop_or & 0xFF0000)>> 16; \
- piQxelOr[0] = (rrop_or & 0xFFFFFF)|(rrop_or << 24); \
- piQxelOr[1] = (rrop_or << 16)|((rrop_or & 0xFFFF00)>> 8); \
- piQxelOr[2] = (rrop_or << 8)|((rrop_or & 0xFF0000)>> 16);
-#define RROP_SOLID24(dst,index) {\
- switch((index) & 3){ \
- case 0: \
- *(dst) |= spiQxelOr[0]; \
- break; \
- case 3: \
- *(dst) |= spiQxelOr[3]; \
- break; \
- case 1: \
- *(dst) |= spiQxelOr[1]; \
- *((dst)+1) |= spiQxelOr[4]; \
- break; \
- case 2: \
- *(dst) |= spiQxelOr[2]; \
- *((dst)+1) |= spiQxelOr[5]; \
- break; \
- } \
- }
-#define RROP_SOLID(dst,idx) \
- (*(dst) |= piQxelOr[(idx)])
-#define RROP_SOLID_MASK(dst,mask,idx) \
- (*(dst) |= (piQxelOr[(idx)] & (mask)))
-#define RROP_UNDECLARE (void)piQxelOr; (void)spiQxelOr;
-#else
-#define RROP_DECLARE register CfbBits rrop_or;
-#define RROP_FETCH_GCPRIV(devPriv) rrop_or = (devPriv)->xor;
-#define RROP_SOLID(dst) (*(dst) |= (rrop_or))
-#define RROP_SOLID_MASK(dst,mask) (*(dst) |= ((rrop_or) & (mask)))
-#define RROP_UNDECLARE
-#endif
-#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,Or)
-#endif /* GXor */
-
-#if RROP == GXnoop
-#define RROP_DECLARE
-#define RROP_FETCH_GCPRIV(devPriv)
-#define RROP_SOLID(dst)
-#define RROP_SOLID_MASK(dst,mask)
-#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,Noop)
-#define RROP_UNDECLARE
-#endif /* GXnoop */
-
-#if RROP == GXset
-#if PSZ == 24
-#define RROP_DECLARE register CfbBits rrop_and, rrop_xor; \
- CfbBits piQxelAnd[3], piQxelXor[3], spiQxelAnd[6], spiQxelXor[6];
-#define RROP_FETCH_GCPRIV(devPriv) rrop_and = (devPriv)->and; \
- rrop_xor = (devPriv)->xor; \
- spiQxelXor[0] = rrop_xor & 0xFFFFFF; \
- spiQxelXor[1] = rrop_xor << 24; \
- spiQxelXor[2] = rrop_xor << 16; \
- spiQxelXor[3] = rrop_xor << 8; \
- spiQxelXor[4] = (rrop_xor & 0xFFFF00)>> 8; \
- spiQxelXor[5] = (rrop_xor & 0xFF0000)>> 16; \
- spiQxelAnd[0] = (rrop_and & 0xFFFFFF) | 0xFF000000; \
- spiQxelAnd[1] = (rrop_and << 24) | 0xFFFFFF; \
- spiQxelAnd[2] = (rrop_and << 16) | 0xFFFF; \
- spiQxelAnd[3] = (rrop_and << 8) | 0xFF; \
- spiQxelAnd[4] = ((rrop_and & 0xFFFF00)>> 8) | 0xFFFF0000; \
- spiQxelAnd[5] = ((rrop_and & 0xFF0000)>> 16) | 0xFFFFFF00; \
- piQxelAnd[0] = (rrop_and & 0xFFFFFF)|(rrop_and << 24); \
- piQxelAnd[1] = (rrop_and << 16)|((rrop_and & 0xFFFF00)>> 8); \
- piQxelAnd[2] = (rrop_and << 8)|((rrop_and & 0xFF0000)>> 16); \
- piQxelXor[0] = (rrop_xor & 0xFFFFFF)|(rrop_xor << 24); \
- piQxelXor[1] = (rrop_xor << 16)|((rrop_xor & 0xFFFF00)>> 8); \
- piQxelXor[2] = (rrop_xor << 8)|((rrop_xor & 0xFF0000)>> 16);
-#define RROP_SOLID24(dst,index) {\
- switch((index) & 3){ \
- case 0: \
- *(dst) = ((*(dst) & (piQxelAnd[0] |0xFF000000))^(piQxelXor[0] & 0xFFFFFF)); \
- break; \
- case 3: \
- *(dst) = ((*(dst) & (piQxelAnd[2]|0xFF))^(piQxelXor[2] & 0xFFFFFF00)); \
- break; \
- case 1: \
- *(dst) = ((*(dst) & (piQxelAnd[0]|0xFFFFFF))^(piQxelXor[0] & 0xFF000000)); \
- *((dst)+1) = ((*((dst)+1) & (piQxelAnd[1]|0xFFFF0000))^(piQxelXor[1] & 0xFFFF)); \
- break; \
- case 2: \
- *(dst) = ((*(dst) & (piQxelAnd[1]|0xFFFF))^(piQxelXor[1] & 0xFFFF0000)); \
- *((dst)+1) = ((*((dst)+1) & (piQxelAnd[2]|0xFFFFFF00))^(piQxelXor[2] & 0xFF)); \
- break; \
- } \
- }
-#define RROP_SOLID(dst,idx) \
- (*(dst) = DoRRop (*(dst), piQxelAnd[(idx)], piQxelXor[(idx)]))
-#define RROP_SOLID_MASK(dst,mask,idx) \
- (*(dst) = DoMaskRRop (*(dst), piQxelAnd[(idx)], piQxelXor[(idx)], (mask)))
-#define RROP_UNDECLARE (void)piQxelAnd; (void)piQxelXor; \
- (void)spiQxelAnd; (void)spiQxelXor;
-#else
-#define RROP_DECLARE register CfbBits rrop_and, rrop_xor;
-#define RROP_FETCH_GCPRIV(devPriv) rrop_and = (devPriv)->and; \
- rrop_xor = (devPriv)->xor;
-#define RROP_SOLID(dst) (*(dst) = DoRRop (*(dst), rrop_and, rrop_xor))
-#define RROP_SOLID_MASK(dst,mask) (*(dst) = DoMaskRRop (*(dst), rrop_and, rrop_xor, (mask)))
-#define RROP_UNDECLARE
-#endif
-#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,General)
-#endif /* GXset */
-
-#define RROP_UNROLL_CASE1(p,i) case (i): RROP_SOLID((p) - (i));
-#define RROP_UNROLL_CASE2(p,i) RROP_UNROLL_CASE1(p,(i)+1) RROP_UNROLL_CASE1(p,i)
-#define RROP_UNROLL_CASE4(p,i) RROP_UNROLL_CASE2(p,(i)+2) RROP_UNROLL_CASE2(p,i)
-#define RROP_UNROLL_CASE8(p,i) RROP_UNROLL_CASE4(p,(i)+4) RROP_UNROLL_CASE4(p,i)
-#define RROP_UNROLL_CASE16(p,i) RROP_UNROLL_CASE8(p,(i)+8) RROP_UNROLL_CASE8(p,i)
-#define RROP_UNROLL_CASE32(p,i) RROP_UNROLL_CASE16(p,(i)+16) RROP_UNROLL_CASE16(p,i)
-#define RROP_UNROLL_CASE3(p) RROP_UNROLL_CASE2(p,2) RROP_UNROLL_CASE1(p,1)
-#define RROP_UNROLL_CASE7(p) RROP_UNROLL_CASE4(p,4) RROP_UNROLL_CASE3(p)
-#define RROP_UNROLL_CASE15(p) RROP_UNROLL_CASE8(p,8) RROP_UNROLL_CASE7(p)
-#define RROP_UNROLL_CASE31(p) RROP_UNROLL_CASE16(p,16) RROP_UNROLL_CASE15(p)
-#ifdef LONG64
-#define RROP_UNROLL_CASE63(p) RROP_UNROLL_CASE32(p,32) RROP_UNROLL_CASE31(p)
-#endif /* LONG64 */
-
-#define RROP_UNROLL_LOOP1(p,i) RROP_SOLID((p) + (i));
-#define RROP_UNROLL_LOOP2(p,i) RROP_UNROLL_LOOP1(p,(i)) RROP_UNROLL_LOOP1(p,(i)+1)
-#define RROP_UNROLL_LOOP4(p,i) RROP_UNROLL_LOOP2(p,(i)) RROP_UNROLL_LOOP2(p,(i)+2)
-#define RROP_UNROLL_LOOP8(p,i) RROP_UNROLL_LOOP4(p,(i)) RROP_UNROLL_LOOP4(p,(i)+4)
-#define RROP_UNROLL_LOOP16(p,i) RROP_UNROLL_LOOP8(p,(i)) RROP_UNROLL_LOOP8(p,(i)+8)
-#define RROP_UNROLL_LOOP32(p,i) RROP_UNROLL_LOOP16(p,(i)) RROP_UNROLL_LOOP16(p,(i)+16)
-#ifdef LONG64
-#define RROP_UNROLL_LOOP64(p,i) RROP_UNROLL_LOOP32(p,(i)) RROP_UNROLL_LOOP32(p,(i)+32)
-#endif /* LONG64 */
-
-#if defined (FAST_CONSTANT_OFFSET_MODE) && defined (SHARED_IDCACHE) && (RROP == GXcopy)
-
-#ifdef LONG64
-#define RROP_UNROLL_SHIFT 6
-#define RROP_UNROLL_CASE(p) RROP_UNROLL_CASE63(p)
-#define RROP_UNROLL_LOOP(p) RROP_UNROLL_LOOP64(p,-64)
-#else /* not LONG64 */
-#define RROP_UNROLL_SHIFT 5
-#define RROP_UNROLL_CASE(p) RROP_UNROLL_CASE31(p)
-#define RROP_UNROLL_LOOP(p) RROP_UNROLL_LOOP32(p,-32)
-#endif /* LONG64 */
-#define RROP_UNROLL (1<<RROP_UNROLL_SHIFT)
-#define RROP_UNROLL_MASK (RROP_UNROLL-1)
-
-#define RROP_SPAN(pdst,nmiddle) {\
- int part = (nmiddle) & RROP_UNROLL_MASK; \
- (nmiddle) >>= RROP_UNROLL_SHIFT; \
- (pdst) += part * (sizeof (CfbBits) / sizeof (*pdst)); \
- switch (part) {\
- RROP_UNROLL_CASE((CfbBits *) (pdst)) \
- } \
- while (--(nmiddle) >= 0) { \
- (pdst) += RROP_UNROLL * (sizeof (CfbBits) / sizeof (*pdst)); \
- RROP_UNROLL_LOOP((CfbBits *) (pdst)) \
- } \
-}
-#else
-#define RROP_SPAN(pdst,nmiddle) \
- while (--(nmiddle) >= 0) { \
- RROP_SOLID((CfbBits *) (pdst)); \
- (pdst) += sizeof (CfbBits) / sizeof (*pdst); \
- }
-#endif
-
-#if !defined(UNIXCPP) || defined(ANSICPP)
-#define RROP_NAME_CAT(prefix,suffix) prefix##suffix
-#else
-#define RROP_NAME_CAT(prefix,suffix) prefix/**/suffix
-#endif
diff --git a/cfb/cfbscrinit.c b/cfb/cfbscrinit.c
deleted file mode 100644
index 6f9ba2e85..000000000
--- a/cfb/cfbscrinit.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/************************************************************
-Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this
-software and its documentation for any purpose and without
-fee is hereby granted, provided that the above copyright no-
-tice appear in all copies and that both that copyright no-
-tice and this permission notice appear in supporting docu-
-mentation, and that the names of Sun or The Open Group
-not be used in advertising or publicity pertaining to
-distribution of the software without specific prior
-written permission. Sun and The Open Group make no
-representations about the suitability of this software for
-any purpose. It is provided "as is" without any express or
-implied warranty.
-
-SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
-NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-
-ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
-THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "resource.h"
-#include "colormap.h"
-#include "colormapst.h"
-#include "cfb.h"
-#include "mi.h"
-#include "mistruct.h"
-#include "dix.h"
-#include "cfbmskbits.h"
-#include "mibstore.h"
-
-Bool
-cfbCloseScreen (index, pScreen)
- int index;
- ScreenPtr pScreen;
-{
- int d;
- DepthPtr depths = pScreen->allowedDepths;
-
- for (d = 0; d < pScreen->numDepths; d++)
- xfree (depths[d].vids);
- xfree (depths);
- xfree (pScreen->visuals);
-#ifdef CFB_NEED_SCREEN_PRIVATE
- xfree (dixLookupPrivate(&pScreen->devPrivates, cfbScreenPrivateKey));
-#else
- xfree (pScreen->devPrivate);
-#endif
- return TRUE;
-}
-
-static void DestroyColormapNoop(
- ColormapPtr pColormap)
-{
- /* NOOP */
-}
-
-static void StoreColorsNoop(
- ColormapPtr pColormap,
- int ndef,
- xColorItem * pdef)
-{
- /* NOOP */
-}
-
-Bool
-cfbSetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, width)
- register ScreenPtr pScreen;
- pointer pbits; /* pointer to screen bitmap */
- int xsize, ysize; /* in pixels */
- int dpix, dpiy; /* dots per inch */
- int width; /* pixel width of frame buffer */
-{
- if (!cfbAllocatePrivates(pScreen, NULL))
- return FALSE;
- pScreen->defColormap = FakeClientID(0);
- /* let CreateDefColormap do whatever it wants for pixels */
- pScreen->blackPixel = pScreen->whitePixel = (Pixel) 0;
- pScreen->QueryBestSize = mfbQueryBestSizeWeak();
- /* SaveScreen */
- pScreen->GetImage = cfbGetImage;
- pScreen->GetSpans = cfbGetSpans;
- pScreen->CreateWindow = cfbCreateWindow;
- pScreen->DestroyWindow = cfbDestroyWindow;
- pScreen->PositionWindow = cfbPositionWindow;
- pScreen->ChangeWindowAttributes = cfbChangeWindowAttributes;
- pScreen->RealizeWindow = cfbMapWindow;
- pScreen->UnrealizeWindow = cfbUnmapWindow;
- pScreen->CopyWindow = cfbCopyWindow;
- pScreen->CreatePixmap = cfbCreatePixmap;
- pScreen->DestroyPixmap = cfbDestroyPixmap;
- pScreen->RealizeFont = mfbRealizeFontWeak();
- pScreen->UnrealizeFont = mfbUnrealizeFontWeak();
- pScreen->CreateGC = cfbCreateGC;
- pScreen->CreateColormap = cfbInitializeColormap;
- pScreen->DestroyColormap = DestroyColormapNoop;
- pScreen->InstallColormap = cfbInstallColormap;
- pScreen->UninstallColormap = cfbUninstallColormap;
- pScreen->ListInstalledColormaps = cfbListInstalledColormaps;
- pScreen->StoreColors = StoreColorsNoop;
- pScreen->ResolveColor = cfbResolveColor;
- pScreen->BitmapToRegion = mfbPixmapToRegionWeak();
-
- mfbRegisterCopyPlaneProc (pScreen, cfbCopyPlane);
- return TRUE;
-}
-
-#ifdef CFB_NEED_SCREEN_PRIVATE
-Bool
-cfbCreateScreenResources(pScreen)
- ScreenPtr pScreen;
-{
- Bool retval;
-
- pointer oldDevPrivate = pScreen->devPrivate;
- pScreen->devPrivate = dixLookupPrivate(&pScreen->devPrivates,
- cfbScreenPrivateKey);
- retval = miCreateScreenResources(pScreen);
- dixSetPrivate(&pScreen->devPrivates, cfbScreenPrivateKey,
- pScreen->devPrivate);
- pScreen->devPrivate = oldDevPrivate;
- return retval;
-}
-#endif
-
-Bool
-cfbFinishScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width)
- register ScreenPtr pScreen;
- pointer pbits; /* pointer to screen bitmap */
- int xsize, ysize; /* in pixels */
- int dpix, dpiy; /* dots per inch */
- int width; /* pixel width of frame buffer */
-{
-#ifdef CFB_NEED_SCREEN_PRIVATE
- pointer oldDevPrivate;
-#endif
- VisualPtr visuals;
- DepthPtr depths;
- int nvisuals;
- int ndepths;
- int rootdepth;
- VisualID defaultVisual;
-
- rootdepth = 0;
- if (!cfbInitVisuals (&visuals, &depths, &nvisuals, &ndepths, &rootdepth,
- &defaultVisual,((unsigned long)1<<(PSZ-1)), 8))
- return FALSE;
-#ifdef CFB_NEED_SCREEN_PRIVATE
- oldDevPrivate = pScreen->devPrivate;
-#endif
- if (! miScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width,
- rootdepth, ndepths, depths,
- defaultVisual, nvisuals, visuals))
- return FALSE;
- /* overwrite miCloseScreen with our own */
- pScreen->CloseScreen = cfbCloseScreen;
-#ifdef CFB_NEED_SCREEN_PRIVATE
- pScreen->CreateScreenResources = cfbCreateScreenResources;
- dixSetPrivate(&pScreen->devPrivates, cfbScreenPrivateKey,
- pScreen->devPrivate);
- pScreen->devPrivate = oldDevPrivate;
-#endif
- pScreen->GetScreenPixmap = cfbGetScreenPixmap;
- pScreen->SetScreenPixmap = cfbSetScreenPixmap;
- return TRUE;
-}
-
-/* dts * (inch/dot) * (25.4 mm / inch) = mm */
-Bool
-cfbScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width)
- register ScreenPtr pScreen;
- pointer pbits; /* pointer to screen bitmap */
- int xsize, ysize; /* in pixels */
- int dpix, dpiy; /* dots per inch */
- int width; /* pixel width of frame buffer */
-{
- if (!cfbSetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, width))
- return FALSE;
- return cfbFinishScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width);
-}
-
-PixmapPtr
-cfbGetScreenPixmap(pScreen)
- ScreenPtr pScreen;
-{
-#ifdef CFB_NEED_SCREEN_PRIVATE
- return (PixmapPtr)dixLookupPrivate(&pScreen->devPrivates,
- cfbScreenPrivateKey);
-#else
- return (PixmapPtr)pScreen->devPrivate;
-#endif
-}
-
-void
-cfbSetScreenPixmap(pPix)
- PixmapPtr pPix;
-{
-#ifdef CFB_NEED_SCREEN_PRIVATE
- if (pPix)
- dixSetPrivate(&pPix->drawable.pScreen->devPrivates,
- cfbScreenPrivateKey, pPix);
-#else
- if (pPix)
- pPix->drawable.pScreen->devPrivate = (pointer)pPix;
-#endif
-}
diff --git a/cfb/cfbsetsp.c b/cfb/cfbsetsp.c
deleted file mode 100644
index a000fd9e1..000000000
--- a/cfb/cfbsetsp.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-
-#include "misc.h"
-#include "regionstr.h"
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include <mergerop.h>
-
-/* cfbSetScanline -- copies the bits from psrc to the drawable starting at
- * (xStart, y) and continuing to (xEnd, y). xOrigin tells us where psrc
- * starts on the scanline. (I.e., if this scanline passes through multiple
- * boxes, we may not want to start grabbing bits at psrc but at some offset
- * further on.)
- */
-void
-cfbSetScanline(y, xOrigin, xStart, xEnd, psrc, alu, pdstBase, widthDst, planemask)
- int y;
- int xOrigin; /* where this scanline starts */
- int xStart; /* first bit to use from scanline */
- int xEnd; /* last bit to use from scanline + 1 */
- register unsigned int *psrc;
- register int alu; /* raster op */
- int *pdstBase; /* start of the drawable */
- int widthDst; /* width of drawable in words */
- unsigned long planemask;
-{
- int w; /* width of scanline in bits */
- register int *pdst; /* where to put the bits */
- register int tmpSrc; /* scratch buffer to collect bits in */
- int offSrc;
- int nl;
-#if PSZ == 24
- register char *psrcb, *pdstb;
- register int xIndex;
-#else
- int dstBit; /* offset in bits from beginning of
- * word */
- register int nstart; /* number of bits from first partial */
-#if PSZ != 32 || PPW != 1
- register int nend; /* " " last partial word */
-#endif
- int startmask, endmask, nlMiddle;
-#endif
- DeclareMergeRop()
-
- InitializeMergeRop(alu,planemask);
-#if PSZ == 24
- pdst = pdstBase + (y * widthDst);
- xIndex = xStart;
- pdstb = (char *)pdst + (xStart * 3);
- offSrc = xStart - xOrigin;
- psrcb = (char *)psrc + (offSrc * 3);
-#else
- pdst = pdstBase + (y * widthDst) + (xStart >> PWSH);
- psrc += (xStart - xOrigin) >> PWSH;
- offSrc = (xStart - xOrigin) & PIM;
-#endif
- w = xEnd - xStart;
-
-#if PSZ == 24
- nl = w;
- while (nl--){
- psrc = (unsigned int *)((unsigned long)psrcb & ~0x03);
- getbits24(psrc, tmpSrc, offSrc);
- pdst = (int *)((unsigned long)pdstb & ~0x03);
- DoMergeRop24(tmpSrc, pdst, xIndex);
- offSrc++;
- psrcb += 3;
- xIndex++;
- pdstb += 3;
- }
-#else /* PSZ == 24 */
- dstBit = xStart & PIM;
- if (dstBit + w <= PPW)
- {
- maskpartialbits(dstBit, w, startmask);
- endmask = 0;
- nlMiddle = 0;
- }
- else
- {
- maskbits(xStart, w, startmask, endmask, nlMiddle);
- }
- if (startmask)
- nstart = PPW - dstBit;
- else
- nstart = 0;
-#if PSZ != 32 || PPW != 1
- if (endmask)
- nend = xEnd & PIM;
- else
- nend = 0;
-#endif
- if (startmask)
- {
- getbits(psrc, offSrc, nstart, tmpSrc);
- putbitsmropshort(tmpSrc, dstBit, nstart, pdst);
- pdst++;
- offSrc += nstart;
- if (offSrc > PLST)
- {
- psrc++;
- offSrc -= PPW;
- }
- }
- nl = nlMiddle;
- while (nl--)
- {
- getbits(psrc, offSrc, PPW, tmpSrc);
- *pdst = DoMergeRop(tmpSrc, *pdst);
- pdst++;
- psrc++;
- }
- if (endmask)
- {
- getbits(psrc, offSrc, nend, tmpSrc);
- putbitsmropshort(tmpSrc, 0, nend, pdst);
- }
-#endif /* PSZ == 24 */
-}
-
-
-
-/* SetSpans -- for each span copy pwidth[i] bits from psrc to pDrawable at
- * ppt[i] using the raster op from the GC. If fSorted is TRUE, the scanlines
- * are in increasing Y order.
- * Source bit lines are server scanline padded so that they always begin
- * on a word boundary.
- */
-void
-cfbSetSpans(pDrawable, pGC, pcharsrc, ppt, pwidth, nspans, fSorted)
- DrawablePtr pDrawable;
- GCPtr pGC;
- char *pcharsrc;
- register DDXPointPtr ppt;
- int *pwidth;
- int nspans;
- int fSorted;
-{
- unsigned int *psrc = (unsigned int *)pcharsrc;
- CfbBits *pdstBase; /* start of dst bitmap */
- int widthDst; /* width of bitmap in words */
- register BoxPtr pbox, pboxLast, pboxTest;
- register DDXPointPtr pptLast;
- int alu;
- RegionPtr prgnDst;
- int xStart, xEnd;
- int yMax;
-
- alu = pGC->alu;
- prgnDst = cfbGetCompositeClip(pGC);
- pptLast = ppt + nspans;
-
- cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase)
-
- yMax = (int) pDrawable->y + (int) pDrawable->height;
-
- pbox = REGION_RECTS(prgnDst);
- pboxLast = pbox + REGION_NUM_RECTS(prgnDst);
-
- if(fSorted)
- {
- /* scan lines sorted in ascending order. Because they are sorted, we
- * don't have to check each scanline against each clip box. We can be
- * sure that this scanline only has to be clipped to boxes at or after the
- * beginning of this y-band
- */
- pboxTest = pbox;
- while(ppt < pptLast)
- {
- pbox = pboxTest;
- if(ppt->y >= yMax)
- break;
- while(pbox < pboxLast)
- {
- if(pbox->y1 > ppt->y)
- {
- /* scanline is before clip box */
- break;
- }
- else if(pbox->y2 <= ppt->y)
- {
- /* clip box is before scanline */
- pboxTest = ++pbox;
- continue;
- }
- else if(pbox->x1 > ppt->x + *pwidth)
- {
- /* clip box is to right of scanline */
- break;
- }
- else if(pbox->x2 <= ppt->x)
- {
- /* scanline is to right of clip box */
- pbox++;
- continue;
- }
-
- /* at least some of the scanline is in the current clip box */
- xStart = max(pbox->x1, ppt->x);
- xEnd = min(ppt->x + *pwidth, pbox->x2);
- cfbSetScanline(ppt->y, ppt->x, xStart, xEnd, psrc, alu,
- (int *)pdstBase, widthDst, pGC->planemask);
- if(ppt->x + *pwidth <= pbox->x2)
- {
- /* End of the line, as it were */
- break;
- }
- else
- pbox++;
- }
- /* We've tried this line against every box; it must be outside them
- * all. move on to the next point */
- ppt++;
- psrc += PixmapWidthInPadUnits(*pwidth, pDrawable->depth);
- pwidth++;
- }
- }
- else
- {
- /* scan lines not sorted. We must clip each line against all the boxes */
- while(ppt < pptLast)
- {
- if(ppt->y >= 0 && ppt->y < yMax)
- {
-
- for(pbox = REGION_RECTS(prgnDst); pbox< pboxLast; pbox++)
- {
- if(pbox->y1 > ppt->y)
- {
- /* rest of clip region is above this scanline,
- * skip it */
- break;
- }
- if(pbox->y2 <= ppt->y)
- {
- /* clip box is below scanline */
- pbox++;
- break;
- }
- if(pbox->x1 <= ppt->x + *pwidth &&
- pbox->x2 > ppt->x)
- {
- xStart = max(pbox->x1, ppt->x);
- xEnd = min(pbox->x2, ppt->x + *pwidth);
- cfbSetScanline(ppt->y, ppt->x, xStart, xEnd, psrc, alu,
- (int *)pdstBase, widthDst, pGC->planemask);
- }
-
- }
- }
- psrc += PixmapWidthInPadUnits(*pwidth, pDrawable->depth);
- ppt++;
- pwidth++;
- }
- }
-}
-
diff --git a/cfb/cfbsolid.c b/cfb/cfbsolid.c
deleted file mode 100644
index 6b8238dd9..000000000
--- a/cfb/cfbsolid.c
+++ /dev/null
@@ -1,1365 +0,0 @@
-/*
- *
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-#include "gcstruct.h"
-#include "window.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
-
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "cfbrrop.h"
-
-#include "mi.h"
-#include "mispans.h"
-
-#if defined(FAST_CONSTANT_OFFSET_MODE) && (RROP != GXcopy)
-# define Expand(left,right,leftAdjust) {\
- int part = nmiddle & 3; \
- int widthStep; \
- widthStep = widthDst - nmiddle - leftAdjust; \
- nmiddle >>= 2; \
- pdst = pdstRect; \
- while (h--) { \
- left \
- pdst += part; \
- switch (part) { \
- RROP_UNROLL_CASE3(pdst) \
- } \
- m = nmiddle; \
- while (m) { \
- pdst += 4; \
- RROP_UNROLL_LOOP4(pdst,-4) \
- m--; \
- } \
- right \
- pdst += widthStep; \
- } \
-}
-#else
-# ifdef RROP_UNROLL
-# define Expand(left,right,leftAdjust) {\
- int part = nmiddle & RROP_UNROLL_MASK; \
- int widthStep; \
- widthStep = widthDst - nmiddle - leftAdjust; \
- nmiddle >>= RROP_UNROLL_SHIFT; \
- pdst = pdstRect; \
- while (h--) { \
- left \
- pdst += part; \
- switch (part) { \
- RROP_UNROLL_CASE(pdst) \
- } \
- m = nmiddle; \
- while (m) { \
- pdst += RROP_UNROLL; \
- RROP_UNROLL_LOOP(pdst) \
- m--; \
- } \
- right \
- pdst += widthStep; \
- } \
-}
-
-# else
-# define Expand(left, right, leftAdjust) { \
- while (h--) { \
- pdst = pdstRect; \
- left \
- m = nmiddle; \
- while (m--) {\
- RROP_SOLID(pdst); \
- pdst++; \
- } \
- right \
- pdstRect += widthDst; \
- } \
-}
-# endif
-#endif
-
-
-void
-RROP_NAME(cfbFillRectSolid) (pDrawable, pGC, nBox, pBox)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nBox;
- BoxPtr pBox;
-{
- register int m;
- register CfbBits *pdst;
- RROP_DECLARE
- CfbBits *pdstBase, *pdstRect;
- int nmiddle;
- int h;
- int w;
- int widthDst;
-#if PSZ == 24
- int leftIndex, rightIndex;
-#else
- register CfbBits leftMask, rightMask;
-#endif
-
- cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase)
-
- RROP_FETCH_GC(pGC)
-
- for (; nBox; nBox--, pBox++)
- {
- pdstRect = pdstBase + pBox->y1 * widthDst;
- h = pBox->y2 - pBox->y1;
- w = pBox->x2 - pBox->x1;
-#if PSZ == 8
- if (w == 1)
- {
- register char *pdstb = ((char *) pdstRect) + pBox->x1;
- int incr = widthDst * PGSZB;
-
- while (h--)
- {
- RROP_SOLID (pdstb);
- pdstb += incr;
- }
- }
- else
- {
-#endif
-#if PSZ == 24
- leftIndex = pBox->x1 &3;
-/* rightIndex = ((leftIndex+w)<5)?0:pBox->x2 &3;*/
- rightIndex = pBox->x2 &3;
-
- nmiddle = w - rightIndex;
- if(leftIndex){
- nmiddle -= (4 - leftIndex);
- }
- nmiddle >>= 2;
- if(nmiddle < 0)
- nmiddle = 0;
-
- pdstRect += (pBox->x1 * 3) >> 2;
- pdst = pdstRect;
- switch(leftIndex+w){
- case 4:
- switch(leftIndex){
- case 0:
- while(h--){
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst++ = piQxelXor[1];
- *pdst-- = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst++ ^= piQxelXor[1];
- *pdst-- ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst++ &= piQxelAnd[1];
- *pdst-- &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst++ |= piQxelOr[1];
- *pdst-- |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst--;
-#endif
- pdst--;
- pdst += widthDst;
- }
- break;
- case 1:
- while(h--){
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- pdst++;
- *pdst++ = piQxelXor[1];
- *pdst-- = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[0] & 0xFF000000);
- *pdst++ ^= piQxelXor[1];
- *pdst-- ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[0] | 0x00FFFFFF);
- *pdst++ &= piQxelAnd[1];
- *pdst-- &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[0] & 0xFF000000);
- *pdst++ |= piQxelOr[1];
- *pdst-- |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst--;
-#endif
- pdst--;
- pdst += widthDst;
- }
- break;
- case 2:
- while(h--){
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000);
- pdst++;
- *pdst-- = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[1] & 0xFFFF0000);
- *pdst-- ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[1] | 0xFFFF);
- *pdst-- &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[1] & 0xFFFF0000);
- *pdst-- |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst--;
-#endif
- pdst += widthDst;
- }
- break;
- case 3:
- while(h--){
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXxor
- *pdst ^= (piQxelXor[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXand
- *pdst &= (piQxelAnd[2] | 0xFF);
-#endif
-#if RROP == GXor
- *pdst |= (piQxelOr[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00);
-#endif
- pdst += widthDst;
- }
- break;
- }
- break;
- case 3:
- switch(leftIndex){
- case 0:
- while(h--){
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst++ = piQxelXor[1];
- *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- pdst--;
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst++ ^= piQxelXor[1];
- *pdst-- ^= (piQxelXor[2] & 0xFF);
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst++ &= piQxelAnd[1];
- *pdst-- &= (piQxeAnd[2] | 0xFFFFFF00);
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst++ |= piQxelOr[1];
- *pdst-- |= (piQxelOr[2] & 0xFF);
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF);
- pdst--;
-#endif
- pdst--;
- pdst += widthDst;
- }
- break;
- case 1:
- while(h--){
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- pdst++;
- *pdst++ = piQxelXor[1];
- *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- pdst--;
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[0] & 0xFF000000);
- *pdst++ ^= piQxelXor[1];
- *pdst-- ^= (piQxelXor[2] & 0xFF);
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[0] | 0x00FFFFFF);
- *pdst++ &= piQxelAnd[1];
- *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00);
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[0] & 0xFF000000);
- *pdst++ |= piQxelOr[1];
- *pdst-- |= (piQxelOr[2] & 0xFF);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF);
- pdst--;
-#endif
- pdst--;
- pdst += widthDst;
- }
- break;
- case 2:
- while(h--){
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000);
- pdst++;
- *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- pdst--;
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[1] & 0xFFFF0000);
- *pdst-- ^= (piQxelXor[2] & 0xFF);
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[1] | 0xFFFF);
- *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00);
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[1] & 0xFFFF0000);
- *pdst-- |= (piQxelOr[2] & 0xFF);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF);
- pdst--;
-#endif
- pdst += widthDst;
- }
- break;
- case 3:
- while(h--){
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXxor
- *pdst ^= (piQxelXor[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXand
- *pdst &= (piQxelAnd[2] | 0xFF);
-#endif
-#if RROP == GXor
- *pdst |= (piQxelOr[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00);
-#endif
- pdst += widthDst;
- }
- break;
- }
- break;
- case 2: /* leftIndex + w = 2*/
- switch(leftIndex){
- case 2:
- while(h--){
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000);
- pdst++;
- *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- pdst--;
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[1] & 0xFFFF0000);
- *pdst-- ^= (piQxelXor[2] & 0xFF);
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[1] | 0xFFFF0000);
- *pdst-- &= (piQxelAnd[2] | 0xFF);
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[1] & 0xFFFF0000);
- *pdst-- |= (piQxelOr[2] & 0xFF);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF);
- pdst--;
-#endif
- pdst += widthDst;
- }
- break;
- case 1:
- while(h--){
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- pdst++;
- *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);
- pdst--;
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[0] & 0xFF000000);
- *pdst-- ^= (piQxelXor[1] & 0xFFFF);
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[0] | 0xFFFFFF);
- *pdst-- &= (piQxelAnd[1] | 0xFFFF0000);
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[0] & 0xFF000000);
- *pdst-- |= (piQxelOr[1] & 0xFFFF);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF);
- pdst--;
-#endif
- pdst += widthDst;
- }
- break;
- case 0: /*case 2 leftIndex == 0 */
- while(h--){
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);
- pdst--;
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst-- ^= (piQxelXor[1] & 0xFFFF);
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst-- &= (piQxelAnd[1] | 0xFFFF0000);
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst-- |= (piQxelOr[1] & 0xFFFF);
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF);
- pdst--;
-#endif
- pdst += widthDst;
- }
- break;
- }
- break;
- case 1: /*only if leftIndex = 0 and w = 1*/
- while(h--){
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF);
-#endif
-#if RROP == GXxor
- *pdst ^= (piQxelXor[0] & 0xFFFFFF);
-#endif
-#if RROP == GXand
- *pdst &= (piQxelAnd[0] | 0xFF000000);
-#endif
-#if RROP == GXor
- *pdst |= (piQxelOr[0] & 0xFFFFFF);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF);
-#endif
- pdst += widthDst;
- }
- break;
- case 0: /*never*/
- break;
- default:
- {
- while(h--){
- pdst = pdstRect;
- switch(leftIndex){
- case 0:
- break;
- case 1:
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- pdst++;
- *pdst++ = piQxelXor[1];
- *pdst++ = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[0] & 0xFF000000);
- *pdst++ ^= piQxelXor[1];
- *pdst++ ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[0] | 0xFFFFFF);
- *pdst++ &= piQxelAnd[1];
- *pdst++ &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[0] & 0xFF000000);
- *pdst++ |= piQxelOr[1];
- *pdst++ |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst++;
-#endif
- break;
- case 2:
-#if RROP == GXcopy
- *pdst = (((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000));
- pdst++;
- *pdst++ = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^=(piQxelXor[1] & 0xFFFF0000);
- *pdst++ ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[1] | 0xFFFF);
- *pdst++ &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[1] & 0xFFFF0000);
- *pdst++ |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst++;
-#endif
- break;
- case 3:
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00);
- pdst++;
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[2] | 0xFF);
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00);
- pdst++;
-#endif
- break;
- }
- m = nmiddle;
- while(m--){
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst++ = piQxelXor[1];
- *pdst++ = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst++ ^= piQxelXor[1];
- *pdst++ ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst++ &= piQxelAnd[1];
- *pdst++ &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst++ |= piQxelOr[1];
- *pdst++ |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst++;
-#endif
- }
- switch(rightIndex){
- case 0:
- break;
- case 1:
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF);
- pdst++;
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[0] & 0xFFFFFF);
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[0] | 0xFF);
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[0] & 0xFFFFFF);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF);
- pdst++;
-#endif
- break;
- case 2:
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);
- pdst++;
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst++ ^= (piQxelXor[1] & 0xFFFF);
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst++ &= (piQxelAnd[1] | 0xFFFF0000);
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst++ |= (piQxelOr[1] & 0xFFFF);
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF);
- pdst++;
-#endif
- break;
- case 3:
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst++ = piQxelXor[1];
- *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- pdst++;
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst++ ^= piQxelXor[1];
- *pdst++ ^= (piQxelXor[2] & 0xFF);
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst++ &= piQxelAnd[1];
- *pdst++ &= (piQxelAnd[2] | 0xFFFFFF00);
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst++ |= piQxelOr[1];
- *pdst++ |= (piQxelOr[2] & 0xFF);
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF);
- pdst++;
-#endif
- break;
- }
- pdstRect += widthDst;
- }
- }
- }
-#else /* PSZ != 24 */
- pdstRect += (pBox->x1 >> PWSH);
- if ((pBox->x1 & PIM) + w <= PPW)
- {
- maskpartialbits(pBox->x1, w, leftMask);
- pdst = pdstRect;
- while (h--) {
- RROP_SOLID_MASK (pdst, leftMask);
- pdst += widthDst;
- }
- }
- else
- {
- maskbits (pBox->x1, w, leftMask, rightMask, nmiddle);
- if (leftMask)
- {
- if (rightMask) /* left mask and right mask */
- {
- Expand(RROP_SOLID_MASK (pdst, leftMask); pdst++;,
- RROP_SOLID_MASK (pdst, rightMask);, 1)
- }
- else /* left mask and no right mask */
- {
- Expand(RROP_SOLID_MASK (pdst, leftMask); pdst++;,
- ;, 1)
- }
- }
- else
- {
- if (rightMask) /* no left mask and right mask */
- {
- Expand(;,
- RROP_SOLID_MASK (pdst, rightMask);, 0)
- }
- else /* no left mask and no right mask */
- {
- Expand(;,
- ;, 0)
- }
- }
- }
-#endif
-#if PSZ == 8
- }
-#endif
- }
- RROP_UNDECLARE
-}
-
-void
-RROP_NAME(cfbSolidSpans) (pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nInit; /* number of spans to fill */
- DDXPointPtr pptInit; /* pointer to list of start points */
- int *pwidthInit; /* pointer to list of n widths */
- int fSorted;
-{
- CfbBits *pdstBase;
- int widthDst;
-
- RROP_DECLARE
-
- register CfbBits *pdst;
- register int nlmiddle;
- register int w;
- int x;
-
- /* next three parameters are post-clip */
- int n; /* number of spans to fill */
- DDXPointPtr ppt; /* pointer to list of start points */
- int *pwidthFree;/* copies of the pointers to free */
- DDXPointPtr pptFree;
- int *pwidth;
- cfbPrivGCPtr devPriv;
-#if PSZ == 24
- int leftIndex, rightIndex;
-#else
- register CfbBits startmask, endmask;
-#endif
-
- devPriv = cfbGetGCPrivate(pGC);
- RROP_FETCH_GCPRIV(devPriv)
- n = nInit * miFindMaxBand(pGC->pCompositeClip);
- pwidthFree = (int *)xalloc(n * sizeof(int));
- pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec));
- if(!pptFree || !pwidthFree)
- {
- if (pptFree) xfree(pptFree);
- if (pwidthFree) xfree(pwidthFree);
- return;
- }
- pwidth = pwidthFree;
- ppt = pptFree;
- n = miClipSpans(pGC->pCompositeClip, pptInit, pwidthInit, nInit,
- ppt, pwidth, fSorted);
-
- cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase)
-
- while (n--)
- {
- x = ppt->x;
- pdst = pdstBase + (ppt->y * widthDst);
- ++ppt;
- w = *pwidth++;
- if (!w)
- continue;
-#if PSZ == 24
- leftIndex = x &3;
-/* rightIndex = ((leftIndex+w)<5)?0:(x+w)&3;*/
- rightIndex = (x+w)&3;
-
- nlmiddle = w - rightIndex;
- if(leftIndex){
- nlmiddle -= (4 - leftIndex);
- }
-/* nlmiddle += 3;*/
- nlmiddle >>= 2;
- if(nlmiddle < 0)
- nlmiddle = 0;
-
- pdst += (x >> 2)*3;
- pdst += leftIndex? (leftIndex -1):0;
- switch(leftIndex+w){
- case 4:
- switch(leftIndex){
- case 0:
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst++ = piQxelXor[1];
- *pdst-- = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst++ ^= piQxelXor[1];
- *pdst-- ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst++ &= piQxelAnd[1];
- *pdst-- &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst++ |= piQxelOr[1];
- *pdst-- |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst--;
-#endif
- pdst--;
- break;
- case 1:
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- pdst++;
- *pdst++ = piQxelXor[1];
- *pdst-- = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[0] & 0xFF000000);
- *pdst++ ^= piQxelXor[1];
- *pdst-- ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[0] | 0x00FFFFFF);
- *pdst++ &= piQxelAnd[1];
- *pdst-- &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[0] & 0xFF000000);
- *pdst++ |= piQxelOr[1];
- *pdst-- |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst--;
-#endif
- pdst--;
- break;
- case 2:
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000);
- pdst++;
- *pdst-- = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[1] & 0xFFFF0000);
- *pdst-- ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[1] | 0xFFFF);
- *pdst-- &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[1] & 0xFFFF0000);
- *pdst-- |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst--;
-#endif
- break;
- case 3:
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXxor
- *pdst ^= (piQxelXor[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXand
- *pdst &= (piQxelAnd[2] | 0xFF);
-#endif
-#if RROP == GXor
- *pdst |= (piQxelOr[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00);
-#endif
- break;
- }
- break;
- case 3:
- switch(leftIndex){
- case 0:
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst++ = piQxelXor[1];
- *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- pdst--;
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst++ ^= piQxelXor[1];
- *pdst-- ^= (piQxelXor[2] & 0xFF);
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst++ &= piQxelAnd[1];
- *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00);
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst++ |= piQxelOr[1];
-
- *pdst-- |= (piQxelOr[2] & 0xFF);
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF);
- pdst--;
-#endif
- pdst--;
- break;
- case 1:
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- pdst++;
- *pdst++ = piQxelXor[1];
- *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- pdst--;
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[0] & 0xFF000000);
- *pdst++ ^= piQxelXor[1];
- *pdst-- ^= (piQxelXor[2] & 0xFF);
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[0] | 0x00FFFFFF);
- *pdst++ &= piQxelAnd[1];
- *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00);
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[0] & 0xFF000000);
- *pdst++ |= piQxelOr[1];
- *pdst-- |= (piQxelOr[2] & 0xFF);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF);
- pdst--;
-#endif
- pdst--;
- break;
- case 2:
-/* pdst++;*/
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000);
- pdst++;
- *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- pdst--;
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[1] & 0xFFFF0000);
- *pdst-- ^= (piQxelXor[2] & 0xFF);
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[1] | 0xFFFF);
- *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00);
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[1] & 0xFFFF0000);
- *pdst-- |= (piQxelOr[2] & 0xFF);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF);
- pdst--;
-#endif
- break;
- }
- break;
- case 2: /* leftIndex + w = 2*/
- if(leftIndex){
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- pdst++;
- *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);
- pdst--;
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[0] & 0xFF000000);
- *pdst-- ^= (piQxelXor[1] & 0xFFFF);
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[0] | 0xFFFFFF);
- *pdst-- &= (piQxelAnd[1] | 0xFFFF0000);
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[0] & 0xFF000000);
- *pdst-- |= (piQxelOr[1] & 0xFFFF);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF);
- pdst--;
-#endif
- }
- else{ /*case 2 leftIndex === 0 */
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);
- pdst--;
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst-- ^= (piQxelXor[1] & 0xFFFF);
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst-- &= (piQxelAnd[1] | 0xFFFF0000);
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst-- |= (piQxelOr[1] & 0xFFFF);
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF);
- pdst--;
-#endif
- }
- break;
- case 1: /*only if leftIndex = 0 and w = 1*/
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF);
-#endif
-#if RROP == GXxor
- *pdst ^= (piQxelXor[0] & 0xFFFFFF);
-#endif
-#if RROP == GXand
- *pdst &= (piQxelAnd[0] | 0xFF000000);
-#endif
-#if RROP == GXor
- *pdst |= (piQxelOr[0] & 0xFFFFFF);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF);
-#endif
- break;
- case 0: /*never*/
- break;
- default:
- {
- switch(leftIndex){
- case 0:
- break;
- case 1:
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);
- pdst++;
- *pdst++ = piQxelXor[1];
- *pdst++ = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[0] & 0xFF000000);
- *pdst++ ^= piQxelXor[1];
- *pdst++ ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[0] | 0xFFFFFF);
- *pdst++ &= piQxelAnd[1];
- *pdst++ &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[0] & 0xFF000000);
- *pdst++ |= piQxelOr[1];
- *pdst++ |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst++;
-#endif
- break;
- case 2:
-#if RROP == GXcopy
- *pdst = (((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000));
- pdst++;
- *pdst++ = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^=(piQxelXor[1] & 0xFFFF0000);
- *pdst++ ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[1] | 0xFFFF);
- *pdst++ &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[1] & 0xFFFF0000);
- *pdst++ |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst++;
-#endif
- break;
- case 3:
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00);
- pdst++;
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[2] | 0xFF);
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[2] & 0xFFFFFF00);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00);
- pdst++;
-#endif
- break;
- }
- while(nlmiddle--){
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst++ = piQxelXor[1];
- *pdst++ = piQxelXor[2];
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst++ ^= piQxelXor[1];
- *pdst++ ^= piQxelXor[2];
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst++ &= piQxelAnd[1];
- *pdst++ &= piQxelAnd[2];
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst++ |= piQxelOr[1];
- *pdst++ |= piQxelOr[2];
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);
- pdst++;
-#endif
- }
- switch(rightIndex){
- case 0:
- break;
- case 1:
-#if RROP == GXcopy
- *pdst = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF);
- pdst++;
-#endif
-#if RROP == GXxor
- *pdst++ ^= (piQxelXor[0] & 0xFFFFFF);
-#endif
-#if RROP == GXand
- *pdst++ &= (piQxelAnd[0] | 0xFF);
-#endif
-#if RROP == GXor
- *pdst++ |= (piQxelOr[0] & 0xFFFFFF);
-#endif
-#if RROP == GXset
- *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF);
-#endif
- break;
- case 2:
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);
- pdst++;
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst++ ^= (piQxelXor[1] & 0xFFFF);
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst++ &= (piQxelAnd[1] | 0xFFFF0000);
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst++ |= (piQxelOr[1] & 0xFFFF);
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF);
- pdst++;
-#endif
- break;
- case 3:
-#if RROP == GXcopy
- *pdst++ = piQxelXor[0];
- *pdst++ = piQxelXor[1];
- *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);
- pdst++;
-#endif
-#if RROP == GXxor
- *pdst++ ^= piQxelXor[0];
- *pdst++ ^= piQxelXor[1];
- *pdst++ ^= (piQxelXor[2] & 0xFF);
-#endif
-#if RROP == GXand
- *pdst++ &= piQxelAnd[0];
- *pdst++ &= piQxelAnd[1];
- *pdst++ &= (piQxelAnd[2] | 0xFFFFFF00);
-#endif
-#if RROP == GXor
- *pdst++ |= piQxelOr[0];
- *pdst++ |= piQxelOr[1];
- *pdst++ |= (piQxelOr[2] & 0xFF);
-#endif
-#if RROP == GXset
- *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);
- pdst++;
- *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);
- pdst++;
- *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF);
- pdst++;
-#endif
- break;
- }
- }
-}
-#else
-#if PSZ == 8
- if (w <= PGSZB)
- {
- register char *addrb;
-
- addrb = ((char *) pdst) + x;
- while (w--)
- {
- RROP_SOLID (addrb);
- addrb++;
- }
- }
-#else
- if ((x & PIM) + w <= PPW)
- {
- pdst += x >> PWSH;
- maskpartialbits (x, w, startmask);
- RROP_SOLID_MASK (pdst, startmask);
- }
-#endif
- else
- {
- pdst += x >> PWSH;
- maskbits (x, w, startmask, endmask, nlmiddle);
- if (startmask)
- {
- RROP_SOLID_MASK (pdst, startmask);
- ++pdst;
- }
-
- RROP_SPAN(pdst,nlmiddle)
- if (endmask)
- {
- RROP_SOLID_MASK (pdst, endmask);
- }
- }
-#endif
- }
- xfree(pptFree);
- xfree(pwidthFree);
- RROP_UNDECLARE
-}
diff --git a/cfb/cfbteblt8.c b/cfb/cfbteblt8.c
deleted file mode 100644
index 9d4ce5708..000000000
--- a/cfb/cfbteblt8.c
+++ /dev/null
@@ -1,589 +0,0 @@
-/*
- * TEGblt - ImageText expanded glyph fonts only. For
- * 8 bit displays, in Copy mode with no clipping.
- */
-
-/*
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-*/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#if PSZ == 8
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <X11/Xproto.h>
-#include "cfb.h"
-#include <X11/fonts/fontstruct.h>
-#include "dixfontstr.h"
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "cfbmskbits.h"
-#include "cfb8bit.h"
-
-/*
- * this code supports up to 5 characters at a time. The performance
- * differences between 4 and 5 is usually small (~7% on PMAX) and
- * frequently negative (SPARC and Sun3), so this file is compiled
- * only once for now. If you want to use the other options, you'll
- * need to hack cfbgc.c as well.
- */
-
-#ifndef NGLYPHS
-#define NGLYPHS 4
-#define DO_COMMON
-#endif
-
-#ifdef DO_COMMON
-#define CFBTEGBLT8 cfbTEGlyphBlt8
-#endif
-
-/*
- * On little-endian machines (or where fonts are padded to 32-bit
- * boundaries) we can use some magic to avoid the expense of getleftbits
- */
-
-#if ((BITMAP_BIT_ORDER == LSBFirst && NGLYPHS >= 4) || GLYPHPADBYTES == 4)
-
-#if GLYPHPADBYTES == 1
-typedef unsigned char *glyphPointer;
-#define USE_LEFTBITS
-#endif
-
-#if GLYPHPADBYTES == 2
-typedef unsigned short *glyphPointer;
-#define USE_LEFTBITS
-#endif
-
-#if GLYPHPADBYTES == 4
-typedef unsigned int *glyphPointer;
-#endif
-
-#define GetBitsL c = BitLeft (*leftChar++, lshift)
-#define NGetBits1S(r) c = BitRight(*char1++ r, xoff1)
-#define NGetBits1L(r) GetBitsL | BitRight(*char1++ r, xoff1)
-#define NGetBits1U(r) c = *char1++ r
-#define NGetBits2S(r) NGetBits1S(| BitRight(*char2++ r, widthGlyph))
-#define NGetBits2L(r) NGetBits1L(| BitRight(*char2++ r, widthGlyph))
-#define NGetBits2U(r) NGetBits1U(| BitRight(*char2++ r, widthGlyph))
-#define NGetBits3S(r) NGetBits2S(| BitRight(*char3++ r, widthGlyph))
-#define NGetBits3L(r) NGetBits2L(| BitRight(*char3++ r, widthGlyph))
-#define NGetBits3U(r) NGetBits2U(| BitRight(*char3++ r, widthGlyph))
-#define NGetBits4S(r) NGetBits3S(| BitRight(*char4++ r, widthGlyph))
-#define NGetBits4L(r) NGetBits3L(| BitRight(*char4++ r, widthGlyph))
-#define NGetBits4U(r) NGetBits3U(| BitRight(*char4++ r, widthGlyph))
-#define NGetBits5S(r) NGetBits4S(| BitRight(*char5++ r, widthGlyph))
-#define NGetBits5L(r) NGetBits4L(| BitRight(*char5++ r, widthGlyph))
-#define NGetBits5U(r) NGetBits4U(| BitRight(*char5++ r, widthGlyph))
-#define GetBits1S c = BitRight(*char1++, xoff1)
-#define GetBits1L GetBitsL | BitRight(*char1++, xoff1)
-#define GetBits1U c = *char1++
-#define GetBits2S NGetBits1S(| BitRight(*char2++, widthGlyph))
-#define GetBits2L NGetBits1L(| BitRight(*char2++, widthGlyph))
-#define GetBits2U NGetBits1U(| BitRight(*char2++, widthGlyph))
-#define GetBits3S NGetBits2S(| BitRight(*char3++, widthGlyph))
-#define GetBits3L NGetBits2L(| BitRight(*char3++, widthGlyph))
-#define GetBits3U NGetBits2U(| BitRight(*char3++, widthGlyph))
-#define GetBits4S NGetBits3S(| BitRight(*char4++, widthGlyph))
-#define GetBits4L NGetBits3L(| BitRight(*char4++, widthGlyph))
-#define GetBits4U NGetBits3U(| BitRight(*char4++, widthGlyph))
-#define GetBits5S NGetBits4S(| BitRight(*char5++, widthGlyph))
-#define GetBits5L NGetBits4L(| BitRight(*char5++, widthGlyph))
-#define GetBits5U NGetBits4U(| BitRight(*char5++, widthGlyph))
-
-#else
-
-typedef unsigned int *glyphPointer;
-
-#define USE_LEFTBITS
-#define ALL_LEFTBITS
-
-#define GetBitsL WGetBitsL
-#define GetBits1S WGetBits1S
-#define GetBits1L WGetBits1L
-#define GetBits1U WGetBits1U
-
-#define GetBits2S GetBits1S Get1Bits (char2, tmpSrc) \
- c |= BitRight(tmpSrc, xoff2);
-#define GetBits2L GetBits1L Get1Bits (char2, tmpSrc) \
- c |= BitRight(tmpSrc, xoff2);
-#define GetBits2U GetBits1U Get1Bits (char2, tmpSrc) \
- c |= BitRight(tmpSrc, xoff2);
-
-#define GetBits3S GetBits2S Get1Bits (char3, tmpSrc) \
- c |= BitRight(tmpSrc, xoff3);
-#define GetBits3L GetBits2L Get1Bits (char3, tmpSrc) \
- c |= BitRight(tmpSrc, xoff3);
-#define GetBits3U GetBits2U Get1Bits (char3, tmpSrc) \
- c |= BitRight(tmpSrc, xoff3);
-
-#define GetBits4S GetBits3S Get1Bits (char4, tmpSrc) \
- c |= BitRight(tmpSrc, xoff4);
-#define GetBits4L GetBits3L Get1Bits (char4, tmpSrc) \
- c |= BitRight(tmpSrc, xoff4);
-#define GetBits4U GetBits3U Get1Bits (char4, tmpSrc) \
- c |= BitRight(tmpSrc, xoff4);
-
-#define GetBits5S GetBits4S Get1Bits (char5, tmpSrc) \
- c |= BitRight(tmpSrc, xoff5);
-#define GetBits5L GetBits4L Get1Bits (char5, tmpSrc) \
- c |= BitRight(tmpSrc, xoff5);
-#define GetBits5U GetBits4U Get1Bits (char5, tmpSrc) \
- c |= BitRight(tmpSrc, xoff5);
-
-#endif
-
-#ifdef USE_LEFTBITS
-
-#define IncChar(c) (c = (glyphPointer) (((char *) c) + glyphBytes))
-
-#define Get1Bits(ch,dst) glyphbits (ch, widthGlyph, glyphMask, dst); \
- IncChar (ch);
-
-#define glyphbits(bits,width,mask,dst) getleftbits(bits,width,dst); \
- dst &= mask;
-
-#define WGetBitsL Get1Bits(leftChar,c); \
- c = BitLeft (c, lshift);
-#define WGetBits1S Get1Bits (char1, c) \
- c = BitRight (c, xoff1);
-#define WGetBits1L WGetBitsL Get1Bits (char1, tmpSrc) \
- c |= BitRight (tmpSrc, xoff1);
-#define WGetBits1U Get1Bits (char1, c)
-
-#else
-#define WGetBitsL GetBitsL
-#define WGetBits1S GetBits1S
-#define WGetBits1L GetBits1L
-#define WGetBits1U GetBits1U
-#endif
-
-#if NGLYPHS == 2
-# define GetBitsNS GetBits2S
-# define GetBitsNL GetBits2L
-# define GetBitsNU GetBits2U
-# define LastChar char2
-#ifndef CFBTEGBLT8
-# define CFBTEGBLT8 cfbTEGlyphBlt8x2
-#endif
-#endif
-#if NGLYPHS == 3
-# define GetBitsNS GetBits3S
-# define GetBitsNL GetBits3L
-# define GetBitsNU GetBits3U
-# define LastChar char3
-#ifndef CFBTEGBLT8
-# define CFBTEGBLT8 cfbTEGlyphBlt8x3
-#endif
-#endif
-#if NGLYPHS == 4
-# define GetBitsNS GetBits4S
-# define GetBitsNL GetBits4L
-# define GetBitsNU GetBits4U
-# define LastChar char4
-#ifndef CFBTEGBLT8
-# define CFBTEGBLT8 cfbTEGlyphBlt8x4
-#endif
-#endif
-#if NGLYPHS == 5
-# define GetBitsNS GetBits5S
-# define GetBitsNL GetBits5L
-# define GetBitsNU GetBits5U
-# define LastChar char5
-#ifndef CFBTEGBLT8
-# define CFBTEGBLT8 cfbTEGlyphBlt8x5
-#endif
-#endif
-
-/* another ugly giant macro */
-#define SwitchEm switch (ew) \
- { \
- case 0: \
- break; \
- case 1: \
- while (hTmp--) { \
- GetBits; \
- StoreBits0 \
- Loop \
- } \
- break; \
- case 2: \
- while (hTmp--) { \
- GetBits; \
- StoreBits0 FirstStep StoreBits(1) \
- Loop \
- } \
- break; \
- case 3: \
- while (hTmp--) { \
- GetBits; \
- StoreBits0 FirstStep StoreBits(1) Step StoreBits(2) \
- Loop \
- } \
- break; \
- case 4: \
- while (hTmp--) { \
- GetBits; \
- StoreBits0 FirstStep StoreBits(1) Step \
- StoreBits(2) Step StoreBits(3) \
- Loop \
- } \
- break; \
- case 5: \
- while (hTmp--) { \
- GetBits; \
- StoreBits0 FirstStep StoreBits(1) Step \
- StoreBits(2) Step StoreBits(3) Step \
- StoreBits(4) \
- Loop \
- } \
- break; \
- case 6: \
- while (hTmp--) { \
- GetBits; \
- StoreBits0 FirstStep StoreBits(1) Step \
- StoreBits(2) Step StoreBits(3) Step \
- StoreBits(4) Step StoreBits(5) \
- Loop \
- } \
- break; \
- case 7: \
- while (hTmp--) { \
- GetBits; \
- StoreBits0 FirstStep StoreBits(1) Step \
- StoreBits(2) Step StoreBits(3) Step \
- StoreBits(4) Step StoreBits(5) Step \
- StoreBits(6) \
- Loop \
- } \
- break; \
- case 8: \
- while (hTmp--) { \
- GetBits; \
- StoreBits0 FirstStep StoreBits(1) Step \
- StoreBits(2) Step StoreBits(3) Step \
- StoreBits(4) Step StoreBits(5) Step \
- StoreBits(6) Step StoreBits(7) \
- Loop \
- } \
- break; \
- }
-
-#ifdef FAST_CONSTANT_OFFSET_MODE
-#define StorePixels(o,p) dst[o] = p
-#define Loop dst += widthDst;
-#else
-#define StorePixels(o,p) do { *dst = (p); dst++; } while (0)
-#define Loop dst += widthLeft;
-#endif
-
-#define Step NextBitGroup(c);
-
-#if (BITMAP_BIT_ORDER == MSBFirst)
-#define StoreBits(o) StorePixels(o,GetPixelGroup(c));
-#define FirstStep Step
-#else
-#if PGSZ == 64
-#define StoreBits(o) StorePixels(o,cfb8Pixels[(c) & PGSZBMSK]);
-#define FirstStep Step
-#else /* PGSZ == 32 */
-#define StoreBits(o) StorePixels(o,*((CfbBits *) (((char *) cfb8Pixels) + (c & 0x3c))));
-#define FirstStep c = BitLeft (c, 2);
-#endif /* PGSZ */
-#endif /* BITMAP_BIT_ORDER */
-
-
-void
-CFBTEGBLT8 (pDrawable, pGC, xInit, yInit, nglyph, ppci, pglyphBase)
- DrawablePtr pDrawable;
- GC *pGC;
- int xInit, yInit;
- unsigned int nglyph;
- CharInfoPtr *ppci; /* array of character info */
- pointer pglyphBase; /* start of array of glyphs */
-{
- register CfbBits c;
- register CfbBits *dst;
- register CfbBits leftMask, rightMask;
- register int hTmp;
- register int xoff1;
- register glyphPointer char1;
- register glyphPointer char2;
-#if NGLYPHS >= 3
- register glyphPointer char3;
-#endif
-#if NGLYPHS >= 4
- register glyphPointer char4;
-#endif
-#if NGLYPHS >= 5
- register glyphPointer char5;
-#endif
-#ifdef ALL_LEFTBITS
- int xoff2, xoff3, xoff4, xoff5;
-#endif
-
- FontPtr pfont = pGC->font;
- CfbBits *dstLine;
- glyphPointer oldRightChar;
- CfbBits *pdstBase;
- glyphPointer leftChar;
- int widthDst;
-#ifndef FAST_CONSTANT_OFFSET_MODE
- int widthLeft;
-#endif
- int widthGlyph;
- int h;
- int ew;
- int x, y;
- BoxRec bbox; /* for clipping */
- int lshift;
- int widthGlyphs;
-#ifdef USE_LEFTBITS
- register CfbBits glyphMask;
- register CfbBits tmpSrc;
- register int glyphBytes;
-#endif
-
- widthGlyph = FONTMAXBOUNDS(pfont,characterWidth);
- h = FONTASCENT(pfont) + FONTDESCENT(pfont);
- if (!h)
- return;
- x = xInit + FONTMAXBOUNDS(pfont,leftSideBearing) + pDrawable->x;
- y = yInit - FONTASCENT(pfont) + pDrawable->y;
- bbox.x1 = x;
- bbox.x2 = x + (widthGlyph * nglyph);
- bbox.y1 = y;
- bbox.y2 = y + h;
-
- switch (RECT_IN_REGION(pGC->pScreen, cfbGetCompositeClip(pGC), &bbox))
- {
- case rgnPART:
- cfbImageGlyphBlt8(pDrawable, pGC, xInit, yInit, nglyph, ppci, pglyphBase);
- case rgnOUT:
- return;
- }
-
- if (!cfb8CheckPixels (pGC->fgPixel, pGC->bgPixel))
- cfb8SetPixels (pGC->fgPixel, pGC->bgPixel);
-
- leftChar = 0;
-
- cfbGetLongWidthAndPointer(pDrawable, widthDst, pdstBase)
-
-#if NGLYPHS == 2
- widthGlyphs = widthGlyph << 1;
-#else
-#if NGLYPHS == 4
- widthGlyphs = widthGlyph << 2;
-#else
- widthGlyphs = widthGlyph * NGLYPHS;
-#endif
-#endif
-
-#ifdef USE_LEFTBITS
- glyphMask = mfbGetendtab(widthGlyph);
- glyphBytes = GLYPHWIDTHBYTESPADDED(*ppci);
-#endif
-
- pdstBase += y * widthDst;
-#ifdef DO_COMMON
- if (widthGlyphs <= 32)
-#endif
- while (nglyph >= NGLYPHS)
- {
- nglyph -= NGLYPHS;
- hTmp = h;
- dstLine = pdstBase + (x >> PWSH);
- xoff1 = x & PIM;
- char1 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++);
- char2 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++);
-#ifdef ALL_LEFTBITS
- xoff2 = xoff1 + widthGlyph;
-#endif
-#if NGLYPHS >= 3
- char3 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++);
-#ifdef ALL_LEFTBITS
- xoff3 = xoff2 + widthGlyph;
-#endif
-#endif
-#if NGLYPHS >= 4
- char4 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++);
-#ifdef ALL_LEFTBITS
- xoff4 = xoff3 + widthGlyph;
-#endif
-#endif
-#if NGLYPHS >= 5
- char5 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++);
-#ifdef ALL_LEFTBITS
- xoff5 = xoff4 + widthGlyph;
-#endif
-#endif
- oldRightChar = LastChar;
- dst = dstLine;
- if (xoff1)
- {
- ew = ((widthGlyphs - (PGSZB - xoff1)) >> PWSH) + 1;
-#ifndef FAST_CONSTANT_OFFSET_MODE
- widthLeft = widthDst - ew;
-#endif
- if (!leftChar)
- {
- leftMask = cfbendtab[xoff1];
- rightMask = cfbstarttab[xoff1];
-
-#define StoreBits0 StorePixels (0, (dst[0] & leftMask) | \
- (GetPixelGroup(c) & rightMask));
-#define GetBits GetBitsNS
-
- SwitchEm
-
-#undef GetBits
-#undef StoreBits0
-
- }
- else
- {
- lshift = widthGlyph - xoff1;
-
-#define StoreBits0 StorePixels (0,GetPixelGroup(c));
-#define GetBits GetBitsNL
-
- SwitchEm
-
-#undef GetBits
-#undef StoreBits0
-
- }
- }
- else
- {
-#if NGLYPHS == 4 && PGSZ == 32
- ew = widthGlyph; /* widthGlyphs >> 2 */
-#else
- ew = widthGlyphs >> PWSH;
-#endif
-#ifndef FAST_CONSTANT_OFFSET_MODE
- widthLeft = widthDst - ew;
-#endif
-
-#define StoreBits0 StorePixels (0,GetPixelGroup(c));
-#define GetBits GetBitsNU
-
- SwitchEm
-
-#undef GetBits
-#undef StoreBits0
-
- }
- x += widthGlyphs;
- leftChar = oldRightChar;
- }
- while (nglyph--)
- {
- xoff1 = x & PIM;
- char1 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++);
- hTmp = h;
- dstLine = pdstBase + (x >> PWSH);
- oldRightChar = char1;
- dst = dstLine;
- if (xoff1)
- {
- ew = ((widthGlyph - (PGSZB - xoff1)) >> PWSH) + 1;
-#ifndef FAST_CONSTANT_OFFSET_MODE
- widthLeft = widthDst - ew;
-#endif
- if (!leftChar)
- {
- leftMask = cfbendtab[xoff1];
- rightMask = cfbstarttab[xoff1];
-
-#define StoreBits0 StorePixels (0, (dst[0] & leftMask) | \
- (GetPixelGroup(c) & rightMask));
-#define GetBits WGetBits1S
-
- SwitchEm
-#undef GetBits
-#undef StoreBits0
-
- }
- else
- {
- lshift = widthGlyph - xoff1;
-
-#define StoreBits0 StorePixels (0,GetPixelGroup(c));
-#define GetBits WGetBits1L
-
- SwitchEm
-#undef GetBits
-#undef StoreBits0
-
- }
- }
- else
- {
- ew = widthGlyph >> PWSH;
-
-#ifndef FAST_CONSTANT_OFFSET_MODE
- widthLeft = widthDst - ew;
-#endif
-
-#define StoreBits0 StorePixels (0,GetPixelGroup(c));
-#define GetBits WGetBits1U
-
- SwitchEm
-
-#undef GetBits
-#undef StoreBits0
-
- }
- x += widthGlyph;
- leftChar = oldRightChar;
- }
- /*
- * draw the tail of the last character
- */
- xoff1 = x & PIM;
- if (xoff1)
- {
- rightMask = cfbstarttab[xoff1];
- leftMask = cfbendtab[xoff1];
- lshift = widthGlyph - xoff1;
- dst = pdstBase + (x >> PWSH);
- hTmp = h;
- while (hTmp--)
- {
- GetBitsL;
- *dst = (*dst & rightMask) | (GetPixelGroup(c) & leftMask);
- dst += widthDst;
- }
- }
-}
-#endif /* PSZ == 8 */
diff --git a/cfb/cfbtegblt.c b/cfb/cfbtegblt.c
deleted file mode 100644
index f04ee3faf..000000000
--- a/cfb/cfbtegblt.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <X11/Xproto.h>
-#include "cfb.h"
-#include <X11/fonts/fontstruct.h>
-#include "dixfontstr.h"
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "cfbmskbits.h"
-#include "mi.h"
-#define MFB_CONSTS_ONLY
-#include "maskbits.h"
-
-/*
- this works for fonts with glyphs <= 32 bits wide, on an
- arbitrarily deep display. Use cfbTEGlyphBlt8 for 8 bit displays.
-
- This should be called only with a terminal-emulator font;
-this means that the FIXED_METRICS flag is set, and that
-glyphbounds == charbounds.
-
- in theory, this goes faster; even if it doesn't, it reduces the
-flicker caused by writing a string over itself with image text (since
-the background gets repainted per character instead of per string.)
-this seems to be important for some converted X10 applications.
-
- Image text looks at the bits in the glyph and the fg and bg in the
-GC. it paints a rectangle, as defined in the protocol dcoument,
-and the paints the characters.
-
-*/
-
-void
-cfbTEGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase)
- DrawablePtr pDrawable;
- GC *pGC;
- int x, y;
- unsigned int nglyph;
- CharInfoPtr *ppci; /* array of character info */
- pointer pglyphBase; /* start of array of glyphs */
-{
- FontPtr pfont = pGC->font;
- int widthDst;
- CfbBits *pdstBase; /* pointer to longword with top row
- of current glyph */
-
- int w; /* width of glyph and char */
- int h; /* height of glyph and char */
- register int xpos=x; /* current x%32 */
- int ypos=y; /* current y%32 */
- register unsigned char *pglyph;
- int widthGlyph;
-
- register CfbBits *pdst;/* pointer to current longword in dst */
- int hTmp; /* counter for height */
- BoxRec bbox; /* for clipping */
-
- register int wtmp,xtemp,width;
- CfbBits bgfill,fgfill,*ptemp,tmpDst1,tmpDst2,*pdtmp;
-#if PSZ != 24
- int tmpx;
-#endif
-
- xpos += pDrawable->x;
- ypos += pDrawable->y;
-
- cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase)
-
- wtmp = FONTMAXBOUNDS(pfont,characterWidth);
- h = FONTASCENT(pfont) + FONTDESCENT(pfont);
- widthGlyph = GLYPHWIDTHBYTESPADDED(*ppci);
-
- xpos += FONTMAXBOUNDS(pfont,leftSideBearing);
- ypos -= FONTASCENT(pfont);
-
- bbox.x1 = xpos;
- bbox.x2 = xpos + (wtmp * nglyph);
- bbox.y1 = ypos;
- bbox.y2 = ypos + h;
-
- fgfill = PFILL(pGC->fgPixel);
- bgfill = PFILL(pGC->bgPixel);
-
- switch (RECT_IN_REGION(pGC->pScreen, cfbGetCompositeClip(pGC), &bbox))
- {
- case rgnOUT:
- break;
- case rgnPART:
- /* this is the WRONG thing to do, but it works.
- calling the non-terminal text is easy, but slow, given
- what we know about the font.
-
- the right thing to do is something like:
- for each clip rectangle
- compute at which row the glyph starts to be in it,
- and at which row the glyph ceases to be in it
- compute which is the first glyph inside the left
- edge, and the last one inside the right edge
- draw a fractional first glyph, using only
- the rows we know are in
- draw all the whole glyphs, using the appropriate rows
- draw any pieces of the last glyph, using the right rows
-
- this way, the code would take advantage of knowing that
- all glyphs are the same height and don't overlap.
-
- one day...
- */
- cfbImageGlyphBlt8(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
- break;
- case rgnIN:
-
- pdtmp = pdstBase + (widthDst * ypos);
- while(nglyph--)
- {
-
- pglyph = FONTGLYPHBITS(pglyphBase, *ppci++);
- pdst = pdtmp;
- hTmp = h;
-
- while (hTmp--)
- {
- x = xpos;
- width = wtmp;
- xtemp = 0;
-
- while (width > 0)
- {
-#if PSZ == 24
- w = 1;
- ptemp = (CfbBits *)(pglyph + ((xtemp *3)>> 2));
- getstipplepixels24(ptemp,xtemp,0,&bgfill,&tmpDst1, xtemp);
- getstipplepixels24(ptemp,xtemp,1,&fgfill,&tmpDst2, xtemp);
-#else
- tmpx = x & PIM;
- w = min(width, PPW - tmpx);
- w = min(w, (PGSZ - xtemp));
- ptemp = (CfbBits *)(pglyph + (xtemp >> MFB_PWSH));
- getstipplepixels(ptemp,xtemp,w,0,&bgfill,&tmpDst1);
- getstipplepixels(ptemp,xtemp,w,1,&fgfill,&tmpDst2);
-#endif
-
- {
- CfbBits tmpDst = tmpDst1 | tmpDst2;
-#if PSZ == 24
- CfbBits *pdsttmp = pdst + ((x*3) >> 2);
- putbits24(tmpDst,w,pdsttmp,pGC->planemask,x);
-#else
- CfbBits *pdsttmp = pdst + (x >> PWSH);
- putbits(tmpDst,tmpx,w,pdsttmp,pGC->planemask);
-#endif
- }
- x += w;
- xtemp += w;
- width -= w;
- }
- pglyph += widthGlyph;
- pdst += widthDst;
- }
- xpos += wtmp;
- }
- break;
- }
-}
diff --git a/cfb/cfbtile32.c b/cfb/cfbtile32.c
deleted file mode 100644
index be016a70a..000000000
--- a/cfb/cfbtile32.c
+++ /dev/null
@@ -1,517 +0,0 @@
-/*
- * Fill 32 bit tiled rectangles. Used by PolyFillRect.
- * no depth dependencies.
- */
-
-/*
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-*/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-#include "gcstruct.h"
-#include "window.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
-
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "cfb8bit.h"
-
-#include "mergerop.h"
-
-#include "mi.h"
-#include "mispans.h"
-
-#ifdef sparc
-#define SHARED_IDCACHE
-#endif
-
-#if PSZ == 24
-#define STORE(p) (*(p) = MROP_PREBUILT_SOLID(srcpix,*(p)))
-/*#define STORE24(p,index) {\
- register int idx = ((index) & 3)<< 1; \
- *(p) = (((MROP_PREBUILT_SOLID(srcpix,*(p))<<cfb24Shift[idx])&cfbmask[idx])| \
- (*(p)&cfbrmask[idx])); \
- idx++; \
- (p)++; \
- *(p) = (((MROP_PREBUILT_SOLID(srcpix,*(p))>>cfb24Shift[idx])&cfbmask[idx])| \
- (*(p)&cfbrmask[idx])); \
- (p)--; \
- }*/
-#define STORE24(p,index) MROP_PREBUILT_SOLID24(srcpix, (p), index)
-
-#define STORE_MASK(p,mask) (*(p) = MROP_PREBUILT_MASK(srcpix,*(p),(mask)))
-#define QSTORE(p) ((*(p) = MROP_PREBUILT_SOLID(((srcpix<<24)|srcpix),*(p))), \
- (p)++,(*(p) = MROP_PREBUILT_SOLID(((srcpix<<16)|(srcpix>>8)),*(p))), \
- (p)++,(*(p) = MROP_PREBUILT_SOLID(((srcpix<<8)|(srcpix>>16)),*(p))))
-
-#if (MROP == Mcopy) && defined(FAST_CONSTANT_OFFSET_MODE) && defined(SHARED_IDCACHE)
-# define Expand(left,right) {\
- int part = nlwMiddle & ((PGSZB*2)-1); \
- nlwMiddle *= 3; \
- nlwMiddle >>= PWSH + 3; \
- while (h--) { \
- srcpix = psrc[srcy]; \
- MROP_PREBUILD(srcpix); \
- ++srcy; \
- if (srcy == tileHeight) \
- srcy = 0; \
- left \
- p += part; \
- switch (part) { \
- case 7: \
- STORE24(p - 7, xtmp - 7); \
- case 6: \
- STORE24(p - 6, xtmp - 6); \
- case 5: \
- STORE24(p - 5, xtmp - 5); \
- case 4: \
- STORE24(p - 4, xtmp - 4); \
- case 3: \
- STORE24(p - 3, xtmp - 3); \
- case 2: \
- STORE24(p - 2, xtmp - 2); \
- case 1: \
- STORE24(p - 1, xtmp - 1); \
- } \
- nlw = nlwMiddle; \
- while (nlw) { \
- STORE24 (p + 0, xtmp + 0); \
- STORE24 (p + 1, xtmp + 1); \
- STORE24 (p + 2, xtmp + 2); \
- STORE24 (p + 3, xtmp + 3); \
- STORE24 (p + 4, xtmp + 4); \
- STORE24 (p + 5, xtmp + 5); \
- STORE24 (p + 6, xtmp + 6); \
- STORE24 (p + 7, xtmp + 7); \
- p += 8; \
- xtmp += 8; \
- nlw--; \
- } \
- right \
- p += nlwExtra; \
- } \
-}
-#else
-#define Expand(left,right) {\
- while (h--) { \
- srcpix = psrc[srcy]; \
- MROP_PREBUILD(srcpix); \
- ++srcy; \
- if (srcy == tileHeight) \
- srcy = 0; \
- left \
- while (nlw--) \
- { \
- STORE24(p,xtmp); \
- if(xtmp&3) p++; \
- xtmp++; \
- } \
- right \
- p += nlwExtra; \
- } \
-}
-#endif
-#else /*PSZ != 24*/
-#define STORE(p) (*(p) = MROP_PREBUILT_SOLID(srcpix,*(p)))
-
-#if (MROP == Mcopy) && defined(FAST_CONSTANT_OFFSET_MODE) && defined(SHARED_IDCACHE)
-# define Expand(left,right) {\
- int part = nlwMiddle & ((PGSZB*2)-1); \
- nlwMiddle >>= PWSH + 1; \
- while (h--) { \
- srcpix = psrc[srcy]; \
- MROP_PREBUILD(srcpix); \
- ++srcy; \
- if (srcy == tileHeight) \
- srcy = 0; \
- left \
- p += part; \
- switch (part) { \
- case 7: \
- STORE(p - 7); \
- case 6: \
- STORE(p - 6); \
- case 5: \
- STORE(p - 5); \
- case 4: \
- STORE(p - 4); \
- case 3: \
- STORE(p - 3); \
- case 2: \
- STORE(p - 2); \
- case 1: \
- STORE(p - 1); \
- } \
- nlw = nlwMiddle; \
- while (nlw) { \
- STORE (p + 0); \
- STORE (p + 1); \
- STORE (p + 2); \
- STORE (p + 3); \
- STORE (p + 4); \
- STORE (p + 5); \
- STORE (p + 6); \
- STORE (p + 7); \
- p += 8; \
- nlw--; \
- } \
- right \
- p += nlwExtra; \
- } \
-}
-#else
-#define Expand(left,right) {\
- while (h--) { \
- srcpix = psrc[srcy]; \
- MROP_PREBUILD(srcpix); \
- ++srcy; \
- if (srcy == tileHeight) \
- srcy = 0; \
- left \
- nlw = nlwMiddle; \
- while (nlw--) \
- { \
- STORE(p); \
- p++; \
- } \
- right \
- p += nlwExtra; \
- } \
-}
-#endif
-#endif /*PSZ == 24*/
-
-void
-MROP_NAME(cfbFillRectTile32) (pDrawable, pGC, nBox, pBox)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nBox; /* number of boxes to fill */
- BoxPtr pBox; /* pointer to list of boxes to fill */
-{
- register CfbBits srcpix;
- CfbBits *psrc; /* pointer to bits in tile, if needed */
- int tileHeight; /* height of the tile */
-
- int nlwDst; /* width in longwords of the dest pixmap */
- int w; /* width of current box */
- register int h; /* height of current box */
- register CfbBits startmask;
- register CfbBits endmask; /* masks for reggedy bits at either end of line */
- int nlwMiddle; /* number of longwords between sides of boxes */
- int nlwExtra; /* to get from right of box to left of next span */
- register int nlw = 0; /* loop version of nlwMiddle */
- register CfbBits *p; /* pointer to bits we're writing */
- int y; /* current scan line */
- int srcy; /* current tile position */
-
- CfbBits *pbits;/* pointer to start of pixmap */
- PixmapPtr tile; /* rotated, expanded tile */
-#if MROP == 0 && PSZ == 24
- DeclareMergeRop()
-#else
- MROP_DECLARE_REG()
-#endif
- MROP_PREBUILT_DECLARE()
-#if PSZ == 24
- CfbBits xtmp;
-#endif
-
- tile = pGC->pRotatedPixmap;
- tileHeight = tile->drawable.height;
- psrc = (CfbBits *)tile->devPrivate.ptr;
-
-#if MROP == 0 && PSZ == 24
- InitializeMergeRop(pGC->alu, pGC->planemask);
-#else
- MROP_INITIALIZE(pGC->alu, pGC->planemask);
-#endif
-
- cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits)
-
- while (nBox--)
- {
- w = pBox->x2 - pBox->x1;
- h = pBox->y2 - pBox->y1;
- y = pBox->y1;
-#if PSZ == 24
- xtmp = pBox->x1;
- p = pbits + (y * nlwDst) + ((pBox->x1*3) >> 2);
-/* p = pbits + (y * nlwDst) + ((pBox->x1>> 2)*3);*/
-#else
- p = pbits + (y * nlwDst) + (pBox->x1 >> PWSH);
-#endif
- srcy = y % tileHeight;
-
-#if PSZ == 24
- if (w == 1 && ((pBox->x1 & 3) == 0 || (pBox->x1 & 3) == 3))
-#else
- if ( ((pBox->x1 & PIM) + w) <= PPW)
-#endif
- {
- maskpartialbits(pBox->x1, w, startmask);
- nlwExtra = nlwDst;
- while (h--)
- {
- srcpix = psrc[srcy];
- MROP_PREBUILD(srcpix);
- ++srcy;
- if (srcy == tileHeight)
- srcy = 0;
- *p = MROP_PREBUILT_MASK (srcpix, *p, startmask);
- p += nlwExtra;
- }
- }
- else
- {
- maskbits(pBox->x1, w, startmask, endmask, nlwMiddle);
- nlwExtra = nlwDst - nlwMiddle;
-
- if (startmask)
- {
- nlwExtra -= 1;
- if (endmask)
- {
- Expand(*p = MROP_PREBUILT_MASK(srcpix, *p, startmask); p++;,
- *p = MROP_PREBUILT_MASK(srcpix, *p, endmask);)
- }
- else
- {
- Expand(*p = MROP_PREBUILT_MASK(srcpix, *p, startmask); p++;,
- ;)
- }
- }
- else
- {
- if (endmask)
- {
- Expand(;,
- *p = MROP_PREBUILT_MASK(srcpix, *p, endmask);)
- }
- else
- {
- Expand(;,
- ;)
- }
- }
- }
- pBox++;
- }
-}
-
-void
-MROP_NAME(cfbTile32FS)(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)
- DrawablePtr pDrawable;
- GCPtr pGC;
- int nInit; /* number of spans to fill */
- DDXPointPtr pptInit; /* pointer to list of start points */
- int *pwidthInit; /* pointer to list of n widths */
- int fSorted;
-{
- /* next three parameters are post-clip */
- int n; /* number of spans to fill */
- DDXPointPtr ppt; /* pointer to list of start points */
- int *pwidth;/* pointer to list of n widths */
- CfbBits *pbits; /* pointer to start of bitmap */
- int nlwDst; /* width in longwords of bitmap */
- register CfbBits *p; /* pointer to current longword in bitmap */
- register int w; /* current span width */
- register int nlw;
- register int x;
- register CfbBits startmask;
- register CfbBits endmask;
- register CfbBits srcpix;
- int y;
- int *pwidthFree;/* copies of the pointers to free */
- DDXPointPtr pptFree;
- PixmapPtr tile;
- CfbBits *psrc; /* pointer to bits in tile */
- int tileHeight;/* height of the tile */
-#if MROP == 0 && PSZ == 24
- DeclareMergeRop()
-#else
- MROP_DECLARE_REG()
-#endif
- MROP_PREBUILT_DECLARE()
-#if PSZ == 24
- CfbBits xtmp;
-#endif
-
- n = nInit * miFindMaxBand( cfbGetCompositeClip(pGC) );
- pwidthFree = (int *)xalloc(n * sizeof(int));
- pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec));
- if(!pptFree || !pwidthFree)
- {
- if (pptFree) xfree(pptFree);
- if (pwidthFree) xfree(pwidthFree);
- return;
- }
- pwidth = pwidthFree;
- ppt = pptFree;
- n = miClipSpans( cfbGetCompositeClip(pGC),
- pptInit, pwidthInit, nInit,
- ppt, pwidth, fSorted);
-
- tile = pGC->pRotatedPixmap;
- tileHeight = tile->drawable.height;
- psrc = (CfbBits *)tile->devPrivate.ptr;
-
-#if MROP == 0 && PSZ == 24
- InitializeMergeRop(pGC->alu, pGC->planemask);
-#else
- MROP_INITIALIZE(pGC->alu, pGC->planemask);
-#endif
-
- cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits)
-
-#if MROP == Mcopy
- if (!(tileHeight & (tileHeight-1)))
- {
- tileHeight--;
- while (n--)
- {
- x = ppt->x;
- y = ppt->y;
- ++ppt;
- w = *pwidth++;
-#if PSZ == 24
-/* p = pbits + (y * nlwDst) + ((x*3) >> 2);*/
- xtmp = x;
- p = pbits + (y * nlwDst) + ((x >> 2)*3);
-#else
- p = pbits + (y * nlwDst) + (x >> PWSH);
-#endif
- srcpix = psrc[y & tileHeight];
- MROP_PREBUILD(srcpix);
-
-#if PSZ == 24
- if ((x & 3) + w < 5)
-#else
- if ((x & PIM) + w < PPW)
-#endif
- {
- maskpartialbits(x, w, startmask);
- *p = MROP_PREBUILT_MASK (srcpix, *p, startmask);
- }
- else
- {
- maskbits(x, w, startmask, endmask, nlw);
- if (startmask)
- {
- *p = MROP_PREBUILT_MASK(srcpix, *p, startmask);
-#if PSZ == 24
- if(xtmp&3) p++;
- xtmp++;
-#else
- p++;
-#endif
- }
- while (nlw--)
- {
-#if PSZ == 24
- STORE24(p,xtmp);
- if(xtmp&3) p++;
- ++xtmp;
-#else
- STORE(p);
- ++p;
-#endif
- }
- if (endmask)
- {
- *p = MROP_PREBUILT_MASK(srcpix, *p, endmask);
- }
- }
- }
- }
- else
-#endif
- {
- while (n--)
- {
- x = ppt->x;
- y = ppt->y;
- ++ppt;
- w = *pwidth++;
-#if PSZ == 24
-/* p = pbits + (y * nlwDst) + ((x *3)>> 2);*/
- p = pbits + (y * nlwDst) + ((x >> 2)*3);
- xtmp = x;
-#else
- p = pbits + (y * nlwDst) + (x >> PWSH);
-#endif
- srcpix = psrc[y % tileHeight];
- MROP_PREBUILD(srcpix);
-
-#if PSZ == 24
- if ((x & 3) + w < 5)
-#else
- if ((x & PIM) + w < PPW)
-#endif
- {
- maskpartialbits(x, w, startmask);
- *p = MROP_PREBUILT_MASK (srcpix, *p, startmask);
- }
- else
- {
- maskbits(x, w, startmask, endmask, nlw);
- if (startmask)
- {
- *p = MROP_PREBUILT_MASK(srcpix, *p, startmask);
-#if PSZ == 24
- if(xtmp&3)p++;
- xtmp++;
-#else
- p++;
-#endif
- }
- while (nlw--)
- {
-#if PSZ == 24
- STORE24(p,xtmp);
- if(xtmp&3)p++;
- xtmp++;
-#else
- STORE(p);
- ++p;
-#endif
- }
- if (endmask)
- {
- *p = MROP_PREBUILT_MASK(srcpix, *p, endmask);
- }
- }
- }
- }
- xfree(pptFree);
- xfree(pwidthFree);
-}
diff --git a/cfb/cfbtileodd.c b/cfb/cfbtileodd.c
deleted file mode 100644
index 86a3fa5b5..000000000
--- a/cfb/cfbtileodd.c
+++ /dev/null
@@ -1,1245 +0,0 @@
-/*
- * Fill odd tiled rectangles and spans.
- * no depth dependencies.
- */
-
-/*
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-*/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-#include "gcstruct.h"
-#include "window.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
-
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "cfb8bit.h"
-
-#include "mergerop.h"
-
-#if PSZ == 24
-#define LEFTSHIFT_AMT (3)
-#else /* PSZ != 24 */
-#define LEFTSHIFT_AMT (5 - PWSH)
-#endif /* PSZ == 24*/
-
-#define LastTileBits {\
- tmp = bits; \
- if (tileEndPart) \
- bits = (*pSrc & tileEndMask) | BitRight (*pSrcLine, tileEndLeftShift); \
- else \
- bits = *pSrc; \
-}
-
-#if PSZ == 24
-#define ResetTileBits {\
- pSrc = pSrcLine; \
- nlwSrc = widthSrc;\
- if (tileEndPart) { \
- if (4 - xoff + tileEndPart <= 4) {\
- bits = *pSrc++; \
- nlwSrc--; \
- } else \
- bits = BitLeft(tmp, tileEndLeftShift) | \
- BitRight(bits, tileEndRightShift); \
- xoff = (xoff + xoffStep) & 3; \
- leftShift = xoff << LEFTSHIFT_AMT; \
- rightShift = PGSZ - leftShift; \
- }\
-}
-#else
-#define ResetTileBits {\
- pSrc = pSrcLine; \
- nlwSrc = widthSrc;\
- if (tileEndPart) { \
- if (PPW - xoff + tileEndPart <= PPW) {\
- bits = *pSrc++; \
- nlwSrc--; \
- } else \
- bits = BitLeft(tmp, tileEndLeftShift) | \
- BitRight(bits, tileEndRightShift); \
- xoff = (xoff + xoffStep) & PIM; \
- leftShift = xoff << LEFTSHIFT_AMT; \
- rightShift = PGSZ - leftShift; \
- }\
-}
-#endif
-
-#define NextTileBits {\
- if (nlwSrc == 1) {\
- LastTileBits\
- } else { \
- if (nlwSrc == 0) {\
- ResetTileBits\
- } \
- if (nlwSrc == 1) {\
- LastTileBits\
- } else {\
- tmp = bits; \
- bits = *pSrc++; \
- }\
- }\
- nlwSrc--; \
-}
-
-void
-MROP_NAME(cfbFillBoxTileOdd) (pDrawable, nBox, pBox, tile, xrot, yrot, alu, planemask)
- DrawablePtr pDrawable;
- int nBox; /* number of boxes to fill */
- register BoxPtr pBox; /* pointer to list of boxes to fill */
- PixmapPtr tile; /* tile */
- int xrot, yrot;
- int alu;
- unsigned long planemask;
-{
- int tileWidth; /* width of tile in pixels */
- int tileHeight; /* height of the tile */
- int widthSrc;
-
- int widthDst; /* width in longwords of the dest pixmap */
- int w; /* width of current box */
- int h; /* height of current box */
- CfbBits startmask;
- CfbBits endmask;/* masks for reggedy bits at either end of line */
- int nlwMiddle; /* number of longwords between sides of boxes */
- int nlwSrc; /* number of whole longwords in source */
-
- register int nlw; /* loop version of nlwMiddle */
- int srcy; /* current tile y position */
- int srcx; /* current tile x position */
- int xoffDst, xoffSrc;
- int leftShift, rightShift;
-
-#if MROP == 0 && PSZ == 24
- DeclareMergeRop24()
-#else
- MROP_DECLARE_REG()
-#endif
-
- CfbBits *pdstBase; /* pointer to start of dest */
- CfbBits *pDstLine; /* poitner to start of dest box */
- CfbBits *pSrcBase; /* pointer to start of source */
- CfbBits *pSrcLine; /* pointer to start of source line */
- register CfbBits *pDst;
- register CfbBits *pSrc;
- register CfbBits bits, tmp = 0;
- int xoffStart, xoff;
- int leftShiftStart, rightShiftStart, nlwSrcStart;
- CfbBits tileEndMask;
- int tileEndLeftShift, tileEndRightShift;
- int xoffStep;
- int tileEndPart;
- int needFirst;
- CfbBits narrow[2];
- CfbBits narrowMask = 0;
- int narrowShift = 0;
- Bool narrowTile;
-
-#if MROP == 0 && PSZ == 24
- InitializeMergeRop24 (alu, planemask)
-#else
- MROP_INITIALIZE (alu, planemask)
-#endif
-
- tileHeight = tile->drawable.height;
- tileWidth = tile->drawable.width;
- widthSrc = tile->devKind / PGSZB;
- narrowTile = FALSE;
- if (widthSrc == 1)
- {
- narrowShift = tileWidth;
- narrowMask = cfbendpartial [tileWidth];
- tileWidth *= 2;
- widthSrc = 2;
- narrowTile = TRUE;
- }
- pSrcBase = (CfbBits *)tile->devPrivate.ptr;
-
- cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase)
-
-#if PSZ == 24
- tileEndPart = (4 - tileWidth) & 3;
- tileEndMask = cfbendpartial[tileWidth & 3];
-#else
- tileEndPart = tileWidth & PIM;
- tileEndMask = cfbendpartial[tileEndPart];
-#endif /* PSZ == 24 */
- tileEndLeftShift = (tileEndPart) << LEFTSHIFT_AMT;
- tileEndRightShift = PGSZ - tileEndLeftShift;
-#if PSZ == 24
- xoffStep = 4 - tileEndPart;
-#else
- xoffStep = PPW - tileEndPart;
-#endif /* PSZ == 24 */
- /*
- * current assumptions: tile > 32 bits wide.
- */
- while (nBox--)
- {
- w = pBox->x2 - pBox->x1;
- h = pBox->y2 - pBox->y1;
- modulus (pBox->x1 - xrot, tileWidth, srcx);
- modulus (pBox->y1 - yrot, tileHeight, srcy);
-#if PSZ == 24
- xoffDst = (4 - pBox->x1) & 3;
- if (w == 1 && (xoffDst == 0 || xoffDst == 1))
-#else
- xoffDst = pBox->x1 & PIM;
- if (xoffDst + w < PPW)
-#endif
- {
- maskpartialbits(pBox->x1, w, startmask);
- endmask = 0;
- nlwMiddle = 0;
- }
- else
- {
- maskbits (pBox->x1, w, startmask, endmask, nlwMiddle)
- }
-#if PSZ == 24
- pDstLine = pdstBase + (pBox->y1 * widthDst) + ((pBox->x1*3) >> 2);
-#else
- pDstLine = pdstBase + (pBox->y1 * widthDst) + (pBox->x1 >> PWSH);
-#endif
- pSrcLine = pSrcBase + (srcy * widthSrc);
-#if PSZ == 24
- xoffSrc = (4 - srcx) & 3;
-#else
- xoffSrc = srcx & PIM;
-#endif
- if (xoffSrc >= xoffDst)
- {
- xoffStart = xoffSrc - xoffDst;
- needFirst = 1;
- }
- else
- {
-#if PSZ == 24
- xoffStart = 4 - (xoffDst - xoffSrc);
-#else
- xoffStart = PPW - (xoffDst - xoffSrc);
-#endif
- needFirst = 0;
- }
- leftShiftStart = (xoffStart) << LEFTSHIFT_AMT;
- rightShiftStart = PGSZ - leftShiftStart;
-#if PSZ == 24
- nlwSrcStart = widthSrc - ((srcx*3) >> 2);
-#else
- nlwSrcStart = widthSrc - (srcx >> PWSH);
-#endif
- while (h--)
- {
- /* XXX only works when narrowShift >= PPW/2 */
- if (narrowTile)
- {
- tmp = pSrcBase[srcy] & narrowMask; /* source width == 1 */
- narrow[0] = tmp | SCRRIGHT (tmp, narrowShift);
-#if PSZ == 24
- narrow[1] = BitLeft (tmp, 8) |
- BitRight(tmp, 16);
-#else
- narrow[1] = SCRLEFT (tmp, PPW - narrowShift) |
- SCRRIGHT(tmp, 2 * narrowShift - PPW);
-#endif
- pSrcLine = narrow;
- }
- xoff = xoffStart;
- leftShift = leftShiftStart;
- rightShift = rightShiftStart;
- nlwSrc = nlwSrcStart;
-#if PSZ == 24
- pSrc = pSrcLine + ((srcx * 3) >> 2);
-#else
- pSrc = pSrcLine + (srcx >> PWSH);
-#endif
- pDst = pDstLine;
- bits = 0;
- if (needFirst)
- {
- NextTileBits
- }
- if (startmask)
- {
- NextTileBits
- tmp = BitLeft(tmp, leftShift);
- if (rightShift != PGSZ)
- tmp |= BitRight(bits,rightShift);
- *pDst = MROP_MASK (tmp, *pDst, startmask);
- ++pDst;
- }
- nlw = nlwMiddle;
- while (nlw)
- {
-#if MROP == Mcopy
- if (nlwSrc > 1)
- {
- int nlwPart = nlw;
-
- if (nlwPart >= nlwSrc)
- nlwPart = nlwSrc - 1;
- nlw -= nlwPart;
- nlwSrc -= nlwPart;
- if (rightShift != PGSZ)
- {
- while (nlwPart--)
- {
- tmp = bits;
- bits = *pSrc++;
- *pDst = MROP_SOLID(BitLeft(tmp, leftShift) |
- BitRight (bits, rightShift),
- *pDst);
- ++pDst;
- }
- }
- else
- {
- if (nlwPart)
- {
- *pDst = MROP_SOLID (bits, *pDst);
- ++pDst;
- nlwPart--;
- while (nlwPart--)
- {
- *pDst = MROP_SOLID(*pSrc, *pDst);
- ++pDst; ++pSrc;
- }
- bits = *pSrc++;
- }
- }
- }
- else
-#endif
- {
- NextTileBits
- if (rightShift != PGSZ)
- {
- *pDst = MROP_SOLID(BitLeft(tmp, leftShift) |
- BitRight(bits, rightShift),
- *pDst);
- }
- else
- {
- *pDst = MROP_SOLID (tmp, *pDst);
- }
- ++pDst;
- nlw--;
- }
- }
- if (endmask)
- {
- NextTileBits
- if (rightShift == PGSZ)
- bits = 0;
- *pDst = MROP_MASK (BitLeft(tmp, leftShift) |
- BitRight(bits,rightShift),
- *pDst, endmask);
- }
- pDstLine += widthDst;
- pSrcLine += widthSrc;
- if (++srcy == tileHeight)
- {
- srcy = 0;
- pSrcLine = pSrcBase;
- }
- }
- pBox++;
- }
-}
-
-void
-MROP_NAME(cfbFillSpanTileOdd) (pDrawable, n, ppt, pwidth, tile, xrot, yrot, alu, planemask)
- DrawablePtr pDrawable;
- int n;
- DDXPointPtr ppt;
- int *pwidth;
- PixmapPtr tile;
- int xrot, yrot;
- int alu;
- unsigned long planemask;
-{
- int tileWidth; /* width of tile in pixels */
- int tileHeight; /* height of the tile */
- int widthSrc;
-
- int widthDst; /* width in longwords of the dest pixmap */
- int w; /* width of current span */
- CfbBits startmask;
- CfbBits endmask; /* masks for reggedy bits at either end of line */
- int nlwSrc; /* number of whole longwords in source */
-
- register int nlw; /* loop version of nlwMiddle */
- int srcy; /* current tile y position */
- int srcx; /* current tile x position */
- int xoffDst, xoffSrc;
- int leftShift, rightShift;
-
-#if MROP == 0 && PSZ == 24
- DeclareMergeRop24()
-#else
- MROP_DECLARE_REG()
-#endif
-
- CfbBits *pdstBase; /* pointer to start of dest */
- CfbBits *pDstLine; /* poitner to start of dest box */
- CfbBits *pSrcBase; /* pointer to start of source */
- CfbBits *pSrcLine; /* pointer to start of source line */
- register CfbBits *pDst;
- register CfbBits *pSrc;
- register CfbBits bits, tmp = 0;
- int xoffStart, xoff;
- int leftShiftStart, rightShiftStart, nlwSrcStart;
- CfbBits tileEndMask;
- int tileEndLeftShift, tileEndRightShift;
- int xoffStep;
- int tileEndPart;
- int needFirst;
- CfbBits narrow[2];
- CfbBits narrowMask = 0;
- int narrowShift = 0;
- Bool narrowTile;
-
-#if MROP == 0 && PSZ == 24
- InitializeMergeRop24 (alu, planemask)
-#else
- MROP_INITIALIZE (alu, planemask)
-#endif
-
- tileHeight = tile->drawable.height;
- tileWidth = tile->drawable.width;
- widthSrc = tile->devKind / PGSZB;
- narrowTile = FALSE;
- if (widthSrc == 1)
- {
- narrowShift = tileWidth;
- narrowMask = cfbendpartial [tileWidth];
- tileWidth *= 2;
- widthSrc = 2;
- narrowTile = TRUE;
- }
- pSrcBase = (CfbBits *)tile->devPrivate.ptr;
-
- cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase)
-
-#if PSZ == 24
- tileEndPart = (4 - tileWidth) & 3;
- tileEndMask = cfbendpartial[tileWidth & 3];
-#else
- tileEndPart = tileWidth & PIM;
- tileEndMask = cfbendpartial[tileEndPart];
-#endif
- tileEndLeftShift = (tileEndPart) << LEFTSHIFT_AMT;
- tileEndRightShift = PGSZ - tileEndLeftShift;
-#if PSZ == 24
- xoffStep = 4 - tileEndPart;
-#else
- xoffStep = PPW - tileEndPart;
-#endif
- while (n--)
- {
- w = *pwidth++;
- modulus (ppt->x - xrot, tileWidth, srcx);
- modulus (ppt->y - yrot, tileHeight, srcy);
-#if PSZ == 24
- xoffDst = (4 - ppt->x) & 3;
- if (w == 1 && (xoffDst == 0 || xoffDst == 1))
-#else
- xoffDst = ppt->x & PIM;
- if (xoffDst + w < PPW)
-#endif
- {
- maskpartialbits(ppt->x, w, startmask);
- endmask = 0;
- nlw = 0;
- }
- else
- {
- maskbits (ppt->x, w, startmask, endmask, nlw)
- }
-#if PSZ == 24
- pDstLine = pdstBase + (ppt->y * widthDst) + ((ppt->x *3)>> 2);
-#else
- pDstLine = pdstBase + (ppt->y * widthDst) + (ppt->x >> PWSH);
-#endif
- pSrcLine = pSrcBase + (srcy * widthSrc);
-#if PSZ == 24
- xoffSrc = (4 - srcx) & 3;
-#else
- xoffSrc = srcx & PIM;
-#endif
- if (xoffSrc >= xoffDst)
- {
- xoffStart = xoffSrc - xoffDst;
- needFirst = 1;
- }
- else
- {
-#if PSZ == 24
- xoffStart = 4 - (xoffDst - xoffSrc);
-#else
- xoffStart = PPW - (xoffDst - xoffSrc);
-#endif
- needFirst = 0;
- }
- leftShiftStart = (xoffStart) << LEFTSHIFT_AMT;
- rightShiftStart = PGSZ - leftShiftStart;
-#if PSZ == 24
- nlwSrcStart = widthSrc - ((srcx*3) >> 2);
-#else
- nlwSrcStart = widthSrc - (srcx >> PWSH);
-#endif
- /* XXX only works when narrowShift >= PPW/2 */
- if (narrowTile)
- {
- tmp = pSrcBase[srcy] & narrowMask; /* source width == 1 */
- narrow[0] = tmp | SCRRIGHT (tmp, narrowShift);
-#if PSZ == 24
- narrow[1] = BitLeft (tmp, 8) |
- BitRight(tmp, 16);
-#else
- narrow[1] = SCRLEFT (tmp, PPW - narrowShift) |
- SCRRIGHT(tmp, 2 * narrowShift - PPW);
-#endif
- pSrcLine = narrow;
- }
- xoff = xoffStart;
- leftShift = leftShiftStart;
- rightShift = rightShiftStart;
- nlwSrc = nlwSrcStart;
-#if PSZ == 24
- pSrc = pSrcLine + ((srcx * 3) >> 2);
-#else
- pSrc = pSrcLine + (srcx >> PWSH);
-#endif
- pDst = pDstLine;
- bits = 0;
- if (needFirst)
- {
- NextTileBits
- }
- if (startmask)
- {
- NextTileBits
- tmp = BitLeft(tmp, leftShift);
- if (rightShift != PGSZ)
- tmp |= BitRight(bits,rightShift);
- *pDst = MROP_MASK (tmp, *pDst, startmask);
- ++pDst;
- }
- while (nlw)
- {
-#if MROP == Mcopy
- if (nlwSrc > 1)
- {
- int nlwPart = nlw;
-
- if (nlwPart >= nlwSrc)
- nlwPart = nlwSrc - 1;
- nlw -= nlwPart;
- nlwSrc -= nlwPart;
- if (rightShift != PGSZ)
- {
- while (nlwPart--)
- {
- tmp = bits;
- bits = *pSrc++;
- *pDst = MROP_SOLID(BitLeft(tmp, leftShift) |
- BitRight (bits, rightShift),
- *pDst);
- ++pDst;
- }
- }
- else
- {
- if (nlwPart)
- {
- *pDst = MROP_SOLID (bits, *pDst);
- ++pDst;
- nlwPart--;
- while (nlwPart--)
- {
- *pDst = MROP_SOLID(*pSrc, *pDst);
- ++pDst; ++pSrc;
- }
- bits = *pSrc++;
- }
- }
- }
- else
-#endif
- {
- NextTileBits
- if (rightShift != PGSZ)
- {
- *pDst = MROP_SOLID(BitLeft(tmp, leftShift) |
- BitRight(bits, rightShift),
- *pDst);
- ++pDst;
- }
- else
- {
- *pDst = MROP_SOLID (tmp, *pDst);
- ++pDst;
- }
- nlw--;
- }
- }
- if (endmask)
- {
- NextTileBits
- if (rightShift == PGSZ)
- bits = 0;
- *pDst = MROP_MASK (BitLeft(tmp, leftShift) |
- BitRight(bits,rightShift),
- *pDst, endmask);
- }
- ppt++;
- }
-}
-
-# include "fastblt.h"
-
-#define IncSrcPtr psrc++; if (!--srcRemaining) { srcRemaining = widthSrc; psrc = psrcStart; }
-
-void
-MROP_NAME(cfbFillBoxTile32s) (pDrawable, nBox, pBox, tile, xrot, yrot, alu, planemask)
- DrawablePtr pDrawable;
- int nBox; /* number of boxes to fill */
- register BoxPtr pBox; /* pointer to list of boxes to fill */
- PixmapPtr tile; /* tile */
- int xrot, yrot;
- int alu;
- unsigned long planemask;
-{
- int tileWidth; /* width of tile */
- int tileHeight; /* height of the tile */
- int widthSrc; /* width in longwords of the source tile */
-
- int widthDst; /* width in longwords of the dest pixmap */
- int w; /* width of current box */
- int h; /* height of current box */
- CfbBits startmask;
- CfbBits endmask;/* masks for reggedy bits at either end of line */
- int nlMiddle; /* number of longwords between sides of boxes */
-
- register int nl; /* loop version of nlMiddle */
- int srcy; /* current tile y position */
- int srcx; /* current tile x position */
- int srcRemaining; /* number of longwords remaining in source */
- int xoffDst, xoffSrc;
- int srcStart; /* number of longwords source offset at left of box */
- int leftShift, rightShift;
-
-#if MROP == 0 && PSZ == 24
- DeclareMergeRop24()
-#else
- MROP_DECLARE_REG()
-#endif
-
- CfbBits *pdstBase; /* pointer to start of dest */
- CfbBits *pdstLine; /* poitner to start of dest box */
- CfbBits *psrcBase; /* pointer to start of source */
- CfbBits *psrcLine; /* pointer to fetch point of source */
- CfbBits *psrcStart; /* pointer to start of source line */
- register CfbBits *pdst;
- register CfbBits *psrc;
- register CfbBits bits, bits1;
- register int nlTemp;
-
-#if MROP == 0 && PSZ == 24
- InitializeMergeRop24 (alu, planemask)
-#else
- MROP_INITIALIZE (alu, planemask)
-#endif
-
- psrcBase = (CfbBits *)tile->devPrivate.ptr;
- tileHeight = tile->drawable.height;
- tileWidth = tile->drawable.width;
-#if PSZ == 24
- widthSrc = tile->devKind / PGSZB;
-#else
- widthSrc = tileWidth >> PWSH;
-#endif
-
- cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase)
-
- while (nBox--)
- {
- w = pBox->x2 - pBox->x1;
- h = pBox->y2 - pBox->y1;
-
- /* set up source */
- modulus (pBox->x1 - xrot, tileWidth, srcx);
- modulus (pBox->y1 - yrot, tileHeight, srcy);
-#if PSZ == 24
- xoffSrc = (4 - srcx) & 3;
- srcStart = (srcx * 3) >> 2;
-#else
- xoffSrc = srcx & PIM;
- srcStart = (srcx >> PWSH);
-#endif
- psrcStart = psrcBase + (srcy * widthSrc);
- psrcLine = psrcStart + srcStart;
-
- /* set up dest */
-#if PSZ == 24
- xoffDst = (4 - pBox->x1) & 3;
- pdstLine = pdstBase + (pBox->y1 * widthDst) + ((pBox->x1*3) >> 2);
-#else
- xoffDst = pBox->x1 & PIM;
- pdstLine = pdstBase + (pBox->y1 * widthDst) + (pBox->x1 >> PWSH);
-#endif
- /* set up masks */
-#if PSZ == 24
- if (w == 1 && (xoffDst == 0 || xoffDst == 1))
-#else
- if (xoffDst + w < PPW)
-#endif
- {
- maskpartialbits(pBox->x1, w, startmask);
- endmask = 0;
- nlMiddle = 0;
- }
- else
- {
- maskbits (pBox->x1, w, startmask, endmask, nlMiddle)
- }
- if (xoffSrc == xoffDst)
- {
- while (h--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- srcRemaining = widthSrc - srcStart;
- if (startmask)
- {
- *pdst = MROP_MASK (*psrc, *pdst, startmask);
- pdst++;
- IncSrcPtr
- }
- nlTemp = nlMiddle;
- while (nlTemp)
- {
- nl = nlTemp;
- if (nl > srcRemaining)
- nl = srcRemaining;
-
- nlTemp -= nl;
- srcRemaining -= nl;
-
-#if MROP == Mcopy
-#ifdef LARGE_INSTRUCTION_CACHE
-#ifdef FAST_CONSTANT_OFFSET_MODE
-
- psrc += nl & (UNROLL-1);
- pdst += nl & (UNROLL-1);
-
-#define BodyOdd(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]);
-#define BodyEven(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]);
-
-#define LoopReset \
-pdst += UNROLL; \
-psrc += UNROLL;
-
-#else
-
-#define BodyOdd(n) *pdst = MROP_SOLID (*psrc, *pdst); pdst++; psrc++;
-#define BodyEven(n) BodyOdd(n)
-
-#define LoopReset ;
-
-#endif
- PackedLoop
-
-#undef BodyOdd
-#undef BodyEven
-#undef LoopReset
-
-#else
- DuffL(nl, label1,
- *pdst = MROP_SOLID (*psrc, *pdst);
- pdst++; psrc++;)
-#endif
-#else
- while (nl--) {
- *pdst = MROP_SOLID (*psrc, *pdst);
- pdst++; psrc++;
- }
-#endif
- if (!srcRemaining)
- {
- srcRemaining = widthSrc;
- psrc = psrcStart;
- }
- }
- if (endmask)
- {
- *pdst = MROP_MASK (*psrc, *pdst, endmask);
- }
- pdstLine += widthDst;
- psrcLine += widthSrc;
- psrcStart += widthSrc;
- if (++srcy == tileHeight)
- {
- psrcStart = psrcBase;
- psrcLine = psrcStart + srcStart;
- srcy = 0;
- }
- }
- }
- else
- {
- if (xoffSrc > xoffDst)
- {
- leftShift = (xoffSrc - xoffDst) << LEFTSHIFT_AMT;
- rightShift = PGSZ - leftShift;
- }
- else
- {
- rightShift = (xoffDst - xoffSrc) << LEFTSHIFT_AMT;
- leftShift = PGSZ - rightShift;
- }
- while (h--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- bits = 0;
- srcRemaining = widthSrc - srcStart;
- if (xoffSrc > xoffDst)
- {
- bits = *psrc;
- IncSrcPtr
- }
- if (startmask)
- {
- bits1 = BitLeft(bits,leftShift);
- bits = *psrc;
- IncSrcPtr
- bits1 |= BitRight(bits,rightShift);
- *pdst = MROP_MASK(bits1, *pdst, startmask);
- pdst++;
- }
- nlTemp = nlMiddle;
- while (nlTemp)
- {
- nl = nlTemp;
- if (nl > srcRemaining)
- nl = srcRemaining;
-
- nlTemp -= nl;
- srcRemaining -= nl;
-
-#if MROP == Mcopy
-#ifdef LARGE_INSTRUCTION_CACHE
- bits1 = bits;
-
-#ifdef FAST_CONSTANT_OFFSET_MODE
-
- psrc += nl & (UNROLL-1);
- pdst += nl & (UNROLL-1);
-
-#define BodyOdd(n) \
- bits = psrc[-n]; \
- pdst[-n] = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), pdst[-n]);
-
-#define BodyEven(n) \
- bits1 = psrc[-n]; \
- pdst[-n] = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), pdst[-n]);
-
-#define LoopReset \
- pdst += UNROLL; \
- psrc += UNROLL;
-
-#else
-
-#define BodyOdd(n) \
- bits = *psrc++; \
- *pdst = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), *pdst); \
- pdst++;
-
-#define BodyEven(n) \
- bits1 = *psrc++; \
- *pdst = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), *pdst); \
- pdst++;
-
-#define LoopReset ;
-
-#endif /* !FAST_CONSTANT_OFFSET_MODE */
-
- PackedLoop
-
-#undef BodyOdd
-#undef BodyEven
-#undef LoopReset
-
-#else
- DuffL (nl,label2,
- bits1 = BitLeft(bits, leftShift);
- bits = *psrc++;
- *pdst = MROP_SOLID (bits1 | BitRight(bits, rightShift), *pdst);
- pdst++;
- )
-#endif
-#else
- while (nl--) {
- bits1 = BitLeft(bits, leftShift);
- bits = *psrc++;
- *pdst = MROP_SOLID (bits1 | BitRight(bits, rightShift), *pdst);
- pdst++;
- }
-#endif
- if (!srcRemaining)
- {
- srcRemaining = widthSrc;
- psrc = psrcStart;
- }
- }
-
- if (endmask)
- {
- bits1 = BitLeft(bits, leftShift);
- if (BitLeft(endmask, rightShift))
- {
- bits = *psrc;
- bits1 |= BitRight(bits, rightShift);
- }
- *pdst = MROP_MASK (bits1, *pdst, endmask);
- }
- pdstLine += widthDst;
- psrcLine += widthSrc;
- psrcStart += widthSrc;
- if (++srcy == tileHeight)
- {
- psrcStart = psrcBase;
- psrcLine = psrcStart + srcStart;
- srcy = 0;
- }
- }
- }
- pBox++;
- }
-}
-
-void
-MROP_NAME(cfbFillSpanTile32s) (pDrawable, n, ppt, pwidth, tile, xrot, yrot, alu, planemask)
- DrawablePtr pDrawable;
- int n;
- DDXPointPtr ppt;
- int *pwidth;
- PixmapPtr tile;
- int xrot, yrot;
- int alu;
- unsigned long planemask;
-{
- int tileWidth; /* width of tile */
- int tileHeight; /* height of the tile */
- int widthSrc; /* width in longwords of the source tile */
-
- int widthDst; /* width in longwords of the dest pixmap */
- int w; /* width of current box */
- CfbBits startmask;
- CfbBits endmask;/* masks for reggedy bits at either end of line */
- int nlMiddle; /* number of longwords between sides of boxes */
-
- register int nl; /* loop version of nlMiddle */
- int srcy; /* current tile y position */
- int srcx; /* current tile x position */
- int srcRemaining; /* number of longwords remaining in source */
- int xoffDst, xoffSrc;
- int srcStart; /* number of longwords source offset at left of box */
- int leftShift, rightShift;
-
-#if MROP == 0 && PSZ == 24
- DeclareMergeRop24()
-#else
- MROP_DECLARE_REG()
-#endif
-
- CfbBits *pdstBase; /* pointer to start of dest */
- CfbBits *pdstLine; /* poitner to start of dest box */
- CfbBits *psrcBase; /* pointer to start of source */
- CfbBits *psrcLine; /* pointer to fetch point of source */
- CfbBits *psrcStart; /* pointer to start of source line */
- register CfbBits *pdst;
- register CfbBits *psrc;
- register CfbBits bits, bits1;
- register int nlTemp;
-
-#if MROP == 0 && PSZ == 24
- InitializeMergeRop24 (alu, planemask)
-#else
- MROP_INITIALIZE (alu, planemask)
-#endif
-
- psrcBase = (CfbBits *)tile->devPrivate.ptr;
- tileHeight = tile->drawable.height;
- tileWidth = tile->drawable.width;
-#if PSZ == 24
- widthSrc = tile->devKind / PGSZB;
-#else
- widthSrc = tileWidth >> PWSH;
-#endif
-
- cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase)
-
- while (n--)
- {
- w = *pwidth++;
-
- /* set up source */
- modulus (ppt->x - xrot, tileWidth, srcx);
- modulus (ppt->y - yrot, tileHeight, srcy);
-#if PSZ == 24
- xoffSrc = (4 - srcx) & 3;
- srcStart = (srcx * 3) >> 2;
-#else
- xoffSrc = srcx & PIM;
- srcStart = (srcx >> PWSH);
-#endif
- psrcStart = psrcBase + (srcy * widthSrc);
- psrcLine = psrcStart + srcStart;
-
- /* set up dest */
-#if PSZ == 24
- xoffDst = (4 - ppt->x) & 3;
- pdstLine = pdstBase + (ppt->y * widthDst) + ((ppt->x *3) >> 2);
- /* set up masks */
- if (w == 1 && (xoffDst == 0 || xoffDst == 1))
-#else
- xoffDst = ppt->x & PIM;
- pdstLine = pdstBase + (ppt->y * widthDst) + (ppt->x >> PWSH);
- /* set up masks */
- if (xoffDst + w < PPW)
-#endif
- {
- maskpartialbits(ppt->x, w, startmask);
- endmask = 0;
- nlMiddle = 0;
- }
- else
- {
- maskbits (ppt->x, w, startmask, endmask, nlMiddle)
- }
-
- if (xoffSrc == xoffDst)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- srcRemaining = widthSrc - srcStart;
- if (startmask)
- {
- *pdst = MROP_MASK (*psrc, *pdst, startmask);
- pdst++;
- IncSrcPtr
- }
- nlTemp = nlMiddle;
- while (nlTemp)
- {
- nl = nlTemp;
- if (nl > srcRemaining)
- nl = srcRemaining;
-
- nlTemp -= nl;
- srcRemaining -= nl;
-
-#if MROP == Mcopy
-#ifdef LARGE_INSTRUCTION_CACHE
-#ifdef FAST_CONSTANT_OFFSET_MODE
-
- psrc += nl & (UNROLL-1);
- pdst += nl & (UNROLL-1);
-
-#define BodyOdd(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]);
-#define BodyEven(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]);
-
-#define LoopReset \
-pdst += UNROLL; \
-psrc += UNROLL;
-
-#else
-
-#define BodyOdd(n) *pdst = MROP_SOLID (*psrc, *pdst); pdst++; psrc++;
-#define BodyEven(n) BodyOdd(n)
-
-#define LoopReset ;
-
-#endif
- PackedLoop
-
-#undef BodyOdd
-#undef BodyEven
-#undef LoopReset
-
-#else
- DuffL(nl, label1,
- *pdst = MROP_SOLID (*psrc, *pdst);
- pdst++; psrc++;)
-#endif
-#else
- while (nl--) {
- *pdst = MROP_SOLID (*psrc, *pdst);
- pdst++; psrc++;
- }
-#endif
- if (!srcRemaining)
- {
- srcRemaining = widthSrc;
- psrc = psrcStart;
- }
- }
- if (endmask)
- {
- *pdst = MROP_MASK (*psrc, *pdst, endmask);
- }
- }
- else
- {
- if (xoffSrc > xoffDst)
- {
- leftShift = (xoffSrc - xoffDst) << LEFTSHIFT_AMT;
- rightShift = PGSZ - leftShift;
- }
- else
- {
- rightShift = (xoffDst - xoffSrc) << LEFTSHIFT_AMT;
- leftShift = PGSZ - rightShift;
- }
- psrc = psrcLine;
- pdst = pdstLine;
- bits = 0;
- srcRemaining = widthSrc - srcStart;
- if (xoffSrc > xoffDst)
- {
- bits = *psrc;
- IncSrcPtr
- }
- if (startmask)
- {
- bits1 = BitLeft(bits,leftShift);
- bits = *psrc;
- IncSrcPtr
- bits1 |= BitRight(bits,rightShift);
- *pdst = MROP_MASK(bits1, *pdst, startmask);
- pdst++;
- }
- nlTemp = nlMiddle;
- while (nlTemp)
- {
- nl = nlTemp;
- if (nl > srcRemaining)
- nl = srcRemaining;
-
- nlTemp -= nl;
- srcRemaining -= nl;
-
-#if MROP == Mcopy
-#ifdef LARGE_INSTRUCTION_CACHE
- bits1 = bits;
-
-#ifdef FAST_CONSTANT_OFFSET_MODE
-
- psrc += nl & (UNROLL-1);
- pdst += nl & (UNROLL-1);
-
-#define BodyOdd(n) \
-bits = psrc[-n]; \
-pdst[-n] = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), pdst[-n]);
-
-#define BodyEven(n) \
-bits1 = psrc[-n]; \
-pdst[-n] = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), pdst[-n]);
-
-#define LoopReset \
-pdst += UNROLL; \
-psrc += UNROLL;
-
-#else
-
-#define BodyOdd(n) \
-bits = *psrc++; \
-*pdst = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), *pdst); \
-pdst++;
-
-#define BodyEven(n) \
-bits1 = *psrc++; \
-*pdst = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), *pdst); \
-pdst++;
-
-#define LoopReset ;
-
-#endif /* !FAST_CONSTANT_OFFSET_MODE */
-
- PackedLoop
-
-#undef BodyOdd
-#undef BodyEven
-#undef LoopReset
-
-#else
- DuffL (nl,label2,
- bits1 = BitLeft(bits, leftShift);
- bits = *psrc++;
- *pdst = MROP_SOLID (bits1 | BitRight(bits, rightShift), *pdst);
- pdst++;
- )
-#endif
-#else
- while (nl--) {
- bits1 = BitLeft(bits,leftShift);
- bits = *psrc++;
- *pdst = MROP_SOLID(bits1|BitRight(bits,rightShift), *pdst);
- pdst++;
- }
-#endif
- if (!srcRemaining)
- {
- srcRemaining = widthSrc;
- psrc = psrcStart;
- }
- }
-
- if (endmask)
- {
- bits1 = BitLeft(bits, leftShift);
- if (BitLeft(endmask, rightShift))
- {
- bits = *psrc;
- bits1 |= BitRight(bits, rightShift);
- }
- *pdst = MROP_MASK (bits1, *pdst, endmask);
- }
- }
- ppt++;
- }
-}
diff --git a/cfb/cfbunmap.h b/cfb/cfbunmap.h
deleted file mode 100644
index db9889217..000000000
--- a/cfb/cfbunmap.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 1994-1998 The XFree86 Project, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the XFree86 Project shall
- * not be used in advertising or otherwise to promote the sale, use or other
- * dealings in this Software without prior written authorization from the
- * XFree86 Project.
- */
-
-/*
- * Unmap names
- */
-
-#undef CFBNAME
-#undef CATNAME
-
-#undef QuartetBitsTable
-#undef QuartetPixelMaskTable
-#undef cfb8ClippedLineCopy
-#undef cfb8ClippedLineGeneral
-#undef cfb8ClippedLineXor
-#undef cfb8LineSS1Rect
-#undef cfb8LineSS1RectCopy
-#undef cfb8LineSS1RectGeneral
-#undef cfb8LineSS1RectPreviousCopy
-#undef cfb8LineSS1RectXor
-#undef cfb8SegmentSS1Rect
-#undef cfb8SegmentSS1RectCopy
-#undef cfb8SegmentSS1RectGeneral
-#undef cfb8SegmentSS1RectShiftCopy
-#undef cfb8SegmentSS1RectXor
-#undef cfbAllocatePrivates
-#undef cfbBSFuncRec
-#undef cfbBitBlt
-#undef cfbBresD
-#undef cfbBresS
-#undef cfbChangeWindowAttributes
-#undef cfbClearVisualTypes
-#undef cfbCloseScreen
-#undef cfbCreateDefColormap
-#undef cfbCopyArea
-#undef cfbCopyImagePlane
-#undef cfbCopyPixmap
-#undef cfbCopyPlane
-#undef cfbCopyPlaneReduce
-#undef cfbCopyRotatePixmap
-#undef cfbCopyWindow
-#undef cfbCreateGC
-#undef cfbCreatePixmap
-#undef cfbCreateScreenResources
-#undef cfbCreateWindow
-#undef cfbDestroyPixmap
-#undef cfbDestroyWindow
-#undef cfbDoBitblt
-#undef cfbDoBitbltCopy
-#undef cfbDoBitbltGeneral
-#undef cfbDoBitbltOr
-#undef cfbDoBitbltXor
-#undef cfbExpandDirectColors
-#undef cfbFillBoxTile32sCopy
-#undef cfbFillBoxTile32sGeneral
-#undef cfbFillBoxTileOdd
-#undef cfbFillBoxTileOddCopy
-#undef cfbFillBoxTileOddGeneral
-#undef cfbFillPoly1RectCopy
-#undef cfbFillPoly1RectGeneral
-#undef cfbFillRectSolidCopy
-#undef cfbFillRectSolidGeneral
-#undef cfbFillRectSolidXor
-#undef cfbFillRectTile32Copy
-#undef cfbFillRectTile32General
-#undef cfbFillRectTileOdd
-#undef cfbFillSpanTile32sCopy
-#undef cfbFillSpanTile32sGeneral
-#undef cfbFillSpanTileOddCopy
-#undef cfbFillSpanTileOddGeneral
-#undef cfbFinishScreenInit
-#undef cfbGCFuncs
-#undef cfbGCPrivateKey
-#undef cfbGetImage
-#undef cfbGetScreenPixmap
-#undef cfbGetSpans
-#undef cfbHorzS
-#undef cfbImageGlyphBlt8
-#undef cfbInitializeColormap
-#undef cfbInitVisuals
-#undef cfbInstallColormap
-#undef cfbLineSD
-#undef cfbLineSS
-#undef cfbListInstalledColormaps
-#undef cfbMapWindow
-#undef cfbMatchCommon
-#undef cfbNonTEOps
-#undef cfbNonTEOps1Rect
-#undef cfbPadPixmap
-#undef cfbPolyFillArcSolidCopy
-#undef cfbPolyFillArcSolidGeneral
-#undef cfbPolyFillRect
-#undef cfbPolyGlyphBlt8
-#undef cfbPolyGlyphRop8
-#undef cfbPolyPoint
-#undef cfbPositionWindow
-#undef cfbPutImage
-#undef cfbReduceRasterOp
-#undef cfbResolveColor
-#undef cfbRestoreAreas
-#undef cfbSaveAreas
-#undef cfbScreenInit
-#undef cfbScreenPrivateKey
-#undef cfbSegmentSD
-#undef cfbSegmentSS
-#undef cfbSetScanline
-#undef cfbSetScreenPixmap
-#undef cfbSetSpans
-#undef cfbSetVisualTypes
-#undef cfbSetupScreen
-#undef cfbSolidSpansCopy
-#undef cfbSolidSpansGeneral
-#undef cfbSolidSpansXor
-#undef cfbStippleStack
-#undef cfbStippleStackTE
-#undef cfbTEGlyphBlt
-#undef cfbTEOps
-#undef cfbTEOps1Rect
-#undef cfbTile32FSCopy
-#undef cfbTile32FSGeneral
-#undef cfbUninstallColormap
-#undef cfbUnmapWindow
-#undef cfbUnnaturalStippleFS
-#undef cfbUnnaturalTileFS
-#undef cfbValidateGC
-#undef cfbVertS
-#undef cfbWindowPrivateKey
-#undef cfbXRotatePixmap
-#undef cfbYRotatePixmap
-#undef cfbZeroPolyArcSS8Copy
-#undef cfbZeroPolyArcSS8General
-#undef cfbZeroPolyArcSS8Xor
-#undef cfbendpartial
-#undef cfbendtab
-#undef cfbmask
-#undef cfbrmask
-#undef cfbstartpartial
-#undef cfbstarttab
diff --git a/cfb/cfbwindow.c b/cfb/cfbwindow.c
deleted file mode 100644
index 50728764e..000000000
--- a/cfb/cfbwindow.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <stdlib.h>
-
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "windowstr.h"
-#include "cfb.h"
-#include "mistruct.h"
-#include "regionstr.h"
-#include "cfbmskbits.h"
-
-Bool
-cfbCreateWindow(WindowPtr pWin)
-{
-#ifdef PIXMAP_PER_WINDOW
- /* Setup pointer to Screen pixmap */
- dixSetPrivate(&pWin->devPrivates, frameWindowPrivateKey,
- cfbGetScreenPixmap(pWin->drawable.pScreen));
-#endif
-
- return TRUE;
-}
-
-Bool
-cfbDestroyWindow(WindowPtr pWin)
-{
- return(TRUE);
-}
-
-/*ARGSUSED*/
-Bool
-cfbMapWindow(pWindow)
- WindowPtr pWindow;
-{
- return(TRUE);
-}
-
-/*ARGSUSED*/
-Bool
-cfbPositionWindow(WindowPtr pWin, int x, int y)
-{
- return (TRUE);
-}
-
-/*ARGSUSED*/
-Bool
-cfbUnmapWindow(pWindow)
- WindowPtr pWindow;
-{
- return (TRUE);
-}
-
-/* UNCLEAN!
- this code calls the bitblt helper code directly.
-
- cfbCopyWindow copies only the parts of the destination that are
-visible in the source.
-*/
-
-
-void
-cfbCopyWindow(pWin, ptOldOrg, prgnSrc)
- WindowPtr pWin;
- DDXPointRec ptOldOrg;
- RegionPtr prgnSrc;
-{
- DDXPointPtr pptSrc;
- register DDXPointPtr ppt;
- RegionRec rgnDst;
- register BoxPtr pbox;
- register int dx, dy;
- register int i, nbox;
- WindowPtr pwinRoot;
-
- pwinRoot = WindowTable[pWin->drawable.pScreen->myNum];
-
- REGION_NULL(pWin->drawable.pScreen, &rgnDst);
-
- dx = ptOldOrg.x - pWin->drawable.x;
- dy = ptOldOrg.y - pWin->drawable.y;
- REGION_TRANSLATE(pWin->drawable.pScreen, prgnSrc, -dx, -dy);
- REGION_INTERSECT(pWin->drawable.pScreen, &rgnDst, &pWin->borderClip, prgnSrc);
-
- pbox = REGION_RECTS(&rgnDst);
- nbox = REGION_NUM_RECTS(&rgnDst);
- if(!nbox || !(pptSrc = (DDXPointPtr )xalloc(nbox * sizeof(DDXPointRec))))
- {
- REGION_UNINIT(pWin->drawable.pScreen, &rgnDst);
- return;
- }
- ppt = pptSrc;
-
- for (i = nbox; --i >= 0; ppt++, pbox++)
- {
- ppt->x = pbox->x1 + dx;
- ppt->y = pbox->y1 + dy;
- }
-
- cfbDoBitbltCopy((DrawablePtr)pwinRoot, (DrawablePtr)pwinRoot,
- GXcopy, &rgnDst, pptSrc, ~0L);
- xfree(pptSrc);
- REGION_UNINIT(pWin->drawable.pScreen, &rgnDst);
-}
-
-Bool
-cfbChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
-{
- return (TRUE);
-}
-
diff --git a/cfb/cfbzerarc.c b/cfb/cfbzerarc.c
deleted file mode 100644
index 5b8879ee1..000000000
--- a/cfb/cfbzerarc.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/************************************************************
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-********************************************************/
-
-
-/* Derived from:
- * "Algorithm for drawing ellipses or hyperbolae with a digital plotter"
- * by M. L. V. Pitteway
- * The Computer Journal, November 1967, Volume 10, Number 3, pp. 282-289
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <limits.h>
-
-#include <X11/X.h>
-#include <X11/Xprotostr.h>
-#include "regionstr.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "cfb.h"
-#include "cfbmskbits.h"
-#include "mizerarc.h"
-#include "cfbrrop.h"
-#include "mi.h"
-
-#ifdef PIXEL_ADDR
-
-static void
-RROP_NAME(cfbZeroArcSS8)(
- DrawablePtr pDraw,
- GCPtr pGC,
- xArc *arc)
-{
- miZeroArcRec info;
- Bool do360;
- register int x;
- PixelType *addrp;
- register PixelType *yorgp, *yorgop;
-#if PSZ == 24
- int xorg, xorg3, xorgo, xorgo3;
- register int xtmp;
-#endif
- RROP_DECLARE
- register int yoffset;
- int npwidth, dyoffset;
- register int y, a, b, d, mask;
- register int k1, k3, dx, dy;
-
- cfbGetPixelWidthAndPointer(pDraw,npwidth, addrp)
-
- RROP_FETCH_GC (pGC);
- do360 = miZeroArcSetup(arc, &info, TRUE);
- yorgp = addrp + ((info.yorg + pDraw->y) * npwidth);
- yorgop = addrp + ((info.yorgo + pDraw->y) * npwidth);
- info.xorg += pDraw->x;
- info.xorgo += pDraw->x;
-#if PSZ == 24
- xorg = info.xorg;
- xorg3 = xorg * 3;
- info.xorg = (info.xorg * 3) >> 2;
- xorgo = info.xorgo;
- xorgo3 = xorgo * 3;
- info.xorgo = (info.xorgo * 3) >> 2;
-#endif
- MIARCSETUP();
- yoffset = y ? npwidth : 0;
- dyoffset = 0;
- mask = info.initialMask;
- if (!(arc->width & 1))
- {
-#if PSZ == 24
- if (mask & 2)
- RROP_SOLID24((yorgp + info.xorgo), xorgo);
- if (mask & 8)
- RROP_SOLID24((yorgop + info.xorgo), xorgo);
-#else
- if (mask & 2)
- RROP_SOLID((yorgp + info.xorgo));
- if (mask & 8)
- RROP_SOLID((yorgop + info.xorgo));
-#endif /* PSZ == 24 */
- }
- if (!info.end.x || !info.end.y)
- {
- mask = info.end.mask;
- info.end = info.altend;
- }
- if (do360 && (arc->width == arc->height) && !(arc->width & 1))
- {
- register int xoffset = npwidth;
-#if PSZ == 24
- PixelType *yorghb = yorgp + (info.h * npwidth);
- register int tmp1, tmp2, tmp1_3, tmp2_3;
-
- tmp1 = xorg + info.h;
- tmp1_3 = tmp1 * 3;
- tmp2 = xorg - info.h;
- tmp2_3 = tmp2 * 3;
- while (1)
- {
- xtmp = (xorg3 + x * 3) >> 2;
- RROP_SOLID24(yorgp + yoffset + xtmp, xorg + x);
- RROP_SOLID24(yorgop - yoffset + xtmp, xorg + x);
- xtmp = (xorg3 - x * 3) >> 2;
- RROP_SOLID24(yorgp + yoffset + xtmp, xorg - x);
- RROP_SOLID24(yorgop - yoffset + xtmp, xorg - x);
- if (a < 0)
- break;
- xtmp = (tmp1_3 - y * 3) >> 2;
- RROP_SOLID24(yorghb - xoffset + xtmp, tmp1 - y);
- RROP_SOLID24(yorghb + xoffset + xtmp, tmp1 - y);
- xtmp = (tmp2_3 + y * 3) >> 2;
- RROP_SOLID24(yorghb - xoffset + xtmp, tmp2 + y);
- RROP_SOLID24(yorghb + xoffset + xtmp, tmp2 + y);
- xoffset += npwidth;
- MIARCCIRCLESTEP(yoffset += npwidth;);
- }
-#else
- PixelType *yorghb = yorgp + (info.h * npwidth) + info.xorg;
- PixelType *yorgohb = yorghb - info.h;
-
- yorgp += info.xorg;
- yorgop += info.xorg;
- yorghb += info.h;
- while (1)
- {
- RROP_SOLID(yorgp + yoffset + x);
- RROP_SOLID(yorgp + yoffset - x);
- RROP_SOLID(yorgop - yoffset - x);
- RROP_SOLID(yorgop - yoffset + x);
- if (a < 0)
- break;
- RROP_SOLID(yorghb - xoffset - y);
- RROP_SOLID(yorgohb - xoffset + y);
- RROP_SOLID(yorgohb + xoffset + y);
- RROP_SOLID(yorghb + xoffset - y);
- xoffset += npwidth;
- MIARCCIRCLESTEP(yoffset += npwidth;);
- }
- yorgp -= info.xorg;
- yorgop -= info.xorg;
-#endif /* PSZ == 24 */
- x = info.w;
- yoffset = info.h * npwidth;
- }
- else if (do360)
- {
- while (y < info.h || x < info.w)
- {
- MIARCOCTANTSHIFT(dyoffset = npwidth;);
-#if PSZ == 24
- xtmp = (xorg3 + x * 3) >> 2;
- RROP_SOLID24(yorgp + yoffset + xtmp, xorg + x);
- RROP_SOLID24(yorgop - yoffset + xtmp, xorg + x);
- xtmp = (xorgo3 - x * 3) >> 2;
- RROP_SOLID24(yorgp + yoffset + xtmp, xorgo - x);
- RROP_SOLID24(yorgop - yoffset + xtmp, xorgo - x);
-#else
- RROP_SOLID(yorgp + yoffset + info.xorg + x);
- RROP_SOLID(yorgp + yoffset + info.xorgo - x);
- RROP_SOLID(yorgop - yoffset + info.xorgo - x);
- RROP_SOLID(yorgop - yoffset + info.xorg + x);
-#endif
- MIARCSTEP(yoffset += dyoffset;, yoffset += npwidth;);
- }
- }
- else
- {
- while (y < info.h || x < info.w)
- {
- MIARCOCTANTSHIFT(dyoffset = npwidth;);
- if ((x == info.start.x) || (y == info.start.y))
- {
- mask = info.start.mask;
- info.start = info.altstart;
- }
-#if PSZ == 24
- if (mask & 1){
- xtmp = (xorg3 + x * 3) >> 2;
- RROP_SOLID24(yorgp + yoffset + xtmp, xorg + x);
- }
- if (mask & 2){
- xtmp = (xorgo3 - x * 3) >> 2;
- RROP_SOLID24(yorgp + yoffset + xtmp, xorgo - x);
- }
- if (mask & 4){
- xtmp = (xorgo3 - x * 3) >> 2;
- RROP_SOLID24(yorgop - yoffset + xtmp, xorgo - x);
- }
- if (mask & 8){
- xtmp = (xorg3 + x * 3) >> 2;
- RROP_SOLID24(yorgop - yoffset + xtmp, xorg + x);
- }
-#else
- if (mask & 1)
- RROP_SOLID(yorgp + yoffset + info.xorg + x);
- if (mask & 2)
- RROP_SOLID(yorgp + yoffset + info.xorgo - x);
- if (mask & 4)
- RROP_SOLID(yorgop - yoffset + info.xorgo - x);
- if (mask & 8)
- RROP_SOLID(yorgop - yoffset + info.xorg + x);
-#endif /* PSZ == 24 */
- if ((x == info.end.x) || (y == info.end.y))
- {
- mask = info.end.mask;
- info.end = info.altend;
- }
- MIARCSTEP(yoffset += dyoffset;, yoffset += npwidth;);
- }
- }
- if ((x == info.start.x) || (y == info.start.y))
- mask = info.start.mask;
-#if PSZ == 24
- if (mask & 1){
- xtmp = (xorg3 + x * 3) >> 2;
- RROP_SOLID24(yorgp + yoffset + xtmp, xorg + x);
- }
- if (mask & 4){
- xtmp = (xorgo3 - x * 3) >> 2;
- RROP_SOLID24(yorgop - yoffset + xtmp, xorgo - x);
- }
-#else
- if (mask & 1)
- RROP_SOLID(yorgp + yoffset + info.xorg + x);
- if (mask & 4)
- RROP_SOLID(yorgop - yoffset + info.xorgo - x);
-#endif /* PSZ == 24 */
- if (arc->height & 1)
- {
-#if PSZ == 24
- if (mask & 2){
- xtmp = (xorgo3 - x * 3) >> 2;
- RROP_SOLID24(yorgp + yoffset + xtmp, xorgo - x);
- }
- if (mask & 8){
- xtmp = (xorg3 + x * 3) >> 2;
- RROP_SOLID24(yorgop - yoffset + xtmp, xorg + x);
- }
-#else
- if (mask & 2)
- RROP_SOLID(yorgp + yoffset + info.xorgo - x);
- if (mask & 8)
- RROP_SOLID(yorgop - yoffset + info.xorg + x);
-#endif /* PSZ == 24 */
- }
- RROP_UNDECLARE
-}
-
-void
-RROP_NAME (cfbZeroPolyArcSS8) (pDraw, pGC, narcs, parcs)
- register DrawablePtr pDraw;
- GCPtr pGC;
- int narcs;
- xArc *parcs;
-{
- register xArc *arc;
- register int i;
- BoxRec box;
- int x2, y2;
- RegionPtr cclip;
-
- cclip = cfbGetCompositeClip(pGC);
- for (arc = parcs, i = narcs; --i >= 0; arc++)
- {
- if (miCanZeroArc(arc))
- {
- box.x1 = arc->x + pDraw->x;
- box.y1 = arc->y + pDraw->y;
- /*
- * Because box.x2 and box.y2 get truncated to 16 bits, and the
- * RECT_IN_REGION test treats the resulting number as a signed
- * integer, the RECT_IN_REGION test alone can go the wrong way.
- * This can result in a server crash because the rendering
- * routines in this file deal directly with cpu addresses
- * of pixels to be stored, and do not clip or otherwise check
- * that all such addresses are within their respective pixmaps.
- * So we only allow the RECT_IN_REGION test to be used for
- * values that can be expressed correctly in a signed short.
- */
- x2 = box.x1 + (int)arc->width + 1;
- box.x2 = x2;
- y2 = box.y1 + (int)arc->height + 1;
- box.y2 = y2;
- if ( (x2 <= SHRT_MAX) && (y2 <= SHRT_MAX) &&
- (RECT_IN_REGION(pDraw->pScreen, cclip, &box) == rgnIN) )
- RROP_NAME (cfbZeroArcSS8) (pDraw, pGC, arc);
- else
- miZeroPolyArc(pDraw, pGC, 1, arc);
- }
- else
- miPolyArc(pDraw, pGC, 1, arc);
- }
-}
-
-#endif
diff --git a/cfb/stip68kgnu.h b/cfb/stip68kgnu.h
deleted file mode 100644
index 2da27b4dd..000000000
--- a/cfb/stip68kgnu.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-
-/*
- * Stipple stack macro for 68k GCC
- */
-
-#define STIPPLE(addr,stipple,value,width,count,shift) \
- __asm volatile ( \
- "lea 5f,%/a1\n\
- moveq #28,%/d2\n\
- addl %2,%/d2\n\
- moveq #28,%/d3\n\
- subql #4,%2\n\
- negl %2\n\
-1:\n\
- movel %0,%/a0\n\
- addl %6,%0\n\
- movel %3@+,%/d1\n\
- jeq 3f\n\
- movel %/d1,%/d0\n\
- lsrl %/d2,%/d0\n\
- lsll #5,%/d0\n\
- lsll %2,%/d1\n\
- jmp %/a1@(%/d0:l)\n\
-2:\n\
- addl #4,%/a0\n\
- movel %/d1,%/d0\n\
- lsrl %/d3,%/d0\n\
- lsll #5,%/d0\n\
- lsll #4,%/d1\n\
- jmp %/a1@(%/d0:l)\n\
-5:\n\
- jne 2b ; dbra %1,1b ; jra 4f\n\
- . = 5b + 0x20\n\
- moveb %5,%/a0@(3)\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f\n\
- . = 5b + 0x40\n\
- moveb %5,%/a0@(2)\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f\n\
- . = 5b + 0x60\n\
- movew %5,%/a0@(2)\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f\n\
- . = 5b + 0x80\n\
- moveb %5,%/a0@(1)\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\
- . = 5b + 0xa0\n\
- moveb %5,%/a0@(3) ; moveb %5,%/a0@(1)\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\
- . = 5b + 0xc0\n\
- movew %5,%/a0@(1)\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\
- . = 5b + 0xe0\n\
- movew %5,%/a0@(2) ; moveb %5,%/a0@(1)\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\
- . = 5b + 0x100\n\
- moveb %5,%/a0@\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\
- . = 5b + 0x120\n\
- moveb %5,%/a0@(3) ; moveb %5,%/a0@\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\
- . = 5b + 0x140\n\
- moveb %5,%/a0@(2) ; moveb %5,%/a0@\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\
- . = 5b + 0x160\n\
- movew %5,%/a0@(2) ; moveb %5,%/a0@\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\
- . = 5b + 0x180\n\
- movew %5,%/a0@\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\
- . = 5b + 0x1a0\n\
- moveb %5,%/a0@(3) ; movew %5,%/a0@\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\
- . = 5b + 0x1c0\n\
- moveb %5,%/a0@(2) ; movew %5,%/a0@\n\
- andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\
- . = 5b + 0x1e0\n\
- movel %5,%/a0@\n\
- andl %/d1,%/d1 ; jne 2b ; \n\
-3: dbra %1,1b ; \n\
-4:\n"\
- : "=a" (addr), /* %0 */ \
- "=d" (count), /* %1 */ \
- "=d" (shift), /* %2 */ \
- "=a" (stipple) /* %3 */ \
- : "0" (addr), /* %4 */ \
- "d" (value), /* %5 */ \
- "a" (width), /* %6 */ \
- "1" (count-1), /* %7 */ \
- "2" (shift), /* %8 */ \
- "3" (stipple) /* %9 */ \
- : /* ctemp */ "d0", \
- /* c */ "d1", \
- /* lshift */ "d2", \
- /* rshift */ "d3", \
- /* atemp */ "a0", \
- /* case */ "a1")
diff --git a/cfb/stipmips.s b/cfb/stipmips.s
deleted file mode 100644
index c42d9b5ae..000000000
--- a/cfb/stipmips.s
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * $Xorg: stipmips.s,v 1.4 2001/02/09 02:04:39 xorgcvs Exp $
- *
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-
-/*
- * MIPS assembly code for optimized text rendering.
- *
- * Other stippling could be done in assembly, but the payoff is
- * not nearly as large. Mostly because large areas are heavily
- * optimized already.
- */
-
-#ifdef MIPSEL
-# define BitsR sll
-# define BitsL srl
-# define BO(o) o
-# define HO(o) o
-# define WO(o) o
-# define FourBits(dest,bits) and dest, bits, 0xf
-#else
-# define BitsR srl
-# define BitsL sll
-# define BO(o) 3-o
-# define HO(o) 2-o
-# define WO(o) o
-# define FourBits(dest,bits) srl dest, bits, 28
-#endif
-
-/* reordering instructions would be fatal here */
- .set noreorder
-
-
-/*
- * cfbStippleStack(addr, stipple, value, stride, Count, Shift)
- * 4 5 6 7 16(sp) 20(sp)
- *
- * Apply successive 32-bit stipples starting at addr, addr+stride, ...
- *
- * Used for text rendering, but only when no data could be lost
- * when the stipple is shifted left by Shift bits
- */
-/* arguments */
-#define addr $4
-#define stipple $5
-#define value $6
-#define stride $7
-#define Count 16($sp)
-#define Shift 20($sp)
-
-/* local variables */
-#define count $14
-#define shift $13
-#define atemp $12
-#define bits $11
-#define lshift $9
-#define sbase $8
-#define stemp $2
-
-#define CASE_SIZE 5 /* case blocks are 2^5 bytes each */
-#define CASE_MASK 0x1e0 /* first case mask */
-
-#define ForEachLine $200
-#define NextLine $201
-#define NextLine1 $202
-#define CaseBegin $203
-#define ForEachBits $204
-#define ForEachBits1 $205
-#define NextBits $206
-
-#ifdef TETEXT
-#define cfbStippleStack cfbStippleStackTE
-#endif
-
- .globl cfbStippleStack
- .ent cfbStippleStack 2
-cfbStippleStack:
- .frame $sp, 0, $31
- lw count, Count /* fetch stack params */
- la sbase,CaseBegin /* load up switch table */
- lw shift, Shift
- li lshift, 4 /* compute offset within */
- subu lshift, lshift, shift /* stipple of remaining bits */
-#ifdef MIPSEL
- addu shift, shift, CASE_SIZE /* first shift for LSB */
-#else
- addu shift, shift, 28-CASE_SIZE /* first shift for MSB */
-#endif
- /* do ... while (--count > 0); */
-ForEachLine:
- lw bits, 0(stipple) /* get stipple bits */
- move atemp, addr /* set up for this line */
-#ifdef TETEXT
- /* Terminal emulator fonts are expanded and have many 0 rows */
- beqz bits, NextLine /* skip out early on 0 */
-#endif
- addu addr, addr, stride /* step for the loop */
- BitsR stemp, bits, shift /* get first bits */
- and stemp, stemp, CASE_MASK /* compute first branch */
- addu stemp, stemp, sbase /* ... */
- j stemp /* ... */
- BitsL bits, bits, lshift /* set remaining bits */
-
-ForEachBits:
- addu atemp, atemp, 4
-ForEachBits1:
- FourBits(stemp, bits) /* compute jump for */
- sll stemp, stemp, CASE_SIZE /* next four bits */
- addu stemp, stemp, sbase /* ... */
- j stemp /* ... */
- BitsL bits, bits, 4 /* step for remaining bits */
-CaseBegin:
- bnez bits, ForEachBits1 /* 0 */
- addu atemp, atemp, 4
-NextLine:
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
- nop
-
- bnez bits, ForEachBits /* 1 */
- sb value, BO(0)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
- nop
-
- bnez bits, ForEachBits /* 2 */
- sb value, BO(1)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
- nop
-
- bnez bits, ForEachBits /* 3 */
- sh value, HO(0)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
- nop
-
- bnez bits, ForEachBits /* 4 */
- sb value, BO(2)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
- nop
-
- sb value, BO(0)(atemp) /* 5 */
- bnez bits, ForEachBits
- sb value, BO(2)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
-
- sb value, BO(1)(atemp) /* 6 */
- bnez bits, ForEachBits
- sb value, BO(2)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
-
- bnez bits, ForEachBits /* 7 */
- swl value, BO(2)(atemp) /* untested on MSB */
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
- nop
-
- bnez bits, ForEachBits /* 8 */
- sb value, BO(3)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
- nop
-
- sb value, BO(0)(atemp) /* 9 */
- bnez bits, ForEachBits
- sb value, BO(3)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
-
- sb value, BO(1)(atemp) /* a */
- bnez bits, ForEachBits
- sb value, BO(3)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
-
- sh value, HO(0)(atemp) /* b */
- bnez bits, ForEachBits
- sb value, BO(3)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
-
- bnez bits, ForEachBits /* c */
- sh value, HO(2)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
- nop
-
- sb value, BO(0)(atemp) /* d */
- bnez bits, ForEachBits
- sh value, HO(2)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
-
- bnez bits, ForEachBits /* e */
- swr value, BO(1)(atemp) /* untested on MSB */
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
- nop
-
- bnez bits, ForEachBits /* f */
- sw value, WO(0)(atemp)
- addu count, count, -1
- bnez count, ForEachLine
- addu stipple, stipple, 4
- j $31
- nop
- nop
-
- .end cfbStippleStack
diff --git a/cfb/stipsparc.s b/cfb/stipsparc.s
deleted file mode 100644
index dcd440b19..000000000
--- a/cfb/stipsparc.s
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * $Xorg: stipsparc.s,v 1.4 2001/02/09 02:04:39 xorgcvs Exp $
- * $XdotOrg: $
- *
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-/* $XFree86: xc/programs/Xserver/cfb/stipsparc.s,v 1.4 2001/01/17 22:36:38 dawes Exp $ */
-
-/*
- * SPARC assembly code for optimized text rendering.
- *
- * Other stippling could be done in assembly, but the payoff is
- * not nearly as large. Mostly because large areas are heavily
- * optimized already.
- */
-
-/* not that I expect to ever see an LSB SPARC, but ... */
-#ifdef LITTLE_ENDIAN
-# define BitsR sll
-# define BitsL srl
-# define BO(o) o
-# define HO(o) o
-# define WO(o) o
-# define FourBits(dest,bits) and bits, 0xf, dest
-#else
-# define BitsR srl
-# define BitsL sll
-# define BO(o) 3-o
-# define HO(o) 2-o
-# define WO(o) o
-# define FourBits(dest,bits) srl bits, 28, dest
-#endif
-
-/*
- * cfbStippleStack(addr, stipple, value, stride, Count, Shift)
- * 4 5 6 7 16(sp) 20(sp)
- *
- * Apply successive 32-bit stipples starting at addr, addr+stride, ...
- *
- * Used for text rendering, but only when no data could be lost
- * when the stipple is shifted left by Shift bits
- */
-/* arguments */
-#define addr %i0
-#define stipple %i1
-#define value %i2
-#define stride %i3
-#define count %i4
-#define shift %i5
-
-/* local variables */
-#define atemp %l0
-#define bits %l1
-#define lshift %l2
-#define sbase %l3
-#define stemp %l4
-
-#define CASE_SIZE 5 /* case blocks are 2^5 bytes each */
-#define CASE_MASK 0x1e0 /* first case mask */
-
-#define ForEachLine LY1
-#define NextLine LY2
-#define CaseBegin LY3
-#define ForEachBits LY4
-#define NextBits LY5
-
-#if defined(SVR4) || defined(__ELF__)
-#ifdef TETEXT
-#define _cfbStippleStack cfbStippleStackTE
-#else
-#define _cfbStippleStack cfbStippleStack
-#endif
-#else
-#ifdef TETEXT
-#define _cfbStippleStack _cfbStippleStackTE
-#endif
-#endif
- .seg "text"
- .proc 16
- .globl _cfbStippleStack
-_cfbStippleStack:
- save %sp,-64,%sp
-#ifdef SHAREDCODE
-1:
- call 2f
- nop
-2:
- mov %o7,sbase /* sbase = 1b(1:) */
- add sbase, CaseBegin-1b, sbase
-#else /* !SHAREDCODE */
- sethi %hi(CaseBegin),sbase /* load up switch table */
- or sbase,%lo(CaseBegin),sbase
-#endif /* SHAREDCODE */
- mov 4,lshift /* compute offset within */
- sub lshift, shift, lshift /* stipple of remaining bits */
-#ifdef LITTLE_ENDIAN
- inc CASE_SIZE, shift /* first shift for LSB */
-#else
- inc 28-CASE_SIZE, shift /* first shift for MSB */
-#endif
- /* do ... while (--count > 0); */
-ForEachLine:
- ld [stipple],bits /* get stipple bits */
- mov addr,atemp /* set up for this line */
-#ifdef TETEXT
- /* Terminal emulator fonts are expanded and have many 0 rows */
- tst bits
- bz NextLine /* skip out early on 0 */
-#endif
- add addr, stride, addr /* step for the loop */
- BitsR bits, shift, stemp /* get first bits */
- and stemp, CASE_MASK, stemp /* compute first jump */
- BitsL bits, lshift, bits /* set remaining bits */
- jmp sbase+stemp /* ... */
- tst bits
-
-ForEachBits:
- inc 4, atemp
-ForEachBits1:
- FourBits(stemp, bits) /* compute jump for */
- sll stemp, CASE_SIZE, stemp /* these four bits */
- BitsL bits, 4, bits /* step for remaining bits */
- jmp sbase+stemp /* jump */
- tst bits
-CaseBegin:
- bnz,a ForEachBits1 /* 0 */
- inc 4, atemp
-NextLine:
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- bnz ForEachBits /* 1 */
- stb value, [atemp+BO(0)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- bnz ForEachBits /* 2 */
- stb value, [atemp+BO(1)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- bnz ForEachBits /* 3 */
- sth value, [atemp+HO(0)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- bnz ForEachBits /* 4 */
- stb value, [atemp+BO(2)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- stb value, [atemp+BO(0)] /* 5 */
- bnz ForEachBits
- stb value, [atemp+BO(2)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- stb value, [atemp+BO(1)] /* 6 */
- bnz ForEachBits
- stb value, [atemp+BO(2)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- sth value, [atemp+HO(0)] /* 7 */
- bnz ForEachBits
- stb value, [atemp+BO(2)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- bnz ForEachBits /* 8 */
- stb value, [atemp+BO(3)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- stb value, [atemp+BO(0)] /* 9 */
- bnz ForEachBits
- stb value, [atemp+BO(3)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- stb value, [atemp+BO(1)] /* a */
- bnz ForEachBits
- stb value, [atemp+BO(3)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- sth value, [atemp+HO(0)] /* b */
- bnz ForEachBits
- stb value, [atemp+BO(3)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- bnz ForEachBits /* c */
- sth value, [atemp+HO(2)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- stb value, [atemp+BO(0)] /* d */
- bnz ForEachBits
- sth value, [atemp+HO(2)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- stb value, [atemp+BO(1)] /* e */
- bnz ForEachBits
- sth value, [atemp+HO(2)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- bnz ForEachBits /* f */
- st value, [atemp+WO(0)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
diff --git a/cfb/stipsprc32.s b/cfb/stipsprc32.s
deleted file mode 100644
index 89b031f5a..000000000
--- a/cfb/stipsprc32.s
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * $Xorg: stipsprc32.s,v 1.4 2001/02/09 02:04:39 xorgcvs Exp $
- * $XdotOrg: $
- *
-Copyright 1990, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Keith Packard, MIT X Consortium
- */
-/* $XFree86: xc/programs/Xserver/cfb/stipsprc32.s,v 1.4 2001/01/17 22:36:38 dawes Exp $ */
-
-/*
- * SPARC assembly code for optimized text rendering.
- *
- * Other stippling could be done in assembly, but the payoff is
- * not nearly as large. Mostly because large areas are heavily
- * optimized already.
- */
-
-/* not that I expect to ever see an LSB SPARC, but ... */
-#ifdef LITTLE_ENDIAN
-# define BitsR sll
-# define BitsL srl
-# define WO(o) 3-o
-# define FourBits(dest,bits) and bits, 0xf, dest
-#else
-# define BitsR srl
-# define BitsL sll
-# define WO(o) o
-# define FourBits(dest,bits) srl bits, 28, dest
-#endif
-
-/*
- * cfb32StippleStack(addr, stipple, value, stride, Count, Shift)
- * 4 5 6 7 16(sp) 20(sp)
- *
- * Apply successive 32-bit stipples starting at addr, addr+stride, ...
- *
- * Used for text rendering, but only when no data could be lost
- * when the stipple is shifted left by Shift bits
- */
-/* arguments */
-#define addr %i0
-#define stipple %i1
-#define value %i2
-#define stride %i3
-#define count %i4
-#define shift %i5
-
-/* local variables */
-#define atemp %l0
-#define bits %l1
-#define lshift %l2
-#define sbase %l3
-#define stemp %l4
-
-#define CASE_SIZE 5 /* case blocks are 2^5 bytes each */
-#define CASE_MASK 0x1e0 /* first case mask */
-
-#define ForEachLine LY1
-#define NextLine LY2
-#define CaseBegin LY3
-#define ForEachBits LY4
-#define NextBits LY5
-
-#if defined(SVR4) || defined(__ELF__)
-#ifdef TETEXT
-#define _cfb32StippleStack cfb32StippleStackTE
-#else
-#define _cfb32StippleStack cfb32StippleStack
-#endif
-#else
-#ifdef TETEXT
-#define _cfb32StippleStack _cfb32StippleStackTE
-#endif
-#endif
-
- .seg "text"
- .proc 16
- .globl _cfb32StippleStack
-_cfb32StippleStack:
- save %sp,-64,%sp
-#ifdef SHAREDCODE
-1:
- call 2f
- nop
-2:
- mov %o7,sbase /* sbase = 1b(1:) */
- add sbase, CaseBegin-1b, sbase
-#else /* !SHAREDCODE */
- sethi %hi(CaseBegin),sbase /* load up switch table */
- or sbase,%lo(CaseBegin),sbase
-#endif /* !SHAREDCODE */
- mov 4,lshift /* compute offset within */
- sub lshift, shift, lshift /* stipple of remaining bits */
-#ifdef LITTLE_ENDIAN
- inc CASE_SIZE, shift /* first shift for LSB */
-#else
- inc 28-CASE_SIZE, shift /* first shift for MSB */
-#endif
- /* do ... while (--count > 0); */
-ForEachLine:
- ld [stipple],bits /* get stipple bits */
- mov addr,atemp /* set up for this line */
-#ifdef TETEXT
- /* Terminal emulator fonts are expanded and have many 0 rows */
- tst bits
- bz NextLine /* skip out early on 0 */
-#endif
- add addr, stride, addr /* step for the loop */
- BitsR bits, shift, stemp /* get first bits */
- and stemp, CASE_MASK, stemp /* compute first jump */
- BitsL bits, lshift, bits /* set remaining bits */
- jmp sbase+stemp /* ... */
- tst bits
-
-ForEachBits:
- inc 16, atemp
-ForEachBits1:
- FourBits(stemp, bits) /* compute jump for */
- sll stemp, CASE_SIZE, stemp /* these four bits */
- BitsL bits, 4, bits /* step for remaining bits */
- jmp sbase+stemp /* jump */
- tst bits
-CaseBegin:
- bnz,a ForEachBits1 /* 0 */
- inc 16, atemp
-NextLine:
- deccc 1, count
-NextLine1:
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- bnz ForEachBits /* 1 */
- st value, [atemp+WO(12)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- bnz ForEachBits /* 2 */
- st value, [atemp+WO(8)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- st value, [atemp+WO(8)] /* 3 */
- bnz ForEachBits
- st value, [atemp+WO(12)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- bnz ForEachBits /* 4 */
- st value, [atemp+WO(4)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- st value, [atemp+WO(4)] /* 5 */
- bnz ForEachBits
- st value, [atemp+WO(12)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- st value, [atemp+WO(4)] /* 6 */
- bnz ForEachBits
- st value, [atemp+WO(8)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- st value, [atemp+WO(4)] /* 7 */
- st value, [atemp+WO(8)]
- bnz ForEachBits
- st value, [atemp+WO(12)]
- b NextLine1
- deccc 1, count
- nop
- nop
-
- bnz ForEachBits /* 8 */
- st value, [atemp+WO(0)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
- nop
-
- st value, [atemp+WO(0)] /* 9 */
- bnz ForEachBits
- st value, [atemp+WO(12)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- st value, [atemp+WO(0)] /* a */
- bnz ForEachBits
- st value, [atemp+WO(8)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- st value, [atemp+WO(0)] /* b */
- st value, [atemp+WO(8)]
- bnz ForEachBits
- st value, [atemp+WO(12)]
- b NextLine1
- deccc 1, count
- nop
- nop
-
- st value, [atemp+WO(0)] /* c */
- bnz ForEachBits
- st value, [atemp+WO(4)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore
-
- st value, [atemp+WO(0)] /* d */
- st value, [atemp+WO(4)]
- bnz ForEachBits
- st value, [atemp+WO(12)]
- b NextLine1
- deccc 1, count
- nop
- nop
-
- st value, [atemp+WO(0)] /* e */
- st value, [atemp+WO(4)]
- bnz ForEachBits
- st value, [atemp+WO(8)]
- b NextLine1
- deccc 1, count
- nop
- nop
-
- st value, [atemp+WO(0)] /* f */
- st value, [atemp+WO(4)]
- st value, [atemp+WO(8)]
- bnz ForEachBits
- st value, [atemp+WO(12)]
- deccc 1, count
- bnz,a ForEachLine
- inc 4, stipple
- ret
- restore