diff options
Diffstat (limited to 'nx-X11/programs/Xserver/hw/sun/sunInit.c')
-rw-r--r-- | nx-X11/programs/Xserver/hw/sun/sunInit.c | 960 |
1 files changed, 0 insertions, 960 deletions
diff --git a/nx-X11/programs/Xserver/hw/sun/sunInit.c b/nx-X11/programs/Xserver/hw/sun/sunInit.c deleted file mode 100644 index 62cc8c76a..000000000 --- a/nx-X11/programs/Xserver/hw/sun/sunInit.c +++ /dev/null @@ -1,960 +0,0 @@ -/* $Xorg: sunInit.c,v 1.4 2000/08/17 19:48:29 cpqbld Exp $ */ -/* - * sunInit.c -- - * Initialization functions for screen/keyboard/mouse, etc. - * - * Copyright 1987 by the Regents of the University of California - * - * 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 - * notice appear in all copies. The University of California - * makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without - * express or implied warranty. - * - * - */ -/* $XFree86: xc/programs/Xserver/hw/sun/sunInit.c,v 3.12 2002/12/06 02:11:44 tsi Exp $ */ - -/************************************************************ -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 The Open Group -not be used in advertising or publicity pertaining to -distribution of the software without specific prior -written permission. Sun and The Open Group 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 "sun.h" -#include "gcstruct.h" -#include "mi.h" -#include "mibstore.h" -#include "cfb.h" -#include "cfb16.h" -#include "cfb32.h" - -/* maximum pixmap depth */ -#ifndef SUNMAXDEPTH -#define SUNMAXDEPTH 8 -#endif - -#ifdef i386 /* { */ -#define BW2I NULL -#else /* }{ */ -extern Bool sunBW2Init( - int /* screen */, - ScreenPtr /* pScreen */, - int /* argc */, - char** /* argv */ -); -#define BW2I sunBW2Init -#endif /* } */ - - -#if SUNMAXDEPTH == 1 /* { */ -#define CG2I NULL -#define CG3I NULL -#define CG4I NULL -#define CG6I NULL -#define CG8I NULL -#define TCXI NULL -#else /* }{ */ -extern Bool sunCG3Init( - int /* screen */, - ScreenPtr /* pScreen */, - int /* argc */, - char** /* argv */ -); -#define CG3I sunCG3Init -#if defined(i386) || defined(__bsdi__) /* { */ -#define CG2I NULL -#define CG4I NULL -#else /* }{ */ -#ifdef INCLUDE_CG2_HEADER -extern Bool sunCG2Init( - int /* screen */, - ScreenPtr /* pScreen */, - int /* argc */, - char** /* argv */ -); -#define CG2I sunCG2Init -#endif /* INCLUDE_CG2_HEADER */ -extern Bool sunCG4Init( - int /* screen */, - ScreenPtr /* pScreen */, - int /* argc */, - char** /* argv */ -); -#define CG4I sunCG4Init -#endif /* } */ -#ifdef FBTYPE_SUNFAST_COLOR /* { */ -extern Bool sunCG6Init( - int /* screen */, - ScreenPtr /* pScreen */, - int /* argc */, - char** /* argv */ -); -#define CG6I sunCG6Init -#else /* }{ */ -#define CG6I NULL -#endif /* } */ -#ifdef XFBTYPE_TCX /* { */ -extern Bool sunTCXInit( - int /* screen */, - ScreenPtr /* pScreen */, - int /* argc */, - char** /* argv */ -); -#define TCXI sunTCXInit -#else /* }{ */ -#define TCXI NULL -#endif /* } */ -#if SUNMAXDEPTH > 8 /* { */ -#ifdef FBTYPE_MEMCOLOR /* { */ -extern Bool sunCG8Init( - int /* screen */, - ScreenPtr /* pScreen */, - int /* argc */, - char** /* argv */ -); -#define CG8I sunCG8Init -#else /* }{ */ -#define CG8I NULL -#endif /* } */ -#else /* }{ */ -#define CG8I NULL -#endif /* } */ - -#endif /* } */ - -extern KeySymsRec sunKeySyms[]; -extern SunModmapRec *sunModMaps[]; -extern int sunMaxLayout; -extern KeySym* sunType4KeyMaps[]; -extern SunModmapRec* sunType4ModMaps[]; - -static Bool sunDevsInited = FALSE; - -Bool sunAutoRepeatHandlersInstalled; /* FALSE each time InitOutput called */ -Bool sunSwapLkeys = FALSE; -Bool sunFlipPixels = FALSE; -Bool sunFbInfo = FALSE; -Bool sunCG4Frob = FALSE; -Bool sunNoGX = FALSE; - -sunKbdPrivRec sunKbdPriv = { - -1, /* fd */ - -1, /* type */ - -1, /* layout */ - 0, /* click */ - (Leds)0, /* leds */ -}; - -sunPtrPrivRec sunPtrPriv = { - -1, /* fd */ - 0 /* Current button state */ -}; - -/* - * The name member in the following table corresponds to the - * FBTYPE_* macros defined in /usr/include/sun/fbio.h file - */ -sunFbDataRec sunFbData[XFBTYPE_LASTPLUSONE] = { - { NULL, "SUN1BW (bw1)" }, - { NULL, "SUN1COLOR (cg1)" }, - { BW2I, "SUN2BW (bw2)" }, -#ifdef INCLUDE_CG2_HEADER - { CG2I, "SUN2COLOR (cg2)" }, -#endif /* INCLUDE_CG2_HEADER */ - { NULL, "SUN2GP (gp1/gp2)" }, - { NULL, "SUN5COLOR (cg5/386i accel)" }, - { CG3I, "SUN3COLOR (cg3)" }, - { CG8I, "MEMCOLOR (cg8)" }, - { CG4I, "SUN4COLOR (cg4)" }, - { NULL, "NOTSUN1" }, - { NULL, "NOTSUN2" }, - { NULL, "NOTSUN3" } -#ifndef i386 /* { */ - ,{ CG6I, "SUNFAST_COLOR (cg6/gx)" }, - { NULL, "SUNROP_COLOR (cg9)" }, - { NULL, "SUNFB_VIDEO" }, - { NULL, "SUNGIFB" }, - { NULL, "SUNPLAS" }, -#ifdef FBTYPE_SUNGP3 - { NULL, "SUNGP3 (cg12/gs)" }, -#endif -#ifdef FBTYPE_SUNGT - { NULL, "SUNGT (gt)" }, -#endif -#ifdef FBTYPE_SUNLEO - { NULL, "SUNLEO (zx)" }, -#endif -#ifdef FBTYPE_MDICOLOR - { NULL, "MDICOLOR (cgfourteen)" }, -#endif -#ifdef XFBTYPE_TCX - { TCXI, "TCX (tcx)" }, -#endif -#endif /* } */ -}; - -/* - * a list of devices to try if there is no environment or command - * line list of devices - */ -#if SUNMAXDEPTH == 1 /* { */ -static char *fallbackList[] = { - BWTWO0DEV, BWTWO1DEV, BWTWO2DEV -}; -#else /* }{ */ -static char *fallbackList[] = { -#ifndef i386 /* { */ - CGTWO0DEV, CGTWO1DEV, CGTWO2DEV, -#if (MAXSCREENS == 4) - CGTWO3DEV, -#endif -#endif /* } */ - CGTHREE0DEV, -#ifndef i386 /* { */ - CGTHREE1DEV, CGTHREE2DEV, -#if (MAXSCREENS == 4) - CGTHREE3DEV, -#endif -#endif /* } */ -#ifdef FBTYPE_SUNFAST_COLOR /* { */ - CGSIX0DEV, CGSIX1DEV, CGSIX2DEV, -#if (MAXSCREENS == 4) - CGSIX3DEV, -#endif -#endif /* } */ -#ifndef i386 /* { */ - CGFOUR0DEV, BWTWO0DEV, BWTWO1DEV, BWTWO2DEV, -#if (MAXSCREENS == 4) - BWTWO3DEV, -#endif -#endif /* } */ -#if SUNMAXDEPTH > 8 /* { */ - CGEIGHT0DEV, -#if 0 -#ifdef XFBTYPE_TCX - TCX0DEV, -#endif -#endif -#endif /* } */ - "/dev/fb" -}; -#endif /* } */ - -#define FALLBACK_LIST_LEN sizeof fallbackList / sizeof fallbackList[0] - -fbFd sunFbs[MAXSCREENS]; - -static PixmapFormatRec formats[] = { - { 1, 1, BITMAP_SCANLINE_PAD } /* 1-bit deep */ -#if SUNMAXDEPTH > 1 - ,{ 8, 8, BITMAP_SCANLINE_PAD} /* 8-bit deep */ -#if SUNMAXDEPTH > 8 - ,{ 12, 24, BITMAP_SCANLINE_PAD } /* 12-bit deep */ - ,{ 24, 32, BITMAP_SCANLINE_PAD } /* 24-bit deep */ -#endif -#endif -}; -#define NUMFORMATS (sizeof formats)/(sizeof formats[0]) - -/* - * OpenFrameBuffer -- - * Open a frame buffer according to several rules. - * Find the device to use by looking in the sunFbData table, - * an XDEVICE envariable, a -dev switch or using /dev/fb if trying - * to open screen 0 and all else has failed. - * - * Results: - * The fd of the framebuffer. - */ -static int OpenFrameBuffer(device, screen) - char *device; /* e.g. "/dev/cgtwo0" */ - int screen; /* what screen am I going to be */ -{ - int ret = TRUE; - struct fbgattr *fbattr; - static int devFbUsed; - - sunFbs[screen].fd = -1; - if (strcmp (device, "/dev/fb") == 0 && devFbUsed) - return FALSE; - if (access (device, R_OK | W_OK) == -1) - return FALSE; - if ((sunFbs[screen].fd = open(device, O_RDWR, 0)) == -1) - ret = FALSE; - else { - fbattr = (struct fbgattr *) xalloc (sizeof (struct fbgattr)); - if (ioctl(sunFbs[screen].fd, FBIOGATTR, fbattr) == -1) { - /* - This is probably a bwtwo; the $64,000 question is: - is it the mono plane of a cgfour, or is it really a - real bwtwo? If there is only a cgfour in the box or - only a bwtwo in the box, then it isn't a problem. If - it's a 3/60, which has a bwtwo on the mother board *and* - a cgfour, then things get tricky because there's no way - to tell if the bwtwo is really being emulated by the cgfour. - */ - xfree (fbattr); - fbattr = NULL; - if (ioctl(sunFbs[screen].fd, FBIOGTYPE, &sunFbs[screen].info) == -1) { - Error("unable to get frame buffer attributes"); - (void) close(sunFbs[screen].fd); - sunFbs[screen].fd = -1; - return FALSE; - } - } - if (ret) { - devFbUsed = TRUE; - if (fbattr) { - if (fbattr->fbtype.fb_type >= XFBTYPE_LASTPLUSONE) { - ErrorF ("%s is an unknown framebuffer type\n", device); - (void) close(sunFbs[screen].fd); - sunFbs[screen].fd = -1; - return FALSE; - } - sunFbs[screen].info = fbattr->fbtype; - } - sunFbs[screen].fbPriv = (pointer) fbattr; - if (fbattr && !sunFbData[fbattr->fbtype.fb_type].init) { - int _i; - ret = FALSE; - for (_i = 0; _i < FB_ATTR_NEMUTYPES; _i++) { - if (sunFbData[fbattr->emu_types[_i]].init) { - sunFbs[screen].info.fb_type = fbattr->emu_types[_i]; - ret = TRUE; - if (sunFbInfo) - ErrorF ("%s is emulating a %s\n", device, - sunFbData[fbattr->fbtype.fb_type].name); - break; - } - } - } - if (sunFbInfo) - ErrorF ("%s is really a %s\n", device, - sunFbData[fbattr ? fbattr->fbtype.fb_type : sunFbs[screen].info.fb_type].name); - } - } - if (!ret) - sunFbs[screen].fd = -1; - return ret; -} - -/*- - *----------------------------------------------------------------------- - * SigIOHandler -- - * Signal handler for SIGIO - input is available. - * - * Results: - * sunSigIO is set - ProcessInputEvents() will be called soon. - * - * Side Effects: - * None - * - *----------------------------------------------------------------------- - */ -/*ARGSUSED*/ -static void SigIOHandler(sig) - int sig; -{ - int olderrno = errno; - sunEnqueueEvents (); - errno = olderrno; -} - -/*- - *----------------------------------------------------------------------- - * sunNonBlockConsoleOff -- - * Turn non-blocking mode on the console off, so you don't get logged - * out when the server exits. - * - * Results: - * None. - * - * Side Effects: - * None. - * - *----------------------------------------------------------------------- - */ -void sunNonBlockConsoleOff( -#if defined(SVR4) || defined(CSRG_BASED) - void -#else - char* arg -#endif -) -{ - register int i; - - i = fcntl(2, F_GETFL, 0); - if (i >= 0) - (void) fcntl(2, F_SETFL, i & ~FNDELAY); -} - -static char** GetDeviceList (argc, argv) - int argc; - char **argv; -{ - int i; - char *envList = NULL; - char *cmdList = NULL; - char **deviceList = (char **)NULL; - - for (i = 1; i < argc; i++) - if (strcmp (argv[i], "-dev") == 0 && i+1 < argc) { - cmdList = argv[i + 1]; - break; - } - if (!cmdList) - envList = getenv ("XDEVICE"); - - if (cmdList || envList) { - char *_tmpa; - char *_tmpb; - int _i1; - deviceList = (char **) xalloc ((MAXSCREENS + 1) * sizeof (char *)); - _tmpa = (cmdList) ? cmdList : envList; - for (_i1 = 0; _i1 < MAXSCREENS; _i1++) { - _tmpb = strtok (_tmpa, ":"); - if (_tmpb) - deviceList[_i1] = _tmpb; - else - deviceList[_i1] = NULL; - _tmpa = NULL; - } - deviceList[MAXSCREENS] = NULL; - } - if (!deviceList) { - /* no environment and no cmdline, so default */ - deviceList = - (char **) xalloc ((FALLBACK_LIST_LEN + 1) * sizeof (char *)); - for (i = 0; i < FALLBACK_LIST_LEN; i++) - deviceList[i] = fallbackList[i]; - deviceList[FALLBACK_LIST_LEN] = NULL; - } - return deviceList; -} - -static void getKbdType() -{ -/* - * The Sun 386i has system include files that preclude this pre SunOS 4.1 - * test for the presence of a type 4 keyboard however it really doesn't - * matter since no 386i has ever been shipped with a type 3 keyboard. - * SunOS 4.1 no longer needs this kludge. - */ -#if !defined(i386) && !defined(KIOCGKEY) -#define TYPE4KEYBOARDOVERRIDE -#endif - - int ii; - - for (ii = 0; ii < 3; ii++) { - sunKbdWait(); - (void) ioctl (sunKbdPriv.fd, KIOCTYPE, &sunKbdPriv.type); -#ifdef TYPE4KEYBOARDOVERRIDE - /* - * Magic. Look for a key which is non-existent on a real type - * 3 keyboard but does exist on a type 4 keyboard. - */ - if (sunKbdPriv.type == KB_SUN3) { - struct kiockeymap key; - - key.kio_tablemask = 0; - key.kio_station = 118; - if (ioctl(sunKbdPriv.fd, KIOCGKEY, &key) == -1) { - Error( "ioctl KIOCGKEY" ); - FatalError("Can't KIOCGKEY on fd %d\n", sunKbdPriv.fd); - } - if (key.kio_entry != HOLE) - sunKbdPriv.type = KB_SUN4; - } -#endif - switch (sunKbdPriv.type) { - case KB_SUN2: - case KB_SUN3: - case KB_SUN4: return; - default: - sunChangeKbdTranslation(sunKbdPriv.fd, FALSE); - continue; - } - } - FatalError ("Unsupported keyboard type %d\n", sunKbdPriv.type); -} - -void OsVendorInit( - void -) -{ - static int inited; - if (!inited) { -#ifndef i386 - struct rlimit rl; - - /* - * one per client, one per screen, one per listen endpoint, - * keyboard, mouse, and stderr - */ - int maxfds = MAXCLIENTS + MAXSCREENS + 5; - - if (getrlimit (RLIMIT_NOFILE, &rl) == 0) { - rl.rlim_cur = maxfds < rl.rlim_max ? maxfds : rl.rlim_max; - (void) setrlimit (RLIMIT_NOFILE, &rl); - } -#endif - sunKbdPriv.fd = open ("/dev/kbd", O_RDWR, 0); - if (sunKbdPriv.fd < 0) - FatalError ("Cannot open /dev/kbd, error %d\n", errno); - sunPtrPriv.fd = open ("/dev/mouse", O_RDWR, 0); - if (sunPtrPriv.fd < 0) - FatalError ("Cannot open /dev/mouse, error %d\n", errno); - getKbdType (); - if (sunKbdPriv.type == KB_SUN4) { - (void) ioctl (sunKbdPriv.fd, KIOCLAYOUT, &sunKbdPriv.layout); - if (sunKbdPriv.layout < 0 || - sunKbdPriv.layout > sunMaxLayout || - sunType4KeyMaps[sunKbdPriv.layout] == NULL) - FatalError ("Unsupported keyboard type 4 layout %d\n", - sunKbdPriv.layout); - sunKeySyms[KB_SUN4].map = sunType4KeyMaps[sunKbdPriv.layout]; - sunModMaps[KB_SUN4] = sunType4ModMaps[sunKbdPriv.layout]; - } - inited = 1; - } -} - -#ifdef DDXOSFATALERROR -void OsVendorFatalError(void) -{ -} -#endif - -/*- - *----------------------------------------------------------------------- - * InitOutput -- - * Initialize screenInfo for all actually accessible framebuffers. - * The - * - * Results: - * screenInfo init proc field set - * - * Side Effects: - * None - * - *----------------------------------------------------------------------- - */ - -void InitOutput(pScreenInfo, argc, argv) - ScreenInfo *pScreenInfo; - int argc; - char **argv; -{ - int i, scr; - int nonBlockConsole = 0; - char **devList; - static int setup_on_exit = 0; - extern Bool RunFromSmartParent; - - if (!monitorResolution) - monitorResolution = 90; - if (RunFromSmartParent) - nonBlockConsole = 1; - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i],"-debug")) - nonBlockConsole = 0; - } - - /* - * Writes to /dev/console can block - causing an - * excess of error messages to hang the server in - * deadlock. So....... - */ - if (nonBlockConsole) { - if (!setup_on_exit) { -#if defined(SVR4) || defined(CSRG_BASED) - if (atexit(sunNonBlockConsoleOff)) -#else - if (on_exit(sunNonBlockConsoleOff, (char *)0)) -#endif - ErrorF("InitOutput: can't register NBIO exit handler\n"); - - setup_on_exit = 1; - } - i = fcntl(2, F_GETFL, 0); - if (i >= 0) - i = fcntl(2, F_SETFL, i | FNDELAY); - if (i < 0) { - Error("fcntl"); - ErrorF("InitOutput: can't put stderr in non-block mode\n"); - } - } - pScreenInfo->imageByteOrder = IMAGE_BYTE_ORDER; - pScreenInfo->bitmapScanlineUnit = BITMAP_SCANLINE_UNIT; - pScreenInfo->bitmapScanlinePad = BITMAP_SCANLINE_PAD; - pScreenInfo->bitmapBitOrder = BITMAP_BIT_ORDER; - - pScreenInfo->numPixmapFormats = NUMFORMATS; - for (i=0; i< NUMFORMATS; i++) - pScreenInfo->formats[i] = formats[i]; -#ifdef XKB - if (noXkbExtension) -#endif - sunAutoRepeatHandlersInstalled = FALSE; - if (!sunDevsInited) { - /* first time ever */ - for (scr = 0; scr < MAXSCREENS; scr++) - sunFbs[scr].fd = -1; - devList = GetDeviceList (argc, argv); - for (i = 0, scr = 0; devList[i] != NULL && scr < MAXSCREENS; i++) - if (OpenFrameBuffer (devList[i], scr)) - scr++; - sunDevsInited = TRUE; - xfree (devList); - } - for (scr = 0; scr < MAXSCREENS; scr++) - if (sunFbs[scr].fd != -1) - (void) AddScreen (sunFbData[sunFbs[scr].info.fb_type].init, - argc, argv); - (void) OsSignal(SIGWINCH, SIG_IGN); -} - -/*- - *----------------------------------------------------------------------- - * InitInput -- - * Initialize all supported input devices...what else is there - * besides pointer and keyboard? - * - * Results: - * None. - * - * Side Effects: - * Two DeviceRec's are allocated and registered as the system pointer - * and keyboard devices. - * - *----------------------------------------------------------------------- - */ -void InitInput(argc, argv) - int argc; - char **argv; -{ - pointer p, k; - extern Bool mieqInit(); - - p = AddInputDevice(sunMouseProc, TRUE); - k = AddInputDevice(sunKbdProc, TRUE); - if (!p || !k) - FatalError("failed to create input devices in InitInput"); - - RegisterPointerDevice(p); - RegisterKeyboardDevice(k); - miRegisterPointerDevice(screenInfo.screens[0], p); - (void) mieqInit (k, p); -#define SET_FLOW(fd) fcntl(fd, F_SETFL, FNDELAY | FASYNC) -#ifdef SVR4 - (void) OsSignal(SIGPOLL, SigIOHandler); -#define WANT_SIGNALS(fd) ioctl(fd, I_SETSIG, S_INPUT | S_HIPRI) -#else - (void) OsSignal(SIGIO, SigIOHandler); -#define WANT_SIGNALS(fd) fcntl(fd, F_SETOWN, getpid()) -#endif - if (sunKbdPriv.fd >= 0) { - if (SET_FLOW(sunKbdPriv.fd) == -1 || WANT_SIGNALS(sunKbdPriv.fd) == -1) { - (void) close (sunKbdPriv.fd); - sunKbdPriv.fd = -1; - FatalError("Async kbd I/O failed in InitInput"); - } - } - if (sunPtrPriv.fd >= 0) { - if (SET_FLOW(sunPtrPriv.fd) == -1 || WANT_SIGNALS(sunPtrPriv.fd) == -1) { - (void) close (sunPtrPriv.fd); - sunPtrPriv.fd = -1; - FatalError("Async mouse I/O failed in InitInput"); - } - } -} - - -#if SUNMAXDEPTH == 8 - -Bool -sunCfbSetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, width, bpp) - register ScreenPtr pScreen; - pointer pbits; /* pointer to screen bitmap */ - int xsize, ysize; /* in pixels */ - int dpix, dpiy; /* dots per inch */ - int width; /* pixel width of frame buffer */ - int bpp; /* bits per pixel of root */ -{ - return cfbSetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, - width); -} - -Bool -sunCfbFinishScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width, bpp) - register ScreenPtr pScreen; - pointer pbits; /* pointer to screen bitmap */ - int xsize, ysize; /* in pixels */ - int dpix, dpiy; /* dots per inch */ - int width; /* pixel width of frame buffer */ - int bpp; /* bits per pixel of root */ -{ - return cfbFinishScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, - width); -} - -Bool -sunCfbScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width, bpp) - register ScreenPtr pScreen; - pointer pbits; /* pointer to screen bitmap */ - int xsize, ysize; /* in pixels */ - int dpix, dpiy; /* dots per inch */ - int width; /* pixel width of frame buffer */ - int bpp; /* bits per pixel of root */ -{ - return cfbScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width); -} - -#else /* SUNMAXDEPTH != 8 */ -#if SUNMAXDEPTH == 32 - -static Bool -sunCfbCreateGC(pGC) - GCPtr pGC; -{ - if (pGC->depth == 1) - { - return mfbCreateGC (pGC); - } - else if (pGC->depth <= 8) - { - return cfbCreateGC (pGC); - } - else if (pGC->depth <= 16) - { - return cfb16CreateGC (pGC); - } - else if (pGC->depth <= 32) - { - return cfb32CreateGC (pGC); - } - return FALSE; -} - -static void -sunCfbGetSpans(pDrawable, wMax, ppt, pwidth, nspans, pdstStart) - DrawablePtr pDrawable; /* drawable from which to get bits */ - int wMax; /* largest value of all *pwidths */ - register DDXPointPtr ppt; /* points to start copying from */ - int *pwidth; /* list of number of bits to copy */ - int nspans; /* number of scanlines to copy */ - char *pdstStart; /* where to put the bits */ -{ - switch (pDrawable->bitsPerPixel) { - case 1: - mfbGetSpans(pDrawable, wMax, ppt, pwidth, nspans, pdstStart); - break; - case 8: - cfbGetSpans(pDrawable, wMax, ppt, pwidth, nspans, pdstStart); - break; - case 16: - cfb16GetSpans(pDrawable, wMax, ppt, pwidth, nspans, pdstStart); - break; - case 32: - cfb32GetSpans(pDrawable, wMax, ppt, pwidth, nspans, pdstStart); - break; - } - return; -} - -static void -sunCfbGetImage(pDrawable, sx, sy, w, h, format, planeMask, pdstLine) - DrawablePtr pDrawable; - int sx, sy, w, h; - unsigned int format; - unsigned long planeMask; - char *pdstLine; -{ - switch (pDrawable->bitsPerPixel) - { - case 1: - mfbGetImage(pDrawable, sx, sy, w, h, format, planeMask, pdstLine); - break; - case 8: - cfbGetImage(pDrawable, sx, sy, w, h, format, planeMask, pdstLine); - break; - case 16: - cfb16GetImage(pDrawable, sx, sy, w, h, format, planeMask, pdstLine); - break; - case 32: - cfb32GetImage(pDrawable, sx, sy, w, h, format, planeMask, pdstLine); - break; - } -} - -Bool -sunCfbSetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, width, bpp) - register ScreenPtr pScreen; - pointer pbits; /* pointer to screen bitmap */ - int xsize, ysize; /* in pixels */ - int dpix, dpiy; /* dots per inch */ - int width; /* pixel width of frame buffer */ - int bpp; /* bits per pixel of root */ -{ - int ret; - - switch (bpp) { - case 8: - ret = cfbSetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, width); - break; - case 16: - ret = cfb16SetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, width); - break; - case 32: - ret = cfb32SetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, width); - break; - default: - return FALSE; - } - pScreen->CreateGC = sunCfbCreateGC; - pScreen->GetImage = sunCfbGetImage; - pScreen->GetSpans = sunCfbGetSpans; - return ret; -} - -/* Adapt cfb logic */ -#undef CFB_NEED_SCREEN_PRIVATE -#if !defined(SINGLEDEPTH) || defined(FORDE_SEPARATE_PRIVATE) -#define CFB_NEED_SCREEN_PRIVATE -#endif - -extern BSFuncRec cfbBSFuncRec, cfb16BSFuncRec, cfb32BSFuncRec; -extern Bool cfbCloseScreen(), cfb16CloseScreen(), cfb32CloseScreen(); -#ifdef CFB_NEED_SCREEN_PRIVATE -extern int cfb16ScreenPrivateIndex, cfb32ScreenPrivateIndex; -#endif - -Bool -sunCfbFinishScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width, bpp) - register ScreenPtr pScreen; - pointer pbits; /* pointer to screen bitmap */ - int xsize, ysize; /* in pixels */ - int dpix, dpiy; /* dots per inch */ - int width; /* pixel width of frame buffer */ - int bpp; -{ -#ifdef CFB_NEED_SCREEN_PRIVATE - pointer oldDevPrivate; -#endif - VisualPtr visuals; - int nvisuals; - DepthPtr depths; - int ndepths; - VisualID defaultVisual; - int rootdepth = 0; - - if (!cfbInitVisuals(&visuals, &depths, &nvisuals, &ndepths, - &rootdepth, &defaultVisual, 1 << (bpp - 1), 8)) - return FALSE; -#ifdef CFB_NEED_SCREEN_PRIVATE - oldDevPrivate = pScreen->devPrivate; -#endif - if (! miScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width, - rootdepth, ndepths, depths, - defaultVisual, nvisuals, visuals)) - return FALSE; - switch (bpp) - { - case 8: - pScreen->CloseScreen = cfbCloseScreen; - pScreen->BackingStoreFuncs = cfbBSFuncRec; - break; - case 16: - pScreen->CloseScreen = cfb16CloseScreen; - pScreen->BackingStoreFuncs = cfb16BSFuncRec; -#ifdef CFB_NEED_SCREEN_PRIVATE - pScreen->devPrivates[cfb16ScreenPrivateIndex].ptr = - pScreen->devPrivate; - pScreen->devPrivate = oldDevPrivate; -#endif - break; - case 32: - pScreen->CloseScreen = cfb32CloseScreen; - pScreen->BackingStoreFuncs = cfb32BSFuncRec; -#ifdef CFB_NEED_SCREEN_PRIVATE - pScreen->devPrivates[cfb32ScreenPrivateIndex].ptr = - pScreen->devPrivate; - pScreen->devPrivate = oldDevPrivate; -#endif - break; - } - return TRUE; -} - - -Bool -sunCfbScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width, bpp) - register ScreenPtr pScreen; - pointer pbits; /* pointer to screen bitmap */ - int xsize, ysize; /* in pixels */ - int dpix, dpiy; /* dots per inch */ - int width; /* pixel width of frame buffer */ - int bpp; -{ - if (!sunCfbSetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, - width, bpp)) - return FALSE; - return sunCfbFinishScreenInit(pScreen, pbits, xsize, ysize, dpix, - dpiy, width, bpp); -} - -#endif /* SUNMAXDEPTH == 32 */ -#endif /* SUNMAXDEPTH */ - -#ifdef DPMSExtension -/************************************************************** - * DPMSSet(), DPMSGet(), DPMSSupported() - * - * stubs - * - ***************************************************************/ - -void DPMSSet (level) - int level; -{ -} - -int DPMSGet (level) - int* level; -{ - return -1; -} - -Bool DPMSSupported () -{ - return FALSE; -} -#endif |