#include "pixmap.h"
#include "region.h"
#include "gc.h"
#include "colormap.h"
#include "miscstruct.h"
#include "mibstore.h"
extern int ilbmInverseAlu[];
extern int ilbmScreenPrivateIndex;
#ifndef PixelType
#define PixelType unsigned long
#endif
#define AFB_MAX_DEPTH 8
extern void ilbmDoBitblt(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern RegionPtr ilbmBitBlt(
DrawablePtr ,
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
int ,
int ,
int ,
void (*doBitBlt)(),
unsigned long
);
extern RegionPtr ilbmCopyArea(
DrawablePtr ,
DrawablePtr ,
GCPtr,
int ,
int ,
int ,
int ,
int ,
int
);
extern RegionPtr ilbmCopyPlane(
DrawablePtr ,
DrawablePtr ,
GCPtr,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned long
);
extern void ilbmCopy1ToN(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void ilbmDoBitbltCopy(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void ilbmDoBitbltCopyInverted(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void ilbmDoBitbltGeneral(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void ilbmDoBitbltOr(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void ilbmDoBitbltXor(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void ilbmBresS(
PixelType * ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned char *
);
extern void ilbmBresD(
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 ilbmSaveAreas(
PixmapPtr ,
RegionPtr ,
int ,
int ,
WindowPtr
);
extern void ilbmRestoreAreas(
PixmapPtr ,
RegionPtr ,
int ,
int ,
WindowPtr
);
extern RegionPtr ilbmPixmapToRegion(
PixmapPtr
);
extern Bool ilbmInitializeColormap(
ColormapPtr
);
extern void ilbmResolveColor(
unsigned short * ,
unsigned short * ,
unsigned short * ,
VisualPtr
);
extern Bool ilbmSetVisualTypes(
int ,
int ,
int
);
extern void ilbmPolyFillArcSolid(
DrawablePtr ,
GCPtr ,
int ,
xArc *
);
extern void ilbmPolyFillRect(
DrawablePtr ,
GCPtr ,
int ,
xRectangle *
);
extern void ilbmFillPolygonSolid(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
DDXPointPtr
);
extern void ilbmSolidFS(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern void ilbmStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void ilbmTileFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void ilbmUnnaturalTileFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void ilbmUnnaturalStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void ilbmOpaqueStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void ilbmUnnaturalOpaqueStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern Bool ilbmRealizeFont(
ScreenPtr ,
FontPtr
);
extern Bool ilbmUnrealizeFont(
ScreenPtr ,
FontPtr
);
extern Bool ilbmCreateGC(
GCPtr
);
extern void ilbmValidateGC(
GCPtr ,
unsigned long ,
DrawablePtr
);
extern void ilbmDestroyGC(
GCPtr
);
extern void ilbmReduceRop(
int ,
Pixel ,
unsigned long ,
int ,
unsigned char *
);
extern void ilbmReduceOpaqueStipple (
Pixel ,
Pixel ,
unsigned long ,
int ,
unsigned char *
);
extern void ilbmComputeCompositeClip(
GCPtr ,
DrawablePtr
);
extern void ilbmGetSpans(
DrawablePtr ,
int ,
DDXPointPtr ,
int * ,
int ,
char *
);
extern int ilbmHorzS(
PixelType * ,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned char *
);
extern int ilbmVertS(
PixelType * ,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned char *
);
extern void ilbmImageGlyphBlt (
DrawablePtr ,
GCPtr,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void ilbmPutImage(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
char *
);
extern void ilbmGetImage(
DrawablePtr ,
int ,
int ,
int ,
int ,
unsigned int ,
unsigned long ,
char *
);
extern void ilbmLineSS(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr
);
extern void ilbmLineSD(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr
);
extern void ilbmQueryBestSize(
int ,
unsigned short * ,
unsigned short * ,
ScreenPtr
);
extern void ilbmSolidFillArea(
DrawablePtr ,
int ,
BoxPtr ,
unsigned char *
);
extern void ilbmStippleAreaPPW(
DrawablePtr ,
int ,
BoxPtr ,
PixmapPtr ,
unsigned char *
);
extern void ilbmStippleArea(
DrawablePtr ,
int ,
BoxPtr ,
PixmapPtr ,
int ,
int ,
unsigned char *
);
extern void ilbmPolyGlyphBlt(
DrawablePtr ,
GCPtr ,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern PixmapPtr ilbmCreatePixmap(
ScreenPtr ,
int ,
int ,
int
);
extern Bool ilbmDestroyPixmap(
PixmapPtr
);
extern PixmapPtr ilbmCopyPixmap(
PixmapPtr
);
extern void ilbmPadPixmap(
PixmapPtr
);
extern void ilbmXRotatePixmap(
PixmapPtr ,
int
);
extern void ilbmYRotatePixmap(
PixmapPtr ,
int
);
extern void ilbmCopyRotatePixmap(
PixmapPtr ,
PixmapPtr * ,
int ,
int
);
extern void ilbmPaintWindow(
WindowPtr ,
RegionPtr ,
int
);
extern void ilbmPolyPoint(
DrawablePtr ,
GCPtr ,
int ,
int ,
xPoint *
);
extern void ilbmPushPixels(
GCPtr ,
PixmapPtr ,
DrawablePtr ,
int ,
int ,
int ,
int
);
extern Bool ilbmCloseScreen(
int ,
ScreenPtr
);
extern Bool ilbmAllocatePrivates(
ScreenPtr ,
int * ,
int *
);
extern Bool ilbmScreenInit(
ScreenPtr ,
pointer ,
int ,
int ,
int ,
int ,
int
);
extern PixmapPtr ilbmGetWindowPixmap(
WindowPtr
);
extern void ilbmSetWindowPixmap(
WindowPtr ,
PixmapPtr
);
extern void ilbmSegmentSS(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern void ilbmSegmentSD(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern int ilbmSetScanline(
int ,
int ,
int ,
int ,
PixelType * ,
int ,
PixelType * ,
int ,
int ,
int ,
int
);
extern void ilbmSetSpans(
DrawablePtr ,
GCPtr ,
char * ,
DDXPointPtr ,
int * ,
int ,
int
);
extern void ilbmTEGlyphBlt(
DrawablePtr ,
GCPtr,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void ilbmTileAreaPPWCopy(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
unsigned long
);
extern void ilbmTileAreaPPWGeneral(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
unsigned long
);
extern void ilbmTileAreaCopy(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
int ,
int ,
unsigned long
);
extern void ilbmTileAreaGeneral(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
int ,
int ,
unsigned long
);
extern void ilbmOpaqueStippleAreaPPWCopy(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
unsigned char *,
unsigned long
);
extern void ilbmOpaqueStippleAreaPPWGeneral(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
unsigned char *,
unsigned long
);
extern void ilbmOpaqueStippleAreaCopy(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
int ,
int ,
unsigned char *,
unsigned long
);
extern void ilbmOpaqueStippleAreaGeneral(
DrawablePtr ,
int ,
BoxPtr ,
int ,
PixmapPtr ,
int ,
int ,
unsigned char *,
unsigned long
);
extern Bool ilbmCreateWindow(
WindowPtr
);
extern Bool ilbmDestroyWindow(
WindowPtr
);
extern Bool ilbmMapWindow(
WindowPtr
);
extern Bool ilbmPositionWindow(
WindowPtr ,
int ,
int
);
extern Bool ilbmUnmapWindow(
WindowPtr
);
extern void ilbmCopyWindow(
WindowPtr ,
DDXPointRec ,
RegionPtr
);
extern Bool ilbmChangeWindowAttributes(
WindowPtr ,
unsigned long
);
extern void ilbmZeroPolyArcSS(
DrawablePtr ,
GCPtr ,
int ,
xArc *
);
typedef struct {
unsigned char rrops[AFB_MAX_DEPTH];
unsigned char rropOS[AFB_MAX_DEPTH];
} ilbmPrivGC;
typedef ilbmPrivGC *ilbmPrivGCPtr;
extern int ilbmGCPrivateIndex;
extern int ilbmWindowPrivateIndex;
#ifdef PIXMAP_PER_WINDOW
extern int frameWindowPrivateIndex;
#endif
#define ilbmGetGCPrivate(pGC) \
((ilbmPrivGC *)((pGC)->devPrivates[ilbmGCPrivateIndex].ptr))
typedef struct {
unsigned char fastBorder;
unsigned char fastBackground;
unsigned short unused;
DDXPointRec oldRotate;
PixmapPtr pRotatedBackground;
PixmapPtr pRotatedBorder;
} ilbmPrivWin;
#define ilbmGetPixelWidthAuxDepthAndPointer(pDrawable, width, aux, dep, pointer) {\
PixmapPtr _pPix; \
if ((pDrawable)->type == DRAWABLE_WINDOW) \
_pPix = (PixmapPtr)(pDrawable)->pScreen->devPrivates[ilbmScreenPrivateIndex].ptr; \
else \
_pPix = (PixmapPtr)(pDrawable); \
(pointer) = (PixelType *)_pPix->devPrivate.ptr; \
(width) = ((int)_pPix->devKind)/sizeof(PixelType); \
(dep) = _pPix->drawable.depth; \
(aux) = (width)*(dep); \
}
#define ilbmScanlineIncNoBankSwitch(_ptr, _off) _ptr += (_off)
#define ilbmScanlineOffsetNoBankSwitch(_ptr, _off) ((_ptr)+(_off))
#define ilbmScanlineDeltaNoBankSwitch(_ptr, _y, _w) \
ilbmScanlineOffsetNoBankSwitch(_ptr, (_y)*(_w))
#define ilbmScanlineNoBankSwitch(_ptr, _x, _y, _w) \
ilbmScanlineOffsetNoBankSwitch(_ptr, (_y)*(_w)+((_x)>>MFB_PWSH))
#ifdef MFB_LINE_BANK
#include "ilbmlinebank.h"
#else
#define ilbmScanlineInc(_ptr, _off) ilbmScanlineIncNoBankSwitch(_ptr, _off)
#define ilbmScanlineIncSrc(_ptr, _off) ilbmScanlineInc(_ptr, _off)
#define ilbmScanlineIncDst(_ptr, _off) ilbmScanlineInc(_ptr, _off)
#define ilbmScanlineOffset(_ptr, _off) ilbmScanlineOffsetNoBankSwitch(_ptr, _off)
#define ilbmScanlineOffsetSrc(_ptr, _off) ilbmScanlineOffset(_ptr, _off)
#define ilbmScanlineOffsetDst(_ptr, _off) ilbmScanlineOffset(_ptr, _off)
#define ilbmScanlineSrc(_ptr, _x, _y, _w) ilbmScanline(_ptr, _x, _y, _w)
#define ilbmScanlineDst(_ptr, _x, _y, _w) ilbmScanline(_ptr, _x, _y, _w)
#define ilbmScanlineDeltaSrc(_ptr, _y, _w) ilbmScanlineDelta(_ptr, _y, _w)
#define ilbmScanlineDeltaDst(_ptr, _y, _w) ilbmScanlineDelta(_ptr, _y, _w)
#endif
#define ilbmScanlineDelta(_ptr, _y, _w) \
ilbmScanlineOffset(_ptr, (_y)*(_w))
#define ilbmScanline(_ptr, _x, _y, _w) \
ilbmScanlineOffset(_ptr, (_y)*(_w)+((_x)>>MFB_PWSH))
typedef struct _ilbmpos{
int xpos;
int xchar;
int leftEdge;
int rightEdge;
int topEdge;
int bottomEdge;
PixelType *pdstBase;
int widthGlyph;
} ilbmTEXTPOS;
#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))
#define fnSET(src, dst) (~0)
#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; \
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 ~