#if !defined(_MFB_H_) || defined(MFB_PROTOTYPES_ONLY)
#ifndef MFB_PROTOTYPES_ONLY
#define _MFB_H_
#endif
#include "pixmap.h"
#include "region.h"
#include "gc.h"
#include "colormap.h"
#include "miscstruct.h"
#include "mibstore.h"
extern int InverseAlu[];
extern int mfbGetInverseAlu(int i);
#ifndef PixelType
#define PixelType CARD32
#endif
#ifndef MfbBits
#define MfbBits CARD32
#endif
extern void mfbDoBitblt(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr
);
extern RegionPtr mfbCopyArea(
DrawablePtr ,
DrawablePtr ,
GCPtr,
int ,
int ,
int ,
int ,
int ,
int
);
extern Bool mfbRegisterCopyPlaneProc(
ScreenPtr ,
RegionPtr (* )(
DrawablePtr ,
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned long
)
);
extern RegionPtr mfbCopyPlane(
DrawablePtr ,
DrawablePtr ,
GCPtr,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned long
);
extern void mfbDoBitbltCopy(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr
);
extern void mfbDoBitbltCopyInverted(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr
);
extern void mfbDoBitbltGeneral(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr
);
extern void mfbDoBitbltOr(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr
);
extern void mfbDoBitbltXor(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr
);
extern void mfbBresS(
int ,
PixelType * ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int
);
extern void mfbBresD(
int ,
int ,
int * ,
unsigned char * ,
int ,
int * ,
int ,
PixelType * ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int
);
extern void mfbSaveAreas(
PixmapPtr ,
RegionPtr ,
int ,
int ,
WindowPtr
);
extern void mfbRestoreAreas(
PixmapPtr ,
RegionPtr ,
int ,
int ,
WindowPtr
);
extern RegionPtr mfbPixmapToRegion(
PixmapPtr
);
#ifndef MFB_PROTOTYPES_ONLY
typedef RegionPtr (*mfbPixmapToRegionProc)(PixmapPtr);
extern mfbPixmapToRegionProc *mfbPixmapToRegionWeak(void);
#endif
extern int mfbListInstalledColormaps(
ScreenPtr ,
Colormap *
);
extern void mfbInstallColormap(
ColormapPtr
);
extern void mfbUninstallColormap(
ColormapPtr
);
extern void mfbResolveColor(
unsigned short * ,
unsigned short * ,
unsigned short * ,
VisualPtr
);
extern Bool mfbCreateColormap(
ColormapPtr
);
extern void mfbDestroyColormap(
ColormapPtr
);
extern Bool mfbCreateDefColormap(
ScreenPtr
);
extern void mfbPolyFillArcSolid(
DrawablePtr ,
GCPtr ,
int ,
xArc *
);
extern void mfbPolyFillRect(
DrawablePtr ,
GCPtr ,
int ,
xRectangle *
);
extern void mfbBlackSolidFS(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern void mfbWhiteSolidFS(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern void mfbInvertSolidFS(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern void mfbWhiteStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void mfbBlackStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void mfbInvertStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void mfbTileFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void mfbUnnaturalTileFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void mfbUnnaturalStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern Bool mfbRealizeFont(
ScreenPtr ,
FontPtr
);
extern Bool mfbUnrealizeFont(
ScreenPtr ,
FontPtr
);
#ifndef MFB_PROTOTYPES_ONLY
typedef void (*mfbRealizeFontProc)(ScreenPtr, FontPtr);
typedef void (*mfbUnrealizeFontProc)(ScreenPtr, FontPtr);
extern mfbRealizeFontProc *mfbRealizeFontWeak(void);
extern mfbUnrealizeFontProc *mfbUnrealizeFontWeak(void);
#endif
extern Bool mfbCreateGC(
GCPtr
);
extern void mfbValidateGC(
GCPtr ,
unsigned long ,
DrawablePtr
);
extern int mfbReduceRop(
int ,
Pixel
);
extern void mfbGetSpans(
DrawablePtr ,
int ,
DDXPointPtr ,
int * ,
int ,
char *
);
extern void mfbHorzS(
int ,
PixelType * ,
int ,
int ,
int ,
int
);
extern void mfbVertS(
int ,
PixelType * ,
int ,
int ,
int ,
int
);
extern void mfbImageGlyphBltBlack(
DrawablePtr ,
GCPtr,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void mfbImageGlyphBltWhite(
DrawablePtr ,
GCPtr,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void mfbPutImage(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
char *
);
extern void mfbGetImage(
DrawablePtr ,
int ,
int ,
int ,
int ,
unsigned int ,
unsigned long ,
char *
);
extern void mfbLineSS(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr
);
extern void mfbLineSD(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr
);
extern void mfbQueryBestSize(
int ,
unsigned short * ,
unsigned short * ,
ScreenPtr
);
#ifndef MFB_PROTOTYPES_ONLY
typedef void (*mfbQueryBestSizeProc)(int, unsigned short *, unsigned short *,
ScreenPtr);
extern mfbQueryBestSizeProc *mfbQueryBestSizeWeak(void);
#endif
extern void mfbSolidBlackArea(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr
);
extern void mfbStippleBlackArea(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr
);
extern void mfbSolidInvertArea(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr
);
extern void mfbStippleInvertArea(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr
);
extern void mfbSolidWhiteArea(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr
);
extern void mfbStippleWhiteArea(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr
);
extern void mfbPolyGlyphBltBlack(
DrawablePtr ,
GCPtr ,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void mfbPolyGlyphBltInvert(
DrawablePtr ,
GCPtr ,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void mfbPolyGlyphBltWhite(
DrawablePtr ,
GCPtr ,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern PixmapPtr mfbCreatePixmap(
ScreenPtr ,
int ,
int ,
int
);
extern Bool mfbDestroyPixmap(
PixmapPtr
);
extern PixmapPtr mfbCopyPixmap(
PixmapPtr
);
extern void mfbPadPixmap(
PixmapPtr
);
extern void mfbXRotatePixmap(
PixmapPtr ,
int
);
extern void mfbYRotatePixmap(
PixmapPtr ,
int
);
extern void mfbCopyRotatePixmap(
PixmapPtr ,
PixmapPtr * ,
int ,
int
);
extern void mfbFillPolyBlack(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
DDXPointPtr
);
extern void mfbFillPolyInvert(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
DDXPointPtr
);
extern void mfbFillPolyWhite(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
DDXPointPtr
);
extern void mfbPaintWindow(
WindowPtr ,
RegionPtr ,
int
);
extern void mfbPolyPoint(
DrawablePtr ,
GCPtr ,
int ,
int ,
xPoint *
);
extern void mfbSolidPP(
GCPtr ,
PixmapPtr ,
DrawablePtr ,
int ,
int ,
int ,
int
);
extern void mfbPushPixels(
GCPtr ,
PixmapPtr ,
DrawablePtr ,
int ,
int ,
int ,
int
);
#ifndef MFB_PROTOTYPES_ONLY
typedef void (*mfbPushPixelsProc)(GCPtr, PixmapPtr, DrawablePtr, int, int,
int, int);
extern mfbPushPixelsProc *mfbPushPixelsWeak(void);
#endif
extern Bool mfbCloseScreen(
int ,
ScreenPtr
);
extern Bool mfbAllocatePrivates(
ScreenPtr ,
int * ,
int *
);
extern Bool mfbScreenInit(
ScreenPtr ,
pointer ,
int ,
int ,
int ,
int ,
int
);
extern PixmapPtr mfbGetWindowPixmap(
WindowPtr
);
extern void mfbSetWindowPixmap(
WindowPtr ,
PixmapPtr
);
extern void mfbFillInScreen(ScreenPtr pScreen);
extern void mfbSegmentSS(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern void mfbSegmentSD(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern void mfbSetScanline(
int ,
int ,
int ,
int ,
PixelType * ,
int ,
PixelType * ,
int
);
extern void mfbSetSpans(
DrawablePtr ,
GCPtr ,
char * ,
DDXPointPtr ,
int * ,
int ,
int
);
extern void mfbTEGlyphBltBlack(
DrawablePtr ,
GCPtr,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void mfbTEGlyphBltWhite(
DrawablePtr ,
GCPtr,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void mfbTileAreaPPWCopy(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr
);
extern void mfbTileAreaPPWGeneral(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr
);
extern void mfbTileAreaPPW(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr
);
extern Bool mfbCreateWindow(
WindowPtr
);
extern Bool mfbDestroyWindow(
WindowPtr
);
extern Bool mfbMapWindow(
WindowPtr
);
extern Bool mfbPositionWindow(
WindowPtr ,
int ,
int
);
extern Bool mfbUnmapWindow(
WindowPtr
);
extern void mfbCopyWindow(
WindowPtr ,
DDXPointRec ,
RegionPtr
);
extern Bool mfbChangeWindowAttributes(
WindowPtr ,
unsigned long
);
extern void mfbZeroPolyArcSS(
DrawablePtr ,
GCPtr ,
int ,
xArc *
);
#ifndef MFB_PROTOTYPES_ONLY
typedef void (*mfbFillAreaProcPtr)(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr
);
typedef struct {
unsigned char rop;
unsigned char ropOpStip;
unsigned char ropFillArea;
unsigned char unused1[sizeof(long) - 3];
mfbFillAreaProcPtr FillArea;
} mfbPrivGC;
typedef mfbPrivGC *mfbPrivGCPtr;
#endif
extern int mfbGCPrivateIndex;
extern int mfbGetGCPrivateIndex(void);
extern int mfbWindowPrivateIndex;
extern int mfbGetWindowPrivateIndex(void);
#ifdef PIXMAP_PER_WINDOW
extern int frameWindowPrivateIndex;
extern int frameGetWindowPrivateIndex(void);
#endif
#ifndef MFB_PROTOTYPES_ONLY
typedef struct {
unsigned char fastBorder;
unsigned char fastBackground;
unsigned short unused;
DDXPointRec oldRotate;
PixmapPtr pRotatedBackground;
PixmapPtr pRotatedBorder;
} mfbPrivWin;
#define mfbGetTypedWidth(pDrawable,wtype) (\
(((pDrawable)->type == DRAWABLE_WINDOW) ? \
(int) (((PixmapPtr)((pDrawable)->pScreen->devPrivate))->devKind) : \
(int)(((PixmapPtr)pDrawable)->devKind)) / sizeof (wtype))
#define mfbGetByteWidth(pDrawable) mfbGetTypedWidth(pDrawable, unsigned char)
#define mfbGetPixelWidth(pDrawable) mfbGetTypedWidth(pDrawable, PixelType)
#define mfbGetTypedWidthAndPointer(pDrawable, width, pointer, wtype, ptype) {\
PixmapPtr _pPix; \
if ((pDrawable)->type == DRAWABLE_WINDOW) \
_pPix = (PixmapPtr) (pDrawable)->pScreen->devPrivate; \
else \
_pPix = (PixmapPtr) (pDrawable); \
(pointer) = (ptype *) _pPix->devPrivate.ptr; \
(width) = ((int) _pPix->devKind) / sizeof (wtype); \
}
#define mfbGetByteWidthAndPointer(pDrawable, width, pointer) \
mfbGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned char, unsigned char)
#define mfbGetPixelWidthAndPointer(pDrawable, width, pointer) \
mfbGetTypedWidthAndPointer(pDrawable, width, pointer, PixelType, PixelType)
#define mfbGetWindowTypedWidthAndPointer(pWin, width, pointer, wtype, ptype) {\
PixmapPtr _pPix = (PixmapPtr) (pWin)->drawable.pScreen->devPrivate; \
(pointer) = (ptype *) _pPix->devPrivate.ptr; \
(width) = ((int) _pPix->devKind) / sizeof (wtype); \
}
#define mfbGetWindowPixelWidthAndPointer(pWin, width, pointer) \
mfbGetWindowTypedWidthAndPointer(pWin, width, pointer, PixelType, PixelType)
#define mfbGetWindowByteWidthAndPointer(pWin, width, pointer) \
mfbGetWindowTypedWidthAndPointer(pWin, width, pointer, char, char)
#define mfbScanlineIncNoBankSwitch(_ptr, _off) _ptr += (_off)
#define mfbScanlineOffsetNoBankSwitch(_ptr, _off) ((_ptr) + (_off))
#define mfbScanlineDeltaNoBankSwitch(_ptr, _y, _w) \
mfbScanlineOffsetNoBankSwitch(_ptr, (_y) * (_w))
#define mfbScanlineNoBankSwitch(_ptr, _x, _y, _w) \
mfbScanlineOffsetNoBankSwitch(_ptr, (_y) * (_w) + ((_x) >> MFB_PWSH))
#ifdef MFB_LINE_BANK
#include "mfblinebank.h"
#else
#define mfbScanlineInc(_ptr, _off) mfbScanlineIncNoBankSwitch(_ptr, _off)
#define mfbScanlineIncSrc(_ptr, _off) mfbScanlineInc(_ptr, _off)
#define mfbScanlineIncDst(_ptr, _off) mfbScanlineInc(_ptr, _off)
#define mfbScanlineOffset(_ptr, _off) mfbScanlineOffsetNoBankSwitch(_ptr, _off)
#define mfbScanlineOffsetSrc(_ptr, _off) mfbScanlineOffset(_ptr, _off)
#define mfbScanlineOffsetDst(_ptr, _off) mfbScanlineOffset(_ptr, _off)
#define mfbScanlineSrc(_ptr, _x, _y, _w) mfbScanline(_ptr, _x, _y, _w)
#define mfbScanlineDst(_ptr, _x, _y, _w) mfbScanline(_ptr, _x, _y, _w)
#define mfbScanlineDeltaSrc(_ptr, _y, _w) mfbScanlineDelta(_ptr, _y, _w)
#define mfbScanlineDeltaDst(_ptr, _y, _w) mfbScanlineDelta(_ptr, _y, _w)
#endif
#define mfbScanlineDelta(_ptr, _y, _w) \
mfbScanlineOffset(_ptr, (_y) * (_w))
#define mfbScanline(_ptr, _x, _y, _w) \
mfbScanlineOffset(_ptr, (_y) * (_w) + ((_x) >> MFB_PWSH))
typedef struct _pos{
int xpos;
int xchar;
int leftEdge;
int rightEdge;
int topEdge;
int bottomEdge;
PixelType *pdstBase;
int widthGlyph;
} TEXTPOS;
#define RROP_BLACK GXclear
#define RROP_WHITE GXset
#define RROP_NOP GXnoop
#define RROP_INVERT GXinvert
#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) (MfbBits)(~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 ~
#endif
#endif