#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include <stdlib.h>
#include "xf4bpp.h"
#include "mfbmap.h"
#include "mfb.h"
#include "mi.h"
#include "micmap.h"
#include "scrnintstr.h"
#include "vgaVideo.h"
#if 0
static VisualRec vgaVisuals[] = {
#ifdef PC98
{ 0, StaticColor, 4, 1 << VGA_MAXPLANES, VGA_MAXPLANES, 0, 0, 0, 0, 0, 0 },
{ 0, StaticGray, 4, 1 << VGA_MAXPLANES, VGA_MAXPLANES, 0, 0, 0, 0, 0, 0 },
{ 0, GrayScale, 4, 1 << VGA_MAXPLANES, VGA_MAXPLANES, 0, 0, 0, 0, 0, 0 },
{ 0, PseudoColor, 4, 1 << VGA_MAXPLANES, VGA_MAXPLANES, 0, 0, 0, 0, 0, 0 },
#else
{ 0, StaticColor, 6, 1 << VGA_MAXPLANES, VGA_MAXPLANES, 0, 0, 0, 0, 0, 0 },
{ 0, StaticGray, 6, 1 << VGA_MAXPLANES, VGA_MAXPLANES, 0, 0, 0, 0, 0, 0 },
{ 0, GrayScale, 6, 1 << VGA_MAXPLANES, VGA_MAXPLANES, 0, 0, 0, 0, 0, 0 },
{ 0, PseudoColor, 6, 1 << VGA_MAXPLANES, VGA_MAXPLANES, 0, 0, 0, 0, 0, 0 },
#endif
} ;
#endif
void
xf4bppNeverCalled()
{
FatalError("xf4bppNeverCalled was nevertheless called\n");
}
static BSFuncRec ppcBSFuncRec = {
xf4bppSaveAreas,
xf4bppRestoreAreas,
(BackingStoreSetClipmaskRgnProcPtr) 0,
(BackingStoreGetImagePixmapProcPtr) 0,
(BackingStoreGetSpansPixmapProcPtr) 0,
};
static Bool
vgaScreenClose
(
int idx,
ScreenPtr pScreen
)
{
pScreen->defColormap = 0 ;
return TRUE;
}
static GCPtr sampleGCperDepth[MAXFORMATS+1] = { 0 };
static PixmapPtr samplePixmapPerDepth[1] = { 0 };
typedef struct
{
pointer pbits;
int width;
} miScreenInitParmsRec, *miScreenInitParmsPtr;
static Bool
v16CreateScreenResources
(
ScreenPtr pScreen
)
{
miScreenInitParmsPtr pScrInitParms;
pointer value;
pScrInitParms = (miScreenInitParmsPtr)pScreen->devPrivate;
if (pScrInitParms->width)
{
PixmapPtr pPixmap;
pPixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0, pScreen->rootDepth);
if (!pPixmap)
return FALSE;
if (!(*pScreen->ModifyPixmapHeader)(pPixmap, pScreen->width,
pScreen->height, pScreen->rootDepth, 8 ,
#define BITS_PER_BYTE_SHIFT 3
pScrInitParms->width >> BITS_PER_BYTE_SHIFT,
pScrInitParms->pbits))
return FALSE;
value = (pointer)pPixmap;
}
else
{
value = pScrInitParms->pbits;
}
xfree(pScreen->devPrivate);
pScreen->devPrivate = value;
return TRUE;
}
Bool
xf4bppScreenInit( pScreen, pbits, virtx, virty, dpix, dpiy, width )
ScreenPtr pScreen;
pointer pbits;
int virtx, virty;
int dpix, dpiy;
int width;
{
Bool ret;
VisualPtr visuals;
DepthPtr depths;
int nvisuals;
int ndepths;
int rootdepth;
VisualID defaultVisual;
rootdepth = 0;
ret = miInitVisuals(&visuals, &depths, &nvisuals, &ndepths, &rootdepth,
&defaultVisual, (unsigned long)1 << 8, 6, -1);
if (!ret)
return FALSE;
pScreen-> id = 0;
pScreen->defColormap = FakeClientID(0);
pScreen-> whitePixel = VGA_WHITE_PIXEL;
pScreen-> blackPixel = VGA_BLACK_PIXEL;
pScreen-> rgf = 0;
*(pScreen-> GCperDepth) = *(sampleGCperDepth);
*(pScreen-> PixmapPerDepth) = *(samplePixmapPerDepth);
pScreen-> CloseScreen = vgaScreenClose;
pScreen-> QueryBestSize = xf4bppQueryBestSize;
pScreen-> GetImage = xf4bppGetImage;
pScreen-> GetSpans = xf4bppGetSpans;
pScreen-> CreateWindow = xf4bppCreateWindowForXYhardware;
pScreen-> DestroyWindow = xf4bppDestroyWindow;
pScreen-> PositionWindow = xf4bppPositionWindow;
pScreen-> PaintWindowBackground = xf4bppPaintWindow;
pScreen-> PaintWindowBorder = xf4bppPaintWindow;
pScreen-> CopyWindow = xf4bppCopyWindow;
pScreen-> CreatePixmap = xf4bppCreatePixmap;
pScreen-> SaveDoomedAreas = (SaveDoomedAreasProcPtr)NoopDDA;
pScreen-> RestoreAreas = (RestoreAreasProcPtr)NoopDDA;
pScreen-> ExposeCopy = (ExposeCopyProcPtr)NoopDDA;
pScreen-> TranslateBackingStore = (TranslateBackingStoreProcPtr)NoopDDA;
pScreen-> ClearBackingStore = (ClearBackingStoreProcPtr)NoopDDA;
pScreen-> DrawGuarantee = (DrawGuaranteeProcPtr)NoopDDA;
pScreen-> CreateGC = xf4bppCreateGC;
pScreen-> CreateColormap = xf4bppInitializeColormap;
pScreen-> DestroyColormap = (DestroyColormapProcPtr)NoopDDA;
pScreen-> InstallColormap = miInstallColormap;
pScreen-> UninstallColormap = miUninstallColormap;
pScreen-> ListInstalledColormaps = miListInstalledColormaps;
pScreen-> StoreColors = (StoreColorsProcPtr)NoopDDA;
pScreen-> ResolveColor = xf4bppResolveColor;
mfbFillInScreen(pScreen);
if (!mfbAllocatePrivates(pScreen, (int*)NULL, (int*)NULL))
return FALSE;
if (!miScreenInit(pScreen, pbits, virtx, virty, dpix, dpiy, width,
rootdepth, ndepths, depths, defaultVisual ,
nvisuals, visuals))
return FALSE;
pScreen->BackingStoreFuncs = ppcBSFuncRec;
pScreen -> CreateScreenResources = v16CreateScreenResources;
mfbRegisterCopyPlaneProc(pScreen,miCopyPlane);
return TRUE;
}