#include "pixmap.h"
#include "region.h"
#include "gc.h"
#include "colormap.h"
#include "regionstr.h"
#include "mibstore.h"
#include "mfb.h"
extern int afbInverseAlu[];
extern int afbScreenPrivateIndex;
#ifndef PixelType
#define PixelType CARD32
#endif
#define AFB_MAX_DEPTH 8
extern void afbDoBitblt(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern RegionPtr afbBitBlt(
DrawablePtr ,
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
int ,
int ,
int ,
void (*doBitBlt)(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
),
unsigned long
);
extern RegionPtr afbCopyArea(
DrawablePtr ,
DrawablePtr ,
GCPtr,
int ,
int ,
int ,
int ,
int ,
int
);
extern RegionPtr afbCopyPlane(
DrawablePtr ,
DrawablePtr ,
GCPtr,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned long
);
extern void afbCopy1ToN(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void afbDoBitbltCopy(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void afbDoBitbltCopyInverted(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void afbDoBitbltGeneral(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void afbDoBitbltOr(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void afbDoBitbltXor(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void afbBresS(
PixelType * ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned char *
);
extern void afbBresD(
int * ,
unsigned char * ,
int ,
int * ,
int ,
PixelType * ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned char * ,
unsigned char *
);
extern void afbSaveAreas(
PixmapPtr ,
RegionPtr ,
int ,
int ,
WindowPtr
);
extern void afbRestoreAreas(
PixmapPtr ,
RegionPtr ,
int ,
int ,
WindowPtr
);
extern RegionPtr afbPixmapToRegion(
PixmapPtr
);
extern int afbListInstalledColormaps(
ScreenPtr ,
Colormap *
);
extern void afbInstallColormap(
ColormapPtr
);
extern void afbUninstallColormap(
ColormapPtr
);
extern void afbResolveColor(
unsigned short * ,
unsigned short * ,
unsigned short * ,
VisualPtr
);
extern Bool afbInitializeColormap(
ColormapPtr
);
extern int afbExpandDirectColors(
ColormapPtr ,
int ,
xColorItem * ,
xColorItem *
);
extern Bool afbCreateDefColormap(
ScreenPtr
);
extern Bool afbSetVisualTypes(
int ,
int ,
int
);
extern Bool afbInitVisuals(
VisualPtr * ,
DepthPtr * ,
int * ,
int * ,
int * ,
VisualID * ,
unsigned long ,
int
);
extern void afbPolyFillArcSolid(
DrawablePtr ,
GCPtr ,
int ,
xArc *
);
extern void afbPolyFillRect(
DrawablePtr ,
GCPtr ,
int ,
xRectangle *
);
extern void afbFillPolygonSolid(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
DDXPointPtr
);
extern void afbSolidFS(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern void afbStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void afbTileFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void afbUnnaturalTileFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void afbUnnaturalStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void afbOpaqueStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void afbUnnaturalOpaqueStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern Bool afbRealizeFont(
ScreenPtr ,
FontPtr
);
extern Bool afbUnrealizeFont(
ScreenPtr ,
FontPtr
);
extern Bool afbCreateGC(
GCPtr
);
extern void afbValidateGC(
GCPtr ,
unsigned long ,
DrawablePtr
);
extern void afbDestroyGC(
GCPtr
);
extern void afbReduceRop(
int ,
Pixel ,
unsigned long ,
int ,
unsigned char *
);
extern void afbReduceOpaqueStipple (
Pixel ,
Pixel ,
unsigned long ,
int ,
unsigned char *
);
extern void afbComputeCompositeClip(
GCPtr ,
DrawablePtr
);
extern void afbGetSpans(
DrawablePtr ,
int ,
DDXPointPtr ,
int * ,
int ,
char *
);
extern void afbHorzS(
PixelType * ,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned char *
);
extern void afbVertS(
PixelType * ,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned char *
);
extern void afbImageGlyphBlt (
DrawablePtr ,
GCPtr,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void afbPutImage(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
char *
);
extern void afbGetImage(
DrawablePtr ,
int ,
int ,
int ,
int ,
unsigned int ,
unsigned long ,
char *
);
extern void afbLineSS(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr
);
extern void afbLineSD(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr
);
extern void afbQueryBestSize(
int ,
unsigned short * ,
unsigned short * ,
ScreenPtr
);
extern void afbSolidFillArea(
DrawablePtr ,
int ,
BoxPtr ,
unsigned char *
);
extern void afbStippleAreaPPW(
DrawablePtr ,
int ,
BoxPtr ,
PixmapPtr ,
unsigned char *
);
extern void afbStippleArea(
DrawablePtr ,
int ,
BoxPtr ,
PixmapPtr ,
int ,
int ,
unsigned char *
);
extern void afbPolyGlyphBlt(
DrawablePtr ,
GCPtr ,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern PixmapPtr afbCreatePixmap(
ScreenPtr ,
int ,
int ,
int
);
extern Bool afbDestroyPixmap(
PixmapPtr
);
extern PixmapPtr afbCopyPixmap(
PixmapPtr
);
extern void afbPadPixmap(
PixmapPtr
);
extern void afbXRotatePixmap(
PixmapPtr ,
int
);
extern void afbYRotatePixmap(
PixmapPtr ,
int
);
extern void afbCopyRotatePixmap(
PixmapPtr ,
PixmapPtr * ,
int ,
int
);
extern void afbPaintWindow(
WindowPtr ,
RegionPtr ,
int
);
extern void afbPolyPoint(
DrawablePtr ,
GCPtr ,
int ,
int ,
xPoint *
);
extern void afbPushPixels(
GCPtr ,
PixmapPtr ,
DrawablePtr ,
int ,
int ,
int ,
int
);
extern Bool afbCloseScreen(
int ,
ScreenPtr
);
extern Bool afbAllocatePrivates(
ScreenPtr ,
int * ,
int *
);
extern Bool afbScreenInit(
ScreenPtr ,
pointer ,
int ,
int ,
int ,
int ,
int
);
extern PixmapPtr afbGetWindowPixmap(
WindowPtr
);
extern void afbSetWindowPixmap(
WindowPtr ,
PixmapPtr
);
extern void afbSegmentSS(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern void afbSegmentSD(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern void afbSetScanline(
int ,
int ,
int ,
int ,
PixelType * ,
int ,
PixelType * ,
int ,
int ,
int ,
int
);
extern void afbSetSpans(
DrawablePtr ,
GCPtr ,
char * ,
DDXPointPtr ,
int * ,
int ,
int
);
extern void afbTEGlyphBlt(
DrawablePtr ,
GCPtr,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void afbTileAreaPPWCopy(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
unsigned long
);
extern void afbTileAreaPPWGeneral(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
unsigned long
);
extern void afbTileAreaCopy(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
int ,
int ,
unsigned long
);
extern void afbTileAreaGeneral(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
int ,
int ,
unsigned long
);
extern void afbOpaqueStippleAreaPPWCopy(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
unsigned char *,
unsigned long
);
extern void afbOpaqueStippleAreaPPWGeneral(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
unsigned char *,
unsigned long
);
extern void afbOpaqueStippleAreaCopy(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
int ,
int ,
unsigned char *,
unsigned long
);
extern void afbOpaqueStippleAreaGeneral(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
int ,
int ,
unsigned char *,
unsigned long
);
extern Bool afbCreateWindow(
WindowPtr
);
extern Bool afbDestroyWindow(
WindowPtr
);
extern Bool afbMapWindow(
WindowPtr
);
extern Bool afbPositionWindow(
WindowPtr ,
int ,
int
);
extern Bool afbUnmapWindow(
WindowPtr
);
extern void afbCopyWindow(
WindowPtr ,
DDXPointRec ,
RegionPtr
);
extern Bool afbChangeWindowAttributes(
WindowPtr ,
unsigned long
);
extern void afbZeroPolyArcSS(
DrawablePtr ,
GCPtr ,
int ,
xArc *
);
typedef struct {
unsigned char rrops[AFB_MAX_DEPTH];
unsigned char rropOS[AFB_MAX_DEPTH];
} afbPrivGC;
typedef afbPrivGC *afbPrivGCPtr;
extern int afbGCPrivateIndex;
extern int afbWindowPrivateIndex;
#ifdef PIXMAP_PER_WINDOW
extern int frameWindowPrivateIndex;
#endif
#define afbGetGCPrivate(pGC) \
((afbPrivGC *)((pGC)->devPrivates[afbGCPrivateIndex].ptr))
typedef struct {
unsigned char fastBorder;
unsigned char fastBackground;
unsigned short unused;
DDXPointRec oldRotate;
PixmapPtr pRotatedBackground;
PixmapPtr pRotatedBorder;
} afbPrivWin;
#define afbGetTypedWidth(pDrawable,wtype)( \
(((pDrawable)->type == DRAWABLE_WINDOW) ? \
(int)(((PixmapPtr)((pDrawable)->pScreen->devPrivates[afbScreenPrivateIndex].ptr))->devKind) : \
(int)(((PixmapPtr)pDrawable)->devKind)) / sizeof (wtype))
#define afbGetByteWidth(pDrawable) afbGetTypedWidth(pDrawable, unsigned char)
#define afbGetPixelWidth(pDrawable) afbGetTypedWidth(pDrawable, PixelType)
#define afbGetTypedWidthAndPointer(pDrawable, width, pointer, wtype, ptype) {\
PixmapPtr _pPix; \
if ((pDrawable)->type == DRAWABLE_WINDOW) \
_pPix = (PixmapPtr)(pDrawable)->pScreen->devPrivates[afbScreenPrivateIndex].ptr; \
else \
_pPix = (PixmapPtr)(pDrawable); \
(pointer) = (ptype *) _pPix->devPrivate.ptr; \
(width) = ((int) _pPix->devKind) / sizeof (wtype); \
}
#define afbGetPixelWidthSizeDepthAndPointer(pDrawable, width, size, dep, pointer) {\
PixmapPtr _pPix; \
if ((pDrawable)->type == DRAWABLE_WINDOW) \
_pPix = (PixmapPtr)(pDrawable)->pScreen->devPrivates[afbScreenPrivateIndex].ptr; \
else \
_pPix = (PixmapPtr)(pDrawable); \
(pointer) = (PixelType *)_pPix->devPrivate.ptr; \
(width) = ((int)_pPix->devKind) / sizeof (PixelType); \
(size) = (width) * _pPix->drawable.height; \
(dep) = _pPix->drawable.depth; (void)(dep); \
}
#define afbGetByteWidthAndPointer(pDrawable, width, pointer) \
afbGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned char, unsigned char)
#define afbGetPixelWidthAndPointer(pDrawable, width, pointer) \
afbGetTypedWidthAndPointer(pDrawable, width, pointer, PixelType, PixelType)
#define afbGetWindowTypedWidthAndPointer(pWin, width, pointer, wtype, ptype) {\
PixmapPtr _pPix = (PixmapPtr)(pWin)->drawable.pScreen->devPrivates[afbScreenPrivateIndex].ptr; \
(pointer) = (ptype *) _pPix->devPrivate.ptr; \
(width) = ((int) _pPix->devKind) / sizeof (wtype); \
}
#define afbGetWindowPixelWidthAndPointer(pWin, width, pointer) \
afbGetWindowTypedWidthAndPointer(pWin, width, pointer, PixelType, PixelType)
#define afbGetWindowByteWidthAndPointer(pWin, width, pointer) \
afbGetWindowTypedWidthAndPointer(pWin, width, pointer, char, char)
#define afbScanlineIncNoBankSwitch(_ptr, _off) _ptr += (_off)
#define afbScanlineOffsetNoBankSwitch(_ptr, _off) ((_ptr) + (_off))
#define afbScanlineDeltaNoBankSwitch(_ptr, _y, _w) \
afbScanlineOffsetNoBankSwitch(_ptr, (_y) * (_w))
#define afbScanlineNoBankSwitch(_ptr, _x, _y, _w) \
afbScanlineOffsetNoBankSwitch(_ptr, (_y) * (_w) + ((_x) >> MFB_PWSH))
#ifdef MFB_LINE_BANK
#include "afblinebank.h"
#else
#define afbScanlineInc(_ptr, _off) afbScanlineIncNoBankSwitch(_ptr, _off)
#define afbScanlineIncSrc(_ptr, _off) afbScanlineInc(_ptr, _off)
#define afbScanlineIncDst(_ptr, _off) afbScanlineInc(_ptr, _off)
#define afbScanlineOffset(_ptr, _off) afbScanlineOffsetNoBankSwitch(_ptr, _off)
#define afbScanlineOffsetSrc(_ptr, _off) afbScanlineOffset(_ptr, _off)
#define afbScanlineOffsetDst(_ptr, _off) afbScanlineOffset(_ptr, _off)
#define afbScanlineSrc(_ptr, _x, _y, _w) afbScanline(_ptr, _x, _y, _w)
#define afbScanlineDst(_ptr, _x, _y, _w) afbScanline(_ptr, _x, _y, _w)
#define afbScanlineDeltaSrc(_ptr, _y, _w) afbScanlineDelta(_ptr, _y, _w)
#define afbScanlineDeltaDst(_ptr, _y, _w) afbScanlineDelta(_ptr, _y, _w)
#endif
#define afbScanlineDelta(_ptr, _y, _w) \
afbScanlineOffset(_ptr, (_y) * (_w))
#define afbScanline(_ptr, _x, _y, _w) \
afbScanlineOffset(_ptr, (_y) * (_w) + ((_x) >> MFB_PWSH))
typedef struct _afbpos{
int xpos;
int xchar;
int leftEdge;
int rightEdge;
int topEdge;
int bottomEdge;
PixelType *pdstBase;
int widthGlyph;
} afbTEXTPOS;
#define RROP_BLACK GXclear
#define RROP_WHITE GXset
#define RROP_NOP GXnoop
#define RROP_INVERT GXinvert
#define RROP_COPY GXcopy
#define fnCLEAR(src, dst) (0)
#define fnAND(src, dst) (src & dst)
#define fnANDREVERSE(src, dst) (src & ~dst)
#define fnCOPY(src, dst) (src)
#define fnANDINVERTED(src, dst) (~src & dst)
#define fnNOOP(src, dst) (dst)
#define fnXOR(src, dst) (src ^ dst)
#define fnOR(src, dst) (src | dst)
#define fnNOR(src, dst) (~(src | dst))
#define fnEQUIV(src, dst) (~src ^ dst)
#define fnINVERT(src, dst) (~dst)
#define fnORREVERSE(src, dst) (src | ~dst)
#define fnCOPYINVERTED(src, dst) (~src)
#define fnORINVERTED(src, dst) (~src | dst)
#define fnNAND(src, dst) (~(src & dst))
#undef fnSET
#define fnSET(src, dst) (~0)
#undef DoRop
#define DoRop(result, alu, src, dst) \
{ \
if (alu == GXcopy) \
result = fnCOPY (src, dst); \
else if (alu == GXxor) \
result = fnXOR (src, dst); \
else \
switch (alu) { \
case GXclear: \
result = fnCLEAR (src, dst); \
break; \
case GXand: \
result = fnAND (src, dst); \
break; \
case GXandReverse: \
result = fnANDREVERSE (src, dst); \
break; \
case GXandInverted: \
result = fnANDINVERTED (src, dst); \
break; \
default: \
case GXnoop: \
result = fnNOOP (src, dst); \
break; \
case GXor: \
result = fnOR (src, dst); \
break; \
case GXnor: \
result = fnNOR (src, dst); \
break; \
case GXequiv: \
result = fnEQUIV (src, dst); \
break; \
case GXinvert: \
result = fnINVERT (src, dst); \
break; \
case GXorReverse: \
result = fnORREVERSE (src, dst); \
break; \
case GXcopyInverted: \
result = fnCOPYINVERTED (src, dst); \
break; \
case GXorInverted: \
result = fnORINVERTED (src, dst); \
break; \
case GXnand: \
result = fnNAND (src, dst); \
break; \
case GXset: \
result = fnSET (src, dst); \
break; \
} \
}
#define MFB_OPEQ_WHITE |=
#define MFB_OPEQ_BLACK &=~
#define MFB_OPEQ_INVERT ^=
#define MFB_EQWHOLEWORD_WHITE =~0
#define MFB_EQWHOLEWORD_BLACK =0
#define MFB_EQWHOLEWORD_INVERT ^=~0
#define MFB_OP_WHITE
#define MFB_OP_BLACK ~