BSD 4_4_Lite2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Fri, 3 Jan 1992 17:23:33 +0000 (09:23 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Fri, 3 Jan 1992 17:23:33 +0000 (09:23 -0800)
Work on file usr/src/contrib/X11R5-hp300/mit/server/ddx/hpbsd/topcat/tcscrinit.c

Synthesized-from: CSRG/cd3/4.4BSD-Lite2

usr/src/contrib/X11R5-hp300/mit/server/ddx/hpbsd/topcat/tcscrinit.c [new file with mode: 0644]

diff --git a/usr/src/contrib/X11R5-hp300/mit/server/ddx/hpbsd/topcat/tcscrinit.c b/usr/src/contrib/X11R5-hp300/mit/server/ddx/hpbsd/topcat/tcscrinit.c
new file mode 100644 (file)
index 0000000..d38742a
--- /dev/null
@@ -0,0 +1,253 @@
+/************************************************************
+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 "X.h"
+#include "Xmd.h"
+#include "servermd.h"
+#include "scrnintstr.h"
+#include "pixmapstr.h"
+#include "resource.h"
+#include "colormap.h"
+#include "colormapst.h"
+#include "../cfb/cfb.h"
+#include "mi.h"
+#include "mistruct.h"
+#include "dix.h"
+#include "../cfb/cfbmskbits.h"
+#include "mibstore.h"
+#include "topcat.h"
+
+extern RegionPtr mfbPixmapToRegion();
+extern Bool mfbAllocatePrivates();
+
+extern Bool hpRealizeFont(), hpUnrealizeFont();
+extern void hpGetByteImage();
+
+extern int defaultColorVisualClass;
+
+#define _BP 8
+#define _RZ ((PSZ + 2) / 3)
+#define _RS 0
+#define _RM ((1 << _RZ) - 1)
+#define _GZ ((PSZ - _RZ + 1) / 2)
+#define _GS _RZ
+#define _GM (((1 << _GZ) - 1) << _GS)
+#define _BZ (PSZ - _RZ - _GZ)
+#define _BS (_RZ + _GZ)
+#define _BM (((1 << _BZ) - 1) << _BS)
+#define _CE (1 << _RZ)
+
+#if 0
+static VisualRec visuals[] = {
+/* vid  class        bpRGB cmpE nplan rMask gMask bMask oRed oGreen oBlue */
+#ifndef STATIC_COLOR
+    0,  PseudoColor, _BP,  1<<PSZ,   PSZ,  0,   0,   0,   0,   0,   0,
+    0,  DirectColor, _BP, _CE,       PSZ,  _RM, _GM, _BM, _RS, _GS, _BS,
+    0,  GrayScale,   _BP,  1<<PSZ,   PSZ,  0,   0,   0,   0,   0,   0,
+    0,  StaticGray,  _BP,  1<<PSZ,   PSZ,  0,   0,   0,   0,   0,   0,
+#endif
+    0,  StaticColor, _BP,  1<<PSZ,   PSZ,  _RM, _GM, _BM, _RS, _GS, _BS,
+    0,  TrueColor,   _BP, _CE,       PSZ,  _RM, _GM, _BM, _RS, _GS, _BS
+};
+
+#define        NUMVISUALS      ((sizeof visuals)/(sizeof visuals[0]))
+
+static  VisualID VIDs[NUMVISUALS];
+
+static DepthRec depths[] = {
+/* depth       numVid          vids */
+    1,         0,              NULL,
+    8,         NUMVISUALS,     VIDs
+};
+
+#define NUMDEPTHS      ((sizeof depths)/(sizeof depths[0]))
+
+#else
+
+/* vid  class        bpRGB cmpE nplan rMask gMask bMask oRed oGreen oBlue */
+static VisualRec PseudoColorVisual = {
+    0,  PseudoColor, _BP,  1<<PSZ,   PSZ,  0,   0,   0,   0,   0,   0,
+};
+
+static VisualRec StaticGrayVisual = {
+    0,  StaticGray,  1,  2,   1,  0,   0,   0,   0,   0,   0,
+};
+
+static DepthRec depth1 = {
+/* depth        numVid          vids */
+    1,          0,              NULL
+};
+
+static DepthRec depth8 = {
+/* depth        numVid          vids */
+    8,          1,              NULL
+};
+
+#endif
+
+int cfbWindowPrivateIndex;
+int cfbGCPrivateIndex;
+static unsigned long hpfbGeneration = 0;
+
+extern void hpSaveAreas(), hpRestoreAreas();
+
+static miBSFuncRec tcBSFuncRec = {
+    hpSaveAreas,
+    hpRestoreAreas,
+    (void (*)()) 0,
+    (PixmapPtr (*)()) 0,
+    (PixmapPtr (*)()) 0,
+};
+
+/*ARGSUSED*/
+Bool
+tcCloseScreen (index, pScreen)
+    int                index;
+    ScreenPtr  pScreen;
+{
+    xfree (pScreen->visuals);
+    xfree (pScreen->allowedDepths);
+    (void) cfbDestroyPixmap (getPrivScreenPtr(pScreen)->pTmpPixmap);
+    (void) cfbDestroyPixmap (getPrivScreenPtr(pScreen)->pDrawable);
+    return TRUE;
+}
+
+/* dts * (inch/dot) * (25.4 mm / inch) = mm */
+Bool
+tcScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, numPlanes)
+    register ScreenPtr pScreen;
+    pointer pbits;             /* pointer to screen bitmap */
+    int xsize, ysize;          /* in pixels */
+    int dpix, dpiy;            /* dots per inch */
+    int numPlanes;             /* number of planes in frame buffer */
+{
+    int        i;
+    int numVisuals;
+    int numDepths;
+    VisualRec *visuals;
+    DepthRec *depths;
+    
+    if (hpfbGeneration != serverGeneration)
+    {
+       numVisuals = 1;
+       visuals = (VisualRec *) xalloc(numVisuals*sizeof(VisualRec));
+       if (numPlanes == 1)
+           bcopy(&StaticGrayVisual, &(visuals[0]), sizeof(VisualRec));
+       else {
+           bcopy(&PseudoColorVisual, &(visuals[0]), sizeof(VisualRec));
+           if (numPlanes != PSZ) {
+               visuals[0].nplanes = numPlanes;
+               visuals[0].ColormapEntries = 1 << numPlanes;
+               if (numPlanes < 4)
+                   visuals[0].class = StaticGray;
+           }
+       }
+
+       /*  Set up the visual IDs */
+       visuals[0].vid = FakeClientID(0);
+
+        numDepths = 2;
+        depths =  (DepthRec *) xalloc(numDepths*sizeof(DepthRec));
+        bcopy(&depth8, &(depths[0]), sizeof(DepthRec));
+        bcopy(&depth1, &(depths[1]), sizeof(DepthRec));
+
+       /*  Set up the remaining fields in the depths[] array */
+       for (i = 0; i < numDepths; i++)
+       {
+           if (depths[i].numVids > 0)
+           {
+               depths[i].vids = (VisualID *)
+                   xalloc(sizeof (VisualID) * depths[i].numVids);
+               /* XXX - here we offer only the 8-bit visual */
+               depths[i].vids[0] = visuals[0].vid;
+           }
+       }
+       hpfbGeneration = serverGeneration;
+    }
+    if (!mfbAllocatePrivates(pScreen,
+                            &cfbWindowPrivateIndex, &cfbGCPrivateIndex))
+       return FALSE;
+    if (!AllocateWindowPrivate(pScreen, cfbWindowPrivateIndex,
+                              sizeof(cfbPrivWin)) ||
+       !AllocateGCPrivate(pScreen, cfbGCPrivateIndex, sizeof(cfbPrivGC)))
+       return FALSE;
+
+    pScreen->defColormap = FakeClientID(0);
+    /* let CreateDefColormap do whatever it wants */ 
+    pScreen->blackPixel = pScreen->whitePixel = (Pixel) 0;
+    pScreen->QueryBestSize = mfbQueryBestSize;
+    /* SaveScreen */
+    pScreen->GetImage = hpGetByteImage;
+    pScreen->GetSpans = cfbGetSpans;
+    pScreen->CreateWindow = cfbCreateWindow;
+    pScreen->DestroyWindow = cfbDestroyWindow;
+    pScreen->PositionWindow = cfbPositionWindow;
+    pScreen->ChangeWindowAttributes = cfbChangeWindowAttributes;
+    pScreen->RealizeWindow = cfbMapWindow;
+    pScreen->UnrealizeWindow = cfbUnmapWindow;
+    pScreen->PaintWindowBackground = tcPaintWindow;
+    pScreen->PaintWindowBorder = tcPaintWindow;
+    pScreen->CopyWindow = cfbCopyWindow;
+    pScreen->CreatePixmap = cfbCreatePixmap;
+    pScreen->DestroyPixmap = cfbDestroyPixmap;
+    pScreen->RealizeFont = hpRealizeFont;
+    pScreen->UnrealizeFont = hpUnrealizeFont;
+    pScreen->CreateGC = topcatCreateGC;
+    pScreen->CreateColormap = cfbInitializeColormap;
+    pScreen->DestroyColormap = NoopDDA;
+#ifdef STATIC_COLOR
+    pScreen->InstallColormap = cfbInstallColormap;
+    pScreen->UninstallColormap = cfbUninstallColormap;
+    pScreen->ListInstalledColormaps = cfbListInstalledColormaps;
+    pScreen->StoreColors = NoopDDA;
+    pScreen->ResolveColor = cfbResolveColor;
+#else
+    pScreen->InstallColormap = topcatInstallColormap;
+    pScreen->UninstallColormap = topcatUninstallColormap;
+    pScreen->ListInstalledColormaps = topcatListInstalledColormaps;
+    pScreen->StoreColors = topcatStoreColors;
+    pScreen->ResolveColor = topcatResolvePseudoColor;
+#endif
+    pScreen->BitmapToRegion = mfbPixmapToRegion;
+
+    if (!hpScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, /*width,*/
+                     depths[0].depth, numDepths, depths,
+                     visuals[0].vid, numVisuals, visuals,
+                     &tcBSFuncRec))
+       return FALSE;
+
+    getPrivScreenPtr(pScreen)->pTmpPixmap =
+       (pointer) cfbCreatePixmap(pScreen, PRIV_PIX_WIDTH, PRIV_PIX_HEIGHT,
+                                 pScreen->rootDepth);
+    if (!getPrivScreenPtr(pScreen)->pTmpPixmap)
+    {
+       (void) cfbDestroyPixmap (getPrivScreenPtr(pScreen)->pDrawable);
+       return FALSE;
+    }
+    return TRUE;
+}