Remove ancient trunk folder from svn repository
[synfig.git] / synfig-osx / trunk / launcher / darwin.c
diff --git a/synfig-osx/trunk/launcher/darwin.c b/synfig-osx/trunk/launcher/darwin.c
deleted file mode 100644 (file)
index 93549e8..0000000
+++ /dev/null
@@ -1,982 +0,0 @@
-/**************************************************************
- *
- * Shared code for the Darwin X Server
- * running with Quartz or the IOKit
- *
- **************************************************************/
-/*
- * Copyright (c) 2001-2002 Torrey T. Lyons. All Rights Reserved.
- * Copyright (c) 2002 Apple Computer, Inc. All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the sale,
- * use or other dealings in this Software without prior written authorization.
- */
-/* $XFree86: xc/programs/Xserver/hw/darwin/darwin.c,v 1.45 2002/03/28 02:21:08 torrey Exp $ */
-
-#include <CoreGraphics/CoreGraphics.h>
-
-#include "X.h"
-#include "Xproto.h"
-#include "os.h"
-#include "servermd.h"
-#include "inputstr.h"
-#include "scrnintstr.h"
-#include "mibstore.h"          // mi backing store implementation
-#include "mipointer.h"         // mi software cursor
-#include "micmap.h"            // mi colormap code
-#include "fb.h"                        // fb framebuffer code
-#include "site.h"
-#include "globals.h"
-#include "xf86Version.h"
-#include "dix.h"
-#include "dri-surface.h"
-#define _APPLEDRI_SERVER_
-#include "appledristr.h"
-
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/syslimits.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <dirent.h>
-
-#define NO_CFPLUGIN
-#include <IOKit/IOKitLib.h>
-#include <IOKit/hidsystem/IOHIDLib.h>
-#include <IOKit/hidsystem/ev_keymap.h>
-
-#include "darwin.h"
-#include "quartz.h"
-#include "rootless-common.h"
-#include "pseudoramiX.h"
-#include "X11Application.h"
-
-/* Fake button press/release for scroll wheel move. */
-#define SCROLLWHEELUPFAKE      4
-#define SCROLLWHEELDOWNFAKE    5
-
-/* X server shared global variables */
-int darwinScreensFound = 0;
-int darwinScreenIndex = 0;
-int darwinFakeButtons = 1;
-Bool darwinSwapAltMeta = FALSE;
-
-/* location of X11's (0,0) point in global screen coordinates */
-int darwinMainScreenX = 0;
-int darwinMainScreenY = 0;
-
-/* parameters read from the command line or user preferences */
-char *darwinKeymapFile;
-Bool darwinSyncKeymap = TRUE;
-
-/* modifier masks for faking mouse buttons */
-static int darwinFakeMouse2Mask = Mod1Mask;    /* option */
-static int darwinFakeMouse3Mask = Mod2Mask;    /* command */
-
-static DeviceIntPtr darwinPointer;
-static DeviceIntPtr darwinKeyboard;
-
-/* Track our view of the keyboard state. Everything we sent to dix will
-   be represented here until released. */
-static CARD8 keysDown[DOWN_LENGTH];
-static int lockMods;
-
-#define SetBit(ptr,bit) \
-    do {((BYTE *) ptr)[(bit) >> 3] |= (1 << ((bit) & 7));} while (0)
-
-#define ClearBit(ptr,bit) \
-    do {((BYTE *) ptr)[(bit) >> 3] &= ~(1 << ((bit) & 7));} while (0)
-
-/* Common pixmap formats */
-static PixmapFormatRec formats[] = {
-        { 1,    1,      BITMAP_SCANLINE_PAD },
-        { 4,    8,      BITMAP_SCANLINE_PAD },
-        { 8,    8,      BITMAP_SCANLINE_PAD },
-        { 15,   16,     BITMAP_SCANLINE_PAD },
-        { 16,   16,     BITMAP_SCANLINE_PAD },
-        { 24,   32,     BITMAP_SCANLINE_PAD },
-        { 32,   32,     BITMAP_SCANLINE_PAD }
-};
-const int NUMFORMATS = sizeof(formats)/sizeof(formats[0]);
-
-#ifndef OSNAME
-#define OSNAME " Mac OS X"
-#endif
-#ifndef OSVENDOR
-#define OSVENDOR " Apple"
-#endif
-#ifndef PRE_RELEASE
-#define PRE_RELEASE XF86_VERSION_SNAP
-#endif
-
-extern void AppleDRIExtensionInit(void);
-extern void AppleWMExtensionInit(void);
-
-static void
-DarwinPrintBanner (void)
-{
-  ErrorF("\nXFree86 Version %d.%d.%d", XF86_VERSION_MAJOR, XF86_VERSION_MINOR,
-                                    XF86_VERSION_PATCH);
-#if XF86_VERSION_SNAP > 0
-  ErrorF(".%d", XF86_VERSION_SNAP);
-#endif
-
-#if XF86_VERSION_SNAP >= 900
-  ErrorF(" (%d.%d.0 RC %d)", XF86_VERSION_MAJOR, XF86_VERSION_MINOR + 1,
-                               XF86_VERSION_SNAP - 900);
-#endif
-
-#ifdef XF86_CUSTOM_VERSION
-  ErrorF(" (%s)", XF86_CUSTOM_VERSION);
-#endif
-  ErrorF(" / X Window System\n");
-  ErrorF("(protocol Version %d, revision %d, vendor release %d)\n",
-         X_PROTOCOL, X_PROTOCOL_REVISION, VENDOR_RELEASE );
-}
-
-/* X screensaver support. Not implemented. */
-static Bool
-DarwinSaveScreen (ScreenPtr pScreen, int on)
-{
-    return TRUE;
-}
-
-/* This is a callback from dix during AddScreen() from InitOutput().
-   Initialize the screen and communicate information about it back to dix. */
-static Bool
-DarwinAddScreen (int index, ScreenPtr pScreen, int argc, char **argv)
-{
-    int         i, dpi;
-    static int  foundIndex = 0;
-    Bool        ret;
-    VisualPtr   visual;
-    DarwinFramebufferPtr dfb;
-
-    /* reset index of found screens for each server generation */
-    if (index == 0)
-       foundIndex = 0;
-
-    /* allocate space for private per screen storage */
-    dfb = xalloc (sizeof (DarwinFramebufferRec));
-    SCREEN_PRIV(pScreen) = dfb;
-
-    /* setup hardware/mode specific details */
-    ret = QuartzAddScreen (foundIndex, pScreen);
-    foundIndex++;
-    if (!ret)
-        return FALSE;
-
-    /* reset the visual list */
-    miClearVisualTypes();
-
-    /* setup a single visual appropriate for our pixel type. Note: we use
-       TrueColor, not DirectColor */
-    if (dfb->componentCount != 1)
-    {
-       if (!miSetVisualTypes (dfb->colorBitsPerPixel, TrueColorMask,
-                              dfb->bitsPerComponent, TrueColor))
-           return FALSE;
-#ifdef ENABLE_PSEUDOCOLOR
-       /* FIXME: currently we can't handle pseudocolor windows
-          inside truecolor top-level windows, so disable this. */
-       if (!miSetVisualTypes (8, PseudoColorMask, 8, PseudoColor))
-           return FALSE;
-#endif
-    }
-    else
-    {
-       if (!miSetVisualTypes (8, PseudoColorMask, 8, PseudoColor))
-           return FALSE;
-    }
-
-    /* create the common 8 bit PseudoColor visual; do this last to prevent
-       it becoming the root visual. */
-
-    miSetPixmapDepths();
-
-    /* Machine independent screen init */
-    if (monitorResolution)
-        dpi = monitorResolution;
-    else
-        dpi = 75;
-
-    /* initialize fb */
-    if (!fbScreenInit (pScreen, dfb->framebuffer, dfb->width,
-                      dfb->height, dpi, dpi,
-                      dfb->pitch/(dfb->bitsPerPixel/8), dfb->bitsPerPixel))
-    {
-        return FALSE;
-    }
-
-    /* set the RGB order correctly for TrueColor */
-    if (dfb->bitsPerPixel > 8)
-    {
-       int bitsPerRGB = dfb->bitsPerComponent;
-
-        for (i = 0, visual = pScreen->visuals;
-            i < pScreen->numVisuals; i++, visual++)
-       {
-            if (visual->class == TrueColor) {
-                visual->offsetRed = bitsPerRGB * 2;
-                visual->offsetGreen = bitsPerRGB;
-                visual->offsetBlue = 0;
-                visual->redMask = ((1<<bitsPerRGB)-1) << visual->offsetRed;
-                visual->greenMask = ((1<<bitsPerRGB)-1) << visual->offsetGreen;
-                visual->blueMask = ((1<<bitsPerRGB)-1) << visual->offsetBlue;
-            }
-        }
-    }
-
-#ifdef RENDER
-    if (! fbPictureInit (pScreen, 0, 0))
-        return FALSE;
-#endif
-
-#ifdef MITSHM
-    ShmRegisterFbFuncs (pScreen);
-#endif
-
-    /* this must be initialized (why doesn't X have a default?) */
-    pScreen->SaveScreen = DarwinSaveScreen;
-
-    /* finish mode dependent screen setup including cursor support */
-    if (!QuartzSetupScreen (index, pScreen))
-       return FALSE;
-
-    /* create and install the default colormap and set black / white pixels */
-    if (!miCreateDefColormap (pScreen))
-        return FALSE;
-
-    dixScreenOrigins[index].x = dfb->x;
-    dixScreenOrigins[index].y = dfb->y;
-
-    ErrorF("Screen %d added: %dx%d @ (%d,%d)\n",
-            index, dfb->width, dfb->height, dfb->x, dfb->y);
-
-    return TRUE;
-}
-
-/* Search for a file in the standard Library paths, which are (in order):
-
-      ~/Library/              user specific
-      /Library/               host specific
-      /Network/Library/       LAN specific
-      /System/Library/        OS specific
-
-   A sub-path can be specified to search in below the various Library
-   directories. Returns a new character string (owned by the caller)
-   containing the full path to the first file found. */
-
-/* Library search paths */
-static const char *libraryPathList[] = {
-    "",
-    "/Network",
-    "/System",
-    NULL
-};
-
-char *
-DarwinFindLibraryFile (const char *file, const char *pathext)
-{
-    char *home;
-    char *fullPath;
-    int i = 0;
-
-    // Return the file name as is if it is already a fully qualified path.
-    if (!access(file, F_OK)) {
-        fullPath = xalloc(strlen(file)+1);
-        strcpy(fullPath, file);
-        return fullPath;
-    }
-
-    fullPath = xalloc(PATH_MAX);
-
-    home = getenv("HOME");
-    if (home) {
-        snprintf(fullPath, PATH_MAX, "%s/Library/%s/%s", home, pathext, file);
-        if (!access(fullPath, F_OK))
-            return fullPath;
-    }
-
-    while (libraryPathList[i]) {
-        snprintf(fullPath, PATH_MAX, "%s/Library/%s/%s", libraryPathList[i++],
-                 pathext, file);
-        if (!access(fullPath, F_OK))
-            return fullPath;
-    }
-
-    xfree(fullPath);
-    return NULL;
-}
-
-/* Press or release the given key, specified by NX keycode. xe must already
-   have event time and mouse location filled in. pressed is KeyPress or
-   KeyRelease. keycode is NX keycode without MIN_KEYCODE adjustment. */
-static inline void
-DarwinPressKeycode (xEvent *xe, int pressed, int keycode)
-{
-    if (pressed == KeyRelease && !BitIsOn (keysDown, keycode + MIN_KEYCODE))
-    {
-       /* Don't release keys that aren't pressed. It generates extra
-          KeyPress events instead of just discarding them. */
-
-       return;
-    }
-
-    if (pressed == KeyPress)
-       SetBit (keysDown, keycode + MIN_KEYCODE);
-    else
-       ClearBit (keysDown, keycode + MIN_KEYCODE);
-
-    xe->u.u.type = pressed;
-    xe->u.u.detail = keycode + MIN_KEYCODE;
-    (darwinKeyboard->public.processInputProc) (xe, darwinKeyboard, 1);
-}
-
-/* Ensure that X's idea of what modifiers are down matches the real
-   window server's. Do this by looking at what keys we previously sent
-   X and deciding if they need to be released/toggled yet to make FLAGS
-   become X's current modifier state. */
-static void
-DarwinUpdateModifiers (xEvent xe, unsigned int flags)
-{
-    static const struct {int mask; int nxkey;} pairs[] = {
-       {ShiftMask, NX_MODIFIERKEY_SHIFT},
-       {ControlMask, NX_MODIFIERKEY_CONTROL},
-       {Mod1Mask, NX_MODIFIERKEY_ALTERNATE},
-       {Mod2Mask, NX_MODIFIERKEY_COMMAND},
-       {Mod3Mask, NX_MODIFIERKEY_SECONDARYFN}
-    };
-
-    int i, keycode;
-
-    for (i = 0; i < (int) (sizeof (pairs) / sizeof (pairs[0])); i++)
-    {
-       keycode = DarwinModifierNXKeyToNXKeycode (pairs[i].nxkey, 0);
-
-       if (keycode == 0)
-           continue;
-
-       /* For each known modifier, sync up the state of the key X thinks
-          it's bound to and the real value of the flag. */
-
-       if ((flags & pairs[i].mask)
-           && !BitIsOn (keysDown, keycode + MIN_KEYCODE))
-       {
-           DarwinPressKeycode (&xe, KeyPress, keycode);
-       }
-       else if (!(flags & pairs[i].mask)
-                && BitIsOn (keysDown, keycode + MIN_KEYCODE))
-       {
-           DarwinPressKeycode (&xe, KeyRelease, keycode);
-       }
-    }
-
-    /* Do the same for Lock, but need both press and release to toggle it. */
-
-    if ((flags ^ lockMods) & LockMask)
-    {
-       keycode = DarwinModifierNXKeyToNXKeycode (NX_MODIFIERKEY_ALPHALOCK, 0);
-
-       if (keycode != 0)
-       {
-           DarwinPressKeycode (&xe, KeyPress, keycode);
-           DarwinPressKeycode (&xe, KeyRelease, keycode);
-
-           lockMods ^= LockMask;
-       }
-    }
-}
-
-/* Release all non-modifier keys that we think are currently pressed.
-   Usually this is done when X becomes inactive to avoid leaving keys
-   stuck down when we become active again. Modifiers are handled separately
-   in the function above. */
-static void
-DarwinReleaseKeys (void)
-{
-    KeyClassPtr keyc = darwinKeyboard->key;
-    xEvent xe;
-    int i, x, y;
-
-    memset (&xe, 0, sizeof (xe));
-    xe.u.keyButtonPointer.time = GetTimeInMillis ();
-    xe.u.keyButtonPointer.state = darwinKeyboard->key->state;
-    GetSpritePosition (&x, &y);
-    xe.u.keyButtonPointer.rootX = x;
-    xe.u.keyButtonPointer.rootY = y;
-    
-    for (i = 0; i < DOWN_LENGTH * 8; i++)
-    {
-       if (!keyc->modifierMap[i] && BitIsOn (keysDown, i))
-           DarwinPressKeycode (&xe, KeyRelease, i - MIN_KEYCODE);
-    }
-}
-
-static int
-parseModifierString (const char *str)
-{
-    if (strcasecmp (str, "shift") == 0)
-       return ShiftMask;
-    else if (strcasecmp (str, "control") == 0)
-       return ControlMask;
-    else if (strcasecmp (str, "option") == 0)
-       return Mod1Mask;
-    else if (strcasecmp (str, "command") == 0)
-       return Mod2Mask;
-    else if (strcasecmp (str, "fn") == 0)
-       return Mod3Mask;
-    else
-       return 0;
-}
-
-/* Parse a list of modifier names and return a corresponding modifier mask */
-static int
-DarwinParseModifierList (const char *constmodifiers)
-{
-    int result, mask;
-    char *modifiers, *modifier, *p;
-
-    if (constmodifiers == NULL
-       || strlen (constmodifiers) == 0
-       || strcasecmp (constmodifiers, "none") == 0)
-    {
-       return 0;
-    }
-
-    modifiers = strdup (constmodifiers);
-    p = modifiers;
-    result = 0;
-
-    while (p != NULL)
-    {
-       modifier = strsep (&p, " ,+&|/"); /* allow lots of separators */
-       mask = parseModifierString (modifier);
-       if (mask != 0)
-           result |= mask;
-       else
-           ErrorF ("fakebuttons: Unknown modifier \"%s\"\n", modifier);
-    }
-
-    free (modifiers);
-    return result;
-}
-
-void
-DarwinSetFakeButtons (const char *mod2, const char *mod3)
-{
-    if (mod2 != NULL)
-       darwinFakeMouse2Mask = DarwinParseModifierList (mod2);
-    if (mod3 != NULL)
-       darwinFakeMouse3Mask = DarwinParseModifierList (mod3);
-}
-
-/* Read and process events from the event pipe until it is empty. */
-void
-ProcessInputEvents (void)
-{
-    static int here_before = 0;
-
-    /* last known modifier state */
-    static unsigned int current_flags = 0;
-
-    /* button number and modifier mask of currently pressed fake button */
-    static int fake_button;
-    static unsigned int fake_button_mask, fake_button_modifier;
-
-    xEvent xe;
-
-    if (!here_before)
-    {
-       X11ApplicationServerReady ();
-       here_before = TRUE;
-    }
-
-    while (DarwinDequeueEvent (&xe))
-    {
-       unsigned int real_state;
-
-       real_state = xe.u.keyButtonPointer.state;
-       xe.u.keyButtonPointer.state |= fake_button_modifier;
-
-       /* Filter event for faked mouse button presses. */
-       if (darwinFakeButtons)
-       {
-           switch (xe.u.u.type)
-           {
-           case ButtonPress:
-               if (xe.u.u.detail != 1)
-                   break;
-               if ((xe.u.keyButtonPointer.state & darwinFakeMouse2Mask)
-                   == darwinFakeMouse2Mask)
-               {
-                   fake_button = 2;
-                   fake_button_modifier = Button2Mask;
-                   fake_button_mask = darwinFakeMouse2Mask;
-                   xe.u.u.detail = 2;
-               }
-               else if ((xe.u.keyButtonPointer.state & darwinFakeMouse3Mask)
-                        == darwinFakeMouse3Mask)
-               {
-                   fake_button = 3;
-                   fake_button_modifier = Button3Mask;
-                   fake_button_mask = darwinFakeMouse3Mask;
-                   xe.u.u.detail = 3;
-               }
-               break;
-
-           case ButtonRelease:
-               if (fake_button != 0 && xe.u.u.detail == 1)
-                   xe.u.u.detail = fake_button;
-               break;
-           }
-       }
-
-       xe.u.keyButtonPointer.state &= ~fake_button_mask;
-
-       switch (xe.u.u.type)
-       {
-       case 0: /* flags-changed */
-       case KeyPress:
-           if (current_flags == 0
-               && darwinSyncKeymap && darwinKeymapFile == NULL)
-           {
-               /* See if keymap has changed. */
-
-               static unsigned int last_seed;
-               unsigned int this_seed;
-
-               this_seed = DarwinSystemKeymapSeed ();
-               if (this_seed != last_seed)
-               {
-                   last_seed = this_seed;
-                   DarwinKeyboardReload (darwinKeyboard);
-               }
-           }
-           /* fall through */
-
-       case KeyRelease:
-       case ButtonPress:
-       case ButtonRelease:
-       case MotionNotify:
-
-           /* Initialize time field. */
-
-           xe.u.keyButtonPointer.time = GetTimeInMillis ();
-
-           /* Update X's idea of what modifiers are set. */
-
-           if (xe.u.keyButtonPointer.state != 0xffff
-               && current_flags != xe.u.keyButtonPointer.state)
-           {
-               current_flags = xe.u.keyButtonPointer.state;
-               DarwinUpdateModifiers (xe, current_flags);
-           }
-       }
-
-        switch (xe.u.u.type)
-       {
-       case 0:
-           break;
-
-       case MotionNotify:
-           if (!quartzServerVisible)
-           {
-               xp_window_id wid;
-
-               /* Sigh. Need to check that we're really over one of
-                  our windows. (We need to receive pointer events while
-                  not in the foreground, and the only way to do that
-                  right now is to ask for _all_ pointer events..) */
-
-               wid = 0;
-               xp_find_window (xe.u.keyButtonPointer.rootX,
-                               xe.u.keyButtonPointer.rootY, 0, &wid);
-               if (wid == 0)
-                   break;
-           }
-
-           /* Shift from global screen coordinates to coordinates
-              relative to the origin of the current screen. */
-
-           xe.u.keyButtonPointer.rootX -= darwinMainScreenX -
-                   dixScreenOrigins[miPointerCurrentScreen()->myNum].x;
-           xe.u.keyButtonPointer.rootY -= darwinMainScreenY -
-                   dixScreenOrigins[miPointerCurrentScreen()->myNum].y;
-
-           miPointerAbsoluteCursor (xe.u.keyButtonPointer.rootX,
-                                    xe.u.keyButtonPointer.rootY,
-                                    xe.u.keyButtonPointer.time);
-           break;
-
-       case ButtonPress:
-       case ButtonRelease:
-           darwinPointer->public.processInputProc (&xe, darwinPointer, 1);
-           break;
-
-       case KeyPress:
-       case KeyRelease:
-           DarwinPressKeycode (&xe, xe.u.u.type, xe.u.u.detail);
-           break;
-
-       case ClientMessage:
-           /* Update server's current time, since we may generate
-              events, and it's nice if the timestamps are correct. */
-           currentTime.milliseconds = GetTimeInMillis ();
-
-           switch (xe.u.clientMessage.u.l.type)
-           {
-           case kXdarwinQuit:
-               GiveUp (0);
-               break;
-
-           case kXquartzDeactivate:
-               DarwinReleaseKeys ();
-               /* fall through */
-
-           default:
-               if (xe.u.clientMessage.u.l.type >= kXquartzFirstEvent
-                   && xe.u.clientMessage.u.l.type <= kXquartzLastEvent)
-               {
-                   QuartzClientMessage (&xe);
-               }
-               else
-               {
-                   ErrorF ("Unknown application defined event: %d.\n",
-                           xe.u.clientMessage.u.l.longs0);
-               }
-               break;
-           }
-           break;
-
-       default:
-           ErrorF("Unknown event caught: %d\n", xe.u.u.type);
-           break;
-        }
-
-       /* Filter event for faked mouse button releases. */
-       if (fake_button != 0 && xe.u.u.type == ButtonRelease)
-       {
-           current_flags |= (real_state & fake_button_mask);
-           DarwinUpdateModifiers (xe, current_flags);
-
-           fake_button = 0;
-           fake_button_modifier = 0;
-           fake_button_mask = 0;
-       }
-    }
-
-    miPointerUpdate ();
-}
-
-void
-DarwinEnqueuePointerEvent (xEvent *xe)
-{
-    darwinPointer->public.processInputProc (xe, darwinPointer, 1);
-}
-
-/* Register the keyboard and mouse devices */
-void
-InitInput (int argc, char **argv)
-{
-    DarwinInputInit ();
-
-    darwinPointer = AddInputDevice(DarwinMouseProc, TRUE);
-    RegisterPointerDevice( darwinPointer );
-
-    darwinKeyboard = AddInputDevice(DarwinKeybdProc, TRUE);
-    RegisterKeyboardDevice( darwinKeyboard );
-}
-
-void
-DarwinAdjustScreenOrigins (ScreenInfo *pScreenInfo)
-{
-    int i, left, top;
-
-    /* Shift all screens so the X11 (0, 0) coordinate is at the top
-       left of the global screen coordinates.
-
-       Screens can be arranged so the top left isn't on any screen, so
-       instead use the top left of the leftmost screen as (0,0). This
-       may mean some screen space is in -y, but it's better that (0,0)
-       be onscreen, or else default xterms disappear. It's better that
-       -y be used than -x, because when popup menus are forced
-       "onscreen" by dumb window managers like twm, they'll shift the
-       menus down instead of left, which still looks funny but is an
-       easier target to hit. */
-
-    left = dixScreenOrigins[0].x;
-    top  = dixScreenOrigins[0].y;
-
-    /* Find leftmost screen. If there's a tie, take the topmost of the two. */
-    for (i = 1; i < pScreenInfo->numScreens; i++) {
-        if (dixScreenOrigins[i].x < left  ||
-            (dixScreenOrigins[i].x == left &&
-             dixScreenOrigins[i].y < top))
-        {
-            left = dixScreenOrigins[i].x;
-            top = dixScreenOrigins[i].y;
-        }
-    }
-
-    darwinMainScreenX = left;
-    darwinMainScreenY = top;
-
-    /* Shift all screens so that there is a screen whose top left
-       is at X11 (0,0) and at global screen coordinate
-       (darwinMainScreenX, darwinMainScreenY). */
-
-    if (darwinMainScreenX != 0 || darwinMainScreenY != 0) {
-        for (i = 0; i < pScreenInfo->numScreens; i++) {
-            dixScreenOrigins[i].x -= darwinMainScreenX;
-            dixScreenOrigins[i].y -= darwinMainScreenY;
-            ErrorF("Screen %d placed at X11 coordinate (%d,%d).\n",
-                   i, dixScreenOrigins[i].x, dixScreenOrigins[i].y);
-        }
-    }
-}
-
-/* Initialize screenInfo for all actually accessible framebuffers.
-
-   The display mode dependent code gets called three times. The mode
-   specific InitOutput routines are expected to discover the number of
-   potentially useful screens and cache routes to them internally.
-   Inside DarwinAddScreen are two other mode specific calls. A mode
-   specific AddScreen routine is called for each screen to actually
-   initialize the screen with the ScreenPtr structure. After other
-   screen setup has been done, a mode specific SetupScreen function can
-   be called to finalize screen setup. */
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
-    int i;
-    static unsigned long generation = 0;
-
-    pScreenInfo->imageByteOrder = IMAGE_BYTE_ORDER;
-    pScreenInfo->bitmapScanlineUnit = BITMAP_SCANLINE_UNIT;
-    pScreenInfo->bitmapScanlinePad = BITMAP_SCANLINE_PAD;
-    pScreenInfo->bitmapBitOrder = BITMAP_BIT_ORDER;
-
-    /* List how we want common pixmap formats to be padded */
-    pScreenInfo->numPixmapFormats = NUMFORMATS;
-    for (i = 0; i < NUMFORMATS; i++)
-        pScreenInfo->formats[i] = formats[i];
-
-    /* Allocate private storage for each screen's Darwin specific info */
-    if (generation != serverGeneration) {
-        darwinScreenIndex = AllocateScreenPrivateIndex();
-        generation = serverGeneration;
-    }
-
-    /* Discover screens and do mode specific initialization */
-    QuartzInitOutput(argc, argv);
-
-    for (i = 0; i < darwinScreensFound; i++)
-        AddScreen( DarwinAddScreen, argc, argv );
-
-    DarwinAdjustScreenOrigins (pScreenInfo);
-
-    PseudoramiXExtensionInit (argc, argv);
-    AppleDRIExtensionInit ();
-    AppleWMExtensionInit ();
-
-    DRIExtensionInit ();
-}
-
-void
-OsVendorFatalError (void)
-{
-    ErrorF( "   OsVendorFatalError\n" );
-}
-
-void
-OsVendorInit (void)
-{
-    if (serverGeneration == 1)
-        DarwinPrintBanner();
-}
-
-/* Process device-dependent command line args. Returns 0 if argument is
-   not device dependent, otherwise Count of number of elements of argv
-   that are part of a device dependent commandline option. */
-int
-ddxProcessArgument (int argc, char *argv[], int i)
-{
-    int numDone;
-
-    if ((numDone = QuartzProcessArgument( argc, argv, i )))
-        return numDone;
-
-    if ( !strcmp( argv[i], "-fakebuttons" ) ) {
-        darwinFakeButtons = TRUE;
-        ErrorF( "Faking a three button mouse\n" );
-        return 1;
-    }
-
-    if ( !strcmp( argv[i], "-nofakebuttons" ) ) {
-        darwinFakeButtons = FALSE;
-        ErrorF( "Not faking a three button mouse\n" );
-        return 1;
-    }
-
-    if (!strcmp( argv[i], "-fakemouse2" ) ) {
-        if ( i == argc-1 ) {
-            FatalError( "-fakemouse2 must be followed by a modifer list\n" );
-        }
-       darwinFakeMouse2Mask = DarwinParseModifierList(argv[i+1]);
-        return 2;
-    }
-
-    if (!strcmp( argv[i], "-fakemouse3" ) ) {
-        if ( i == argc-1 ) {
-            FatalError( "-fakemouse3 must be followed by a modifer list\n" );
-        }
-       darwinFakeMouse3Mask = DarwinParseModifierList(argv[i+1]);
-        return 2;
-    }
-
-    if ( !strcmp( argv[i], "-keymap" ) ) {
-        if ( i == argc-1 ) {
-            FatalError( "-keymap must be followed by a filename\n" );
-        }
-        darwinKeymapFile = argv[i+1];
-        return 2;
-    }
-
-    if ( !strcmp( argv[i], "-nokeymap" ) ) {
-        darwinKeymapFile = NULL;
-        return 1;
-    }
-
-    if ( !strcmp( argv[i], "+synckeymap" ) ) {
-        darwinSyncKeymap = TRUE;
-        return 1;
-    }
-    if ( !strcmp( argv[i], "-synckeymap" ) ) {
-        darwinSyncKeymap = FALSE;
-        return 1;
-    }
-
-    if (strcmp (argv[i], "-swapAltMeta") == 0) {
-       darwinSwapAltMeta = TRUE;
-       return 1;
-    }
-
-    if (!strcmp( argv[i], "-showconfig" ) || !strcmp( argv[i], "-version" )) {
-        DarwinPrintBanner();
-        exit(0);
-    }
-
-    /* XDarwinStartup uses this argument to indicate the IOKit X server
-       should be started. Ignore it here. */
-    if ( !strcmp( argv[i], "-iokit" ) ) {
-        return 1;
-    }
-
-    return 0;
-}
-
-/* Print out correct use of device dependent commandline options.
-   Maybe the user now knows what really to do ... */
-void
-ddxUseMsg (void)
-{
-    ErrorF("\n");
-    ErrorF("\n");
-    ErrorF("Device Dependent Usage:\n");
-    ErrorF("\n");
-    ErrorF("-depth <depth>         use <depth> bits per pixel. Options: 8, 15, 24\b\n");
-    ErrorF("-fakebuttons           fake a 3 button mouse with Command and Option\n");
-    ErrorF("-nofakebuttons\n");
-    ErrorF("-fakemouse2 <keys>     fake middle mouse button with modifier keys\n");
-    ErrorF("-fakemouse3 <keys>     fake right mouse button with modifier keys\n");
-    ErrorF("                         e.g.: -fakemouse2 \"option,shift\"\n");
-    ErrorF("-keymap <file>         read the keymap from <file>\n");
-    ErrorF("-nokeymap\n");
-    ErrorF("+synckeymap            synchronize X keymap with system keymap\n");
-    ErrorF("-synckeymap            only set X keymap on server startup\n");
-    ErrorF("-swapAltMeta           swap meaning of Alt and Meta modifiers\n");
-    ErrorF("-version               show server version.\n");
-    ErrorF("\n");
-}
-
-/* Device dependent cleanup. Called by dix before normal server death. */
-void
-ddxGiveUp (void)
-{
-    ErrorF( "Quitting XDarwin...\n" );
-    QuartzGiveUp();
-}
-
-/* DDX - specific abort routine.  Called by AbortServer(). The attempt is
-   made to restore all original setting of the displays. Also all devices
-   are closed. */
-void
-AbortDDX (void)
-{
-    ErrorF( "   AbortDDX\n" );
-
-    /* This is needed for a abnormal server exit, since the normal exit stuff
-       MUST also be performed (i.e. the vt must be left in a defined state) */
-    ddxGiveUp();
-}
-
-extern void GlxExtensionInit();
-extern void GlxWrapInitVisuals(void *procPtr);
-void DarwinGlxExtensionInit (void) { GlxExtensionInit (); }
-void DarwinGlxWrapInitVisuals (void *ptr) { GlxWrapInitVisuals (ptr); }
-
-#ifdef DPMSExtension
-Bool
-DPMSSupported (void)
-{
-    return FALSE;
-}
-
-void
-DPMSSet (int level)
-{
-}
-
-int
-DPMSGet (int *level)
-{
-    return -1;
-}
-#endif
-
-#ifdef DDXTIME
-CARD32
-GetTimeInMillis (void)
-{
-    extern void Microseconds ();
-    UnsignedWide usec;
-
-    /* This doesn't involve trapping into the kernel, unlike gettimeofday. */
-    Microseconds (&usec);
-
-    /* Should be good enough? (-2% error) */
-    return (usec.hi << 22) | (usec.lo >> 10);
-}
-#endif