--- /dev/null
+/************************************************************
+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 MIT not be used in
+advertising or publicity pertaining to distribution of the
+software without specific prior written permission. Sun and
+M.I.T. 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.
+
+********************************************************/
+
+#include "pixmap.h"
+#include "region.h"
+#include "gc.h"
+#include "colormap.h"
+#include "miscstruct.h"
+#include "servermd.h"
+#include "mfb.h"
+
+extern Bool cfbScreenInit();
+extern void cfbQueryBestSize();
+extern Bool cfbCreateWindow();
+extern Bool cfbPositionWindow();
+extern Bool cfbChangeWindowAttributes();
+extern Bool cfbMapWindow();
+extern Bool cfbUnmapWindow();
+extern Bool cfbDestroyWindow();
+
+extern Bool cfbRealizeFont();
+extern Bool cfbUnrealizeFont();
+extern Bool cfbRealizeCursor();
+extern Bool cfbUnrealizeCursor();
+extern Bool cfbScreenSaver();
+extern Bool cfbCreateGC();
+
+extern PixmapPtr cfbCreatePixmap();
+extern Bool cfbDestroyPixmap();
+
+extern void cfbCopyWindow();
+extern void cfbPaintWindow();
+
+extern void miPolyFillRect();
+extern void cfbPolyFillRect();
+extern void miPolyFillArc();
+extern void cfbZeroPolyArcSS8Copy(), cfbZeroPolyArcSS8Xor();
+extern void cfbZeroPolyArcSS8General();
+extern void cfbLineSS(), cfbLineSD(), cfbSegmentSS(), cfbSegmentSD();
+extern void cfb8LineSS1Rect(), cfb8SegmentSS1Rect ();
+extern RegionPtr cfbCopyPlane();
+extern void cfbPolyFillArcSolidCopy(),cfbPolyFillArcSolidXor();
+extern void cfbPolyFillArcSolidGeneral();
+extern RegionPtr cfbCopyArea();
+extern void cfbFillPoly1RectCopy(), cfbFillPoly1RectGeneral();
+
+extern void cfbPushPixels8();
+extern void cfbSetSpans();
+extern void cfbGetSpans();
+extern void cfbSolidSpansCopy(), cfbSolidSpansXor(), cfbSolidSpansGeneral();
+extern void cfbUnnaturalTileFS();
+extern void cfbUnnaturalStippleFS();
+extern void cfbTile32FSCopy(), cfbTile32FSGeneral();
+extern void cfb8Stipple32FS(), cfb8OpaqueStipple32FS();
+extern void cfbFillBoxTileOdd();
+extern void cfbFillBoxTile32();
+extern void cfbFillBoxSolid();
+
+extern void cfbTEGlyphBlt();
+extern void cfbTEGlyphBlt8();
+extern void cfbPolyGlyphBlt8();
+extern void cfbPolyGlyphRop8();
+extern void cfbImageGlyphBlt8();
+
+extern void cfbSaveAreas();
+extern void cfbRestoreAreas();
+
+/* included from mfb.h; we can't include mfb.h directly because of other
+ * conflicts */
+extern void mfbPushPixels();
+extern void mfbSetSpans();
+extern void mfbGetSpans();
+extern void mfbUnnaturalTileFS();
+extern void mfbUnnaturalStippleFS();
+extern Bool mfbRealizeFont();
+extern Bool mfbUnrealizeFont();
+extern void mfbQueryBestSize();
+extern RegionPtr mfbPixmapToRegion();
+extern void mfbCopyRotatePixmap();
+
+extern PixmapPtr cfbCopyPixmap();
+extern void cfbConvertRects();
+extern void miPolyArc();
+extern void miFillPolyArc();
+
+extern void cfbPutImage();
+extern void cfbGetImage();
+extern RegionPtr miCopyArea();
+extern RegionPtr miCopyPlane();
+extern void cfbPolyPoint();
+extern void miPushPixels();
+
+#ifdef STATIC_COLOR
+extern void cfbInstallColormap();
+extern void cfbUninstallColormap();
+extern int cfbListInstalledColormaps();
+#endif
+extern void cfbResolveColor();
+extern Bool cfbInitializeColormap();
+extern Bool cfbCreateDefColormap();
+
+extern void cfbCopyRotatePixmap();
+extern void cfbYRotatePixmap();
+extern void cfbXRotatePixmap();
+extern void cfbPadPixmap();
+
+/*
+ private filed of pixmap
+ pixmap.devPrivate = (unsigned int *)pointer_to_bits
+ pixmap.devKind = width_of_pixmap_in_bytes
+*/
+
+extern int cfbGCPrivateIndex;
+extern int cfbWindowPrivateIndex;
+
+/* 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 */
+ unsigned fExpose:1; /* callexposure handling ? */
+ unsigned freeCompClip:1;
+ PixmapPtr pRotatedPixmap;
+ RegionPtr pCompositeClip; /* FREE_CC or REPLACE_CC */
+ unsigned long xor, and; /* reduced rop values */
+ } cfbPrivGC;
+
+typedef cfbPrivGC *cfbPrivGCPtr;
+
+#define cfbGetGCPrivate(pGC) ((cfbPrivGCPtr)\
+ (pGC)->devPrivates[cfbGCPrivateIndex].ptr)
+
+/* way to carry RROP info around */
+typedef struct {
+ unsigned char rop;
+ unsigned long xor, and;
+} cfbRRopRec, *cfbRRopPtr;
+
+/* private field of window */
+typedef struct {
+ unsigned char fastBorder; /* non-zero if border is 32 bits wide */
+ unsigned char fastBackground;
+ unsigned short unused; /* pad for alignment with Sun compiler */
+ DDXPointRec oldRotate;
+ PixmapPtr pRotatedBackground;
+ PixmapPtr pRotatedBorder;
+ } cfbPrivWin;
+
+/* Common macros for extracting drawing information */
+
+#define cfbGetTypedWidth(pDrawable,wtype) (\
+ (((pDrawable)->type == DRAWABLE_WINDOW) ? \
+ (int) getPrivScreenPtr((pDrawable)->pScreen)->stride : \
+ (int) getPrivPixmapPtr(pDrawable)->stride / sizeof (wtype))
+
+#define cfbGetByteWidth(pDrawable) cfbGetTypedWidth(pDrawable, unsigned char)
+
+#define cfbGetLongWidth(pDrawable) cfbGetTypedWidth(pDrawable, unsigned long)
+
+#define cfbGetTypedWidthAndPointer(pDrawable, width, pointer, wtype, ptype) {\
+ if ((pDrawable)->type == DRAWABLE_WINDOW) \
+ {\
+ (pointer) = (ptype *) getPrivScreenPtr((pDrawable)->pScreen)->bits; \
+ (width) = ((int) getPrivScreenPtr((pDrawable)->pScreen)->stride) / sizeof (wtype); \
+ }\
+ else \
+ {\
+ (pointer) = (ptype *) getPrivPixmapPtr(pDrawable)->bits; \
+ (width) = ((int) getPrivPixmapPtr(pDrawable)->stride) / sizeof (wtype); \
+ }\
+}
+
+#define cfbGetByteWidthAndPointer(pDrawable, width, pointer) \
+ cfbGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned char, unsigned char)
+
+#define cfbGetLongWidthAndPointer(pDrawable, width, pointer) \
+ cfbGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned long, unsigned long)
+
+#define cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, wtype, ptype) {\
+ hpPrivScreenPtr _pPix = (hpPrivScreenPtr) (pWin)->drawable.pScreen->devPrivate; \
+ (pointer) = (ptype *) _pPix->bits; \
+ (width) = ((int) _pPix->stride) / sizeof (wtype); \
+}
+
+#define cfbGetWindowLongWidthAndPointer(pWin, width, pointer) \
+ cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, unsigned long, unsigned long)
+
+#define cfbGetWindowByteWidthAndPointer(pWin, width, pointer) \
+ cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, unsigned char, unsigned char)
+
+/* Macros which handle a coordinate in a single register */
+
+/* Most compilers will convert divide by 65536 into a shift, if signed
+ * shifts exist. If your machine does arithmetic shifts and your compiler
+ * can't get it right, add to this line.
+ */
+
+/* mips compiler - what a joke - it CSEs the 65536 constant into a reg
+ * forcing as to use div instead of shift. Let's be explicit.
+ */
+
+#if defined(mips) || defined(sparc)
+#define GetHighWord(x) (((int) (x)) >> 16)
+#else
+#define GetHighWord(x) (((int) (x)) / 65536)
+#endif
+
+#if IMAGE_BYTE_ORDER == MSBFirst
+#define intToCoord(i,x,y) (((x) = GetHighWord(i)), ((y) = (int) ((short) (i))))
+#define coordToInt(x,y) (((x) << 16) | (y))
+#define intToX(i) (GetHighWord(i))
+#define intToY(i) ((int) ((short) i))
+#else
+#define intToCoord(i,x,y) (((x) = (int) ((short) (i))), ((y) = GetHighWord(i)))
+#define coordToInt(x,y) (((y) << 16) | (x))
+#define intToX(i) ((int) ((short) (i)))
+#define intToY(i) (GetHighWord(i))
+#endif